Получать сообщения

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

Пользователь отправляет сообщение агенту

Пользователи могут отправлять любые тексты, местоположения и файлы, разрешенные их RCS-клиентом. Ваш агент должен обрабатывать все тексты, местоположения и файлы, которые может отправить пользователь, а также любые состояния ошибок, которые могут возникнуть из-за этих сообщений.

Обработка входящих сообщений

То, как ваш агент обрабатывает сообщения пользователей и реагирует на них, во многом зависит от вашей бизнес-логики. Однако, как правило, шаги по реагированию на сообщения пользователей одинаковы.

Шаг 1: Определите тип сообщения, отправленного пользователем.

Пользователи могут отправлять четыре типа сообщений:

  • Текстовые сообщения представляют собой ответы в свободной форме.
  • Сообщения с предложениями включают в себя данные обратной связи и текст предлагаемого действия или предлагаемого ответа, нажатого пользователем.
  • Сообщения о местоположении включают значения широты и долготы.

  • Файловые сообщения включают URI файла и связанные с ним данные.

Шаг 2: Обработка содержимого сообщения

Содержание сообщения пользователя должно определять логику вашего агента и его последующий ответ в разговоре.

Самый простой способ определить намерение пользователя — использовать данные обратной связи из предлагаемого ответа или действия. Независимо от текста, связанного с предложением, данные обратной связи машиночитаемы.

Если пользователь отправляет текстовое сообщение, ваш агент может проанализировать ответ на предмет поддерживаемых ключевых слов или использовать NLU (например, Dialogflow ) для обработки сообщения пользователя и определения пути дальнейшей обработки.

Сообщения о местоположении и файлах не содержат текстовых или постбэк-данных, поэтому перед ответом ваш агент должен учесть контекст разговора и последние сообщения.

Если ваш агент не знает, как ответить на сообщение пользователя, он должен ответить сообщением об ошибке и попытаться продолжить разговор, запросив у пользователя дополнительную информацию, запросив ввод данных другим способом или представив предлагаемые ответы и действия, на которые агент знает, как реагировать.

Шаг 3: Реализуйте бизнес-логику взаимодействия

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

Шаг 4: Ответьте пользователю

После того, как агент выполнит бизнес-логику взаимодействия, он отправит еще одно сообщение и продолжит диалог с пользователем.

Примеры

Следующий код показывает, как ваш агент получает сообщения. Информацию о форматировании и значениях см. в разделе UserMessage .

Примечание : Для трафика из США сообщения пользователей и нажатия на предлагаемые действия классифицируются в соответствии с моделью биллинга США. При получении этих событий ваш агент добавляет поле richMessageClassification , которое определяет тип события, подлежащего тарификации. Подробную классификацию см. в руководстве по модели биллинга США .

Агент получает текст

{
  "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"
    }
  }
}

Обработка входящих событий

Ваш агент получает уведомления, когда отправленные им пользователям сообщения доставляются и прочитываются.

Следующий код показывает, как ваш агент получает сообщения. Информацию о форматировании и значениях см. в разделе UserEvent .

Сообщение доставлено пользователю

{
  "agentId": "AGENT_ID",
  "senderPhoneNumber": "PHONE_NUMBER",
  "messageId": "MESSAGE_ID",
  "eventId": "EVENT_ID",
  "sendTime": "2018-12-31T15:01:23.045123456Z",
  "eventType": "DELIVERED"
}

Сообщение прочитано пользователем

{
  "agentId": "AGENT_ID",
  "senderPhoneNumber": "PHONE_NUMBER",
  "messageId": "MESSAGE_ID",
  "eventId": "EVENT_ID",
  "sendTime": "2018-12-31T15:01:23.045123456Z",
  "eventType": "READ"
}

Пользователь печатает

{
  "senderPhoneNumber": "PHONE_NUMBER",
  "eventType": "IS_TYPING",
  "eventId": "EVENT_ID",
  "sendTime": "2018-12-31T15:01:23.045123456Z",
  "agentId": "AGENT_ID"
}