API-запросы

Что такое блок «API-запрос»

Блок «API-запрос» позволяет боту обращаться к любому внешнему HTTP-сервису — вашему бэкенду, CRM, базе данных через REST API или любому другому сервису с HTTP-интерфейсом. Ответ автоматически парсится и сохраняется в переменные.

В отличие от Интеграций (которые работают с готовыми сервисами по шаблону), блок API-запроса — универсальный и полностью настраивается вручную.

Настройка запроса

Поле Описание
Метод GET, POST, PUT, PATCH, DELETE
URL Адрес эндпоинта; поддерживает {{переменные}}
Заголовки (Headers) Пары ключ-значение; например Authorization: Bearer {{token}}
Тело запроса (Body) JSON или form-data; поддерживает {{переменные}}
Переменная результата Имя переменной для сохранения ответа

Пример URL с переменной

https://api.example.com/users/{{user_id}}/orders

Пример тела POST-запроса

{
  "name": "{{user_name}}",
  "email": "{{user_email}}",
  "phone": "{{phone}}"
}

Работа с ответом

Ответ API сохраняется в указанную переменную. Если ответ — JSON-объект, поля доступны через dot-notation:

{{result.status}}      → поле "status" в ответе
{{result.data.id}}     → вложенное поле data.id
{{result.items.0.name}} → первый элемент массива items

Кеширование ответов

Если ответ API не меняется часто, включите кеширование — запрос выполнится один раз, а последующие обращения будут мгновенными.

Настройка Описание
TTL Время жизни кеша: 1–60 минут или бессрочно

Кеш хранится на уровне бота. При изменении URL (в т.ч. переменных в нём) кеш не используется.

Polling-режим

Некоторые API работают асинхронно: запрос запускает задачу, а результат нужно «опрашивать» периодически. Для таких сервисов включите режим polling:

  1. Включите «Ожидать результата».
  2. Укажите поле статуса в ответе (например, status).
  3. Укажите значение готовности (например, done или completed).
  4. Бот будет повторять запрос с интервалом, пока поле не примет нужное значение.

Пример: генерация изображения через внешний API — запрос запускается, затем бот периодически проверяет статус и продолжает сценарий, когда изображение готово.

Фоновый процесс

Если обработка запроса может занять более 3 минут, включите опцию «Фоновый процесс» (доступна только при включённом polling).

⚠️ Важно: фоновый процесс является блокирующей операцией — все последующие блоки текущей команды не будут выполнены. Вместо этого настройте следующую команду, которая будет вызвана автоматически после завершения обработки.

При включении фонового процесса webhook-обработчик немедленно завершается, а опрос API выполняется в фоновой очереди задач. Схема продолжается с указанной следующей ноды, когда условие polling-а выполнено или исчерпаны попытки.

Лоадер

При включённом «Выводить лоадер» бот с самого начала пришлёт сообщение с индикатором прогресса, который будет обновляться в реальном времени:

Настройка Описание
Дизайн лоадера Стиль прогресс-бара: квадраты 🟩⬜ или кружки 🟢⚪
Текст под лоадером Подпись под прогресс-баром (по умолчанию «Обработка запроса…»)
Среднее время обработки Ожидаемое время выполнения в минутах — используется для вычисления процента прогресса

Каждый из 10 сегментов лоадера соответствует 10 % указанного времени. Например, при настройке 5 минут: через 2.5 мин будет показано 5 заполненных сегментов из 10. По завершении обработки сообщение с лоадером автоматически удаляется.

Переменные

Ответ API сохраняется в указанную переменную в обычном формате (JSON или путь к файлу). Все переменные, накопленные в схеме до момента запуска фонового процесса, сохраняются и доступны в следующей команде.

Обработка ошибок

Если запрос вернул HTTP-ошибку (4xx, 5xx) или истекло время ожидания в polling-режиме:

  • Переменная результата устанавливается в пустое значение.
  • Используйте блок «Условие» после API-запроса, чтобы проверить наличие результата и направить пользователя по нужной ветке.

Советы

  • Всегда добавляйте блок «Условие» после API-запроса для обработки случаев, когда сервер недоступен или вернул ошибку.
  • Храните токены API в переменных, а не в тексте URL — это упрощает обновление токенов.
  • Включайте кеширование для справочных данных (список категорий, курсы валют), чтобы не перегружать внешний API.