您的代理会从 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",
"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事件。关键字由用户电话号码的双字母国家/地区代码决定。下表列出了每个受支持国家/地区的关键字。
国家/地区(国家/地区代码) 退订关键字 美国 (US)、印度 (IN)、英国 (GB)、德国 (DE) STOP 西班牙 (ES)、墨西哥 (MX) BAJA 法国 (FR) STOP 巴西 (BR) parar 用户退订后,对话会保留在用户的收件箱中,除非被举报为垃圾内容,在这种情况下,对话会移至垃圾内容和已屏蔽 文件夹。
为了识别违反政策和业务规则的行为,Google 会在用户退订后监控消息模式。
业务规则
- 作为管理此对话的 RBM 合作伙伴,您有责任遵守用户的退订请求。
- 如果您无法在消息串中执行退订操作,则必须立即发送确认消息,其中包含指向网站或应用的直接链接,用户可以在该网站或应用中管理其订阅偏好设置。
- 用户退订后,禁止发送非必需消息。
- 仍允许发送必需消息。这些消息包括:
- 身份验证,例如动态密码 (OTP)
- 有关用户已请求并同意接收的特定服务的通知
- 确认用户的退订请求,并提供有关如何进一步管理其通信偏好设置的信息
示例
如果用户退订了用例为多用途的航空公司代理, 您必须停止发送营销消息。不过,如果用户明确同意接收特定航班的更新,您可以发送航班更新。
退订原因
当用户退订您的代理时,他们可以从以下选项中选择一个原因:
- 垃圾内容
- 从未注册
- 消息过多
- 不再感兴趣
- 其他
分析概览中会显示退订原因,以帮助合作伙伴 了解用户退订的原因。
用户重新订阅对话
此事件表示用户希望再次接收来自您的代理的消息,包括促销等非必需内容。用户可以通过在 Google 信息中重新订阅之前退订的对话来触发此事件。
下面是一个 JSON 载荷示例:
{
"senderPhoneNumber": "PHONE_NUMBER",
"eventType": "SUBSCRIBE",
"eventId": "EVENT_ID",
"agentId": "AGENT_ID"
}重新订阅的工作原理
- 用户可以通过聊天菜单和聊天内链接中的订阅 选项,重新订阅之前退订的对话。
选择订阅 会触发两个同步操作:Google 信息会向您的代理发送特定于国家/地区的关键字(例如“START”),而 RBM 平台会向您的网络钩子发送 SUBSCRIBE 事件。 具体关键字由用户电话号码的双字母国家/地区代码决定。下表列出了每个受支持国家/地区的关键字。
国家/地区(国家/地区代码) 订阅关键字 美国 (US)、印度 (IN)、英国 (GB)、德国 (DE) START 西班牙 (ES)、墨西哥 (MX) ALTA 法国 (FR) Démarrer 巴西 (BR) começar
业务规则
- 作为管理此对话的 RBM 合作伙伴,您有责任遵守用户的重新订阅请求。
- 重新订阅适用于所有消息类型,包括促销等非必需内容。
- 如果用户在退订后向您的商家发送消息,则可以将其视为重新订阅请求。
- 如果用户在消息传递渠道之外(例如在您的网站上)重新订阅,您作为 RBM 合作伙伴有责任更新其状态并相应地恢复发送消息。
平台事件
RBM 平台会发送平台事件,以通知您的代理有关 代理启动状态变更或 消息过期的情况。
代理启动状态已更改
RBM 平台会针对代理启动状态的每次变更发送 AgentLaunchEvent。例如,当代理的状态从 PENDING 变为 LAUNCHED 时。该事件以 Pub/Sub 消息的形式递送。如需将其与其他事件区分开来,请检查 message.attributes.type 路径的值是否为 agent_launch_event。
网络钩子配置
您可以使用合作伙伴级或代理级 网络钩子 来接收这些 通知。
前提条件
- 配置您的网络钩子以用于 RBM 消息传递(这是 接收用户消息和用户事件的必要条件)。
- 如需区分 用户事件 和代理启动状态
事件,请检查
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 字段表示
代理的新启动状态。可能的值如下:
| 值 | 代理启动状态 | 详细信息 |
|---|---|---|
PENDING |
待处理 | 请求已发送给运营商以供审核。 |
LAUNCHED |
已发布 | 允许在给定运营商上发送消息。 |
REJECTED |
在给定运营商上被拒绝 | 拒绝原因在注释中指定。 |
SUSPENDED |
在给定运营商上被暂停 | 暂停原因在注释中指定。 |
UNLAUNCHED |
未发布 | 允许对已从所有运营商处取消发布的代理进行修改。 |
数据字段包含一个采用 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 |
UNLAUNCHED |
终止代理。 |
合作伙伴发起的启动状态变更
这些是允许的转换,通常由合作伙伴处理:
| 旧启动状态 | 新启动状态 | 触发操作 |
|---|---|---|
UNSPECIFIED |
PENDING |
提交审核。 |
UNLAUNCHED |
PENDING |
提交审核。 |
REJECTED |
PENDING |
重新提交送审。 |
消息已过期;撤消成功
此事件表示消息的生存时间 (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]" }
消息递送无法保证。
- 如果消息已递送,您将在网络钩子处收到
DELIVERED事件。 - 如果消息未递送,请使用撤消 API 发送撤消请求。
如果消息对时间敏感(例如 OTP 或欺诈提醒),最好通过备用渠道(例如短信)发送消息,即使这会导致向用户发送重复消息也是如此。