Шаг HTTP-запрос позволяет боту обмениваться данными со сторонними системами и сервисами, а также сохранять полученные данные в переменные.
TTP-запросы позволят покрывать множество задач:
Расширение возможностей бота. HTTP-запрос позволяет вылезти наружу и достучаться до любого сервиса: базы данных, CRM, платёжки, погоды — чего угодно.
Интеграции. Можно подключить бота к корпоративным системам (например, посмотреть остатки товаров со склада или статус заявки).
Динамические ответы. Вместо статичных кнопок и одинаковых фраз бот сможет выдавать актуальные данные: курс валюты прямо сейчас, прогноз погоды, персональные предложения для клиента.
Никаких костылей. С запросами вы просто "дёргаете" нужный API и всё готово.
Добавление блока
Чтобы добавить блок, выберите HTTP-запрос списке шагов:

Выберите один из методов запроса:
POST;
GET;
DELETE;
PUT.
Укажите URL, на который будет отправляться запрос. В URL также можно использовать временные переменные.
URL запроса
По указанному URL бот будет получать либо отправлять данные.
Вы можете добавлять переменные в URL запроса. В переменную можно записать весь ответ от внешнего сервиса, для этого необходимо указать "*" в поле "значение".
Если внешний сервис отвечает JSON объектом, то можно указать поле, которое необходимо записать. Например, ответ содержит объект "data" с вложенным объектом "values" — чтобы его записать, необходимо в поле значение задать "data.values". Значение должно быть строкой.
Заголовки запроса
В этой вкладке вы можете добавить заголовки запроса, заполнив поля Название и Значение.
Тело запроса
Для всех методов вы можете передать тело запроса.
Тело запроса заполняется на вкладке Тело запроса. Здесь можно указывать данные в любом формате (JSON, XML, произвольный текст), а также использовать теги из Диспетчера.
Прямо в конструкторе вы можете выполнить тестовый запрос и просмотреть результат в логах:
Обработка ответа
В ответ на запрос сервер возвращает данные, которые можно обработать и перейти к указанному шагу как в случае успешного запроса, так и в случае ошибки:
Пример
В качестве примера разберём ситуацию, когда клиент условного интернет-провайдера хочет узнать остаток трафика на своём лицевом счёте. В этом случае бот должен запросить у клиента номер его лицевого счёта (ЛС), отправить http-запрос на сервер, получить информацию сколько трафика осталось на конкретному счету и сообщить эту информацию клиенту:
Шаг 1: создаём набор кнопок для нужного канала связи и предоставляем пользователю выбрать желаемое действие. В нашем примере он нажимает на кнопку "Остаток трафика" чтобы узнать свой баланс:
Шаг 2: добавляем шаг с запросом ввода данных, где клиент вводит номер своего счёта. Сам номер ограничиваем строгим форматом при помощи регулярного выражения: ^\d{9}$
Это поможет ограничить ввод только 9 цифр, ни больше и ни меньше, и никаких букв — предполагаем что все наши счета состоят из одного шаблона.
Также создаем временную переменную agreement_number — в ней будет храниться значение, которое введёт пользователь:
Шаг 3: отправляем http-запрос на сервер с номером лицевого счёта клиента, проверяем баланс и возвращаем информацию клиенту.
Для примера воспользуемся сервисом для обработки HTTP-запросов httpbin — он обработает наш запрос и вернёт ответ в json формате. На практике там будет находиться различная информация, которую мы сможем предоставить клиенту. В частности, остаток баланса на его счету:
Используем метод POST и отправляем запрос на сервер. В теле запроса передаём переменную agreement_number, а в качестве значения записываем временную переменную agreement_number из предыдущего шага, где пользователь передавал номер ЛС. Временные переменные можно вызывать при помощи тега {temporary_field:variable}.
В нашем случае это будет: {temporary_field:agreement_number}
Теперь давайте выполним запрос и посмотрим логи с результатом:
Ответ, который возвращает сервер, можно обработать и использовать для отправки данных клиенту, для этого нужно поместить информацию в переменные. Если вы хотите записать весь ответ, то в значении переменной укажите *
В нашем примере ответ вернулся JSON объектом — клиенту информация в таком виде будет не очень понятна, и к тому же нас интересуют только некоторые данные. Например, если ответ содержит объект "data" с вложенным объектом "values", чтобы его запись необходимо в поле значение задать "data.values". Значение должно быть строкой.
Если мы хотим в ответном сообщении пользователю сообщить сколько у него осталось трафика и на каком конкретном ЛС, то нам потребуются две переменные: number (подставляется номер ЛС) и balance.
Смотрим ещё раз в логи результатов, и видим там объект form с вложенным объектом agreement_number, поэтому в number передаём значение form.agreement_number:
По-хорошему, в логах должен быть ещё один объект balance, самый важный для нашего примера — это текущий баланс пользователя. Но это тестовый запрос, этого объекта нет, поэтому остаётся смоделировать ситуацию, когда нам ещё возвращается и баланс. Его теоретически можно расположить в переменную balance со значением form.balance (в зависимости от JSON):
Внизу настроек осталось указать, что должно происходить в случае успешного запроса и в случае ошибки (HTTP код не равен 200):
Шаг 4: если запрос успешен, то возвращаем пользователю ответ с балансом по его лицевому счёту при помощи временных переменных {temporary_field:balance} и {temporary_field:number} и останавливаем работу бота: