У Telegram-ботов есть критичное ограничение: они не могут писать первыми. Только реагировать на команды пользователя. А менеджеры по продажам хотят писать первыми. Очень сильно хотят.

И не зря: воронки, в которых менеджер связывается с клиентом в течение первого часа, показывают конверсию на 40% выше, чем те, где пользователя ведут в бота.

Проблема в том, что обеспечить быстрый контакт сейчас непросто:

  • Дозвониться до клиента сложно — многие не берут трубку от незнакомых номеров

  • Заставить пользователя подписаться на бота после заявки — конверсия режется в разы

  • А чем дольше тянется первый контакт, тем холоднее лид

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

Что будем делать

Напрямую отправлять сообщения в Telegram из n8n нель��я. И готовых, работающих инструментов из коробки, которые позволяли бы это делать — нет. Но это можно делать, используя Telethon — python библиотку, которую используют в том числе для написания неофициальных приложений для Telegram. Ей и воспользуемся.

Мы развернём на сервере python приложение, использующее Telethon, которое позволит нам получить токены для работы с API телеграмм и отправлять сообщения адресату по его никнейму или номеру телефона.

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

Сам процесс в n8n
Сам процесс в n8n

Довольно просто, но дьявол кроется в мелочах. Важно учитывать несколько ограничений, которых надо придерживаться. О них в конце.

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

Как настроить сервис и связать его с n8n

Шаг 1: Получение API credentials (креды) от Telegram

Необходимые токены для нашего будущего приложения мы должны получить тут

Аутентификация на me.telegram
Аутентификация на me.telegram

В API development tools заполняем форму для регистрации нового приложения:

  • App title: любое название (например, "n8n automation")

  • Short name: короткое имя (например, "n8nSend")

  • URL: адрес вашего сайта или n8n (необязательно)

  • Platform: оставьте по умолчанию

    После регистрации приложения получаем App api_id и App api_hash. Сохраняем себе. Они нам понадобятся в дальнейшем

После регистрации получаем api_id и api_hash
После регистрации получаем api_id и api_hash

Шаг 2: Настройка python приложения

Настраивать python приложение мы будем там же на удалённом сервере, где развёрнута наша n8n. Если вам нужна инструкция по тому, как развернуть n8n на удалённом сервере, то вот она. Далее мы продолжаем, исходя из того, что n8n у вас уже развёрнуто и вы подключились к вашему удалённому серверу по ssh.

Для начала создадим папку, в которой будет размещаться наше мини-приложение, а затем добавим туда скрипты и докер файл.

Создаём папку для будущего мини-приложения

cd ~
mkdir telegram_app
cd telegram_app

Теперь нам понадобятся два скрипта:

  • Скрипт авторизации auth_qr.py с помощью которого мы получим "креды" для работы с АПИ телеграмм

  • Скрипт send_telegram.py с помощью которого будут отправлять сообщения в Telegram. Этот скрипт будет как раз использовать креды, полученные первым скриптом.

Создаём auth_qr.py
nano ~/telegram_app/auth_qr.py

Вставляем код (замените api_id и api_hash на свои!)

from telethon.sync import TelegramClient
import qrcode

# ЗАМЕНИТЕ НА СВОИ ДАННЫЕ!
api_id = 12345678  # Ваш api_id
api_hash = 'your_api_hash_here'  # Ваш api_hash

print("Starting QR code authorization...")

client = TelegramClient('telegram_session', api_id, api_hash)

async def main():
    await client.connect()
    
    qr_login = await client.qr_login()
    
    # Показываем QR-код
    qr = qrcode.QRCode()
    qr.add_data(qr_login.url)
    qr.make()
    print("\nScan this QR code with your Telegram app:")
    print("Settings → Devices → Link Desktop Device\n")
    qr.print_ascii(invert=True)
    print(f"\nOr open: {qr_login.url}\n")
    
    # Ждем авторизации
    await qr_login.wait()
    
    me = await client.get_me()
    print(f"\n✓ Logged in as: {me.first_name}")
    if me.username:
        print(f"✓ Username: @{me.username}")
    print(f"✓ User ID: {me.id}")
    
    await client.disconnect()
    print("\n✓ Session saved to telegram_session.session")

import asyncio
asyncio.run(main())
Создаём send_telegram.py
nano ~/telegram_app/send_telegram.py
#!/usr/bin/env python3
from telethon.sync import TelegramClient
import sys

# ЗАМЕНИТЕ НА СВОИ ДАННЫЕ!
api_id = 12345678  # Ваш api_id
api_hash = 'your_api_hash_here'  # Ваш api_hash

session_file = '/telegram_app/telegram_session'

if len(sys.argv) < 3:
    print("Usage: python3 send_telegram.py <recipient> <message>")
    sys.exit(1)

recipient = sys.argv[1]
message = sys.argv[2]

try:
    client = TelegramClient(session_file, api_id, api_hash)
    client.connect()
    
    if not client.is_user_authorized():
        print("Not authorized! Run authorization first.")
        sys.exit(1)
    
    client.send_message(recipient, message)
    print(f"✓ Message sent to {recipient}")
    
except Exception as e:
    print(f"✗ Error: {e}")
    sys.exit(1)
finally:
    client.disconnect()

Немного про auth_qr.py. Этот скрипт позволяет нам получить креды через сканирование QR кода, генерируемого Telegram. Сам QR код рисуется в командной строке. Мы сканируем его из-под нужного нам аккаунта на телефоне — и вуаля, наш сервер получает необходимые данные для успешной последующей аутентификации и авторизации.

Почему через QR код? В феврале 2023 года Telegram изменил политику авторизации для неофициальных приложений для борьбы со спамом. Поэтому отправлять код через sms не получится. Тем более, что авторизация через QR код, нарисованный в командной строке — красиво.

Шаг 3: Создание Docker образа

Теперь создадим dockerfile для будущего контейнера.

Создаём docker file
nano ~/telegram_app/Dockerfile

Вставляем содержимое

FROM n8nio/n8n:latest

USER root

RUN apk add --no-cache python3 py3-pip && \
    pip3 install --break-system-packages telethon qrcode

RUN mkdir -p /telegram_app && \
    chown node:node /telegram_app

USER node

Проверяем, что добавили в директорию все необходимые файлы:

ls -ls ~/telegram_app/

В папке должны быть файлы

Создаём образ

cd ~/telegram_app
sudo docker build -t n8n-telegram:latest .

Поздравляю, вы создали докер образ с нашим приложением!

Шаг 4: Запуск контейнера

Если у вас ранее уже был запущен контейнер с n8n, то его необходимо остановить

sudo docker stop n8n
sudo docker rm n8n

А теперь запускаем заново, указывая необходимые параметры:

sudo docker run -d \
 --name n8n \
 --restart unless-stopped \
 -p 5678:5678 \
 -e N8N_HOST=domain.ru \
 -e N8N_PORT=5678 \
 -e N8N_PROTOCOL=https \
 -e N8N_EDITOR_BASE_URL="https://domain.ru/" \
 -e WEBHOOK_URL=https://domain.ru/ \
 -v ~/.n8n:/home/node/.n8n \
 -v ~/telegram_app:/telegram_app \
 --user "1000:1000" \
 -it \
 n8n-telegram:latest

Шаг 5: Авторизация в Telegram

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

sudo docker exec -it n8n /bin/sh
cd /telegram_app
python3 auth_qr.py

В терминале появится QR-код.

Откройте Telegram на вашем телефоне, перейдите в Settings->Devices->Link Desktop Devices. Сканируйте QR код

Сканирование QR кода для авторизации
Сканирование QR кода для авторизации

Выходим из контейнера

exit

Поздравляю, теперь мы готовы тестировать наше приложение!

Шаг 6: Тестируем приложение

Для тестирования приложения, попробуем отправить сообщение самому себе:

sudo docker exec n8n python3 /telegram_app/send_telegram.py "me" "Тест!"

Если в Saved Messages (Избранное) вам пришло сообщение — всё готово. Осталось настроить ноды в n8n.

Шаг 7: Настройка workflow в n8n

Создайте простейший ворклоу, пока можно без вебхука, а такой, который легко запустить. Вот пример уже с вебхуком

Ворклфлоу с нодой, способной запустить команду на сервере
Ворклфлоу с нодой, способной запустить команду на сервере

Открываем ноду Execute Command и вставляем туда простейшую команду, аналогичную той, что мы использовали для тестирования

python3 /telegram_app/send_telegram.py "{{ $json.reipient }}" "{{ $json.message }}"
Настройка Execute Command ноды
Настройка Execute Command ноды

Я уже прописал туда параметры, которые прокидываю с предыдущих шагов.

Всё, запускайте процесс, всё должно заработать!

Важные ограничения и рекомендации

Лимиты Telegram

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

  • Максимум ~30-40 новых диалогов в день

  • Максимум ~100-200 сообщений в час

  • При превышении лимитов аккаунт может быть временно ограничен

Так же я рекомендую добавить задержку между сообщениями (минимум 1-2 секунды). И не использовать данный механизм для массовых рассылок. За спам очень быстро аккаунт забанят.

Безопасность

Когда мы проводим авторизацию нашего аккаунта с помощью QR кода, мы получаем на сервер все наши креды, а именно файл сессии telegram_sessions.session. Она содержит ключи авторизации и позволяет получить полный доступ к нашему аккаунту. Его надо хранить безопасно и не предоставлять другим людям.

Вместо выводов

Я рад, что благодаря ИИ и n8n автоматизировать многие бизнес-процессы стало значительно проще и дешевле. Порог входа в умение настроить описанную мною схему снизился значительно.

Вы можете сказать, что всё равно требуется уметь использовать docker, писать на питоне для того, чтобы реализовать то, что я описал в этой статье. Но это не совсем так.

Код для python скриптов и содержимое dockerfile помог мне сгенерировать Claude. Я всего лишь задавал правильные вопросы и перепроверял, что он мне советует. Признаюсь, первые пару часов Claude предлагал мне сделать авторизацию через sms, пока, наконец, я не задал уточняющие вопросы и не узнал, что с SMS есть проблемы.

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

Хотите узнать больше?

Если вам интересна тематика n8n, а так же стык между продуктовым менеджментом, ИИ и маркетингом — приглашаю подписаться на мой телеграмм канал. Там я тоже пишу про то, как n8n можно использовать на практике. А ещё у меня есть курсы по n8n. Заглядывайте.

Ранее я уже писал про то, как: