Агенты RBM получают сообщения и события через веб-перехватчик . Когда пользователь отправляет сообщение вашему агенту, служба RBM от Google отправляет сообщение на настроенный вами веб-перехватчик. Затем ваш агент может расшифровать сообщение, обработать его и выдать ответ пользователю.

Пользователи могут отправлять любой текст, местоположение или файлы, которые разрешает их RCS-клиент. Ваш агент должен обрабатывать любой текст, местоположение или файлы, которые может отправить пользователь, а также любые ошибки, которые могут возникнуть в результате отправки этих сообщений.
Чтобы узнать, как ваш агент может обрабатывать уведомления о доставке, уведомления о прочтении и индикаторы ввода, см. раздел «События получения» .
Обработка входящих сообщений
Способ обработки сообщений от пользователей вашим агентом во многом зависит от вашей бизнес-логики. Однако, как правило, шаги по ответу на сообщение пользователя остаются неизменными.
Шаг 1: Определите тип сообщения, отправленного пользователем.
Пользователи могут отправлять четыре типа сообщений:
- Текстовые сообщения представляют собой ответы в свободной форме.
- Сообщения с подсказками содержат данные обратной связи и текст предлагаемого действия или предлагаемого ответа, на который пользователь нажал.
В сообщениях о местоположении указываются значения широты и долготы.
Сообщения, содержащие информацию о файле , включают URI файла и связанные с ним данные.
Шаг 2: Обработка содержимого сообщения
Содержание сообщения пользователя должно направлять логику вашего агента и определять его дальнейший ответ в разговоре.
Самый простой способ определить намерение пользователя — это использовать данные, полученные в результате отправки запроса на сервер (postback) от предложенного ответа или действия. Независимо от текста, связанного с предложением, данные, полученные в результате отправки запроса, являются машиночитаемыми.
Если пользователь отправляет текстовое сообщение, ваш агент может проанализировать ответ на наличие поддерживаемых ключевых слов или использовать обработку естественного языка (например, Dialogflow ) для обработки сообщения пользователя и определения дальнейшего пути.
Сообщения о местоположении и файлы не содержат текстовых данных или данных обратной связи, поэтому вашему агенту следует учитывать контекст разговора и недавние сообщения, прежде чем отвечать.
Если ваш агент не знает, как ответить на сообщение пользователя, он должен вывести сообщение об ошибке и попытаться продолжить разговор, запросив у пользователя дополнительную информацию, запросив ввод другим способом или предложив варианты ответов и действий, на которые агент знает, как реагировать.
Шаг 3: Реализуйте бизнес-логику взаимодействия.
Как только ваш агент определит правильный ответ на сообщение пользователя, он соберет необходимую информацию из вашей инфраструктуры и, при необходимости, взаимодействует с другими системами для выполнения бизнес-логики взаимодействия.
Шаг 4: Ответьте пользователю
После того как агент выполнит бизнес-логику взаимодействия, он отправляет еще одно сообщение и продолжает разговор с пользователем.
Примеры
Приведенный ниже код показывает, как ваш агент получает сообщения. Информацию о форматировании и значениях см. в разделе UserMessage .
Агент получает текстовое сообщение
{
"agentId": "AGENT_ID",
"senderPhoneNumber": "PHONE_NUMBER",
"messageId": "MESSAGE_ID",
"sendTime": "2018-12-31T15:01:23.045123456Z",
"text": "Hello, world!"
}Агент получает сообщение, основанное на предложенном варианте ответа.
{
"agentId": "AGENT_ID",
"senderPhoneNumber": "PHONE_NUMBER",
"messageId": "MESSAGE_ID",
"sendTime": "2018-12-31T15:01:23.045123456Z",
"suggestionResponse": {
"postbackData": "suggestion_1",
"text": "Suggestion #1"
}
}Агент получает местоположение
{
"agentId": "AGENT_ID",
"senderPhoneNumber": "PHONE_NUMBER",
"messageId": "MESSAGE_ID",
"sendTime": "2018-12-31T15:01:23.045123456Z",
"location": {
"latitude": 37.422000,
"longitude": -122.084056
}
}Агент получает файл
{ "agentId": "AGENT_ID", "senderPhoneNumber": "PHONE_NUMBER", "messageId": "MESSAGE_ID", "sendTime": "2018-12-31T15:01:23.045123456Z", "userFile": { "thumbnail": { "mimeType": "image/jpeg", "fileSizeBytes": 1280, "fileUri": "https://storage.googleapis.com/copper_test/77ddb795-24ad-4607-96ae-b08b4d86406a/d2dcc67ab888d34ee272899c020b13402856f81597228322079eb007e8c8", "fileName": "4_animated.jpeg" }, "payload": { "mimeType": "image/gif", "fileSizeBytes": 127806, "fileUri": "https://storage.googleapis.com/copper_test/77ddb795-24ad-4607-96ae-b08b4d86406a/d2dcc67ab888d34ee272899c020b13402856f81597228322079eb007e8c9", "fileName": "4_animated.gif" } } }