Внешнее событие
Внешнее событие пригодится, если вам нужно запустить бота из какой-то внешней системы или программы, например CRM.
- Как отправить запрос на Внешнее событие →
- Примеры запросов на Внешнее событие →
- Описание полей запроса Внешнего события →
- POST по bm_id →
- Как отправить рассылку Внешним событием по ярлыкам →
- Описание значений запроса по bm_id →
- Взаимодействие Внешнего события и чата →
- Как выводить отдельные элементы из ответа с сервера →
Во Внешнем событии вы отправляете HTTP POST запрос в Ботмаму, чтобы запустить определенный экран бота для одного, нескольких или всех пользователей вашего бота. Еще вы можете передать в запросе переменные, которые будут храниться в объекте last_request.
Объем массива с объектами для получения из внешнего события может быть не более 1 Мб
Чтобы создать Внешнее событие, перейдите в Настройки ➝ События и нажмите кнопку Добавить событие. Введите Имя события и выберите Тип — Внешнее событие.
В Свойствах вы можете выбрать Тип Внешнего события — Сообщение или Экран, которые будут отправлены пользователю, когда это cобытие случится.
Чтобы сгенерировалась ссылка, нажмите кнопку сохранения в правом нижнем углу.
Для вызова события нужно отправить запрос на сгенерированный URL. Другими словами этот URL можно назвать входящий вебхук или webhook.
Перемещать событие можно стрелками вверх и вниз.
Чтобы удалить событие, нажмите на кнопку Удалить.
Как отправить запрос на Внешнее событие
Вам нужно из вашей программы или системы сделать POST запрос на выданный событием URL.
Нужно убедиться, что у запроса установлен заголовок Content-Type: application/json
Тело запроса должно быть в формате JSON.
Например, такой запрос запустит выполнение бота для пользователя c platform_id = 123456 внутри платформы Telegram в вашем боте:
{
"platform": "tg",
"users": [ "123456" ],
"data": {}
}
Или такой запустит выполнение бота для всех пользователей всех платформ вашего бота:
{
"platform": "any",
"users": "everyone",
"data": {}
}
Если массив users пустой, то событие уйдет всем пользователям указанной платформы, аналогично как если бы там было записано everyone.
Примеры запросов на Внешнее событие
Так можно отправить переменные в Телеграм. В примере отправим order и phone, но вы можете заменить их на свои переменные:
{
"platform": "tg",
"users": ["123456789"],
"data": {
"order": "{{order}}",
"phone": "{{phone}}"
}
}
Так отправится текст от одного юзера другому в Телеграм. Заранее сохраним id получателя в переменную userID:
{
"platform": "tg",
"users": "{{userID}}",
"data": {
"text": "{{text}}"
}
}
Таким образом отправляем массив или объект:
{
"platform": "tg",
"users": ["123456789"],
"data": {
"information": "{{stringify information}}"
}
}
Правильность синтаксиса можно проверить тут: https://jsonlint.com/
Как отправить рассылку Внешним событием по ярлыкам
Вы можете отправить пользователям рассылку по ярлыкам с помощью внешнего события. Тело для такого запроса:
{
"platform": "tg",
"tags": [ "тег1" ],
"data": {}
}
Тело запроса с исключающим ярлыком:
{
"platform": "tg",
"tags": [ "тег1" ],
"exclusiveTags": [ "тег2" ],
"data": {}
}
Описание полей запроса Внешнего события
Значения platform (обязательно одно значение, any— все) — tg, fb, viber, vk, any.
Значение users — массив platform_id или строка everyone.
Значение data — любой JSON, который запишется в боте в объект last_request.
POST по bm_id
Выбирать пользователей для события можно не только по идентификатору от платформы, но и по идентификатору клиента в Ботмаме.
Получить его можно несколькими способами:
- из переменной this_user.bm_id внутри бота;
- из адресной строки конструктора
Зайдите в конструкторе в раздел диалоги, выберите нужного пользователя и кликните на адресную строку браузера. Ваш адрес будет похожим на такой: a href="https://app.botmother.com/bot/ffffffffffffffffffff...aaaaaaaaaaaaaaaaaaaaaaaa, то что у вас будет вместо aaaaaaaaaaaaaaaaaaaaaaaa — это bm_id пользователя.
Собранные bm_id нужно отправлять в массиве users_bm.
Пример тела запроса:
{
"users_bm": [ "5c517b7773515eaha3078e2f" ],
"data": {}
}
Описание значений запроса по bm_id
Значение users_bm — массив из bm_id.
Значение data — любой JSON, который запишется в боте в объект last_request.
Взаимодействие Внешнего события и чата
При отправке Внешнего события открытые чаты с оператором по умолчанию остаются открытыми. Если нужно, чтобы Внешнее событие закрывало открытые чаты, добавьте в тело запроса параметр stopDialog: true
{
"platform": "any",
"users": "everyone",
"stopDialog": true,
"data": {}
}
Как выводить отдельные элементы из ответа с сервера
Ответы от сервера попадают в last_request.
Например, в бот пришла информация о количестве заказов:
"last_request": {
"order": {
"laptop": "44",
"console": "24"
},
"sweater": "15"
}
}
Если нужно вывести конкретную переменную, нужно указать путь до нее.
Внутри last_request первой видим переменную order.
Переменная order содержит внутри переменные laptop и console, это можно определить по открытой в начале { и закрытой в конце } фигурной скобке:
{
"laptop": "44",
"console": "24"
}
В last_request вложена переменная order, в которую, в свою очередь, вложены laptop и console. Поэтому путь до них будет таким:
{{last_request.order.laptop}} и {{last_request.order.console}}
Переменная sweater находится после закрытой скобки, поэтому она напрямую подчиняется last_request и выводится она так:
{{last_request.sweater}}