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

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

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

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

Обрабатывать входящие сообщения

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

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

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

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

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

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

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

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

Если пользователь отправляет текстовое сообщение, ваш агент может проанализировать ответ на предмет поддерживаемых ключевых слов или использовать NLU (например, 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": {
    "category": "IMAGE",
    "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"
}