Для синхронных ответов требуется тело ответа, а также должен возвращаться статус 200 (OK); для асинхронных ответов требуется статус 202 (Accepted).
Если несколько сообщений приходят от клиента одновременно в момент вызова вебхука, edna может отправить их как отдельные сообщения или как одно, включающее в себе тексты всех сообщений. По умолчанию сообщения отправляются по отдельности. Это поведение управляется настройкой bot.message.concat.
Параметры запроса
| Параметр | Тип | Описание |
action | boolean (обязательно) | MESSAGE |
text | string (обязательно) | Сообщение клиента для обработки ботом |
clientId | string (необязательно) | Внешний ID клиента (только для авторизованных клиентов). Этот параметр устарел, вместо него используйте threadsClientId. |
threadsClientId | Long (необязательно) | Внутренний ID клиента (подходит как для авторизованных, так и для неавторизованных клиентов) |
sessionId | string (необязательно) | Внутренний ID треда |
questionId | number (необязательно) | Внутренний ID сообщения клиента в edna |
questionIndex | number (необязательно) | Индекс сообщения клиента в треде |
channelInfo | object (обязательно) | Информация о канале, в котором получено сообщение |
channelType | string | Тип канала (WEB, MOBILE, EMAIL, VIBER, TELEGRAM, VIBERPA, FACEBOOK, VKONTAKTE, YANDEX, WHATSAPP, APPLE_BUSINESS_CHAT) |
authorized | boolean | true – авторизован, false – не авторизован |
platform | string (необязательно) | Только для типа канала (channelType) MOBILE:• iOS • Android |
clientData | dictionary (необязательно) | Данные клиента (подробнее в статье Кастомизация данных клиента (clientData) в содержимом вебхука). |
segmentationInfo | map<String, String> | Дополнительные параметры для изменения сегментации (используется как в пользовательских, так и в преднастроенных сегментах). Параметр сегментации personal_manager доступен “из коробки”. Если в этом параметре передан логин агента, а маршрут для сегмента с этим параметром настроен в системе, треды клиентов распределяются по соответствующему маршруту персональным менеджерам (агентам). |
receivedAt | string (обязательно) | Время получения сообщения, дата в формате UTC: yyyy-MM-dd’T’HH:mm:ss.SSS’Z’ |
attachments | array of object (необязательно) | Поля: • url – URL файла, строка до 4000 символов• name – Имя файла, строка до 1000 символов• type – MIME-тип файла, строка до 256 символов• size – Размер файла в байтах, целое число |
sender | string (обязательно) | Информация об отправителе, всегда ThreadsAPI |
settings | object (необязательно) | Дополнительные настройки сообщения |
settings.masked | boolean (необязательно) | Параметр, который указывает, замаскированы ли цифры в связанном сообщении клиента (true – замаскированы, false – не замаскированы). |
metaData | object (необязательно) | Отправляется боту при включенной функциональности распознавания голосовых сообщений |
metaData.speechText | boolean | Распознанный текст голосового сообщения |
metaData.score | integer | Качество распознавания (число от 0 до 100) |
metaData.resultStatus | string | Статус распознавания. Допустимые значения: • processing• success• noInput • maxSpeech • noMatch• error |
payload | string (необязательно) | Код кнопки, которую нажал клиент |
HTTP запрос
POST <url for webhook message> HTTP/1.1
Content-Type: application/json
{
"action":"MESSAGE",
"threadsClientId":1,
"sessionId":"1",
"questionId":43,
"questionIndex":null,
"receivedAt":"2018-11-13T13:13:11.876Z",
"text":"Message",
"channelInfo":{
"channelType":"MOBILE",
"authorized":true
},
"platform":"Android",
"attachments":[
{
"url":"hhtp://...",
"name":"test.jpg",
"type":"image/jpeg",
"size":256
}
],
"clientData":{
"phone":"79000000000"
},
"sender":"ThreadsAPI"
}
Пример успешного HTTP ответа
Для синхронных ответов ожидается текст сообщения и статус 200 (OK); для асинхронных ответов ожидается статус 202 (Accepted).
{
"action":"MESSAGE",
"threadsClientId":1,
"sessionId":"1",
"questionId":43,
"questionIndex":null,
"receivedAt":"2018-11-13T13:13:11.756Z",
"text":"Message",
"segmentationInfo": {
"key":"value"
},
"attachments":[
{
"url":"https://...",
"name":"test.jpg",
"type":"image/jpeg",
"size":256
}
],
"sender":"ThreadsAPI",
"settings" : {
"masked" : true
}
}