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

本頁面說明如何建構透過 Dialogflow 建構的 Google Chat 應用程式,同時以自然語言理解並做出回應。本指南使用的 Dialogflow CX 與 Google Chat 直接整合,歡迎在開發人員預覽版中取得。您也可以按照 Dialogflow ES Google Chat 指南,使用 Dialogflow ES 建構 Dialogflow ES Google Chat 應用程式。

舉例來說,假設即時通訊應用程式可協助使用者租車。例如「我想租車」。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 代理程式就像是客服中心的真人服務專員。您可以訓練這些 API 來處理預期的對話情境,而且訓練不必過於明確。

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

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

    前往 Dialogflow CX 控制台

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

  3. 您可以選擇使用預先建構的代理程式 或自行建立代理程式如果您稍後想要進一步探索代理程式自訂功能,請選擇其中一個預先建構的代理程式,這也有助於瞭解代理程式的功能。

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

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

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

    3. 按一下「Import as agent」

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

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

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

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

    1. 在「顯示名稱」中輸入顯示名稱。
    2. 選取您偏好的位置。如要變更進階的位置設定,請按一下「Edit」(編輯)
    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. 在「應用程式名稱」中輸入 Dialogflow App
    2. 在「Avatar URL」(顯示圖片網址) 中輸入 https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png
    3. 在「說明」中輸入 Responds to real human conversation
    4. 在「功能」下方,選取「接收 1:1 訊息」和「加入聊天室和群組對話」
    5. 在「連線設定」下方選取「Dialogflow」
    6. 在「Dialogflow settings」下方,選取「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. 在「Add 1 or more people」欄位中,輸入 Chat 應用程式的名稱。
  4. 從搜尋結果中選取 Chat 應用程式。系統隨即會開啟即時訊息。

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

    Dialogflow Chat 應用程式會引述自己來進行回應。

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

測試對話範例

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

對話方塊 說明
使用者:您好
服務專員:您好!我是虛擬租車仲介專員。我可以協助您開始新的租車預約。今天需要什麼協助呢?
  1. 系統會呼叫預設啟動流程中的預設歡迎意圖路徑。
  2. 此狀態處理常式的執行要求 (「嗨!我...」) 就會新增至回應佇列。
  3. 代理程式會將回應佇列傳送給使用者。
使用者:我想租車,
服務專員:你想在哪裡取車?
  1. 「起始網頁」中的 car_rental.reservation_create 意圖路徑相符。
  2. 工作階段會轉換至「Pickup Location」頁面。
  3. 「取貨地點」頁面表單並未填寫,因此代理程式會使用 pickup_location 參數提示使用者 (「您希望在哪裡取貨...」),並新增至回應佇列。
  4. 代理程式會將回應佇列傳送給使用者。
使用者:拉斯維加斯
服務專員:好,你的上車地點會去拉斯維加斯。
服務專員:下車地點是否與上車地點不同?
  1. 使用者輸入內容會填入服務專員在上一回合中要求的 pickup_location 參數。
  2. car_rental.return_different_location中的 car_rental.return_different_location 意圖路徑相符。
  3. 系統會評估並呼叫「取貨位置」頁面中的表單完成路徑。其中包含一個執行要求 (「好,您的取貨...」),其中的參數參照會解析使用者提供的實際值。
  4. 這個工作階段隨即會轉換至「Confirm Location」頁面。
  5. 「Confirm Location」頁面中會顯示項目執行要求 (「你的下車地點是否不同...」)。並新增至回應佇列。
  6. 代理程式會將回應佇列傳送給使用者。
使用者:是。我會在洛杉磯叫車。
服務專員:好的,下車地點會在洛杉磯。
服務專員:你想上車的日期和時間?
  1. car_rental.return_different_location中的 car_rental.return_different_location 意圖路徑相符。
  2. 工作階段會轉換為「放置位置」頁面。
  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. 「Confirm rent Duration」頁面中的 small_talk.confirmation.yes 意圖路徑相符。
  2. 代理程式會透過訊息確認使用者的選擇 (「太好了!讓我們選擇..."), 並新增至回應佇列。
  3. 工作階段會轉換至「車輛消歧」頁面。
  4. 「車輛消歧」頁面表單並不完整,因此代理程式會使用 vehicle_type 參數來提示使用者 (「Would you like a Economic or lus...")。並新增至回應佇列。
  5. 代理程式會將回應佇列傳送給使用者。
使用者:請提供 Economy。
服務專員:你想搭乘 Cymbal Car 還是 Cymbal Truck?
  1. 系統會比對 $session.params.vehicle_type="economy_vehicle" 意圖路徑。
  2. 這個工作階段會轉換至「經濟方案選項」頁面。
  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. 「Payment」表單尚未填寫完畢,因此代理程式會提示使用者輸入 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
    • 傳送至 Dialogflow 代理程式的查詢輸入內容會對應至 Chat 訊息中 argumentText 欄位的值。如果訊息包含斜線指令,系統會改用 text 欄位的值。
    • 系統會將每個 Chat 互動事件的完整 JSON 酬載傳送至 Dialogflow 做為查詢參數中的自訂酬載,並可透過查詢 WebhookRequest.payload 欄位的值,透過 Dialogflow Webhook 存取。
  • 斜線指令僅提供部分支援:
    • Dialogflow Chat 應用程式不支援開啟對話方塊的斜線指令。
    • 當 Dialogflow Chat 應用程式收到包含斜線指令的訊息時,查詢輸入內容只會包含 text 欄位的值。text 欄位以斜線指令的名稱 (例如 /command) 開頭,可用於設定 Dialogflow 代理程式的意圖來偵測斜線指令。
    • 如果 Dialogflow 代理程式需要處理斜線指令的 Chat 互動事件 JSON 酬載,則可使用 Dialogflow Webhook 檢查查詢參數中的自訂酬載。
  • 不支援連結預覽
  • 如果 Dialogflow 代理程式只回覆一則訊息,系統就會將訊息同步傳送至 Google Chat。如果 Dialogflow 代理程式以多則訊息回應,則系統會針對每則訊息,在 Chat API 的 spaces.messages 資源中呼叫 create 方法,以非同步方式將所有訊息傳送至 Chat。

疑難排解

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

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

清除所用資源

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

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

    前往 Resource Manager

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