# HTTP-запит

Блок надсилає запит на сторонній сервер і розбирає відповідь: показує її в чаті, записує у змінні або передає вашому коду.

![Панель налаштувань блоку «HTTP-запит»](https://support.watbot.org/_media/uk/01-chatbots/03-blocks/06-developer/_images/http.webp?v=1791781231)

## Налаштування

- **«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.org/uk/chatbots/blocks/developer/http#обробка-відповіді-кодом).

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

![Код відповіді — у змінну, відповідь JSON — по змінних: order.id і order.status](https://support.watbot.org/_media/uk/01-chatbots/03-blocks/06-developer/_images/http-response.webp?v=1791781231)

## Підстановка даних

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

```
https://example.com/api/orders?phone={{ phone }}&city={{ $місто }}
```

У тілі формату `JSON` підстановка виконується до розбору. Якщо після неї вийшов неправильний JSON — наприклад, у значенні змінної опинилися лапки, — запит піде з порожнім тілом, а в розділі «Лог виконання» з'явиться помилка `Invalid JSON`.

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

## Виходи

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

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

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

## Обмеження

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

## Обробка відповіді кодом

Код із поля «Опрацювати відповідь за допомогою JavaScript» виконується після решти налаштувань блоку. Відповідь сервера лежить в об'єкті `response`:

| Поле | Що в ньому |
|---|---|
| `response.status` | Код відповіді, число |
| `response.body` | Тіло відповіді рядком |
| `response.data` | Розібране тіло, якщо сервер відповів у форматі JSON |

Докладніше — у розділі [«Вбудовані змінні»](https://support.watbot.org/uk/api/javascript/builtins#відповідь-сервера).

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

Функції та обмеження — ті самі, що в блоку «Інтерпретатор JavaScript». Якщо код завершився з помилкою, її текст піде в чат, а зв'язок «Продовжити» не спрацює.

![Увімкнено «Обробити відповідь за допомогою JavaScript»: код перевіряє код відповіді й надсилає повідомлення](https://support.watbot.org/_media/uk/01-chatbots/03-blocks/06-developer/_images/http-js.webp?v=1791781231)
