# HTTP-запрос

Блок отправляет запрос на сторонний сервер и разбирает ответ: показывает его в чате, записывает в переменные или передаёт вашему коду.

![Панель настроек блока «HTTP-запрос»](https://support.watbot.ru/_media/ru/01-chatbots/03-blocks/06-developer/_images/http.webp?v=1791781230)

## Настройки

- **«URL»** — адрес запроса, до 2048 символов. Адрес должен начинаться с `http://` или `https://`.
- **«Метод»** — `GET`, `POST`, `PUT`, `DELETE` или `PATCH`.
- **«Заголовки»** — пары «имя = значение», до десяти. Кнопка «Добавить заголовок» добавляет строку. Если заголовок `Accept` не задан, блок отправит `Accept: application/json`.
- **«Body»** — тело запроса. Поле появляется у всех методов, кроме `GET`. Формат выбирается из списка:
  - `JSON` — тело пишется в редакторе целиком;
  - `x-www-form-urlencoded` — пары «ключ = значение», строки добавляет кнопка «Добавить строку»;
  - `multipart/form-data` — те же пары и файлы. Кнопка «Добавить файл» предлагает два способа: «Ссылка на файл или переменная» — бот скачает файл по ссылке и приложит к запросу, «Локальный файл» — файл загружается с компьютера. В одном запросе уходит не больше 20 файлов.
- **«Timeout»** — время ожидания ответа от сервера в секундах, от 1 до 60. По умолчанию — 5.
- **«Отправлять в запросе данные контакта»** — добавляет к запросу три поля: `bot_id` (ID бота), `contact` (данные контакта) и `variables` (его переменные). У запросов с телом поля попадают в тело. У `GET` — в строку запроса, и только если в адресе уже есть хотя бы один параметр.
- **«Выводить тело ответа в чат»** — бот отправит контакту ответ сервера как есть. Переключатель включён по умолчанию; выключите его, если ответ служебный.
- **«Записать код ответа в переменную»** — код ответа (`200`, `404` и так далее) сохранится в переменную контакта с именем из поля «Переменная».
- **«Записать ответ json в переменные»** — раскладывает ответ в формате JSON по переменным контакта. В блоке «Соотношение переменных» слева укажите путь к значению через точку, справа — имя переменной. Например, `data.product.name` → `товар`. Элемент массива берётся по номеру: `items.0.price`. Если значения по такому пути нет, в переменную запишется пустая строка.

- **«Сервер запроса»** — откуда уйдёт запрос: «По умолчанию», «Европа» или «SOCKS5-прокси». Для своего прокси заполните «Хост» и «Порт», а если прокси требует входа — «Пользователь» и «Пароль».

- **«Обработать ответ с помощью JavaScript»** — открывает редактор кода. Код получает ответ сервера в объекте `response` и может всё то же, что код блока «Интерпретатор JavaScript». Подробнее — в разделе [«Обработка ответа кодом»](https://support.watbot.ru/chatbots/blocks/developer/http#обработка-ответа-кодом).

Ниже в настройках идут обычные «Меню» и «Дополнительно» — такие же, как у блоков с сообщением.

![Код ответа — в переменную «код_ответа», ответ JSON — по переменным: order.id → номер_заказа, order.status → статус_заказа](https://support.watbot.ru/_media/ru/01-chatbots/03-blocks/06-developer/_images/http-response.webp?v=1791781230)

## Подстановка данных

В адресе, значениях заголовков, теле запроса и в путях «Соотношения переменных» работают [автоподстановки](https://support.watbot.ru/chatbots/templates):

```
https://example.com/api/orders?phone={{ phone }}&city={{ $город }}
```

В теле формата `JSON` подстановка выполняется до разбора. Если после неё получился неправильный JSON — например, в значении переменной оказалась кавычка, — запрос уйдёт с пустым телом, а в «Логе выполнения» появится ошибка `Invalid JSON`.

![Запрос POST с заголовком Authorization и телом JSON с автоподстановками](https://support.watbot.ru/_media/ru/01-chatbots/03-blocks/06-developer/_images/http-body.webp?v=1791781230)

## Выходы

- Пункты меню — если вы добавили их в «Меню», бот ждёт ответа человека, как в обычном блоке с кнопками.
- «Любая другая фраза» — человек написал то, чего нет в меню.
- «Нет ответа от сервера» — сервер не ответил за время из поля «Timeout», соединение не установилось или запрос завершился сбоем.
- «Продолжить» — сценарий идёт дальше сразу после запроса, не дожидаясь ответа человека.

![Блок «HTTP-запрос» на схеме: выходы «Нет ответа от сервера», «Любая другая фраза» и «Продолжить»](https://support.watbot.ru/_media/ru/01-chatbots/03-blocks/06-developer/_images/http-outputs.webp?v=1791781230)

> [!IMPORTANT]
> Ответ с кодом ошибки — например, `404` или `500` — для блока обычный ответ: выход «Нет ответа от сервера» не сработает. Запишите код ответа в переменную и проверьте его следующим блоком.

## Ограничения

- Запросы на внутренние адреса и на адреса самой платформы запрещены: такой запрос не отправляется, в «Логе выполнения» остаётся ошибка `URL is not valid`.
- Переадресаций блок проходит не больше пяти подряд.
- На один домен уходит не больше 10 запросов в секунду со всей платформы. Лишние запросы ждут своей очереди.
- В «Соотношении переменных» — до 300 строк.

## Обработка ответа кодом

Код из поля «Обработать ответ с помощью JavaScript» выполняется после остальных настроек блока. Ответ сервера лежит в объекте `response`:

| Поле | Что в нём |
|---|---|
| `response.status` | Код ответа, число |
| `response.body` | Тело ответа строкой |
| `response.data` | Разобранное тело, если сервер ответил в формате JSON |

Подробнее — в разделе [«Встроенные переменные»](https://support.watbot.ru/api/javascript/builtins#ответ-сервера).

```js
if (response.status === 200 && response.data.paid) {
    setContactVariable('оплачено', 'да');
} else {
    sendMessage('Оплата пока не поступила.');
    disableContinue();
}
```

Функции и ограничения — те же, что у блока «Интерпретатор JavaScript». Если код завершился с ошибкой, её текст уйдёт в чат, а связь «Продолжить» не сработает.

![Включено «Обработать ответ с помощью JavaScript»: код проверяет код ответа и отправляет сообщение](https://support.watbot.ru/_media/ru/01-chatbots/03-blocks/06-developer/_images/http-js.webp?v=1791781230)
