Linux-сервер

Telegram-бот поддержки с ИИ на n8n: установка на свой сервер, AI Agent, память и передача оператору

7 шагов 15 мин чтения 18 просмотров 0
Содержание

Многие команды уже общаются с клиентами в Telegram. С помощью n8n — инструмента автоматизации рабочих процессов с открытым исходным кодом — можно собрать Telegram-бота, который отвечает на вопросы с помощью ИИ-модели, помнит контекст разговора, следует вашим указаниям о тоне и рамках общения и при необходимости передаёт диалог живому сотруднику, причём без разработки полноценного приложения. В этой статье мы установим n8n на ваш сервер за HTTPS, создадим бота и соберём рабочий процесс (workflow) с локальной моделью в Ollama или с API поставщика ИИ.

Telegram доставляет сообщения в n8n через вебхук, а для него нужен публичный домен с действительным HTTPS-сертификатом. Сначала настройте DNS и сертификат. Если вы используете коммерческий ИИ-API, работайте с ним только из регионов, которые поддерживает поставщик, и соблюдайте его правила использования; для конфиденциальных переписок лучше выбрать локальную модель.

Шаг 1: Создание Telegram-бота

В Telegram откройте диалог с @BotFather, отправьте /newbot, задайте имя и username, оканчивающийся на «bot», и скопируйте токен. Командами /setdescription и /setuserpic можно придать боту профессиональный вид. Храните токен в секрете: любой, у кого он есть, управляет ботом.

Шаг 2: Установка n8n

n8n работает в Docker (см. наше руководство по установке Docker). Замените домен и часовой пояс на свои.

docker volume create n8n_data
docker run -d --name n8n --restart always \
  -p 127.0.0.1:5678:5678 \
  --add-host=host.docker.internal:host-gateway \
  -e N8N_HOST=n8n.example.com \
  -e N8N_PROTOCOL=https \
  -e WEBHOOK_URL=https://n8n.example.com/ \
  -e GENERIC_TIMEZONE=Asia/Hong_Kong \
  -e TZ=Asia/Hong_Kong \
  -e N8N_PROXY_HOPS=1 \
  -v n8n_data:/home/node/.n8n \
  docker.n8n.io/n8nio/n8n

WEBHOOK_URL должен содержать публичный HTTPS-адрес: n8n использует его при регистрации вебхука в Telegram.

Шаг 3: Настройка HTTPS для n8n

server {
    listen 443 ssl;
    http2 on;
    server_name n8n.example.com;

    ssl_certificate     /etc/letsencrypt/live/n8n.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/n8n.example.com/privkey.pem;

    location / {
        proxy_pass         http://127.0.0.1:5678;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection "upgrade";
        proxy_set_header   Host $host;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_buffering    off;
        proxy_read_timeout 300s;
    }
}

Откройте https://n8n.example.com и сразу создайте учётную запись владельца. О сертификатах — в статье бесплатный SSL с Certbot или acme.sh.

Шаг 4: Добавление учётных данных

  • Telegram: создайте учётные данные (credential) Telegram с токеном бота из шага 1.
  • Локальная модель: создайте учётные данные Ollama с базовым URL http://host.docker.internal:11434 (Ollama должна быть настроена по статье запуск локальной LLM с Ollama, включая шаг, разрешающий подключения из Docker-контейнеров, и правила файрвола).
  • Или ИИ-API: создайте учётные данные для своего поставщика; для поставщиков с OpenAI-совместимым API подойдут учётные данные OpenAI с собственным базовым URL.

Шаг 5: Сборка рабочего процесса

Создайте новый workflow и добавьте следующие узлы (названия могут немного отличаться в разных версиях n8n):

  1. Telegram Trigger, который отслеживает обновления типа message.
  2. AI Agent: сообщение пользователя берётся из триггера, а системное сообщение описывает задачу бота.
  3. Подключите к агенту чат-модель (Ollama Chat Model с qwen2.5:7b или чат-модель вашего поставщика) и узел памяти (Simple Memory) с ключом по chat ID, чтобы у каждого клиента была своя история переписки.
  4. Узел Telegram с операцией Send Message (отправка сообщения), который отправляет ответ агента в тот же чат.

Выражения для полей узлов:

AI Agent      - prompt (user message):  {{ $json.message.text }}
Simple Memory - session key:            {{ $('Telegram Trigger').item.json.message.chat.id }}
Telegram      - chat ID:                {{ $('Telegram Trigger').item.json.message.chat.id }}
Telegram      - text:                   {{ $json.output }}

Хорошее системное сообщение удерживает ответы краткими и по теме, например:

You are the customer service assistant of ACME Hosting.
Answer briefly and politely in the customer's language.
Only answer questions about our services, orders and technical support.
If you are not sure, or the customer asks for a refund or a person,
say that a colleague will reply soon. Never invent prices or promises.

Шаг 6: Активация и проверка

Сохраните workflow и активируйте его — после этого n8n зарегистрирует вебхук в Telegram. Отправьте боту сообщение. Если ничего не происходит, проверьте статус вебхука:

curl -s "https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getWebhookInfo"

В поле url должен быть ваш домен n8n, а last_error_message объясняет причину сбоев, например проблемы с сертификатом или недоступность сервера.

Шаг 7: Ограничение доступа к боту и передача диалога оператору

  • Белый список: для внутреннего бота добавьте после триггера узел If, который пропускает сообщение дальше, только если {{ $json.message.chat.id }} входит в список chat ID вашей команды.
  • Передача оператору: добавьте ветку, которая пересылает переписку в группу поддержки, если сообщение содержит слова вроде «возврат», «оператор» или «жалоба», и сообщает клиенту, что ему ответит сотрудник.
  • Знания: чтобы бот отвечал на основе ваших документов, объедините его с базой знаний, как описано в статье приватный RAG-чат-бот на AnythingLLM.

Частые вопросы

Бот работал, а потом перестал отвечать

Для одного токена бота можно установить только один вебхук. Другой workflow, тестовый запуск или скрипт с тем же токеном его заменяет. Проверьте getWebhookInfo, держите для каждого бота только один активный workflow и используйте для тестов отдельного бота.

Ответы приходят слишком долго

На CPU небольшие модели отвечают быстрее. Делайте системное сообщение коротким, ограничьте окно памяти последними 10 сообщениями и держите модель загруженной в Ollama.

Умеет ли n8n что-то кроме чата?

Да. Тот же workflow может искать заказы в вашей базе данных, создавать тикеты в поддержку, публиковать сообщения в группе или отправлять ежедневные отчёты. Требования n8n к серверу описаны в статье требования к серверу для Dify, n8n и ИИ-агентов.

Если проблема не решена, создайте тикет — техническая поддержка IMIDC работает 24/7. Укажите IP сервера, домен n8n, вывод getWebhookInfo и docker logs n8n, чтобы мы быстрее нашли причину.

Помог ли вам данный ответ?

Похожие руководства