Для отправки сообщений через API Sherlock Platform сначала надо авторизоваться.
Далее необходимо вызвать метод POST контроллера Message https://<sherlock_url>/API/V2/Message. Полученный токен надо передать в заголовке как Bearer Token.
Альтернативно для чата на сайт рекомендуется вызывать метод POST https://<sherlock_url>/EntryPoint/EntryMessage/ExternalChat/{UserProfileId}. Данный вариант предпочтительнее, так как лучше работает под высокой нагрузкой
В теле запроса необходимо указать параметры сообщения в формате JSON. Пример сообщения приведен ниже:
{ "clientId": "CE342419-3D08-4D16-B955-8C72441607BF", "requestId": "E13F22E6-0E15-4E04-8294-C34C9ECC0C64", "text": "Тестовое сообщение", "messageDirectionId": 2, "messageCategoryId": 1, "isImportant": false, "previousMessageDelay": 0, "previousMessageDelayType": 2, "isBotMessage": true, "replyToMessageId":"30A2F42B-5D3E-4470-A5FF-00005A198398" }
В данном запросе необходимо указывать:
ClientID - идентификатор клиента в Sherlock. Если передан, то requestId можно не передавать.
RequestId - идентификатор диалога в Sherlock. Если передан, то ClientId не нужен.
Text - произвольный текст сообщения
MessageDirectionId - всегда 2 для исходящего сообщения
MessageCategoryId - 1 для текстового сообщения, 2 - для заметки (не отправляется клиенту, а просто отражается оператору в интерфейсе), 5 - для рассылки (рекомендуется использовать для уведомлений, когда не требуется активация логики очередей)
isImportant - всегда false
previousMessageDelay - всегда 0
previousMessageDelayType - всегда 2
isBotMessage - всегда true
replyToMessageId - идентификатор сообщения, если данное сообщение отправляется в ответ на указанное
Для отправки в чат кнопок необходимо дополнительно передавать текстовый реквизит ButtonsText, содержащий json с описанием требуемой клавиатуры. Формат json для ButtonsText следующий:
{"Buttons":[ {"Title":"💳 Оплатить", "Value":"PaymentStart", "Type":"keyboard", "Index":1, "IsNewLine":true, "ClickValue":"", "TemplatesList":"", "ButtonColor":"", "ButtonVKCategory":"", "ImageUrl":"", "SliderHeight":1 } ]}
Для описания кнопки используются следующие реквизиты:
Title - заголовок кнопки
Value - значение кнопки. Передается в чат текстом при нажатии кнопки. Примечание: для перехода по кнопке к конкретному сценарию необходимо в данном реквизите указать код сценария
Type - тип кнопки. Возможные значения: reply - кнопка в тексте; keyboard - клавиатурная кнопка под полем ввода; openUrl - кнопка, открывающая ссылку; request_contact - кнопка запроса телефона; request_location - кнопка запроса локации. Примечание: часть каналов могут не поддерживать определенные типы кнопок.
Index - порядковый номер кнопки
IsNewLine - если true, то кнопка отражается с новой строки
ClickValue - дополнительное значение, сохраняемое в контексте бота при нажатии кнопки под именем ChatButtons_Value
TemplatesList - список возможных текстовых строк, которые будут определяться ботом как нажатие на кнопку при отправке пользователем. Формат строки: ["начать", "привет*"], где * заменяет любую последовательность символов
ButtonColor - цвет кнопки в формате rgb (#112233). Применяется только для части каналов, где поддерживается цвет кнопки (сейчас - Viber)
ButtonVKCategory - категория кнопки в соответствии с документацией ВКонтакте
ImageUrl - иконка для кнопки. Применяется только для части каналов, где поддерживается цвет кнопки (сейчас - Viber)
SliderHeight - высота кнопки. Применяется только для части каналов, где поддерживается цвет кнопки (сейчас - Viber)
{ "clientId": "CE342419-3D08-4D16-B955-8C72441607BF", "requestId": "E13F22E6-0E15-4E04-8294-C34C9ECC0C64", "text": "Тестовое сообщение", "messageDirectionId": 2, "messageCategoryId": 1, "isImportant": false, "previousMessageDelay": 0, "previousMessageDelayType": 2, "isBotMessage": true, "replyToMessageId":"30A2F42B-5D3E-4470-A5FF-00005A198398", "buttonsText":"{\"Buttons\":[{\"Title\":\"💳Оплатить\",\"Value\":\"PaymentStart\",\"Type\":\"keyboard\",\"Index\":1,\"IsNewLine\":true,\"ClickValue\":\"\",\"TemplatesList\":\"\",\"ButtonColor\":\"\",\"ButtonVKCategory\":\"\",\"ImageUrl\":\"\",\"SliderHeight\":1}]}" }
Альтернативно можно отправлять кнопки прямо в json формате:
{ "clientId": "CE342419-3D08-4D16-B955-8C72441607BF", "requestId": "E13F22E6-0E15-4E04-8294-C34C9ECC0C64", "text": "Тестовое сообщение", "messageDirectionId": 2, "messageCategoryId": 1, "isImportant": false, "previousMessageDelay": 0, "previousMessageDelayType": 2, "isBotMessage": true, "replyToMessageId":"30A2F42B-5D3E-4470-A5FF-00005A198398", "Buttons":[ {"Title":"💳 Оплатить1", "Value":"PaymentStart", "Type":"keyboard", "Index":1, "IsNewLine":true, "ClickValue":"", "TemplatesList":"", "ButtonColor":"", "ButtonVKCategory":"", "ImageUrl":"", "SliderHeight":1 } ]}
Логика обработки кнопок реализована следующим образом:
Платформа проверяет входящее сообщение по логике в зависимости от канала. Если входящее сообщение - это кнопка, то для сообщение значение ClickValue кнопки сохраняется в ButtonsText сообщения. Сами сообщения можно получить на webhook или прочитать через API
Идет обработка бот платформой - если в значении Value кнопки указан код сценария, то выполняется соответствующий сценарий
Для отправки вложений необходимо передавать реквизит FileLinks с коллекцией файлов, где в массиве указываются данные файла, возвращаемые при его загрузке на сервер Sherlock.
"fileLinks": [ { "id": "bb9beb09-533c-4af6-8487-5d515c0ea4cd", "fileId": "24bbb7e4-09be-4b61-9db7-8f46136f6c5e", "objectId": "385172fe-92c8-4bcc-97c1-719560d31f1d", "systemDictionaryId": "35df8dfe-d88a-4992-a4d4-54040166ca25", "fileName": "Smile.jpg", "physicalName": "b6d4303e-6e54-44ea-9066-c8a69e25bc55.jpg", "extension": ".jpg", "url": "https://<sherlock_url>/API/v2/Files/bb9beb09-533c-4af6-8487-5d515c0ea4cd/Smile.jpg/Attachment", "attachmentTypeId": 1 } ]
Файлы предварительно должны быть загружены методом POST контроллера File https://<sherlock_url>/API/v2/Files?objectId=<messageId>&systemDictionaryId=35df8dfe-d88a-4992-a4d4-54040166ca25&fileFolderType=1, где
objectId - идентификатор сообщения
systemDictionaryId - идентификатор типа объекта, для сообщений всегда = 35df8dfe-d88a-4992-a4d4-54040166ca25
fileFolderType - 1 для вложений к сообщениям
Дополнительно в json сообщения может включаться реквизит ExtraText, формат которого зависит от канала:
Facebook - позволяет установить тег сообщения, если указан. Например: {"tag":"POST_PURCHASE_UPDATE"). Список возможных тегов описан в статье Теги сообщений