接收事件

代理程式會收到 RBM 平台傳送的 Webhook 事件,通知您使用者互動和平台層級的最新消息。

這些事件會依來源分類:

  • 使用者事件:使用者裝置傳送給代理程式的通知,表示使用者與代理程式或其訊息互動。
  • 平台事件:RBM 平台傳送的通知,內容與代理程式啟動狀態變更和訊息到期有關。

如要進一步瞭解代理程式傳送至使用者裝置的狀態事件,請參閱「傳送事件」。

使用者事件

使用者事件是使用者裝置傳送的通知,用於回報訊息狀態或訂閱狀態變更 (即使用者已在 Google 訊息中取消訂閱重新訂閱)。

如需完整的格式設定和值選項,請參閱 UserEvent 參考資料。

使用者收到服務專員訊息

這個事件表示訊息已成功傳送至使用者的裝置。

{
  "senderPhoneNumber": "PHONE_NUMBER",
  "eventType": "DELIVERED",
  "eventId": "EVENT_ID",
  "messageId": "MESSAGE_ID",
  "agentId": "AGENT_ID"
}

使用者閱讀服務專員訊息

這項事件表示郵件已開啟或確認。

{
  "senderPhoneNumber": "PHONE_NUMBER",
  "eventType": "READ",
  "eventId": "EVENT_ID",
  "messageId": "MESSAGE_ID",
  "agentId": "AGENT_ID"
}

使用者開始輸入文字

這項事件表示使用者正在輸入回覆。

{
  "senderPhoneNumber": "PHONE_NUMBER",
  "eventType": "IS_TYPING",
  "eventId": "EVENT_ID",
  "agentId": "AGENT_ID"
}

使用者傳送簡訊

{
  "senderPhoneNumber": "PHONE_NUMBER",
  "text": "Hi",
  "eventId": "EVENT_ID",
  "agentId": "AGENT_ID"
}

使用者傳送檔案

{
  "senderPhoneNumber": "PHONE_NUMBER",
  "userFile": {
    "payload": {
      "mimeType": "image/gif",
      "fileSizeBytes": 127806,
      "fileUri": "https://storage.googleapis.com/copper_test/77ddb795-24ad-4607-96ae-b08b4d86406a/d2dcc67ab888d34ee272899c020b13402856f81597228322079eb007e8c9",
      "fileName": "4_animated.gif"
    }
  },
  "eventId": "EVENT_ID",
  "agentId": "AGENT_ID"
}

使用者輕觸建議回覆

使用者輕觸建議回覆時,代理程式會收到含有回覆的後送資料和文字的事件。

{
  "senderPhoneNumber": "PHONE_NUMBER",
  "eventId": "EVENT_ID",
  "agentId": "AGENT_ID",
  "suggestionResponse": {
    "postbackData": "postback_1234",
    "text": "Hello there!"
  }
}

使用者輕觸建議的動作

使用者輕觸建議動作時,代理程式會收到含有動作回傳資料的事件。

{
  "senderPhoneNumber": "PHONE_NUMBER",
  "eventId": "EVENT_ID",
  "agentId": "AGENT_ID",
  "suggestionResponse": {
    "postbackData": "postback_1234"
  }
}

使用者取消訂閱對話

這項事件表示使用者已取消訂閱,不再接收代理商和所代表商家傳送的非必要訊息 (例如促銷活動)。使用者在 Google 訊息中取消訂閱 RBM 對話時,就會觸發這個事件。

以下是 JSON 酬載範例:

{
  "senderPhoneNumber": "PHONE_NUMBER",
  "eventType": "UNSUBSCRIBE",
  "eventId": "EVENT_ID",
  "agentId": "AGENT_ID"
}

取消訂閱的運作方式

  • 你隨時可以在對話選單中選擇「取消訂閱」。如果是宣傳和多用途代理程式,在一定數量的未讀訊息後,這個選項也會直接顯示在對話中 (具體規則因國家/地區而異)。
  • 選取「取消訂閱」會同時觸發兩項動作:Google 訊息會將國家/地區專屬的關鍵字 (例如「STOP」) 傳送給代理程式,而 RBM 平台則會將 UNSUBSCRIBE 事件傳送至 Webhook。

    關鍵字取決於使用者電話號碼的國家/地區代碼 (由兩個字母組成)。下表列出各支援國家/地區的關鍵字。

    國家/地區 (國家/地區代碼) 取消訂閱關鍵字
    美國 (US)、印度 (IN)、英國 (GB)、德國 (DE) 停止
    西班牙 (ES)、墨西哥 (MX) BAJA
    法國 (FR) 停止
    巴西 (BR) parar
  • 使用者取消訂閱後,對話仍會保留在收件匣中,除非檢舉為垃圾訊息,否則不會移至「已封鎖的垃圾訊息」資料夾。

  • 為找出違反政策和業務規則的行為,Google 會在使用者取消訂閱後監控訊息模式。

業務規則

  • 身為管理這項對話的 RBM 合作夥伴,你有責任遵守使用者的取消訂閱要求。
  • 如果無法在訊息串中取消訂閱,請立即傳送確認訊息,並附上網站或應用程式的直接連結,方便使用者管理訂閱偏好設定。
  • 使用者取消訂閱後,您不得再傳送非必要訊息。
  • 仍可傳送重要訊息。包括:
    • 驗證資訊,例如動態密碼 (OTP)
    • 使用者要求並同意接收的特定服務通知
    • 確認使用者已要求取消訂閱,並提供相關資訊,方便他們進一步管理通訊偏好設定

範例

如果使用者取消訂閱用途為多用途的航空公司服務專員,您必須停止傳送行銷訊息。不過,如果使用者明確同意接收特定航班的最新動態,您就可以傳送航班最新動態。

取消訂閱原因

使用者取消訂閱服務專員時,可以從下列選項中選取原因:

  • 垃圾內容
  • 從未訂閱訊息
  • 訊息過多
  • 沒興趣了
  • 其他

數據分析總覽」會顯示取消訂閱原因,協助合作夥伴瞭解使用者取消訂閱的原因。

使用者重新訂閱對話

這項事件表示使用者想再次接收來自代理程式的訊息,包括促銷活動等非必要內容。使用者只要在 Google 訊息中重新訂閱先前取消訂閱的對話,即可觸發這項事件。

以下是 JSON 酬載範例:

{
  "senderPhoneNumber": "PHONE_NUMBER",
  "eventType": "SUBSCRIBE",
  "eventId": "EVENT_ID",
  "agentId": "AGENT_ID"
}

如何重新訂閱

  • 使用者可以透過對話選單和對話內連結,使用「訂閱」選項重新訂閱已取消訂閱的對話。
  • 選取「訂閱」會同時觸發兩項動作:Google 訊息會將特定國家/地區的關鍵字 (例如「開始」) 傳送給代理程式,而 RBM 平台會將 SUBSCRIBE 事件傳送至網路鉤子。具體關鍵字取決於使用者電話號碼的國家/地區代碼 (由兩個字母組成)。下表列出各支援國家/地區的關鍵字。

    國家/地區 (國家/地區代碼) 訂閱關鍵字
    美國 (US)、印度 (IN)、英國 (GB)、德國 (DE) 開始
    西班牙 (ES)、墨西哥 (MX) ALTA
    法國 (FR) Démarrer
    巴西 (BR) começar

業務規則

  • 身為管理這項對話的 RBM 合作夥伴,你有責任遵守使用者的重新訂閱要求。
  • 重新訂閱適用於所有類型的訊息,包括宣傳等非必要內容。
  • 如果使用者取消訂閱後傳送訊息給商家,系統可能會將此視為重新訂閱要求。
  • 如果使用者在訊息管道以外的地方重新訂閱 (例如在您的網站上),RBM 合作夥伴有責任更新使用者的狀態,並據此繼續傳送訊息。

平台事件

RBM 平台會傳送平台事件,通知代理程式代理程式的啟動狀態變更或訊息過期

代理程式啟動狀態已變更

RBM 平台會在代理程式的發布狀態每次變更時,傳送 AgentLaunchEvent。舉例來說,當代理程式的狀態從 PENDING 變更為 LAUNCHED 時,系統會以 Pub/Sub 訊息的形式傳送事件。如要區分這項事件與其他事件,請檢查值 agent_launch_eventmessage.attributes.type 路徑。

Webhook 設定

你可以使用合作夥伴層級或服務專員層級的 Webhook 接收這些通知。

必要條件

  • 設定 RBM 訊息的 Webhook (這是接收使用者訊息和使用者事件的必要條件)。
  • 如要區分使用者事件和代理程式啟動狀態事件,請檢查 message.attributes.type 路徑的值 agent_launch_event

事件酬載結構

AgentLaunchEvent 會以 Pub/Sub 訊息的形式傳送。範例如下:

{
  "message": {
    "attributes": {
      "business_id": "rbm-chatbot-id@rbm.goog",
      "event_type": "REJECTED",
      "product": "RBM",
      "project_number": "3338881441851",
      "type": "agent_launch_event"
    },
    "data": "....BASE64-encoded-JSON-with-notification...",
    "messageId": "14150481888479752",
    "message_id": "14150481888479752",
    "publishTime": "2025-03-05T18:50:21.88Z",
    "publish_time": "2025-03-05T18:50:21.88Z"
  },
  "subscription": "projects/rbm-partner-gcp/subscriptions/rbm-sub"
}

事件酬載中的 AgentLaunchEvent.LaunchState 欄位會指出代理程式的新啟動狀態。可能的值包括:

代理程式啟動狀態 詳細資料
UNLAUNCHED 未發布 可編輯。
PENDING 待處理 要求已送交電信業者審查。
LAUNCHED 已推出 允許在特定電信業者上傳送訊息。
REJECTED 在特定貨運公司遭拒 註解中會說明拒絕原因。
SUSPENDED 在特定貨運公司遭停權 註解中會說明停權原因。

資料欄位包含以 Base64 編碼的 JSON 物件,內含啟動狀態詳細資料。以下是解碼後的 JSON 範例:

    {
      "eventId": "rbm-chatbot-id/0a7ed168-676e-4a56-b422-b23434",
      "agentId": "rbm-chatbot-id@rbm.goog",
      "botDisplayName": "RBM Welcome Bot 7 - RBM Chatbot name",
      "brandId": "bd38fbff-392a-437b-a6f2-7f2e43745b56",
      "brandDisplayName": "Chatbots brand",
      "regionId": "/v1/regions/fi-rcs",
      "oldLaunchState": "PENDING",
      "newLaunchState": "REJECTED",
      "actingParty": "rbm-support@google.com",
      "comment": "Carrier has rejected the launch: policy violation",
      "sendTime": "2025-03-05T18:50:19.386436Z"
    }

下表列出代理程式啟動狀態和觸發動作:

舊的發布狀態 新的發布狀態 觸發變更
PENDING LAUNCHED 待服務專員核准。
PENDING REJECTED 已拒絕待處理的代理人。
LAUNCHED SUSPENDED 已暫停發布的代理程式。
SUSPENDED LAUNCHED 已重新啟用遭停權的代理人。
SUSPENDED TERMINATED 已終止暫停使用的代理程式。
TERMINATED LAUNCHED 已啟動終止的服務專員。

訊息已過期;撤銷成功

這項事件表示郵件的存留時間 (TTL) 已過期,且郵件已成功撤銷。這是備用訊息策略的合適觸發條件。

如需完整的格式設定和值選項,請參閱 ServerEvent 參考資料。

{
  "phoneNumber": "[phone number]" ,
  "messageId": "[RCS message ID]",
  "agentId": [bot ID],
  "eventType": "TTL_EXPIRATION_REVOKED",
  "eventId": "[unique ID]",
  "sendTime": "[time stamp]"
}

訊息已過期;撤銷失敗

這個事件表示訊息的 TTL 已過期,但未成功撤銷。

如需完整的格式設定和值選項,請參閱 ServerEvent 參考資料。

{
  "phoneNumber": "[phone number]",
  "messageId": "[RCS message ID]",
  "agentId": "[bot ID]",
  "eventType": "TTL_EXPIRATION_REVOKE_FAILED",
  "eventId": "[unique ID]",
  "sendTime": "[time stamp]"
}

我們無法保證訊息一定會送達。

  • 如果訊息已送達,Webhook 會收到 DELIVERED 事件。
  • 如果訊息未送達,請使用撤銷 API 傳送撤銷要求

如果訊息具有時效性 (例如一次性密碼或詐欺警示),即使會導致使用者收到重複訊息,最好還是透過簡訊等其他管道傳送。