Внешнее событие

Внешнее событие пригодится, если вам нужно запустить бота из какой-то внешней системы или программы, например CRM.

Во Внешнем событии вы отправляете 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}}

В начало ↑