Внешнее событие
Внешнее событие пригодится, если вам нужно запустить бота из какой-то внешней системы или программы, например 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 (обязательно одно значение, 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}}