Интеграция grammY (Telegram Bot API)
Зачем grammY
- TS‑first клиент Bot API со встроенной поддержкой long‑poll и webhook, middleware, обработкой ошибок и ограничителем частоты.
- Более чистые помощники для работы с медиа по сравнению с ручной реализацией fetch + FormData; поддерживает все методы Bot API.
- Расширяемость: поддержка прокси через пользовательский fetch, middleware сессий (необязательно), типобезопасный контекст.
Что мы реализовали
- Единый путь клиента: реализация на базе fetch удалена; grammY теперь является единственным Telegram‑клиентом (отправка + Gateway (шлюз)) с включённым по умолчанию ограничителем grammY.
- Gateway (шлюз):
monitorTelegramProviderсоздаёт grammYBot, настраивает проверку упоминаний/списка разрешённых, загрузку медиа черезgetFile/downloadи доставляет ответы с помощьюsendMessage/sendPhoto/sendVideo/sendAudio/sendDocument. Поддерживает long‑poll или webhook черезwebhookCallback. - Прокси: необязательный
channels.telegram.proxyиспользуетundici.ProxyAgentчерезclient.baseFetchgrammY. - Поддержка webhook:
webhook-set.tsоборачиваетsetWebhook/deleteWebhook;webhook.tsразмещает callback с проверкой здоровья и корректным завершением работы. Gateway (шлюз) включает режим webhook, когда заданыchannels.telegram.webhookUrlиchannels.telegram.webhookSecret(в противном случае используется long‑poll). - Сессии: личные чаты схлопываются в основную сессию агента (
agent:<agentId>:<mainKey>); группы используютagent:<agentId>:telegram:group:<chatId>; ответы маршрутизируются обратно в тот же канал. - Параметры конфига:
channels.telegram.botToken,channels.telegram.dmPolicy,channels.telegram.groups(значения по умолчанию для списка разрешённых и упоминаний),channels.telegram.allowFrom,channels.telegram.groupAllowFrom,channels.telegram.groupPolicy,channels.telegram.mediaMaxMb,channels.telegram.linkPreview,channels.telegram.proxy,channels.telegram.webhookSecret,channels.telegram.webhookUrl. - Предпросмотр прямой трансляции: необязательный параметр
channels.telegram.streamModeотправляет временное сообщение и обновляет его с помощьюeditMessageText. Это отдельно от потоковой передачи блоками для каналов. - Тесты: моки grammY покрывают проверку упоминаний в личных сообщениях и группах, а также исходящую отправку; дополнительные фикстуры для медиа/webhook приветствуются.
- Необязательные плагины grammY (throttler), если мы столкнёмся с ошибками Bot API 429.
- Добавить более структурированные тесты медиа (стикеры, голосовые заметки).
- Сделать порт прослушивания webhook настраиваемым (в настоящее время фиксирован на 8787, если не прокинут через Gateway (шлюз)).