Внешнее событие пригодится, если вам нужно запустить бота из какой-то внешней системы или программы, например CRM.
Во Внешнем событии вы отправляете 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.
Выбирать пользователей для события можно не только по идентификатору от платформы, но и по идентификатору состояния клиента в Ботмаме.
Получить его можно несколькими способами:
Зайдите в конструкторе в раздел диалоги, выберите нужного пользователя и кликните на адресную строку браузера. Ваш адрес будет похожим на такой: a href="https://app.botmother.com/bot/ffffffffffffffffffff...aaaaaaaaaaaaaaaaaaaaaaaa, то что у вас будет вместо aaaaaaaaaaaaaaaaaaaaaaaa — это bm_id пользователя.
Собранные bm_id нужно отправлять в массиве users_bm.
Пример тела запроса:
{ "users_bm": [ "5c517b7773515eaha3078e2f" ], "data": {} }
Значение 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}}