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