Chat Trigger в n8n: виджет, embedded chat, CORS, память и production-бот ¶
Обновлено: 2026-05-29
Короткий ответ ¶
Chat Trigger в n8n нужен, когда workflow должен начинаться с сообщения пользователя в чат-интерфейсе: hosted chat, embedded widget или внутренний AI assistant. Для production важно настроить Allowed Origin/CORS, понятный response mode, session_id, память, RAG/no-answer, PII-редакцию, human fallback и ограничения на tools. Если оставить чат как “публичный prompt к AI Agent”, он быстро превращается в источник утечек, дорогих запросов и непредсказуемых действий.
Где использовать Chat Trigger ¶
Chat Trigger подходит для AI-виджетов на сайте, внутреннего helpdesk-бота, поискового ассистента по базе знаний, onboarding-чата, pre-sales ассистента, RAG-чата по документации и операционного интерфейса для сотрудников. Его сильная сторона — готовый chat entrypoint, который можно связать с Agent, memory, vector store, API tools и approval steps.
Не используйте Chat Trigger как замену webhook API для машинных интеграций. Если источник — CRM, платёжная система, форма или backend, чаще нужен Webhook node. Chat Trigger — это пользовательский диалог, где важны session, UX, текст ответа, задержка, история и fallback.
Hosted или embedded chat ¶
| Режим | Когда выбирать | Что проверить |
|---|---|---|
| Hosted chat | быстрый запуск, internal tool, demo | доступ по ссылке, branding, auth вокруг ссылки |
| Embedded chat | виджет на сайте | Allowed Origin/CORS, session_id, privacy notice |
| Custom frontend + Webhook | полный контроль UI | больше кода, своя auth/session logic |
Если чат встраивается на публичный сайт, нельзя полагаться только на “сложную ссылку”. Нужны ограничения origin, rate limits, input limits и политика данных. Для B2B-личного кабинета лучше передавать signed user context с backend, а не спрашивать email в свободном тексте.
Response mode: когда отвечать последней нодой, а когда Response nodes ¶
У Chat Trigger есть режимы ответа. Простая схема — отвечать результатом последней ноды. Это удобно для демо: пользователь написал, Agent ответил, last node вернул текст. Но для production чаще нужен явный ответ через Chat node или Respond to Webhook-style логику: так проще контролировать формат, ошибки и несколько сообщений.
Используйте When Last Node Finishes, если:
- workflow короткий;
- нет фоновых действий;
- ответ всегда один;
- нет сложных ошибок.
Используйте Using Response Nodes, если:
- нужно отправлять разные ответы по веткам;
- есть human fallback;
- часть workflow работает дольше;
- нужно показать “заявка принята”, а обработку продолжить;
- нужно скрыть технический JSON последней ноды.
Сессии и память ¶
Production-чат должен понимать, где заканчивается один диалог и начинается другой. Минимальный ключ: session_id. Для authenticated пользователей лучше связывать session_id с user_id, account_id, ролью и consent. Для анонимного сайта задайте срок жизни cookie/session и не храните лишние персональные данные.
Память делите на три слоя:
- Short-term chat history — последние N сообщений.
- Conversation summary — краткое резюме длинной переписки.
- User facts — только явно разрешённые данные: язык, выбранный продукт, роль, тариф.
Не смешивайте память разных пользователей. Не сохраняйте в memory токены, пароли, API keys, номера карт, документы и чувствительные данные. Если пользователь прислал такие данные, отредактируйте их до LLM или отправьте в защищённый канал обработки.
Архитектура workflow ¶
Рабочая схема:
- Chat Trigger — принимает сообщение.
- Session resolver — проверяет session_id, user_id, origin, auth context.
- Input sanitizer — режет длину, удаляет опасные вложения, маскирует PII.
- Intent classifier — вопрос, поиск, лид, support, dangerous action.
- RAG retrieval — только если вопрос требует базы знаний.
- AI Agent / Chain — генерирует ответ или вызывает tool.
- Safety checker — проверяет sources, PII, policy, output schema.
- Human fallback — если confidence низкий или запрос рискованный.
- Chat response — возвращает понятный ответ пользователю.
- Logs/evals — сохраняет trace для качества.
JSON-контракт ответа ¶
Даже если пользователь видит текст, внутри workflow полезно держать структурированный результат.
{
"reply": "Короткий ответ пользователю",
"intent": "knowledge_question",
"requires_human": false,
"confidence": 0.84,
"sources": [
{ "title": "Webhook production checklist", "url": "/playbooks/webhook-production-checklist/" }
],
"next_action": "show_sources",
"safety_flags": []
}
Такой контракт помогает не отправить пользователю внутренние поля, но сохранить их для логов, QA и аналитики.
CORS и Allowed Origin ¶
Если чат встроен на сайт, настройте Allowed Origin. Для локальной разработки wildcard допустим, но production-виджет лучше ограничить доменами, где чат действительно должен работать: https://nodbot.ru, https://app.example.com. Если оставить *, чат проще встроить куда угодно, а вы потеряете часть контроля над источником запросов.
CORS не заменяет аутентификацию. Он только ограничивает браузерные cross-origin обращения. Для приватного ассистента нужна auth-логика: signed session, токен личного кабинета, allowlist или серверная проверка пользователя.
RAG и no-answer policy ¶
Чат по базе знаний должен отвечать только на основе найденных источников. Если retrieval ничего не нашёл, правильный ответ — “в базе нет точного ответа” плюс предложение уточнить запрос или обратиться к человеку. Нельзя просить модель “ответить по общим знаниям”, если пользователь ожидает ответ по вашим документам.
Добавьте в prompt правило:
Отвечай только по переданным sources. Если sources не подтверждают ответ, верни no_answer и задай один уточняющий вопрос. Не выдумывай ссылки, цены, SLA и технические параметры.
Human fallback ¶
Chat Trigger хорош для автоматизации, но любой публичный чат должен уметь передать диалог человеку. Fallback нужен, если:
- пользователь просит договор, счёт, возврат, удаление данных;
- AI не нашёл источник;
- confidence низкий;
- пользователь недоволен ответом;
- вопрос связан с персональными данными;
- tool call опасен.
Fallback не обязан быть live chat. Можно создать тикет, отправить email, уведомить Telegram/Slack-канал или показать форму обратной связи. Главное — явно сказать пользователю, что произойдёт дальше.
Метрики качества ¶
Отслеживайте не только “сколько сообщений обработано”. Важнее:
- доля no-answer;
- доля human fallback;
- средняя задержка ответа;
- стоимость на диалог;
- retrieval hit rate;
- source accuracy;
- CSAT/полезность;
- доля повторных вопросов;
- количество safety flags;
- количество tool errors.
Если no-answer слишком низкий, чат может галлюцинировать. Если human fallback слишком высокий, база знаний или prompt недостаточно хороши. Если latency растёт, смотрите retrieval, модель, tools и размер контекста.
Типовые ошибки ¶
- Embedded chat оставлен с
Allowed Origin: *без необходимости. - Session_id не связан с пользователем, память смешивается.
- Ответ строится по последней ноде и случайно показывает технический JSON.
- Нет no-answer policy для RAG.
- Public chat имеет доступ к tools с записью.
- Нет ограничений длины сообщения и rate limits.
- Logs содержат PII без маскирования.
- Нет понятного fallback к человеку.
Production rollout ¶
Запускайте по этапам:
- Internal demo на тестовой базе.
- Закрытая группа пользователей.
- Read-only режим без dangerous tools.
- Human review для всех actions.
- Автоматизация низкорисковых запросов.
- Регулярные evals и пересмотр prompt/sources.
Перед публичным запуском добавьте страницу политики данных: что чат обрабатывает, что хранит, как пользователь может запросить удаление, какие данные нельзя отправлять.