События — это уведомления, которые ваш агент может отправлять и получать. Существует три типа событий:
- Сгенерировано сервером : отправлено вашему агенту платформой RBM
- Создано пользователем : отправлено вашему агенту с устройства пользователя.
- Создано агентом : отправлено вашим агентом пользователю.
События, генерируемые сервером
Платформа RBM отправляет события, чтобы уведомить вашего агента об обновлениях на уровне сервера, таких как истечение срока действия сообщений .
Параметры форматирования и значений см. в разделе ServerEvent
.
Статус запуска агента изменился
Платформа RBM отправляет событие AgentLaunchEvent
при каждом изменении статуса запуска вашего агента. Например, когда статус вашего агента меняется с PENDING
на LAUNCHED
после одобрения оператором, вы получаете событие AgentLaunchEvent
, уведомляющее об этом изменении. Эти события отправляются всем агентам RBM при всех изменениях статуса запуска оператора.
Конфигурация веб-перехватчика
Для получения этих уведомлений вы можете использовать веб-хук на уровне партнера или агента.
Предпосылки
- Настройте свой вебхук для обмена сообщениями 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
в полезной нагрузке события указывает новое состояние запуска агента. Возможные значения:
Ценить | Состояние запуска агента | Подробности |
---|---|---|
UNLAUNCHED | Незапущенный | Редактирование разрешено. |
PENDING | В ожидании | Запрос был отправлен оператору связи на рассмотрение. |
LAUNCHED | Запущен | Сообщения разрешены на определенном операторе. |
REJECTED | Отклонено на данном носителе | Причина отклонения указывается в комментарии. |
SUSPENDED | Подвешенный на данном носителе | Причина приостановки указана в комментарии. |
Поле данных содержит JSON-объект в кодировке Base64 с информацией о состоянии запуска. Вот пример декодированного 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 | Запущен прекращенный агент. |
Срок действия сообщения истек; отзыв выполнен успешно
Срок действия сообщения истёк, и оно было успешно отозвано. Это событие может стать хорошим триггером для вашей резервной стратегии рассылки сообщений.
{ "phoneNumber": [phone number of recipient that the original message was intended for] , "messageId": [RCS message ID of the message], "agentId": [bot ID], "eventType": "TTL_EXPIRATION_REVOKED", "eventId": [unique ID generated by the RBM platform], "sendTime": [time at which the server sent this event] }
Срок действия сообщения истек; отзыв не удался
Срок действия сообщения истек, но оно не было отозвано.
{ "phoneNumber": [phone number of recipient that the original message was intended for] , "messageId": [RCS message ID of the message], "agentId": [bot ID], "eventType": "TTL_EXPIRATION_REVOKE_FAILED", "eventId": [unique ID generated by the RBM platform], "sendTime": [time at which the server sent this event] }
Доставка сообщения не гарантируется.
- Если сообщение было доставлено, вы получите событие
DELIVERED
на своем веб-перехватчике. - Если сообщение не было доставлено, используйте API отзыва для отправки запроса на отзыв .
Если сообщение срочное, например одноразовый пароль или предупреждение о мошенничестве, лучше всего отправить его по альтернативному каналу, например, с помощью SMS, даже если это приведет к отправке пользователю дублирующих сообщений.
События, создаваемые пользователями
Как и в случае с пользовательскими сообщениями и проверками возможностей, ваш агент получает пользовательские события в формате JSON.
Параметры форматирования и значений см. в разделе 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" } }
Пользователь отписывается от беседы
Если пользователь не хочет получать ненужные сообщения от компании, например, о рекламных акциях, он может отписаться от беседы RBM в Google Сообщениях.
Событие UNSUBSCRIBE
указывает на то, что пользователь отписался от переписки с вашим агентом и компанией, которую он представляет. Вот пример полезной нагрузки JSON:
{ "senderPhoneNumber": "PHONE_NUMBER", "eventType": "UNSUBSCRIBE", "eventId": "EVENT_ID", "agentId": "AGENT_ID" }
Как это работает
- Функция «Отписаться» всегда доступна в меню чата. Для рекламных и многоцелевых агентов эта опция также появляется непосредственно в чате после определённого количества непрочитанных сообщений (конкретные правила различаются в зависимости от страны).
Выбор отмены подписки запускает два одновременных действия: Google Сообщения отправляет вашему агенту ключевое слово, специфичное для страны (например, «STOP»), а платформа RBM отправляет событие UNSUBSCRIBE на ваш веб-перехватчик.
Ключевое слово определяется двухбуквенным кодом страны, указанным в номере телефона пользователя. В следующей таблице перечислены ключевые слова для каждой поддерживаемой страны.
Страна (код страны) Ключевое слово отмены подписки США (US), Индия (IN), Великобритания (GB), Германия (DE) ОСТАНАВЛИВАТЬСЯ Испания (ES), Мексика (MX) БАХА Франция (FR) ОСТАНАВЛИВАТЬСЯ Бразилия (BR) парар После того как пользователь отпишется, сообщение останется в его почтовом ящике, если только оно не будет отмечено как спам. В этом случае оно переместится в папку «Спам и заблокированные» .
Чтобы выявлять нарушения политик и бизнес-правил, Google отслеживает шаблоны сообщений после того, как пользователь отписывается.
Бизнес-правила
- Как партнер RBM, управляющий этим общением, вы несете ответственность за выполнение запроса пользователя на отмену подписки.
- Если отписаться в цепочке сообщений невозможно, необходимо немедленно отправить сообщение с подтверждением и прямой ссылкой на веб-сайт или приложение, где пользователи могут управлять своими настройками подписки.
- После отписки пользователя отправка несущественных сообщений запрещена.
- Основные сообщения по-прежнему разрешены. К ним относятся:
- Аутентификации, такие как одноразовые пароли (OTP)
- Уведомления о конкретной услуге, которую пользователь запросил и на которую дал согласие
- Подтверждение запроса пользователя на отмену подписки с информацией для дальнейшего управления его предпочтениями в области коммуникаций
Пример
Если пользователь отписывается от агента авиакомпании, чей вариант использования предполагает многоцелевое использование , вы обязаны прекратить отправку маркетинговых сообщений. Однако вы можете отправлять обновления о рейсе, если пользователь дал явное согласие на получение обновлений для этого конкретного рейса.
Причины отказа от подписки
Когда пользователь отписывается от вашего агента, он может выбрать причину из следующих вариантов:
- Не подписан
- Слишком много сообщений
- Больше не интересно
- Спам
- Другой
В настоящее время причины отказа от подписки не сообщаются партнерам или операторам связи.
Пользователь повторно подписывается на беседу
Пользователи могут повторно подписаться на беседу, от которой они ранее отписались в Google Сообщениях.
Событие SUBSCRIBE
указывает на то, что пользователь хочет получать сообщения от вашего агента, включая необязательный контент, например, рекламные акции. Вот пример полезной нагрузки JSON:
{ "senderPhoneNumber": "PHONE_NUMBER", "eventType": "SUBSCRIBE", "eventId": "EVENT_ID", "agentId": "AGENT_ID" }
Как это работает
- Опция «Подписаться» , доступная как из меню чата, так и по ссылке в чате, позволяет пользователям повторно подписаться на беседу, от которой они отписались.
При выборе пункта «Подписаться» запускаются два одновременных действия: Google Messages отправляет вашему агенту ключевое слово, специфичное для страны (например, «START»), а платформа RBM отправляет событие SUBSCRIBE на ваш веб-перехватчик.
Конкретное ключевое слово определяется двухбуквенным кодом страны, указанным в номере телефона пользователя. В следующей таблице перечислены ключевые слова для каждой поддерживаемой страны.
Страна (код страны) Подписаться на ключевое слово США (US), Индия (IN), Великобритания (GB), Германия (DE) НАЧИНАТЬ Испания (ES), Мексика (MX) АЛЬТА Франция (FR) Демаррер Бразилия (BR) приходить
Бизнес-правила
- Как партнер RBM, управляющий этим диалогом, вы несете ответственность за выполнение запроса пользователя на повторную подписку.
- Повторная подписка распространяется на все типы сообщений, включая несущественный контент, такой как рекламные акции.
- Если пользователь отправляет сообщение вашей компании после отмены подписки, это можно считать запросом на повторную подписку.
- Если пользователь повторно подписывается вне канала обмена сообщениями (например, на вашем веб-сайте), вы как партнер RBM обязаны обновить его статус и возобновить отправку сообщений соответствующим образом.
События, генерируемые агентом
Ваш агент отправляет события, имитируя человеческое взаимодействие и давая пользователю понять, что агент отвечает на его сообщения. Для пользователей события отображаются в виде уведомлений в их чатах.
Параметры форматирования и значений см. в phones.agentEvents
.
Агент отправляет событие READ
Для пользователей это событие отображается как подтверждение прочтения конкретного сообщения. Оно информирует пользователя о том, что платформа RBM доставила его сообщение и агент его обрабатывает.
Следующий код отправляет событие READ
для сообщения с соответствующим messageId
.
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentEvents?eventId=EVENT_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d "{ 'eventType': 'READ', 'messageId': 'MESSAGE_ID' }"
Node.js
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); // Send the device an event to indicate that messageId has been read rbmApiHelper.sendReadMessage('+12223334444', messageId);
Ява
import com.google.rbm.RbmApiHelper; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); // Send the device an event to indicate that messageId has been read rbmApiHelper.sendReadMessage(messageId, "+12223334444");
Питон
# Reference to RBM Python client helper and messaging object structure from rcs_business_messaging import rbm_service # Send the device an event to indicate that message_id was read rbm_service.send_read_event('+12223334444', message_id)
С#
using RCSBusinessMessaging; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation, projectId); // Send the device an event to indicate that messageId has been read rbmApiHelper.SendReadMessage(messageId, "+12223334444");
Агент отправляет событие IS_TYPING
Для пользователей это событие отображается как индикатор набора текста и информирует их о том, что ваш агент пишет сообщение. Индикатор набора текста сгорает через короткое время (примерно через 20 секунд) или при получении устройством пользователя нового сообщения от вашего агента. Ваш агент может отправлять несколько событий IS_TYPING
для сброса таймера истечения срока действия индикатора набора текста.
Следующий код отправляет событие IS_TYPING
.
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentEvents?eventId=EVENT_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d "{ 'eventType': 'IS_TYPING', }"
Node.js
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); // Send the device an event to indicate that the agent is typing rbmApiHelper.sendIsTypingMessage('+12223334444', function() { console.log('Typing event sent!'); });
Ява
import com.google.rbm.RbmApiHelper; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); // Send the device an event to indicate that the agent is typing rbmApiHelper.sendIsTypingMessage("+12223334444");
Питон
# Reference to RBM Python client helper and messaging object structure from rcs_business_messaging import rbm_service # Send the device an event to indicate that the agent is typing rbm_service.send_is_typing_event('+12223334444')
С#
using RCSBusinessMessaging; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation, projectId); // Send the device an event to indicate that the agent is typing rbmApiHelper.SendIsTypingMessage(messageId, "+12223334444");