EnotPRO Logo EnotPRO

HTTP-запросы (SendRequest)

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

В отличие от Webhook, где внешний сервис сам стучится к боту, здесь бот инициирует соединение.

Типичные сценарии использования

Сценарий Пример
Получение данных Курс валют, погода, новости
Отправка данных Регистрация пользователя в CRM, создание заказа
Проверка статуса Статус платежа, доставки
Интеграция Отправка уведомлений в Slack, внешние системы

Как это работает

Ваш бот (EnotPro)
         │
         │ 1. Бот инициирует запрос (команда, расписание, общий триггер)
         ↓
    [HTTP-запрос]
         │
         │ 2. Запрос уходит к внешнему API
         ↓
    Внешний сервис (API погоды, CRM, платёжная система)
         │
         │ 3. Сервис обрабатывает запрос
         ↓
    [HTTP-ответ]
         │
         │ 4. Бот получает ответ
         ↓
┌─────────────────────────────────────────────┐
│ Триггер FINISH (завершение)                 │
│ - обработать ответ                          │
│ - сохранить данные в переменные             │
│ - отправить сообщение пользователю          │
└─────────────────────────────────────────────┘

Отличие HTTP-запроса от Webhook

Характеристика HTTP-запрос (SendRequest) Webhook
Кто инициирует Ваш бот Внешний сервис
Направление Бот → внешний сервис Внешний сервис → бот
Количество триггеров 2 (START, FINISH) 3 (MAIN, START, FINISH)
Типичное использование Получить курс валют, погоду Принять уведомление о платеже

Создание HTTP-запроса

Шаг 1. Перейдите в раздел

/adm → Web → HTTP-запросы

Шаг 2. Нажмите «Добавить»

Дайте запросу техническое название (например, get_weather).

Совет: Название должно отражать суть запроса. Это поможет ориентироваться, когда запросов станет много.

Шаг 3. Настройте URL

Параметр Описание Пример
URL Адрес внешнего API https://api.weather.com/v1/current.json

⚠️ Ограничение: Максимальная длина URL — 2048 символов. Полезно: Поддерживаются макросы и переменные

Шаг 4. Выберите метод

Метод Назначение
GET Получение данных
POST Создание/отправка данных
PUT Полное обновление ресурса
DELETE Удаление ресурса
PATCH Частичное обновление
HEAD Получение только заголовков
OPTIONS Запрос поддерживаемых методов (CORS)

💡 Совет: Для 90% сценариев достаточно GET (получение) и POST (отправка).

Шаг 5. Настройте параметры (Query)

Параметры, которые добавляются в URL после знака ?.

Пример URL с параметрами:

https://api.weather.com/v1/current.json?city=Moscow&units=metric

В интерфейсе:

Ключ Значение
city Moscow
units metric

💡 Поддержка переменных: В значениях можно использовать ${...} и !{...}.

Шаг 6. Настройте заголовки (Headers)

Ключ Значение Когда нужно
Authorization Bearer ${localVar.token} API требует токен
Content-Type application/json При отправке JSON в Body
X-API-Key ваш_ключ API требует ключ в заголовке

⚠️ Ограничения:

  • Ключ заголовка — до 256 символов
  • Значение заголовка — до 4096 символов

Шаг 7. Настройте тело запроса (Body)

Доступно для методов POST, PUT, PATCH.

Режим Описание Когда использовать
Off Тело не отправляется GET-запросы
Template Текст (JSON, XML, обычный текст) Статические или генерируемые данные
Path Путь к файлу на сервере Отправка файлов или очень больших данных

Шаг 8. Автоматический Content-Type

Если вы не указали заголовок Content-Type вручную, Платформа подставит его автоматически.

Триггеры HTTP-запроса

У каждого HTTP-запроса есть два встроенных триггера.

Триггер Когда срабатывает Основное назначение
1 START (подготовка) Перед отправкой запроса Подготовить данные, заголовки, тело
2 FINISH (завершение) После получения ответа Обработать ответ, сохранить данные

Что можно делать в триггере START

Действие Пример
Загрузить переменные GetVarCloud (person, token)
Подготовить тело запроса SetVarLocal (body, {"user": "${user.id}"})
Вычислить значение !{time}

Что можно делать в триггере FINISH

Действие Пример
Проверить статус ответа Условие: ${web.response.status} = 200
Сохранить данные SetVarCloud (person, weather_data, ${web.response.body})
Отправить сообщение SendMessage с данными из ответа
Запустить отложенное действие StartTask
Записать в лог Log

Переменные ответа

После выполнения SendRequest в триггере FINISH становятся доступны следующие переменные:

Переменная Описание Пример
${web.response.status} HTTP-код ответа 200
${web.response.status_text} Текстовое описание кода OK
${web.response.headers} Заголовки ответа (объект) {"content-type": "application/json"}
${web.response.body} Тело ответа (распарсенный JSON) {"temp": 22.5}
${web.response.body.raw} Тело ответа (сырая строка) "{"temp": 22.5}"
${web.response.duration} Время выполнения запроса (мс) 345
${web.error} Текст ошибки (если есть) timeout

Ограничения и рекомендации

Таблица ограничений
Параметр Максимальное значение
URL 2048 символов
Ключ заголовка 256 символов
Значение заголовка 4096 символов
Тело запроса 1 МБ
Время ожидания ответа (таймаут) 30 секунд

Рекомендации

Что делать Чего избегать
Кешировать часто повторяющиеся запросы (сохранять результат в облачную переменную) Делать одинаковые запросы на каждое сообщение пользователя
Использовать триггер START для подготовки данных Обрабатывать ответ в том же триггере, где вызывается SendRequest (ответа ещё нет)
Всегда проверять ${web.response.status} перед обработкой данных Считать, что запрос всегда успешен
Выносить длительные операции в отложенные действия (если ответ не нужен мгновенно) Ждать ответа 30 секунд в триггере, который пользователь ждёт
Логировать ошибки в триггере FINISH Игнорировать ошибки и продолжать выполнение
© 2025 EnotPRO. Все права защищены.