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

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

舉例來說,假設您開發的 Chat 應用程式可協助使用者租車,使用者可能會寫下「I'd like to rent a car」(我想租車)。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,讓 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 控制台。依序點選「Menu」圖示 >「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. 在「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. 在「應用程式名稱」中輸入 Dialogflow App
    2. 在「顯示圖片網址」中輸入 https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png
    3. 在「Description」中輸入 Responds to real human conversation
    4. 在「功能」下方,選取「接收一對一訊息」和「加入聊天室和群組對話」
    5. 在「連線設定」下方,選取「Dialogflow」
    6. 在「Dialogflow 設定」下方,選取「Dialogflow CX」
    7. 在「Agent or Environment resource name」中,貼上您在「Create a Dialogflow CX agent」一文結尾複製的 Dialogflow CX 服務專員名稱。
    8. 將這個 Chat 擴充應用程式提供給網域中的特定使用者和群組,然後輸入您的電子郵件地址。
    9. 在「Logs」下方,選取「Log errors to 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 服務專員如何在對話的每個步驟中解讀使用者的自然語言,並產生自然語言回應。這個對話範例是以名為「旅遊:租車」預先建構代理程式為基礎。

對話方塊 說明
使用者:你好
代理人:你好!我是虛擬租車服務專員。我可以協助你開始新的租車預訂。今天需要什麼協助嗎?
  1. 系統會呼叫預設開始流程中的「Default Welcome Intent」路徑。
  2. 這個狀態處理常式 (「Hi!我...") 已加入回應佇列。
  3. 代理程式會將回應佇列傳送給使用者。
使用者:我想租車。
服務專員:你想在哪裡取車?
  1. 系統會比對「Start Page」中的 car_rental.reservation_create 意圖路徑。
  2. 工作階段會轉換為「取貨地點」頁面。
  3. 「Pickup Location」頁面表單未完成,因此代理程式會使用 pickup_location 參數提示使用者 (「Where would you like to pick up...」),並新增至回應佇列。
  4. 代理程式會將回應佇列傳送給使用者。
使用者:拉斯維加斯
服務專員:好的,我們會在拉斯維加斯為你安排接送服務。
服務專員:下車地點是否與上車地點不同?
  1. 使用者輸入內容會填入服務專員在前一個對話回合中要求的 pickup_location 參數。
  2. 系統會比對預設起始流程中的 car_rental.return_different_location 意圖路線。
  3. 系統會評估並呼叫「Pickup Location」頁面中的表單填寫路徑。它具有執行要求 (「Ok, your pickup...」),會新增至回應佇列,並將參數參照解析為使用者提供的實際值。
  4. 工作階段會轉換至「確認位置」頁面。
  5. 「確認位置」頁面會顯示項目執行要求 (「下車地點是否不同...」),並新增至回應佇列。
  6. 代理程式將回應佇列傳送給使用者。
使用者:是。我會在洛杉磯還車。
服務專員:沒問題,下車地點會在洛杉磯。
服務專員:你想在何時何地上車?
  1. 系統會比對預設開始流程中的 car_rental.return_different_location 意圖路線。
  2. 工作階段會轉換至「下車地點」頁面。
  3. 使用者輸入內容會填入前一次對話期間代理程式要求的 drop_off_location 參數。
  4. 系統會評估及呼叫「Drop Off Location」頁面中的表單完成路徑。它具有執行要求 (「Ok, your drop off..."),會新增至回應佇列。
  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...」),並新增至回應佇列。
  4. 代理程式將回應佇列傳送給使用者。
使用者:是的,謝謝。
代理程式:太好了!接下來,請選擇車輛。
代理程式:您想要經濟型車輛還是豪華型車輛?
  1. 系統會比對「確認租借時間長度」頁面中的 small_talk.confirmation.yes 意圖路徑。
  2. 服務專員會透過訊息確認使用者的選擇 (「太好了!Now let's choose...")並新增至回應佇列。
  3. 工作階段會轉換至「車輛消歧」頁面。
  4. 「車輛辨識」頁面表單不完整,因此代理程式會使用 vehicle_type 參數提示使用者 (「您想要經濟型還是豪華型車輛...」),並新增至回應佇列。
  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. 工作階段會轉換至「確認 Cymbal Truck」頁面。
  3. 「確認 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 於拉斯維加斯取車,並在 2024-03-15 12:00:00 還車。這趟行程的總費用為 $175.38 美元。
服務專員:感謝你租用我們的服務,祝你有美好的一天!
  1. 工作階段會轉換至「Payment」頁面。
  2. 付款表單並未填妥,因此代理程式會提示使用者輸入 card_typecard_numberbilling_namebilling_street_addressbilling_zip_code 參數 (「卡片類型將...」)。並依序加入回應佇列,並在使用者回應時傳送。使用者的回應會設定每個參數值。
  3. 工作階段會轉換為「租借確認」頁面。
  4. 「租賃確認」頁面有一個輸入內容填充項 (「Ok, your pickup will be..."),系統會將這個引數新增至回應佇列。
  5. 代理程式將回應佇列傳送給使用者。
  6. 工作階段會轉換至「End Session」頁面。

透過 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,做為查詢參數,您可以透過 Dialogflow Webhook 存取,方法是查詢 WebhookRequest.payload 欄位的值。
  • 回應斜線指令接收資訊卡或對話方塊中的資料時,請考量以下事項:
    • 當 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 控制台中前往「管理資源」頁面。依序按一下「選單」圖示 >「IAM 與管理」 >「管理資源」

    前往 Resource Manager

  2. 在專案清單中選取要刪除的專案,然後按一下「Delete」圖示
  3. 在對話方塊中輸入專案 ID,然後按一下「Shut down」(關閉) 即可刪除專案。