potyk.io
🔒

Telegram echo-боты

Личные боты в Telegram: пользователь пишет боту — бот присылает то же самое обратно. Нужны как минимальный канал «сервер ↔ Telegram» (один или несколько ботов).

На сайте отдельной страницы нет: всё в чате с ботом.

Зачем

Держать рабочий контур общения с Telegram с прода, когда прямой доступ сервера к api.telegram.org ограничен (типично для РФ / Yandex Cloud).

Как устроено (прод)

Cloudflare Worker (прокси Bot API)

  • Воркер telegram-api-proxy на Cloudflare Workers.
  • Код: cloudflare/telegram-api-proxy/ (деплой через wrangler / дашборд CF).
  • Бот ходит не на https://api.telegram.org/bot…, а на
    https://<worker>.workers.dev/bot…
    (задаётся TELEGRAM_API_BASE_URL, суффикс /bot).
  • Воркер с края CF проксирует запрос на официальный Telegram API.

Long polling (potyk-tg.service)

  • Отдельный systemd-сервис: potyk-tg.service
    (python -m potyk_io_back.tg.poller).
  • Сам забирает апдейты через Worker (getUpdates), эхо шлёт тем же путём.
  • Логи: logs/tg-poller.log, logs/tg-poller.error.log.
  • Основной сайт: potyk-io.service (gunicorn) — к поллингу ботов не обязан.

Конфиг

  • Общий прокси: TELEGRAM_API_BASE_URL в .env.
  • Список ботов: JSON с токенами — instance/telegram_bots.json (каталог instance/ в .gitignore)
    или путь из TELEGRAM_BOTS_FILE. Пример без секретов: potyk_io_back/tg/telegram_bots.example.json.
  • Устаревший одиночный TELEGRAM_BOT_TOKEN в .env всё ещё поднимает одного бота default, если файла ботов нет.

Сценарии

Эхо текста

Что делает пользователь: пишет боту текстовое сообщение.

Ожидаемый результат: бот отвечает тем же текстом.

Эхо другого сообщения

Что делает пользователь: присылает не только текст (фото, стикер, голосовое и т.п.).

Ожидаемый результат: бот присылает копию сообщения. Если копию нельзя — для текста запасной ответ тем же текстом; иначе ответа может не быть.

Несколько ботов

Зачем: разные боты (тест / прод / черновик) на одном сервере, без отдельного сервиса на каждый.

Что делает оператор: в JSON списка ботов задаёт имя, токен и флаг enabled; сохраняет файл. Poller подхватывает изменения без правки кода (вкл/выкл и смена набора — после перечитывания конфига).

Ожидаемый результат:

  1. У каждого включённого бота своё эхо в своём чате Telegram.
  2. Выключенный бот (enabled: false) перестаёт забирать апдейты и отвечать; токен в файле можно оставить.
  3. Можно держать несколько включённых одновременно.
  4. Пустой список / все выключены / нет токенов — ни один бот не отвечает; сервис при этом может оставаться запущенным и ждать появления включённых.
  5. Имена ботов уникальны; дубликаты — ошибка конфига (такой бот не поднимается, в логе видно).

Бот на проде

Ожидаемый результат:

  1. После деплоя, настройки Worker URL и хотя бы одного включённого бота — ответы в Telegram без ручного запуска с локалки.
  2. Пока poller или Worker недоступны — бот молчит; пропущенные за это время сообщения не обязаны догоняться.
  3. Рестарт potyk-tg.service безопасен: снова long polling.

Локалка

Локально контур не обязателен. Если заданы прокси (при необходимости) и включённые боты, и запущен poller — поведение эха то же.