Chatonio

This is taking longer than usual.

Chatonio

Как создать интеграцию Webparser

25 апреля 2026 г. 62 просмотраИнтеграции

Webparser — это инструмент, который позволяет ИИ по запросу загрузить и прочитать веб-страницу обычным HTTP-запросом, примерно как это сделал бы curl. Он подходит, когда нужная страница отдаётся сервером целиком и данные уже лежат в пришедшем HTML. Быстро (обычно 200–800 мс) и дёшево — не нужно поднимать браузер.

Webparser или Webscraper — что выбрать?

  • Webparser (эта статья) — обычный HTTP-запрос. Берите, если данные видны в исходном коде страницы. Примеры: документация, страницы статуса, простые таблицы с ценами, посты в блоге.
  • Webscraper — полноценный headless-Chromium с выполнением JavaScript. Берите, если страница — это JavaScript-приложение и данные появляются только после выполнения скриптов. См. Как создать интеграцию Webscraper.

Начинайте с парсера. Если в исходном коде нужной страницы видны нужные данные, парсера достаточно — и он в десять раз быстрее скрейпера.

Шаг 1 — Добавьте инструмент типа «скрейпинг»

Webparser и Webscraper — это один тип инструмента; отличает их только флаг рендеринга JavaScript. Откройте Проекты → ваш проект → Интеграции, выберите (или создайте) любую интеграцию, нажмите + Добавить инструмент и задайте:

  • Тип инструмента — Скрейпинг веб-страницы.
  • Название функции — например, fetch_status_page.
  • Описание (показывается AI) — одна фраза о том, когда его вызывать. Именно по ней ИИ принимает решение.
  • Рендерить JavaScript — оставьте выключенным.
  • Разрешённые домены — список хостов через запятую, к которым инструменту можно обращаться, например status.example.com, docs.example.com. Это проверяется жёстко — всё, чего нет в списке, отклоняется ещё до отправки запроса.

The What it does step with Tool type set to Web Page Scrape

Шаг 2 — Сузьте выборку CSS-селектором (необязательно)

По умолчанию инструмент возвращает очищенный текст всей страницы (не больше 16 КБ). Для длинных страниц можно указать CSS-селектор, и тогда вернётся только текст подходящих элементов:

.status-summary, main article, #pricing-table

Работает всё, что умеет CSS, а несколько селекторов через запятую обрабатываются независимо — их текст склеивается, так что .summary, .details вернёт оба блока. Если селектор не нашёл ничего, инструмент не откатывается на всю страницу — ИИ получает сообщение «No content found matching selector». (Одна поблажка есть: простое слово вроде order-status автоматически пробуется ещё раз как селектор класса .order-status.) После правки селектора всегда нажимайте Тест — в предпросмотре видно ровно то, что увидит ИИ, и сколько элементов совпало, так что промах селектора заметен сразу, ещё до выхода в бой.

Как исключить части страницы

Селектор выбирает, какие элементы читать, а не что пропустить внутри них. Поэтому если вы выбрали обёртку статьи, а внутри неё оказались меню, баннер про куки или блок «похожие записи», весь этот текст приедет вместе с ней. Такие блоки перечислите в поле Исключить, по одному селектору в строке:

.site-nav
.cookie-banner
.related-posts

The How to call it step for a parser: allowed domains, CSS selector, Exclude, Render JavaScript off

Исключённые элементы удаляются со страницы до того, как отработает основной селектор, поэтому выбранный блок сохраняет структуру и просто теряет лишнее. По одному в строке, а не через запятую, потому что в самом CSS-селекторе запятые тоже бывают.

Возникает соблазн сделать то же самое через :not() прямо в основном селекторе. Это поддерживается, но работает на уровне того, какие элементы попадут в выборку, а не какие потомки внутри них уцелеют, — блок распадается на куски, а вложенные элементы начинают дублировать свой текст. Поле «Исключить» делает именно то, что вы имеете в виду.

Одна тонкость: если правило исключения совпадёт с предком того, что вы выбирали, оно уберёт и вашу цель. Chatonio прямо об этом сообщает, а не просто возвращает пустой результат.

Шаг 3 — Проверьте

Нажмите Тест в строке инструмента. Вставьте реальный URL из списка разрешённых доменов. Кроме извлечённого текста вы увидите, сколько элементов совпало с селектором и сколько удалили правила исключения, — благодаря этому подбор селектора превращается из гадания в обычную итерацию.

A parser test result showing how many elements the selector matched and the excludes removed

POST/api/projects/{project_id}/integrations/{integration_id}/tools/{tool_id}/test-scrape/

Возвращает до 4 000 символов предпросмотра, чтобы вы могли убедиться, что именно увидит ИИ. Это более старый маршрут только для скрейпинга, он по-прежнему работает; кнопка Тест теперь использует общий эндпоинт /tools/{tool_id}/test/, который обслуживает и скрейпинг, и API-инструменты.

Запрос

Тело
{
  "url": "https://status.example.com/incidents/latest"
}

Ответы

200Успех
{
  "success": true,
  "detail": "Fetched in 412 ms",
  "preview": "All systems operational..."
}
400Домен заблокирован
{
  "success": false,
  "detail": "Domain not in allowed list"
}

Как это выглядит в диалогах

ИИ вызывает парсер сам, когда вопрос клиента совпадает с описанием инструмента, — подсказывать не нужно. Загруженный текст попадает прямо в контекст модели, поэтому ответ всегда опирается на то, что реально было на странице в момент обращения, а не на устаревшие знания модели.

Ограничения и советы

  • Вывод ограничен 16 КБ. Очень длинные страницы обрезаются — CSS-селектор сильно помогает.
  • Жёсткий таймаут — 15 секунд; воркер прервёт запрос и вернёт ИИ ошибку, а не зависнет.
  • Только публичные хосты — принимаются адреса http:// и https:// (любая другая схема отклоняется), а защита от SSRF блокирует loopback и адреса приватных сетей.
  • Свои HTTP-заголовки пока нельзя задать из панели. Скрейпер представляется собственным User-Agent, и отдельного поля для заголовков у инструмента в интерфейсе нет. Если страница требует особый заголовок, напишите в поддержку — или заведите вместо этого полноценную API-интеграцию, где авторизация настраивается.
  • Если страница закрыта логином, инструмент её не увидит. Заводите такие данные за настоящей API-интеграцией.
  • Запросы идут с фиксированного адреса 64.7.198.218. Если ваш сайт стоит за WAF или ограничителем, который проверяет незнакомые IP, добавьте его в список разрешённых.

Эта статья была полезной?