建構可透過自然語言理解並回應的 Dialogflow CX Google Chat 應用程式

本頁面將說明如何使用 Dialogflow 建構 Google Chat 應用程式,既可理解並以自然語言回應,也能做出回應。本指南使用與 Google Chat 直接整合的 Dialogflow CX。您也可以使用 Dialogflow ES 建構 Dialogflow ES Google Chat 應用程式。詳情請參閱 Dialogflow ES Google Chat 指南。

舉例來說,假設有一個即時通訊應用程式可協助人們租車。使用者可能會輸入「我想租車」,Chat 應用程式可能會回應類似「您想在哪裡搭車?」之類的問題,藉此啟動類似真人對話的對話,使用者可在預訂租車時,以真人語音理解並回應消費者。

這只是一個範例,Dialogflow Chat 應用程式非常適合用於各種互動。如果應用程式需要自然人類語音,就會呼叫 Dialogflow Chat 應用程式。預先建構的虛擬服務專員可協助您快速上手,並展示 Dialogflow 可提供哪些功能,例如:

  • 預訂機票
  • 安排醫師預約
  • 訂購餐點外送
  • 回答有關零售產品目錄的問題,例如是否有其他顏色的商品
  • 預先建構的 Dialogflow 虛擬服務專員選取頁面。
    圖 1.為 Dialogflow Chat 應用程式選取預先建構的代理程式。
  • 在 Dialogflow CX 中測試代理程式。
    圖 2.在 Dialogflow CX 中測試代理程式,確保代理程式的邏輯和設定能正常運作。此圖顯示一系列主題頁面,內容圍繞在對話的特定步驟 (例如設定租車的上車和退貨地點),以及設定連結車輛的邏輯。系統會在模擬器中測試對話。
  • 設定 Dialogflow Chat 應用程式。
    圖 3.在 Google Cloud 控制台的 Chat API 設定頁面,設定 Chat 擴充應用程式,使用 Dialogflow CX 代理程式處理回應。
  • 測試 Dialogflow CX Chat 應用程式
    圖 4.使用 Google Chat 中的 Dialogflow Chat 應用程式預約租車。

目標

  • 設定環境。
  • 建立及部署 Dialogflow CX 虛擬服務專員。
  • 建立及部署採用 Dialogflow CX 代理程式技術的即時通訊應用程式。
  • 測試 Chat 應用程式。

先備知識

架構

下圖顯示使用 Dialogflow 建構的 Chat 應用程式架構:

使用 Dialogflow 實作 Chat 應用程式的架構。

在上圖中,與 Dialogflow Chat 應用程式互動的使用者擁有下列資訊流程:

  1. 使用者透過即時訊息或 Chat 聊天室,在 Chat 中將訊息傳送至 Chat 應用程式。
  2. Google Cloud 中的 Dialogflow 虛擬服務專員會接收及處理訊息,進而產生回覆。
  3. 或者,您也可以使用 Dialogflow Webhook 與外部第三方服務互動,例如專案管理系統或票證處理工具。
  4. Dialogflow 代理程式會將回應傳回 Chat 中的 Chat 應用程式服務。
  5. 系統會將回覆內容傳送至 Chat 聊天室。

設定環境

使用 Google API 前,您必須先在 Google Cloud 專案中啟用 API。您可以在單一 Google Cloud 專案中啟用一或多個 API。
  1. 在 Google Cloud 控制台中,啟用 Google Chat API 和 Dialogflow API。

    啟用 API

  2. 確認您是在正確的 Cloud 專案中啟用 API,然後點選「Next」(下一步)

  3. 確認您要啟用的 API 正確無誤,然後按一下「啟用」

建立 Dialogflow CX 虛擬服務專員

Dialogflow CX 代理程式是一種虛擬服務專員,可處理與使用者並行的對話。這是一種自然語言理解模組,可理解人類語言的細微差異。Dialogflow 會將使用者在對話期間的文字翻譯成您的應用程式和服務可理解的結構化資料。您可以設計並建構 Dialogflow 代理程式來處理系統所需的對話類型。

Dialogflow 虛擬服務專員就像是真人客服中心的虛擬服務專員。您可以進行訓練,藉此處理預期的對話情境,而且訓練內容不必過於明確。

以下說明如何建立 Dialogflow CX 代理程式:

  1. 在 Dialogflow CX 控制台中,開啟 Dialogflow CX 控制台。依序點選「Menu」圖示 >「Dialogflow CX」

    前往 Dialogflow CX 主控台

  2. 選擇 Google Cloud 專案。如要尋找專案,您可能需要按一下「All」,然後搜尋專案。

  3. 您現在可以選擇預先建構的代理程式或自行建立代理程式。如果您之後想詳細探索代理程式自訂功能,請選擇其中一個預先建構的代理程式,這樣也能有助於瞭解代理程式的功能。

    如要選擇預先建構的代理程式,請按照下列步驟操作:

    1. 按一下「使用預先建構的代理程式」
    2. 選取預先建構的代理程式。在本指南中,請選取「旅遊:租車」

      視代理程式使用的特徵數量,以及對話邏輯的複雜程度而定,服務專員評分為初級、中級或進階級。選擇中繼或進階代理程式時,可能需要具備特定代理程式的自訂功能和設定,包括在 Google Cloud 控制台中啟用功能和 API。

    3. 按一下「Import as agent」

    如要建立自己的虛擬服務專員,請按照下列步驟操作:

    1. 按一下「Create agent」
    2. 選取「Auto-generate」建立資料儲存庫代理程式,或選取「Build your own」(建構自己的項目) 來建立其他種類的代理程式。

    如需代理程式建構程序的詳細逐步操作說明,請參閱「建立 Dialogflow CX 代理程式」。

  4. 調整基本代理程式設定:

    1. 在「顯示名稱」中輸入顯示名稱。
    2. 選取偏好的位置。如要變更進階位置資訊設定,請按一下「編輯」
    3. 選取您偏好的時區。
    4. 選取代理程式的預設語言。 代理程式建立完成後,即無法變更預設語言。
  5. 點選「建立」。Dialogflow CX 開始建立代理程式,然後顯示代理程式的預設啟動流程。

  6. 您也可以自訂代理程式。如需代理程式自訂程序的詳細逐步操作說明,請參閱建立 Dialogflow CX 代理程式

  7. 最佳做法是測試代理程式:

    1. 按一下「Test agent」
    2. 選取「Test agent in 在環境中」
    3. 在「環境」中,選取「草稿」
    4. 在 Flow 中,選取「Default Start Flow」
    5. 在「頁面」中選取「起始網頁」
    6. 在「與代理程式交談」撰寫列中,輸入 Hello 然後按下 Enter 鍵。 服務專員會自行提供回應。
    7. 使用測試對話範例完成測試。
  8. 建立 Dialogflow CX 虛擬服務專員。返回 Dialogflow CX 主控台。依序點選「Menu」圖示 >「Dialogflow CX」

    前往 Dialogflow CX 主控台

  9. 在「Agents」下方,依序按一下 >「Copy name」。請儲存這個名稱,因為您在設定 Chat 應用程式時會使用這個名稱。

建立 Chat 應用程式,並將該應用程式連結至 Dialogflow 虛擬服務專員

建立 Dialogflow CX 代理程式後,請按照下列步驟將其轉換為 Chat 應用程式:

  1. 前往 Google Cloud 控制台中的 Google Chat API。搜尋「Google Chat API」,然後依序點選「Google Chat API」和「管理」

    前往 Chat API

  2. 按一下「設定」,然後設定 Chat 應用程式:

    1. 在「App name」(應用程式名稱) 中輸入 Dialogflow App
    2. 在「Avatar URL」(顯示圖片) 中輸入 https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png
    3. 在「Description」(說明) 中輸入 Responds to real human conversation
    4. 在「功能」下方,選取「接收 1:1 訊息」和「加入聊天室和群組對話」
    5. 在「連線設定」下方,選取「Dialogflow」
    6. 在「Dialogflow 設定」下方,選取「Dialogflow CX」
    7. 在「Agent or Environment resource name」(代理程式或環境資源名稱) 中,貼上您在建立 Dialogflow CX 代理程式最後複製的 Dialogflow CX 代理程式名稱。
    8. 將這個即時通訊應用程式提供給您網域中的特定使用者和群組,並輸入您的電子郵件地址。
    9. 在「記錄」底下,選取 [將錯誤記錄至 Logging]
  3. 點選「儲存」

Chat 應用程式已準備好接收及回覆 Chat 上的訊息。

測試 Chat 應用程式

在 Google Chat 中傳送訊息,藉此測試 Dialogflow CX Chat 應用程式。

  1. 使用當初將自己新增為信任的測試人員時提供的 Google Workspace 帳戶開啟 Google Chat。

    前往 Google Chat

  2. 按一下「新的即時通訊」圖示
  3. 在「新增 1 或多位使用者」欄位中,輸入 Chat 應用程式的名稱。
  4. 從搜尋結果中選取 Chat 應用程式。系統隨即會開啟即時訊息。

  5. 在與應用程式相關的新即時訊息中輸入 Hello,然後按下 enter

    Dialogflow Chat 應用程式會自我回應。

  6. 使用測試對話範例完成測試。

測試對話範例

如要在 Dialogflow CX 控制台或 Google Chat 中測試 Dialogflow CX Chat 應用程式,請使用下列對話。該說明可協助您瞭解 Dialogflow CX 代理程式如何解讀使用者的自然語言,並在對話中的每個步驟產生專屬的自然語言回應。這個對話範例是以名為「旅遊:租車」預先建構代理程式為基礎。

對話方塊 說明
User-user:您好:
代理程式:您好!我是虛擬租車服務專員。我可以協助你進行新的租車預約。您今天需要什麼協助呢?
  1. 系統會呼叫預設啟動流程中的預設歡迎意圖路徑。
  2. 此狀態處理常式的執行要求 (「您好!我是...」) 就會新增至回應佇列。
  3. 代理程式將回應佇列傳送給使用者。
使用者:我想租車,
服務專員:你想在哪裡取車?
  1. 符合「Start Page」中的 car_rental.reservation_create 意圖路徑。
  2. 工作階段會轉換為「取貨地點」頁面。
  3. 「取貨地點」頁面表單尚未填寫完畢,因此服務專員會使用 pickup_location 參數來提示使用者 (「想在哪裡取貨...」),系統會將這個引數新增至回應佇列。
  4. 代理程式將回應佇列傳送給使用者。
使用者:拉斯維加斯
服務專員:好的,上車地點會在拉斯維加斯。
服務專員:下車地點是否與上車地點不同?
  1. 使用者輸入內容會填入前一回合中服務專員要求的 pickup_location 參數。
  2. 符合car_rental.return_different_location中的 car_rental.return_different_location 意圖路徑。
  3. 系統會評估並呼叫「Pickup Location」頁面中的表單完成路徑。含有一個執行要求 (「Ok,你的取貨...」) 會新增至回應佇列,其中的參數參照會解析為使用者提供的實際值。
  4. 工作階段會轉換為「Confirm Location」頁面。
  5. 「確認位置」頁面會顯示項目執行要求 (「下車地點是否不同...」),系統會將這個引數新增至回應佇列。
  6. 代理程式將回應佇列傳送給使用者。
使用者:是。我會在洛杉磯送車
服務專員:沒問題,下車地點會在洛杉磯。
服務專員:你想在何時何地上車?
  1. 符合car_rental.return_different_location中的 car_rental.return_different_location 意圖路徑。
  2. 工作階段會轉換為「Drop Off Location」頁面。
  3. 使用者輸入內容會填入前一次對話期間代理程式要求的 drop_off_location 參數。
  4. 系統會評估及呼叫「Drop Off Location」頁面中的表單完成路徑。具有已新增至回應佇列的執行要求 (「好,下車地點...」)。
  5. 工作階段會轉換為「租期」頁面。
  6. 「最短租期」頁面的表單值不完整,因此會提示使用者輸入 pickup_date_time 參數 (「您想在哪個日期和時間取貨...」)。系統會將這個引數新增至回應佇列。
  7. 代理程式將回應佇列傳送給使用者。
使用者:我想在 3 月 5 日中午取貨。
服務專員:你想在什麼日期和時間下車?
  1. 使用者輸入內容會填入前一回合中服務專員要求的 pickup_date_time 參數。
  2. 「租期」頁面有另一個缺少的表單值,因此會提示使用者輸入 drop_off_date_time 參數 (「您想下車的日期和時間...」),系統會將這個引數新增至回應佇列。
  3. 代理程式將回應佇列傳送給使用者。
使用者:3 月 15 日中午。
服務專員:因此,我想確認以下事項:

你會在拉斯維加斯 2024-03-05 12:00:00 叫車,並將車停在洛杉磯 2024-03-15 12:00:00

請問這樣對嗎?
  1. 使用者輸入內容會填入前一回合中代理程式要求的 drop_off_date_time 參數。
  2. 工作階段會轉換為「確認租借時間長度」頁面。
  3. 「確認租用期間」頁面會顯示項目執行要求 (「正在確認...」),系統會將這個引數新增至回應佇列。
  4. 代理程式將回應佇列傳送給使用者。
使用者:沒錯,謝謝。
代理程式:太好了!現在請選擇車輛
虛擬服務專員:您需要經濟型還是豪華車輛?
  1. 「確認租用期間」頁面上的 small_talk.confirmation.yes 意圖路徑相符。
  2. 服務專員會以訊息確認使用者選擇 (「太好了!現在可以選擇..."),系統會將這個引數新增至回應佇列。
  3. 工作階段會轉換至「車輛消歧」頁面。
  4. 車輛消歧頁面表單並未完整填寫,因此代理程式會使用 vehicle_type 參數提示使用者 (「Would you like an Eco or Plus...」)。系統會將這個引數新增至回應佇列。
  5. 代理程式將回應佇列傳送給使用者。
使用者:經濟型,
虛擬服務專員:你想去 Cymbal Car 還是 Cymbal Truck?
  1. 系統會比對 $session.params.vehicle_type="economy_vehicle" 意圖路徑。
  2. 工作階段會轉換至「Economy Options」頁面。
  3. 「Economy Options」頁面會顯示項目執行要求 (「Would you like the...」),系統會將這個引數新增至回應佇列。
  4. 代理程式將回應佇列傳送給使用者。
使用者:Cymbal Truck。
虛擬服務專員:Cymbal Truck 每天 $50.33 美元。 可容納 4 人,隨附 AM/FM 收音機。 要繼續付款嗎?
使用者:是,謝謝。
  1. 系統會比對 $session.params.vehicle_type="Cymbal Truck" 意圖路徑,並填入 vehicle_model 參數。
  2. 工作階段會轉換至「Confirm Cymbal Truck」頁面。
  3. 「Confirm Cymbal Truck」頁面有一筆報名執行要求 (「Cymbal Truck 每天 $50.33 美元...」),系統會將這個引數新增至回應佇列。
  4. 代理程式將回應佇列傳送給使用者。
  5. 使用者的回應與 small_talk.confirmation.yes 路徑相符。
代理程式:您會使用哪種卡片類型?
使用者:Altostrat
服務專員:請輸入卡號。
使用者:1234 1234 1234 1234
服務專員:卡片上的姓名為何?
使用者: Charlie
代理程式:什麼是帳單街道地址?
使用者:1800 Amphibious Blvd. Mountain View, CA
代理程式:什麼是帳單郵遞區號?
終端使用者:94045
服務專員:您將在 2024-03-05 12:00:00 領取 Cymbal Car 車,並將該車輛放在 2024-03-15 12:00:00。這趟行程的總費用為 $175.38 美元。
服務專員:感謝你向我們租借服務,祝你有美好的一天!
  1. 工作階段會轉換為「付款」頁面。
  2. 付款表單並未填妥,因此代理程式會提示使用者輸入 card_typecard_numberbilling_namebilling_street_addressbilling_zip_code 參數 (「卡片類型將是...」)。這些回應會依序新增至回應佇列,並在使用者回應時傳送。使用者回應會設定各項參數值。
  3. 工作階段會轉換為「租借確認」頁面。
  4. 「租賃確認」頁面會顯示項目執行要求 (「好,你的取貨將...」)。 系統會將這個引數新增至回應佇列。
  5. 代理程式將回應佇列傳送給使用者。
  6. 工作階段會轉移至「結束工作階段」頁面。

透過 Dialogflow 傳送卡片訊息

Dialogflow 可以使用文字資訊卡訊息進行回應。如要以資訊卡訊息回應,請在執行要求中將其指定為自訂酬載

下列 JSON 顯示如何在執行要求中,以自訂酬載的形式傳送資訊卡訊息:

json

{
  'cardsV2': [{
    'cardId': 'createCardMessage',
    'card': {
      'header': {
        'title': 'A card message!',
        'subtitle': 'Sent from Dialogflow',
        'imageUrl': 'https://developers.google.com/chat/images/chat-product-icon.png',
        'imageType': 'CIRCLE'
      },
      'sections': [
        {
          'widgets': [
            {
              'buttonList': {
                'buttons': [
                  {
                    'text': 'Read the docs!',
                    'onClick': {
                      'openLink': {
                        'url': 'https://developers.google.com/workspace/chat'
                      }
                    }
                  }
                ]
              }
            }
          ]
        }
      ]
    }
  }]
}

限制和注意事項

  • 即時通訊互動事件提供有限支援和注意事項:
    • 系統支援下列互動事件類型
      • MESSAGE
      • ADDED_TO_SPACE
      • CARD_CLICKED
    • 如果是 MESSAGEADDED_TO_SPACE 事件,傳送到 Dialogflow 代理程式的查詢輸入內容會對應至 Chat 訊息中 argumentText 欄位的值。如果訊息包含斜線指令,系統會改用 text 欄位的值。
    • 如果是 CARD_CLICKED 事件,傳送到 Dialogflow 代理程式的查詢輸入內容會採用 CARD_CLICKED.functionName 格式,其中 functionName 對應至互動式卡片元素 (如按鈕) 的 Action 物件 function 欄位值。
    • 系統會將每個 Chat 互動事件的完整 JSON 酬載傳送至 Dialogflow 做為查詢參數中的自訂酬載,並藉由查詢 WebhookRequest.payload 欄位的值,使用 Dialogflow Webhook 存取該酬載。
  • 回應斜線指令從資訊卡或對話方塊接收資料的注意事項:
    • 當 Dialogflow Chat 應用程式收到含有斜線指令的訊息時,查詢輸入內容只會包含 text 欄位的值。text 欄位以斜線指令名稱開頭 (例如 /command),可用來設定 Dialogflow 代理程式的意圖偵測斜線指令。
    • 如果 Dialogflow 代理程式需要處理 Chat 互動事件 JSON 酬載,請使用 Dialogflow Webhook 檢查查詢參數中的自訂酬載。
    • 如要顯示 Dialogflow 代理程式的對話方塊,請使用單一自訂 JSON 酬載進行回應,其中含有一則含有 DIALOG 動作回應的訊息。
    • 為了處理輸入的資訊卡資料,Dialogflow 代理程式可以偵測開頭為 CARD_CLICKED 文字的意圖,並以含有適當動作的單一自訂 JSON 酬載回應。
  • 不支援連結預覽
  • 如果 Dialogflow 代理程式只回覆一則訊息,則會同步傳送至 Google Chat。如果 Dialogflow 代理程式回應多則訊息,則系統會針對每則訊息在 Chat API 中的 spaces.messages 資源呼叫 create 方法,以非同步方式將所有訊息傳送至 Chat。
  • 使用 Dialogflow CX 整合 Chat 時,您必須在同一個 Google Cloud 專案中設定 Dialogflow 代理程式和 Chat 應用程式。如果您需要在不同 Cloud 專案中設定 Dialogflow 和 Chat,可以設定中繼伺服器以促進連線。如要瞭解操作方式,請參閱 GitHub 上的這個 Dialogflow CX 即時通訊整合範例

疑難排解

當 Google Chat 應用程式或資訊卡傳回錯誤時,Chat 介面會顯示「發生錯誤」的訊息。或「無法處理你的要求」。Chat UI 有時不會顯示任何錯誤訊息,但 Chat 應用程式或資訊卡卻產生非預期的結果,例如資訊卡可能不會顯示。

雖然 Chat UI 可能不會顯示錯誤訊息,但可以在啟用 Chat 擴充應用程式的錯誤記錄功能時,查看描述性的錯誤訊息和記錄資料,協助您修正錯誤。如要瞭解如何查看、偵錯及修正錯誤,請參閱「疑難排解及修正 Google Chat 錯誤」。

清除所用資源

如要避免系統向您的 Google Cloud 帳戶收取您在本教學課程中使用資源的相關費用,建議您刪除 Cloud 專案。

  1. 在 Google Cloud 控制台中,前往「管理資源」頁面。依序點選「Menu」圖示 >「IAM & Admin」(IAM 與管理) >「Manage Resources」(管理資源)

    前往 Resource Manager

  2. 在專案清單中選取要刪除的專案,然後按一下「Delete」圖示
  3. 在對話方塊中輸入專案 ID,然後按一下「Shut down」(關閉) 即可刪除專案。
  • Dialogflow CX 採用狀態機器來導入 Dialogflow 代理程式的設計,可讓您清楚明確地控管對話、改善使用者體驗,以及提升開發工作流程。建構 Dialogflow Chat 應用程式時,建議您使用 Dialogflow CX。
  • Dialogflow ES 是搭配 Chat 應用程式使用 Dialogflow 的另一種方式。