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 подхватывает изменения без правки кода (вкл/выкл и смена набора — после перечитывания конфига).
Ожидаемый результат:
- У каждого включённого бота своё эхо в своём чате Telegram.
- Выключенный бот (
enabled: false) перестаёт забирать апдейты и отвечать; токен в файле можно оставить. - Можно держать несколько включённых одновременно.
- Пустой список / все выключены / нет токенов — ни один бот не отвечает; сервис при этом может оставаться запущенным и ждать появления включённых.
- Имена ботов уникальны; дубликаты — ошибка конфига (такой бот не поднимается, в логе видно).
Бот на проде
Ожидаемый результат:
- После деплоя, настройки Worker URL и хотя бы одного включённого бота — ответы в Telegram без ручного запуска с локалки.
- Пока poller или Worker недоступны — бот молчит; пропущенные за это время сообщения не обязаны догоняться.
- Рестарт
potyk-tg.serviceбезопасен: снова long polling.
Локалка
Локально контур не обязателен. Если заданы прокси (при необходимости) и включённые боты, и запущен poller — поведение эха то же.