HTTP и веб
Четыре ноды в группе «HTTP и веб» решают три разные задачи, и путать их дорого: http_request ходит в любой API как шаг графа, fetch_webpage даёт агенту прочитать страницу по ссылке, а websearch и openrouter_web_search ищут в интернете — но первый бесплатен и умеет только заголовки со сниппетами, а второй стоит кредитов и возвращает выдержки текста вместе с ответом модели.
Ни одной из них не нужно подключение: у них нет ни логина, ни сервера, который надо запомнить. Ключ стороннего API хранится не в подключении, а в секрете рабочего пространства и подставляется шаблоном.
http_request — универсальная дверь наружу
Это единственная нода, которая делает произвольный HTTP-запрос: метод, адрес, заголовки, параметры строки запроса, тело. Всё, чего в платформе нет отдельной интеграцией, делается ею — от вызова внутреннего сервиса компании до API, про которое мы никогда не слышали.
- Исполнение + данные
Что настраивается
| Поле | Значения | Замечание |
|---|---|---|
| Method | GET, POST, PUT, PATCH, DELETE, HEAD | у GET и HEAD тело не отправляется, что бы ни стояло в Body |
| URL | http/https | шаблонизируется |
| Headers | JSON-объект | шаблонизируется целиком, а не по значениям |
| Query Parameters | JSON-объект | числа и булевы приводятся к строке автоматически |
| Body Type | none · json · text · form | form — это application/x-www-form-urlencoded, задаётся JSON-объектом |
| Body | строка | шаблонизируется; для json обязан после подстановки быть валидным JSON |
| Auth Type | none · bearer · basic · custom header | заполняет заголовок Authorization за вас |
| Timeout | 1…120 секунд, по умолчанию 30 | тариф может опустить потолок, но не поднять |
| Max Response Bytes | 1 КиБ…10 МБ, по умолчанию 1 МБ | ответ длиннее обрезается |
| Follow Redirects | включено | каждый переход проверяется заново |
| Parse JSON Response | включено | тело разбирается только если сервер объявил JSON |
| Fail on 4xx/5xx | включено | выключите, если 404 для вас нормальный ответ |
Шаблоны и секреты
Адрес, заголовки, параметры, тело и поля авторизации проходят через
шаблонизатор. То есть в них работает и {{ inputs.input }}, и
{{ nodes.<id>.output.<поле> }}, и {{ secret.ИМЯ }}.
URL https://api.example.com/v1/orders/{{ inputs.input.order_id }}
Headers {"X-Api-Key": "{{ secret.SHOP_API_KEY }}"}
Body {"comment": {{ nodes.llm_1.output | tojson }}}
Ключ живёт в Настройки → Секреты, а не в графе. Это не гигиена ради гигиены: граф можно экспортировать, показать коллеге или отдать ассистенту, и вставленный прямо в JSON токен уедет вместе с ним.
Что нода отдаёт дальше
Ответ приходит одним объектом. {{ nodes.<id>.output }} — это весь он целиком.
| Поле | Что внутри |
|---|---|
| status_code | код ответа числом |
| ok | true для 2xx |
| body | разобранный JSON, если сервер отдал JSON и разбор включён; иначе строка |
| text | сырой текст ответа всегда |
| headers | заголовки ответа |
| url | итоговый адрес после всех перенаправлений |
| elapsed_ms | время запроса в миллисекундах |
Ветка ошибки здесь включена по умолчанию
У большинства нод выход on_error выключен и включается вручную (см.
Ошибки нод). У http_request он включён сразу — это единственная нода
каталога с таким дефолтом, и причина в природе задачи.
Чужой сервер отвечает 500, отдаёт 429, молчит до таймаута или роняет соединение —
это не поломка вашего воркфлоу, а нормальный, ожидаемый исход обращения к чужой
инфраструктуре. Если бы ветка была выключена, самый частый сбой в продукте приводил бы
к одному и тому же: весь запуск падает, клиент в чате не получает ничего, а автор узнаёт
об этом из списка запусков. С включённой веткой вы решаете сами — написать «сервис
недоступен, попробуйте позже», сходить в резервный источник, отправить письмо себе.
- Исполнение + данные
Что именно уводит управление в ветку ошибки: сетевой сбой, таймаут, а при включённом
Fail on 4xx/5xx — ещё и любой не-2xx ответ. Выключите тумблер, если код ответа для
вас — данные (например, 404 означает «такого клиента нет»): тогда нода всегда уходит в
успех, а вы ветвитесь по {{ nodes.<id>.output.ok }} обычным условием.
В ветку ошибки приезжает объект с кодом и текстом. Тело чужого ответа автор видит: сервис за адресом принадлежит ему, и его слова — это и есть диагноз. Собеседнику в чате оно не показывается никогда.
Куда нода ходить не будет
Все исходящие запросы платформы идут через защищённый клиент. Он резолвит имя хоста и
отказывает, если адрес попадает в приватный диапазон: loopback, 10.0.0.0/8,
172.16.0.0/12, 192.168.0.0/16, link-local 169.254.0.0/16 (это адрес метаданных
облака), multicast и зарезервированное. Перенаправления при этом отслеживаются вручную и
проверяются на каждом переходе — иначе публичный адрес, отвечающий 302 на
http://169.254.169.254/, обходил бы проверку целиком.
Ограничение не косметическое: адрес в поле URL — шаблон, а значит его часть может прийти из сообщения пользователя. Без такой проверки чат-бот превращается в сканер внутренней сети того сервера, на котором он работает.
fetch_webpage — чтение страницы агентом
У этой ноды нет ни входа запуска, ни выхода успеха: она существует только как
инструмент агента. Поставьте её на холст, протяните tool_out в порт расширений
ai_agent — и модель сама решит, когда открыть ссылку.
Что делает: скачивает страницу, вытаскивает основное содержимое и конвертирует HTML в
Markdown, отбрасывая навигацию и разметку. Модель получает читаемый текст, а не тег
<div> в тысячу символов. Настройки — предел длины (по умолчанию 8000 символов, до
50 000), таймаут (по умолчанию 20 секунд) и потолок на размер сырого ответа. Предел
принадлежит автору, а не модели: модель не может попросить больше, чем вы разрешили.
Проверка адресов у неё та же, что у http_request: ссылку, ведущую во внутреннюю сеть,
инструмент отклоняет, и модель получает ответ «этот адрес недопустим», а не текст с
внутреннего сервиса.
Два поиска, и они не взаимозаменяемы
| websearch | openrouter_web_search | |
|---|---|---|
| Как подключается | только инструмент агента | и шаг графа, и инструмент агента |
| Источник | DuckDuckGo | поиск на стороне OpenRouter вместе с вызовом модели |
| Что возвращает | заголовок, короткий сниппет, ссылка | ответ модели плюс источники с выдержками текста |
| Цена | бесплатно | кредиты за каждый поиск |
| Когда брать | «найди ссылку», дальше читает fetch_webpage | когда нужен связный ответ с цитатами |
websearch отдаёт до десяти результатов (по умолчанию пять) — этого хватает, чтобы агент
нашёл нужную страницу и прочитал её fetch_webpage. Пара из этих двух нод — бесплатная
замена платному поиску, если вы готовы к тому, что качество выдержек ниже, а раундов
агента больше.
openrouter_web_search — отдельная тема со своими режимами, движками и способом счёта
денег: Веб-поиск.
- Расширение
Что дальше
Веб-поиск
Платный поиск: режимы, движки, стоимость.
Агент и инструменты
Как ноды подключаются к агенту связью расширения.
Шаблоны
Пространства имён подстановок и правило однократного рендера.
Ошибки нод
Что приходит в ветку ошибки и какие бывают коды.
Свой код
Когда HTTP-ноды не хватает и нужен JavaScript.
Интеграции: обзор
Подключения, секреты и кто имеет право их менять.