Внешнее событие
Внешнее событие пригодится, если вам нужно запустить бота из какой-то внешней системы или программы, например CRM.
- Как отправить запрос на Внешнее событие →
- Примеры запросов на Внешнее событие →
- Описание полей запроса Внешнего события →
- POST по bm_id →
- Описание значений запроса по bm_id →
- Взаимодействие Внешнего события и чата →
- Как выводить отдельные элементы из ответа с сервера →
Во Внешнем событии вы отправляете HTTP POST запрос в Ботмаму, чтобы запустить определенный экран бота для одного, нескольких или всех пользователей вашего бота. Еще вы можете передать в запросе переменные, которые будут храниться в объекте last_request.
Объем массива с объектами для получения из внешнего события может быть не более 1 Мб
Чтобы создать Внешнее событие, перейдите в Настройки ➝ События и нажмите кнопку Добавить событие. Введите Имя события и выберите Тип — Внешнее событие.
В Свойствах вы можете выбрать Тип Внешнего события — Сообщение или Экран, которые будут отправлены пользователю, когда это cобытие случится.
Чтобы сгенерировалась ссылка, нажмите кнопку сохранения в правом нижнем углу.
Для вызова события нужно отправить запрос на сгенерированный URL.
Чтобы удалить событие, нажмите на кнопку Удалить.
Как отправить запрос на Внешнее событие
Вам нужно из вашей программы или системы сделать 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": "{{JSONstringify 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}}