Перейти к содержанию

Telegram AI-бот через n8n: human approval перед ответом пользователю

Обновлено: 2026-05-30

AI summary: Практический сценарий Telegram AI-бота на n8n: бот готовит черновик ответа, отправляет его оператору на approve/reject и пишет пользователю только после человеческого подтверждения.
Шаблон для внедрения

Импортируйте workflow, замените credentials и прогоните тестовый payload до включения production.

Проблема: AI-бот в Telegram может быстро ответить неверно в чувствительном сценарии: оплата, договор, возврат, персональные данные или нестандартное обещание менеджера.

Решение: надежный workflow в n8n готовит черновик ответа, показывает его оператору с кнопками approve/reject и отправляет пользователю только подтвержденный текст.

Схема Telegram AI-бота с human approval в n8n
AI ускоряет подготовку ответа, но финальное решение остается за человеком.

Проблема: почему AI-бот без approval опасен для поддержки

Интеграция Telegram и n8n позволяет быстро собрать AI-бота, который отвечает пользователю почти мгновенно. Но в реальной поддержке мгновенность не всегда равна качеству. Клиент может спросить про оплату, возврат, договор, персональные данные или нестандартное обещание менеджера. Если скрипт n8n сразу отправит LLM-ответ в чат, ошибка станет публичной коммуникацией компании.

Human approval решает эту боль: модель готовит черновик, оператор видит исходное сообщение, риск-флаги и вариант ответа, а пользователь получает финальный текст только после подтверждения. Такой workflow подходит для Telegram-поддержки, pre-sale консультаций, внутренних helpdesk-ботов и команд, которые хотят ускорить ответы без потери контроля.

Архитектура workflow Telegram AI-бота с human approval

НодаРольЧто проверить
Telegram TriggerПринимает сообщение или callbackBot 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 и модерации

  1. Создайте бота через BotFather и подключите Telegram credentials в n8n.
  2. Добавьте Telegram Trigger и проверьте получение обычных сообщений и callback query.
  3. Настройте LLM-провайдера, системный prompt и запрет на обещания вне базы знаний.
  4. Создайте приватный moderator chat и отправляйте туда карточку approval.
  5. Добавьте хранилище 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. Если оператор не ответил, пользователю нужно отправить нейтральное сообщение о принятии обращения.

См. также роутер команд Telegram-бота, Telegram alert для ошибок, RAG FAQ bot на Qdrant. Официальные документы: Telegram Bot API, n8n Telegram Trigger и n8n Telegram node.

Карточка human approval для Telegram AI-бота в n8n
Оператор видит исходное сообщение, риск-флаг, черновик и кнопки решения.

Критерии готовности

  1. AI-ответ не отправляется без approve.
  2. Есть reject-сценарий и ручной текст оператора.
  3. Approval-состояния сохраняются в durable store.
  4. Markdown/HTML экранируется перед отправкой.
  5. Ошибки Telegram API уходят в alert, а не теряются в execution.
Нужен AI-бот без риска самовольных ответов?

Nodbot настроит Telegram-бота с approval, guardrails, журналом решений, SLA и безопасной отправкой сообщений пользователям.

Обсудить AI-бота