接收訊息

註冊 Business Messages 後,您可以代表測試服務專員接收訊息。您將在為這些品牌建立驗證推出代理程式之後,就能為自己管理的品牌接收訊息。

客戶傳送訊息給您管理的代理程式時,Business Messages 會將 JSON 酬載傳送至 Webhook,其中包含各種 ID、訊息內容和位置資訊。

請使用Business Communications Developer Console 記錄檔頁面,針對訊息傳送問題進行偵錯。

處理收到的訊息

代理程式處理業務及回應使用者訊息的方式,取決於您的商業邏輯。不過,回應使用者訊息的步驟通常一致。

確認訊息

如要確認 Webhook 收到的訊息,請針對傳送至 Webhook 的訊息傳回有效的 HTTP 回應。

如果訊息因為傳送逾時、Webhook 可連性、重新導向或權限問題而無法傳送,Google 會儲存並轉寄訊息,並在數次內重試,直到 Webhook 成功收到訊息為止。

確認訊息確實來自 Google

處理訊息內容前,請確認 Google 已傳送訊息。

為確認 Google 是否已收到你傳送的訊息,

  1. 剖析訊息的 X-Goog-Signature 標頭。這是採用 Base64 編碼的訊息訊息酬載。
  2. 請使用用戶端 (設定 Webhook 時顯示) 做為金鑰,請為訊息酬載建立 SHA512 HMAC,並採用 Base64 編碼的結果。

  3. 比較 X-Goog-Signature 雜湊和您建立的雜湊。

    • 如果雜湊值相符,即表示您確認 Google 已傳送郵件。
    • 如果雜湊不相符,請檢查已知訊息的雜湊程序。如果雜湊處理程序正常運作,且收到訊息時認為是詐欺郵件,請 聯絡我們 (您必須透過 Business Messages Google 帳戶登入)。

查看 GitHub 存放區 (位於 JavaNode.jsPython) 中的 Echo 機器人訊息驗證範例。

識別語言代碼

使用者會透過多個位置與多種語言溝通。Business Messages 會透過 resolvedLocaleuserDeviceLocale 欄位來表示使用者的語言偏好設定 (視使用者的地區設定而定)。請參閱本地化和語言代碼

請盡可能轉送使用者,並根據使用者的語言偏好設定撰寫回應。

根據郵件內容轉送郵件

訊息背景會告訴使用者應該尋找的資訊類型。 舉例來說,當使用者傳送含有 placeId 值的訊息時,他們會傳送訊息到特定位置 (由 placeId 識別),並可能會提出位置相關問題。同樣地,如果訊息的 nearPlaceId 值可用來識別使用者附近的位置,使用者可能想要知道位置相關資訊,但代理程式在確認對話之前,應該確認使用者想要交談的位置。

根據訊息的情境資訊,將訊息轉送至最適合回應的回應位置:

  • 如果訊息內容是新的對話,且是常見問題,你可以用自動化功能回覆。
  • 如果自動化功能無法處理問題,請將問題轉送至線上服務專員。
  • 如果訊息的語言代碼與代理程式的預設語言代碼不符,請將訊息轉送至支援該語言代碼的即時代理程式。
  • 如有特定地點的相關問題,請將其轉送至有該位置相關資訊的使用者。
  • 如果訊息正在進行進行中的對話,請將其轉送至參與對話的即時服務專員。

識別使用者傳送的訊息類型

使用者可以傳送三種類型的訊息:

  • 文字訊息是任意形式的回應。
  • 圖片訊息包含使用者上傳圖片的已簽署網址。
  • 建議訊息包括回傳動作資料和使用者輕觸的建議回覆文字。

處理訊息內容

如果您的代理程式使用自動化功能,則使用者訊息內容應在對話中引導代理程式的邏輯和下一個回應。

如要找出使用者意圖,最簡單的方法是使用建議的回覆或建議動作的回傳資料。無論與建議有關的文字為何,回傳資料都可以機器讀取。

如果使用者傳送簡訊,代理程式可能會剖析支援關鍵字的回應,或使用自然語言理解功能 (例如使用 Dialogflow 整合功能來處理使用者的訊息,並識別路徑)。

如果代理程式不知道如何回應使用者的訊息,則應以錯誤狀態回應,並嘗試提示使用者提供額外資訊、以其他方式要求輸入內容,或者將對話交給線上代理程式,藉此繼續進行對話。

回應使用者

服務專員透過自動化或即時服務專員進行正確回應後,就會傳送訊息並繼續與使用者對話。

撰寫回應時,請考量使用者的語言代碼。您也可以在收到每則訊息的 userInfo 物件中擷取值,藉此進一步自訂回應。

訊息類型

以下程式碼說明代理程式接收訊息的方式。

如需格式和值資訊,請參閱 UserMessage

文字

使用者最常回覆的方式是使用純文字,簡訊格式如下。

{
  "agent": "brands/BRAND_ID/agents/AGENT_ID",
  "conversationId": "CONVERSATION_ID",
  "customAgentId": "CUSTOM_AGENT_ID",
  "requestId": "REQUEST_ID",
  "message": {
    "messageId": "MESSAGE_ID",
    "name": "conversations/CONVERSATION_ID/messages/MESSAGE_ID",
    "text": "MESSAGE_TEXT",
    "createTime": "MESSAGE_CREATE_TIME",
  },
  "dialogflowResponse": {
    "autoResponded": "BOOLEAN",
    "faqResponse": {
      "userQuestion": "USER_QUESTION",
      "answers": [{
        "faqQuestion": "FAQ_QUESTION",
        "faqAnswer": "FAQ_ANSWER",
        "matchConfidenceLevel": "CONFIDENCE_LEVEL",
        "matchConfidence": "CONFIDENCE_NUMERIC",
      }],
    },
  },
  "context": {
    "entryPoint": "CONVERSATION_ENTRYPOINT",
    "placeId": "LOCATION_PLACE_ID",
    "resolvedLocale": "MATCH_OF_USER_AND_AGENT_LOCALES",
    "userInfo": {
      "displayName": "USER_NAME",
      "userDeviceLocale": "USER_LOCALE",
    },
  },
  "sendTime": "SEND_TIME",
}

如需格式設定和值選項,請參閱 Message

圖像

除了傳送訊息,使用者也可以將圖片以訊息的形式傳送給代理程式。Business Messages 會將共用圖片保留 7 天,並保留已簽署網址,並在訊息酬載的 text 欄位中加入這些網址。

如果您的代理程式包含自動化功能,請確保自動化功能知道使用者分享圖片時該如何回應。針對線上服務專員,請確保訊息是透過傳遞或訊息中的網址可供點擊。

...
"message": {
    "text": "https://storage.googleapis.com/business-messages-us/936640919331/jzsu6cdguNGsBhmGJGuLs1DS?x-goog-algorithm\u003dGOOG4-RSA-SHA256\u0026x-goog-credential\u003duranium%40rcs-uranium.iam.gserviceaccount.com%2F20190826%2Fauto%2Fstorage%2Fgoog4_request\u0026x-goog-date\u003d20190826T201038Z\u0026x-goog-expires\u003d604800\u0026x-goog-signedheaders\u003dhost\u0026x-goog-signature\u003d89dbf7a74d21ab42ad25be071b37840a544a43d68e67270382054e1442d375b0b53d15496dbba12896b9d88a6501cac03b5cfca45d789da3e0cae75b050a89d8f54c1ffb27e467bd6ba1d146b7d42e30504c295c5c372a46e44728f554ba74b7b99bd9c6d3ed45f18588ed1b04522af1a47330cff73a711a6a8c65bb15e3289f480486f6695127e1014727cac949e284a7f74afd8220840159c589d48dddef1cc97b248dfc34802570448242eac4d7190b1b10a008404a330b4ff6f9656fa84e87f9a18ab59dc9b91e54ad11ffdc0ad1dc9d1ccc7855c0d263d93fce6f999971ec79879f922b582cf3bb196a1fedc3eefa226bb412e49af7dfd91cc072608e98"
  }
...

如需格式設定和值選項,請參閱 Message

建議

「建議回覆」和「建議操作」可讓使用者透過輕觸操作回應或執行動作。使用者輕觸建議時,代理程式會收到含有建議文字和回傳資料的酬載。

建議訊息的格式如下。

{
  "agent": "brands/BRAND_ID/agents/AGENT_ID",
  "conversationId": "CONVERSATION_ID",
  "customAgentId": "CUSTOM_AGENT_ID",
  "requestId": "REQUEST_ID",
  "suggestionResponse": {
    "message": "conversations/CONVERSATION_ID/messages/MESSAGE_ID",
    "postbackData": "POSTBACK_DATA",
    "createTime": "RESPONSE_CREATE_TIME",
    "text": "SUGGESTION_TEXT",
    "suggestionType": "SUGGESTION_TYPE",
  }
  "context": {
    "entryPoint": "CONVERSATION_ENTRYPOINT",
    "placeId": "LOCATION_PLACE_ID",
    "resolvedLocale": "MATCH_OF_USER_AND_AGENT_LOCALES",
    "userInfo": {
      "displayName": "USER_NAME",
      "userDeviceLocale": "USER_LOCALE",
    },
  },
  "sendTime": "SEND_TIME",
}

如需格式設定和值選項,請參閱 SuggestionResponse

驗證要求

「驗證要求」建議可讓使用者透過 OAuth 供應商登入,向代理程式提供身分詳細資料,或允許代理程式代表使用者執行動作。請參閱使用 OAuth 進行驗證

如果使用者成功透過指定的 OAuth 提供者登入,代理程式會收到含有授權碼的酬載。如果使用者未登入,代理程式就會收到含有錯誤詳細資料的酬載。

驗證要求訊息的格式如下。

{
  "agent": "brands/BRAND_ID/agents/AGENT_ID",
  "conversationId": "CONVERSATION_ID",
  "customAgentId": "CUSTOM_AGENT_ID",
  "requestId": "REQUEST_ID",
  "authenticationResponse": {
    "code": "AUTHORIZATION_CODE",
    "redirect_uri": "REDIRECT_URI",
    "errorDetails": {
      "error": "ERROR",
      "errorDescription": "ERROR_DESCRIPTION",
    },
  }
  "context": {
    "entryPoint": "CONVERSATION_ENTRYPOINT",
    "placeId": "LOCATION_PLACE_ID",
    "resolvedLocale": "MATCH_OF_USER_AND_AGENT_LOCALES",
    "userInfo": {
      "displayName": "USER_NAME",
      "userDeviceLocale": "USER_LOCALE",
    },
  },
  "sendTime": "SEND_TIME",
}

如需格式設定和值選項,請參閱 AuthenticationResponse

郵件/訊息內容

每個訊息都包含訊息來源的相關資訊。

...
  "context": {
    "customContext": "CUSTOM_CONTEXT",
    "entryPoint": "CONVERSATION_ENTRYPOINT",
    "placeId": "LOCATION_PLACE_ID",
    "nearPlaceId": "NEARBY_LOCATION_PLACE_ID",
    "deflectedPhoneNumber": "DEFLECTED_PHONE_NUMBER",
    "resolvedLocale": "MATCH_OF_USER_AND_AGENT_LOCALES",
    "userInfo": {
      "displayName": "USER_NAME",
      "userDeviceLocale": "USER_LOCALE",
    },
    "widget": {
      "url": "WEBSITE_URL",
      "widgetContext": "WIDGET_CONTEXT",
    },
  },
...
欄位 說明
customContext 合作夥伴指定的結構定義資料。
entryPoint 使用者開始對話的對話途徑,如 EntryPoint 定義。
placeId Google 地方資訊資料庫中地點使用者的專屬 ID。這則訊息只會出現在來自特定地點進入點的訊息中。
nearPlaceId Google 地方資訊資料庫中第一個地點本機位置的專屬 ID。收到 nearPlaceId 值時,請確認使用者想要進行即時通訊的位置。
deflectedPhoneNumber Business Messages 會在使用者開始對話時,轉接電話號碼。
resolvedLocale

符合使用者語言代碼 (位於 userDeviceLocale 中記錄) 與代理程式支援的語言代碼 (由指定的對話設定判斷) 的最佳運算結果。請參閱「本地化」和「開始對話」。

語言代碼值是格式正確的 IETF BCP 47 語言標記。

userInfo.displayName 傳送郵件的使用者名稱。如果使用者選擇停止分享識別資訊,這個欄位會留空。
userInfo.userDeviceLocale 使用者裝置的語言代碼,以及格式正確的 IETF BCP 47 語言標記。
widget.url 對話平台啟動的網站網址。
widget.widgetContext 用來開始對話的小工具的 data-bm-widget-context 屬性值。

對話記錄

Google 不提供對話記錄。請依據自身的隱私權政策和最佳做法,維護過去的對話記錄,以便您未來的使用者訊息發送實用資訊。