Telethon — безопасный гейтвей агента в Telegram
Один канонический вход вместо зоопарка способов — резолв адресата, idempotency-ключи и стоп-гейт перед каждой отправкой.
Telegram — главный интерфейс моей инфраструктуры, и одновременно самое опасное в ней место: одно сообщение не тому человеку не отзовёшь. Поэтому все операции агента с Telegram идут через единственную точку — Python-гейтвей на Telethon. Ни кликов по интерфейсу, ни сторонних ботов-прослоек, ни «быстренько через API напрямую».
Почему одна точка входа
Пока способов отправки было несколько, каждый обрастал своими багами и своими дырами. Consolidация в один CLI-гейтвей дала три вещи: единые правила безопасности, единый лог всех действий и возможность чинить проблемы в одном месте.
Что гейтвей делает обязательным
Резолв перед отправкой. Сначала команда resolve — гейтвей находит чат и возвращает его числовой ID. Отправка требует этот ID в явном виде. Два чата с одинаковым названием? Операция падает, а не выбирает «наверное этот». Fail-closed — по умолчанию отказ.
Idempotency-ключ. Каждая отправка несёт уникальный ключ. Скрипт перезапустился, сеть моргнула, агент решил повторить — дубль не уйдёт: гейтвей видит, что ключ уже использован.
Стоп-гейт. Перед реальной отправкой человеку — обязательное подтверждение: адресат, полный текст, вложения. Флаг --confirm-send без показа черновика не работает.
Защита файлов. Гейтвей отказывается отправлять .env, session-файлы, ключи и архивы с ними — проверка идёт после резолва пути и по содержимому, так что «переименовать и отправить» не проходит.
Про статусы доставки
Тонкость, которая однажды сэкономила мне нервы: успех — это только SENT плюс ID сообщения. Статус UNKNOWN после таймаута не значит «не ушло». Большой файл может доехать после того, как клиент отвалился по таймауту — слепой повтор даст дубль. Правило: при UNKNOWN сначала читаем чат, потом решаем.
И ещё одна мелочь для больших видео: без пакета cryptg Telethon шифрует на чистом Python и загрузка сотни мегабайт превращается в вечность при 100% CPU. Одна установка — и всё летает.
ПРИМЕНИТЬ У СЕБЯ
Хотите разобрать, как это ложится на вашу задачу? Напишите — обычно пары сообщений хватает, чтобы понять, есть ли смысл двигаться дальше.
Telegram @bosswor