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

本頁面說明如何使用 Dialogflow 建構 Google Chat 應用程式,讓應用程式能理解並以自然語言回覆。本指南使用 Dialogflow CX,可直接與 Google Chat 整合。您也可以按照 Dialogflow ES Google Chat 指南,使用 Dialogflow ES 建構 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 擴充應用程式。
  • 測試 Chat 應用程式。

必要條件

架構

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

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

在上圖中,使用者與 Dialogflow Chat 應用程式互動時,資訊流程如下:

  1. 使用者在 Chat 中傳送訊息給 Chat 應用程式,無論是透過即時訊息或 Chat 聊天室。
  2. Dialogflow 虛擬代理程式 (位於 Google Cloud) 會接收並處理訊息,然後產生回應。
  3. 您也可以使用 Dialogflow Webhook,讓 Dialogflow 虛擬服務專員與外部第三方服務互動,例如專案管理系統或票證工具。
  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,然後按一下「下一步」

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

建立 Dialogflow CX 虛擬服務專員

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

Dialogflow 代理程式與客服中心的真人客服專員類似,您可以訓練代理程式和客服專員來處理預期的對話情境,而且訓練內容不必過於明確。

以下說明如何建立 Dialogflow CX 虛擬服務專員:

  1. 在 Dialogflow CX 控制台中,開啟 Dialogflow CX 控制台。依序點選「選單」「Dialogflow CX」

    前往 Dialogflow CX 主控台

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

  3. 現在您可以選擇預先建構的代理程式,也可以自行建立。如要稍後再詳細瞭解如何自訂代理程式,請選擇其中一個預先建構的代理程式,這也有助於瞭解代理程式的功能。

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

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

      系統會根據代理程式使用的功能數量和對話邏輯的複雜程度,將代理程式評為初階、中階或進階。選擇中級或進階代理程式時,可能需要進行代理程式專屬的自訂作業和設定,包括在 Google Cloud 控制台中啟用功能和 API。

    3. 按一下「以代理商身分匯入」

    如要建立自己的代理程式,請按照下列步驟操作:

    1. 按一下「建立代理程式」
    2. 選取「自動產生」,建立資料儲存庫代理程式,或選取「自行建構」,建立其他類型的代理程式。

    如需代理程式建構程序的詳細逐步說明,請參閱「建立 Dialogflow CX 虛擬服務專員」。

  4. 設定基本虛擬服務專員設定:

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

  6. 視需要自訂代理程式。如需詳細的虛擬服務專員自訂程序導覽,請參閱「建立 Dialogflow CX 虛擬服務專員」。

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

    1. 按一下「測試代理程式」
    2. 選取「在環境中測試代理程式」
    3. 在「環境」中,選取「草稿」
    4. 在流程中,選取「預設開始流程」
    5. 在「頁面」中,選取「起始頁面」
    6. 在「與服務專員交談」的撰寫列中輸入 Hello,然後按下 Enter 鍵。 代理程式會先自我介紹。
    7. 進行範例測試對話,完成測試。
  8. 系統會建立 Dialogflow CX 虛擬服務專員。返回 Dialogflow CX 控制台。 依序點選「選單」 >「Dialogflow CX」

    前往 Dialogflow CX 主控台

  9. 在「代理程式」下方,依序點按 >「複製名稱」。請儲存這個名稱,因為設定 Chat 應用程式時會用到。

建立 Chat 應用程式,並連結至 Dialogflow 代理程式

建立 Dialogflow CX 虛擬服務專員後,請按照下列步驟將其轉換為 Chat 應用程式:

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

    前往 Chat API

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

    1. 在「應用程式名稱」中輸入 Dialogflow App
    2. 在「Avatar URL」中,輸入 https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png
    3. 在「Description」(說明) 中輸入 Responds to real human conversation
    4. 在「功能」下方,選取「加入聊天室和群組對話」
    5. 在「連線設定」下方,選取「Dialogflow」
    6. 在「Dialogflow settings」(Dialogflow 設定) 下方,選取「Dialogflow CX」
    7. 在「虛擬服務專員或環境資源名稱」中,貼上您在「建立 Dialogflow CX 虛擬服務專員」結尾複製的 Dialogflow CX 虛擬服務專員名稱。
    8. 將這個 Chat 擴充應用程式提供給網域中的特定使用者和群組,然後輸入電子郵件地址。
    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 服務專員如何解讀使用者的自然語言,以及在對話的每個步驟中產生自己的自然語言回應。這個範例對話是以名為「Travel: car rental」(旅遊:租車) 的預建代理程式為基礎。

對話方塊 說明
使用者:你好
代理程式:你好!我是虛擬租車服務專員,我可以協助你預訂新的租車服務。今天需要什麼協助呢?
  1. 系統會呼叫「Default Start Flow」(預設開始流程) 中的「Default Welcome Intent」(預設歡迎意圖) 路徑
  2. 這個狀態處理常式的服務履行 (「Hi! I'm...") 會新增至回應佇列。
  3. 代理程式將回應佇列傳送給使用者。
使用者:我想租車。
服務專員:您希望在哪裡取車?
  1. 系統會比對「開始頁面」中的 car_rental.reservation_create 意圖路徑。
  2. 工作階段會轉移至「取貨地點」頁面。
  3. 「取貨地點」頁面表單未填寫完畢,因此代理程式會使用 pickup_location 參數提示使用者 (「你希望在何處取貨...」),並加入回應佇列。
  4. 代理程式將回應佇列傳送給使用者。
消費者:拉斯維加斯
服務專員:好的,取貨地點是拉斯維加斯。
服務專員:你的下車地點與上車地點是否不同?
  1. 使用者輸入的內容會填入代理程式在上一個對話回合中要求的 pickup_location 參數。
  2. 系統會比對 Default Start Flow 中的 car_rental.return_different_location 意圖路線。
  3. 系統會評估並呼叫「取貨地點」頁面中的表單填寫路徑。 這項意圖包含執行要求 (「好的,你的取貨時間是...」),並已加入回應佇列,且參數參照已解析為使用者提供的實際值。
  4. 系統會將工作階段轉移至「確認位置」頁面。
  5. 「確認地點」頁面有填寫項目 (「你的取貨地點與送達地點不同嗎?」),並加入回應佇列。
  6. 代理程式將回應佇列傳送給使用者。
使用者:是。我會在洛杉磯還車。
服務專員:好的,你的下車地點是洛杉磯。
代理程式:請問你希望在什麼日期和時間取車?
  1. 系統會比對 Default Start Flow 中的 car_rental.return_different_location 意圖路線。
  2. 工作階段會轉移至「下車地點」頁面。
  3. 使用者輸入的內容會填入代理程式在上一個對話回合中要求的 drop_off_location 參數。
  4. 系統會評估並呼叫「卸貨地點」頁面中的表單填寫路徑。 這項意圖有執行要求 (「好的,你的送達時間是...」),會新增至回應佇列。
  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. 「確認租借時間」頁面會顯示「So to confirm...」("So to confirm...") 項目, 並加入回應佇列。
  4. 代理程式將回應佇列傳送給使用者。
使用者:好的,謝謝。
代理程式:太好了!現在請選擇車輛。
代理程式:您想要經濟型還是豪華型車輛?
  1. 系統會在「Confirm Rental Duration」頁面中,比對 small_talk.confirmation.yes 意圖的路由。
  2. 代理會傳送訊息確認使用者的選擇 (「太好了!Now let's choose..."), 並加入回應佇列。
  3. 工作階段會轉換至「車輛消歧」頁面。
  4. 車輛消歧義頁面表單未填寫完整,因此服務專員使用 vehicle_type 參數提示使用者 (「您想要經濟型還是豪華型...」),並加入回應佇列。
  5. 代理程式將回應佇列傳送給使用者。
使用者:請選擇經濟型配送服務。
Agent: Would you like the Cymbal Car or the Cymbal Truck?
  1. 系統會比對 $session.params.vehicle_type="economy_vehicle" 意圖路徑。
  2. 工作階段會轉移至「經濟選項」頁面。
  3. 「經濟選項」頁面會顯示項目履行選項 (「你希望...」), 並加入回應佇列。
  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 卡車) 頁面會顯示項目履行資訊 (「The Cymbal Truck is $50.33 per day...」),並加入回應佇列。
  4. 代理程式將回應佇列傳送給使用者。
  5. 使用者的回覆符合 small_talk.confirmation.yes 路線。
服務專員:你要使用哪種卡片?
消費者:Altostrat
服務專員:請輸入卡號。
End-user: 1234 1234 1234 1234
Agent: What is the name on the card?
End-user: Charlie
Agent: What is the billing street address?
使用者:1800 Amphibious Blvd. Mountain View, CA
服務專員:帳單郵遞區號為何?
使用者:94045
服務專員:你將在 2024 年 3 月 5 日 12:00:00 於拉斯維加斯取車,並在 2024 年 3 月 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 代理程式的查詢輸入內容,會對應至即時通訊訊息中的 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 資源,以非同步方式將所有訊息傳送至 Chat。create
  • 將 Dialogflow CX 與 Chat 整合時,Dialogflow 虛擬服務專員和 Chat 應用程式必須在同一個 Google Cloud 專案中設定。如需在不同的 Cloud 專案中設定 Dialogflow 和 Chat,可以設定中繼伺服器來協助連線。如要瞭解如何操作,請參閱 GitHub 上的這個 Dialogflow CX 即時通訊整合範例

疑難排解

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

即使 Chat 使用者介面未顯示錯誤訊息,只要開啟 Chat 應用程式的錯誤記錄功能,系統就會提供說明性錯誤訊息和記錄資料,協助您修正錯誤。如需查看、偵錯及修正錯誤的相關協助,請參閱「排解及修正 Google Chat 錯誤」。

清除所用資源

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

  1. 在 Google Cloud 控制台中,前往「管理資源」頁面。依序點選「選單」「IAM 與管理」「管理資源」

    前往 Resource Manager

  2. 在專案清單中選取要刪除的專案,然後按一下「Delete」(刪除) 圖示
  3. 在對話方塊中輸入專案 ID,然後按一下「Shut down」(關閉) 即可刪除專案。
  • Dialogflow CX 採用狀態機方法設計 Dialogflow 虛擬服務專員,讓您清楚明確地控管對話、提供更優質的使用者體驗,以及改善開發工作流程。建構 Dialogflow Chat 應用程式時,建議使用 Dialogflow CX。
    • 如要進一步瞭解如何建構及設定虛擬服務專員,請參閱「Dialogflow CX 虛擬服務專員」。
    • 如需有關如何建構及設定虛擬服務專員的詳細逐步說明,請參閱「建立 Dialogflow CX 虛擬服務專員」。
    • 程式碼研究室:如需瞭解如何建構 Dialogflow CX 資料儲存庫虛擬服務專員,請參閱這項程式碼研究室的知識聊天應用程式「運用 Gemini 打造 Google Chat 擴充應用程式」。
    • 程式碼研究室:如要瞭解如何建構 Dialogflow CX 對話式虛擬服務專員,請參閱這項程式碼研究室的意見回饋即時通訊應用程式。
  • Dialogflow ES 是透過 Chat 應用程式使用 Dialogflow 的另一種方式。