grammY 整合(Telegram Bot API)
為什麼選擇 grammY
- 以 TS 為優先的 Bot API 客戶端,內建 long-poll + webhook 輔助工具、中介軟體、錯誤處理與速率限制器。
- 比手寫 fetch + FormData 更乾淨的媒體輔助工具;支援所有 Bot API 方法。
-
- 可擴充性:透過自訂 fetch 的代理支援、工作階段中介軟體(選用)、型別安全的 context。
4. 我們已交付的內容
- 單一客戶端路徑: 已移除基於 fetch 的實作;grammY 現為唯一的 Telegram 客戶端(傳送 + Gateway 閘道器),且預設啟用 grammY 節流器。
- Gateway:
monitorTelegramProvider建立一個 grammYBot,串接提及/允許清單的閘道、透過getFile/download下載媒體,並以sendMessage/sendPhoto/sendVideo/sendAudio/sendDocument傳遞回覆。透過webhookCallback支援 long-poll 或 webhook。 5. 透過webhookCallback支援長輪詢或 webhook。 - Proxy: 選用的
channels.telegram.proxy透過 grammY 的client.baseFetch使用undici.ProxyAgent。 - Webhook 支援:
webhook-set.ts封裝setWebhook/deleteWebhook;webhook.ts託管回呼,包含健康檢查與優雅關閉。當設定channels.telegram.webhookUrl+channels.telegram.webhookSecret時,Gateway 會啟用 webhook 模式(否則使用 long-poll)。 6. 當設定channels.telegram.webhookUrl+channels.telegram.webhookSecret時,Gateway 會啟用 webhook 模式(否則會使用長輪詢)。 - 工作階段: 私聊會合併到代理程式的主要工作階段(
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進行更新。 7. 這與頻道區塊串流是分開的。 - 測試: grammY 模擬涵蓋私訊 + 群組提及閘道,以及對外傳送;仍歡迎更多媒體/webhook 的測試樣例。
- 若遇到 Bot API 429,是否啟用選用的 grammY 外掛(節流器)。
-
- 新增更多結構化媒體測試(貼圖、語音訊息)。
- 讓 webhook 監聽連接埠可設定(目前固定為 8787,除非經由 Gateway 閘道器 串接)。