Перейти к основному содержимому

Действие «HTTP-запросы»

«Обмен данными (HTTP-запросы)» — действие в сценарии действий, которое позволяет боту общаться с внешним миром: получать данные с сайтов, отправлять заявки в CRM, обновлять записи в API, принимать вебхуки от платёжных систем.

Поддерживает оба направления:

  • Исходящий запрос — бот сам обращается к внешнему сервису.
  • Входящий вебхук — внешний сервис присылает данные в бот.

Как добавить​

В сценарии действий → «Добавить действие» → «Обмен данными (HTTP-запросы)».

Добавление действия HTTP

Скриншот 1. Выбор действия.

В поле «Выберите»:

  • Отправить запрос — исходящий вызов API;
  • Ожидание данных — входящий вебхук.

Часть 1. Исходящий запрос («Отправить запрос»)​

Шаг 1. Метод запроса​

Выберите HTTP-метод:

МетодКогда использовать
GETПолучить данные (каталог, курс, статус)
POST-jsonСоздать запись, отправить JSON (CRM, формы)
POST-dataОтправить form-data (старые формы, файлы)
PUT-json / PUT-dataЗаменить существующую запись целиком
PATCH-json / PATCH-dataЧастично обновить запись
DELETEУдалить запись

Шаг 2. URL запроса​

Полный адрес: https://api.service.com/v1/leads. Можно подставить переменные: https://api.site.com/order/#{order_id}.

Шаг 3. Заголовки​

Выберите формат:

  • JSON — введите полный JSON заголовков в текстовом поле;
  • DATA — добавляйте пары «Имя/Значение» по одной (удобно для коротких настроек).

Типичные заголовки:

  • Authorization: Bearer #{api_token} — авторизация;
  • Content-Type: application/json — формат тела;
  • X-API-Key: ... — ключ API.

Настройка заголовков

Скриншот 2. Заголовки HTTP-запроса.

Шаг 4. Тело запроса (для POST/PUT/PATCH/DELETE)​

Формат тела (тот же выбор JSON / DATA):

  • JSON — произвольный JSON в одно поле. Можно подставлять переменные: {"name": "[Name]", "phone": "#{client_phone}", "amount": #{order_sum}}
  • DATA — пары ключ/значение для application/x-www-form-urlencoded.

GET-запросы тело не передают — этот раздел появится только для POST/PUT/PATCH/DELETE.

Шаг 5. Тестовая отправка​

Кнопка «Отправить запрос сейчас» — выполнит реальный вызов и покажет ответ сервера прямо в интерфейсе. Используйте для проверки настроек до подключения к боту.

Тестовая отправка

Скриншот 3. Тест запроса и отображение ответа.

Шаг 6. Сохранение ответа​

После выполнения запроса бот получает ответ. Его можно сохранить двумя способами:

Целиком (JSON-строка)​

Поле «Имя переменной» в разделе «Сохранить JSON строку ответа». В переменную попадёт весь ответ в виде JSON-строки.

Подходит для логирования: Лог HTTP: #{api_response}.

Разобрать по полям​

Раздел «Сохранить значения»:

  • Имя параметра — путь к полю в JSON;
  • Переменная — куда сохранить.

Синтаксис пути:

  • name — поле верхнего уровня;
  • user.email — вложенное поле через точку;
  • items.0.title — первый элемент массива;
  • data.results.2.id — третий элемент по индексу.

Нажмите «Сохранить пару» → пара появится в списке. Можно собрать сразу 10-15 разных полей.

Парсинг ответа

Скриншот 4. Извлечение значений из JSON-ответа.

В список​

Если ответ — массив записей (например, список товаров), его можно сохранить сразу в список: выберите список и сопоставьте поля.

Опция «Сохранить массив в одну запись» — массив уйдёт в одну ячейку, без разбиения построчно.


Часть 2. Входящий вебхук («Ожидание данных»)​

Когда нужно получать данные в бот от внешнего сервиса (платёжный шлюз, CRM, своя CRM, форма с сайта) — выберите «Ожидание данных».

Шаг 1. Получить ссылку вебхука​

Нажмите «Получить ссылку вебхука» — Квесча сгенерирует уникальный URL вида:

https://api.quescha.com/webhook/{уникальный_id}

Скопируйте его и вставьте в настройки внешнего сервиса как «webhook URL» или «callback URL».

Адрес вебхука

Скриншот 5. Ссылка вебхука для внешнего сервиса.

Шаг 2. Принять тестовый запрос​

После того как внешний сервис отправит первый запрос, нажмите «Получить последний запрос» — Квесча покажет JSON последнего полученного запроса. Это позволяет:

  • увидеть структуру данных, которые присылает сервис;
  • настроить парсинг полей.

Шаг 3. Сохранение принятых данных​

Точно так же, как для исходящего запроса:

  • «Имя переменной» — сохранить весь JSON одной строкой;
  • «Сохранить значения» — извлечь конкретные поля через точечную нотацию;
  • Сохранить в список — для массовой загрузки.

Шаг 4. Ответ внешнему сервису (опционально)​

Если внешний сервис ожидает ответа на свой запрос — присвойте значение в специальную переменную #{_response} в этом же сценарии действий. То, что в ней окажется, Квесча вернёт сервису. Сформировать ответ сервису можно с помощью действия «JS-код»

Пример: на запрос Telegram-вебхука вернуть {"ok": true}.


Часть 3. Подстановки в запросах​

В URL, заголовках и теле работают все шаблоны замен:

  • [Name], [ClientID], [Messenger], [BotID] — системные шаблоны;
  • [Answer1], [DataN] — ответы и параметры сценария;
  • #{varname} — переменные;
  • #{items|1}, #{items|last} — элементы массива;
  • {{ #{x} + #{y} }} — вычисления;
  • [CurrentDate], [CurrentTime] — текущие дата/время.

Часть 4. Архитектура​

Принцип 1. Отдельный сценарий действий на каждый внешний сервис​

Не складывайте в один сценарий «получить курс + создать лид + обновить CRM». Разбейте на три — проще отлаживать и переиспользовать.

Принцип 2. Тестируйте через «Отправить запрос сейчас»​

Не запускайте сценарий через бота, не убедившись, что запрос работает. Кнопка теста в редакторе экономит часы отладки.

Принцип 3. Обрабатывайте ошибки​

Внешний сервис может вернуть 500, 401, 429. После запроса проверяйте статус — например, парсите поле status или error ответа в переменную и сравнивайте в условиях блока.

Если запрос не удался совсем — таймаут, недоступный домен, сорванное соединение — в переменную с ответом попадает текст ошибки, а сценарий продолжает работу. Проверяйте переменную условием и ведите клиента запасным путём: «сервис временно недоступен, мы записали заявку и перезвоним».

Принцип 4. Сначала разберите по полям, потом используйте​

Не подставляйте сырой JSON #{api_response} в сообщение клиенту. Сначала разбейте на #{name}, #{price}, #{date} через «Сохранить значения».

Принцип 5. Чувствительные данные — в глобальные переменные​

API-ключи, токены — храните в глобальных переменных (например, g_api_token), а в заголовок подставляйте #{g_api_token}. При смене ключа меняете в одном месте.

Принцип 6. Долгие запросы — после отправки сообщения​

Если внешний сервис медленный (более 1-2 сек), запускайте HTTP-запрос в сценарии После отправки сообщения в бот, где сообщите об ожидании — клиент уже увидит сообщение, а ответ покажется позже.


Часть 5. Типовые сценарии​

Сценарий 1. Получение курса валюты​

  • Метод: GET
  • URL: https://api.cbr-xml-daily.ru/daily_json.js
  • Сохранить значение: Valute.USD.Value → g_usd_rate (глобальная).
  • В блоке: Курс USD: #{g_usd_rate} ₽.

Сценарий 2. Отправка лида в Bitrix24​

  • Метод: POST-json
  • URL: https://your.bitrix24.ru/rest/.../crm.lead.add.json
  • Тело JSON: {"fields": {"TITLE": "Лид от [Name]", "PHONE": [{"VALUE": "#{phone}", "VALUE_TYPE": "WORK"}]}}
  • Сохранить: result → bitrix_lead_id.

Сценарий 3. Приём вебхука от YooKassa​

  • Тип: Ожидание данных
  • URL вебхука вставлен в личный кабинет YooKassa.
  • Сохранить значения: object.id → payment_id, object.status → payment_status, object.amount.value → paid_sum.
  • В условиях следующего блока: если #{payment_status} = succeeded → сценарий «Оплачено».

Сценарий 4. Получение данных из своего API​

  • Метод: GET
  • URL: https://my-api.com/orders/#{order_id}
  • Заголовок: Authorization: Bearer #{g_api_token}
  • Сохранить значения: status → order_status, delivery_date → delivery.

Частые ошибки​

  • 401/403 — неверный или просроченный токен. Проверьте заголовок Authorization.
  • 404 — опечатка в URL или удалённая запись.
  • 400 — неправильный формат тела. Сверьте JSON с документацией сервиса.
  • CORS / SSL — Квесча обходит ограничения CORS, но самоподписанные сертификаты могут не работать.
  • Тело уходит пустым — для GET тело недоступно, нужны параметры в URL.
  • #{api_response} равно пустоте — запрос не выполнился. Используйте «Отправить запрос сейчас» для диагностики.
  • Парсинг не работает — проверьте точечный путь, особенно для массивов: items.0.name, а не items[0].name.
  • Вебхук не приходит — внешний сервис не дотягивается. Проверьте через Webhook.site, что Quescha-URL вообще получает запросы.

Что дальше​

  • Операции с данными — обработать ответ.
  • Списки — сохранить результаты массово.
  • JS код — для сложной обработки JSON.
  • Платежи — типовая интеграция платёжных шлюзов через вебхуки.
  • CRM — готовые интеграции с amoCRM/Bitrix24 без ручного HTTP.