Telegram AI-бот через n8n: human approval перед ответом пользователю ¶
Обновлено: 2026-05-30
Импортируйте workflow, замените credentials и прогоните тестовый payload до включения production.
- Проблема: почему AI-бот без approval опасен для поддержки
- Архитектура workflow Telegram AI-бота с human approval
- Контракт входного сообщения Telegram
- Скрипт n8n для черновика, guardrails и callback data
- Готовый workflow JSON
- Пошаговая настройка Telegram бота, n8n и модерации
- Тесты перед production
- Production-риски AI-бота в Telegram
- Полезные ссылки и смежные workflow
- Критерии готовности
Проблема: AI-бот в Telegram может быстро ответить неверно в чувствительном сценарии: оплата, договор, возврат, персональные данные или нестандартное обещание менеджера.
Решение: надежный workflow в n8n готовит черновик ответа, показывает его оператору с кнопками approve/reject и отправляет пользователю только подтвержденный текст.
Проблема: почему AI-бот без approval опасен для поддержки ¶
Интеграция Telegram и n8n позволяет быстро собрать AI-бота, который отвечает пользователю почти мгновенно. Но в реальной поддержке мгновенность не всегда равна качеству. Клиент может спросить про оплату, возврат, договор, персональные данные или нестандартное обещание менеджера. Если скрипт n8n сразу отправит LLM-ответ в чат, ошибка станет публичной коммуникацией компании.
Human approval решает эту боль: модель готовит черновик, оператор видит исходное сообщение, риск-флаги и вариант ответа, а пользователь получает финальный текст только после подтверждения. Такой workflow подходит для Telegram-поддержки, pre-sale консультаций, внутренних helpdesk-ботов и команд, которые хотят ускорить ответы без потери контроля.
Архитектура workflow Telegram AI-бота с human approval ¶
| Нода | Роль | Что проверить |
|---|---|---|
| Telegram Trigger | Принимает сообщение или callback | Bot token, chat_id, тип update |
| Prepare AI draft | Готовит черновик и risk flags | нет персональных данных в prompt без нужды |
| Send to moderator | Отправляет карточку оператору | inline-кнопки approve/reject, короткий текст |
| Approval gate | Проверяет решение человека | callback data не длиннее лимита и содержит id |
| Send final answer | Пишет пользователю | ответ только после approve |
Контракт входного сообщения Telegram ¶
{
"message": {
"message_id": 1042,
"chat": {
"id": 912345678,
"type": "private"
},
"from": {
"id": 912345678,
"username": "client_ru"
},
"text": "Здравствуйте, можно ли перенести оплату на завтра?"
},
"bot_profile": "support",
"moderator_chat_id": "-1001234567890"
}
Для production храните соответствие `approval_id → chat_id → draft_text` в durable store: Postgres, Redis или таблице. Нельзя полагаться только на execution memory, потому что n8n может перезапуститься между отправкой черновика и нажатием кнопки оператором.
Скрипт n8n для черновика, guardrails и callback data ¶
const update = $json.message ? $json : ($json.body ?? $json);
const msg = update.message ?? {};
const text = String(msg.text ?? '').trim();
const userId = msg.from?.id ?? msg.chat?.id;
const chatId = msg.chat?.id;
if (!text) {
return [{ json: { action: 'ignore', reason: 'empty_or_non_text_message' } }];
}
const risky = /(возврат|договор|претенз|персональн|паспорт|карта|оплат|юрид)/i.test(text);
const draft = `Черновик ответа: спасибо за обращение. Я проверю возможность переноса оплаты и вернусь с подтверждением.`;
const approvalId = `tg-ai:${chatId}:${msg.message_id}`;
return [{
json: {
action: 'request_approval',
chat_id: chatId,
user_id: userId,
original_message_id: msg.message_id,
original_text: text,
risky,
approval_id: approvalId,
draft_text: draft,
moderator_text: `Нужен approve перед ответом пользователю\n\nВопрос: ${text}\n\n${draft}`,
callback_approve: `approve:${approvalId}`,
callback_reject: `reject:${approvalId}`
}
}];
Почему callback data лучше делать коротким
Telegram ограничивает размер callback data, а длинные JSON-объекты в кнопке плохо дебажить. Передавайте короткий `approval_id`, а полный черновик и исходное сообщение храните отдельно.
Готовый workflow JSON ¶
Скачать готовый workflow JSON Скачать тестовый payload
{
"name": "Nodbot - Telegram AI bot with human approval",
"nodes": [
{
"name": "Telegram Trigger",
"type": "n8n-nodes-base.telegramTrigger",
"purpose": "Получить сообщение или callback_query от Telegram"
},
{
"name": "Prepare AI draft",
"type": "n8n-nodes-base.code",
"purpose": "Собрать черновик, риск-флаги и callback data"
},
{
"name": "Send to moderator",
"type": "n8n-nodes-base.telegram",
"purpose": "Показать оператору черновик с кнопками Approve/Reject"
},
{
"name": "Approval gate",
"type": "n8n-nodes-base.if",
"purpose": "Отправить ответ пользователю только после approve"
},
{
"name": "Send final answer",
"type": "n8n-nodes-base.telegram",
"purpose": "Вернуть подтвержденный текст пользователю"
}
],
"connections": "Telegram Trigger → Prepare draft → Moderator → Approval gate → Send final answer"
}
Пошаговая настройка Telegram бота, n8n и модерации ¶
- Создайте бота через BotFather и подключите Telegram credentials в n8n.
- Добавьте Telegram Trigger и проверьте получение обычных сообщений и callback query.
- Настройте LLM-провайдера, системный prompt и запрет на обещания вне базы знаний.
- Создайте приватный moderator chat и отправляйте туда карточку approval.
- Добавьте хранилище approval-состояний и TTL для старых черновиков.
Тесты перед production ¶
curl -X POST "https://YOUR-N8N-DOMAIN/webhook/telegram-ai-bot-human-approval" \
-H "Content-Type: application/json" \
--data @telegram-ai-bot-human-approval-payload.json
Проверьте обычный вопрос, вопрос про оплату, reject, повторный callback, удаленный черновик и сообщение без текста. В каждом случае workflow должен либо ждать оператора, либо безопасно завершаться без ответа пользователю.
Production-риски AI-бота в Telegram ¶
- Ответ уходит без approve. Это главный риск: проверьте ветвление callback и условия отправки.
- Потеря контекста после рестарта. Approval-состояние должно жить в базе, а не в памяти execution.
- Утечка данных в prompt. Не отправляйте в LLM лишние персональные данные и токены.
- Сломанный Markdown. Экранируйте текст перед отправкой в Telegram.
- Нет SLA. Если оператор не ответил, пользователю нужно отправить нейтральное сообщение о принятии обращения.
Полезные ссылки и смежные workflow ¶
См. также роутер команд Telegram-бота, Telegram alert для ошибок, RAG FAQ bot на Qdrant. Официальные документы: Telegram Bot API, n8n Telegram Trigger и n8n Telegram node.
Критерии готовности ¶
- AI-ответ не отправляется без approve.
- Есть reject-сценарий и ручной текст оператора.
- Approval-состояния сохраняются в durable store.
- Markdown/HTML экранируется перед отправкой.
- Ошибки Telegram API уходят в alert, а не теряются в execution.
Nodbot настроит Telegram-бота с approval, guardrails, журналом решений, SLA и безопасной отправкой сообщений пользователям.
Обсудить AI-бота