Telegram 機器人收不到群組訊息?先檢查隱私模式
如果 Telegram 機器人能收到私訊或明確指定它的命令,卻收不到一般群組訊息,先檢查隱私模式,不要急著更換 webhook。Telegram 預設啟用隱私模式,限制非管理員機器人能接收的群組訊息範圍。私訊測試成功,不代表機器人可以讀取整個群組對話。請先確認機器人身分、群組角色和更新篩選設定,再由真人帳號傳送新訊息測試。
重點整理
- 群組訊息的可見範圍與更新傳遞是兩個不同問題。
- 啟用隱私模式的機器人可接收相關命令和回覆,不是一般群組對話的完整訊息串流。
- Telegram 要求關閉隱私模式後,重新將機器人加入群組,變更才會生效。
- 只有工作流程確實需要時才擴大存取範圍;不要為了排查傳遞問題直接授予管理員權限。
Telegram 隱私模式控制什麼
Telegram 官方機器人功能文件指出,啟用隱私模式的機器人可收到明確指定它的命令,例如 /command@this_bot,以及對發給該機器人的訊息的回覆。一般命令還有情境條件,因此不適合當作唯一的診斷樣本。
官方文件將私訊、服務訊息與一般群組對話分開處理。收到一則群組服務訊息,並不能證明機器人也應收到所有真人傳送的文字。
對於群組管理員機器人及關閉隱私模式的機器人,官方文件說明其群組訊息可見範圍較廣。這是存取權的選擇,不是傳遞效能最佳化。如果命令與回覆就能滿足需求,應保留隱私模式,引導使用者明確與機器人互動。
本文處理的是部分群組訊息不可見。若尚未決定機器人或帳號層級的收件方案,請先閱讀 Telegram Bot API webhook 與統一入站 webhook 比較。
分層排查群組訊息缺失
| 觀察到的情況 | 可能方向 | 下一步 |
|---|---|---|
| 私訊正常,一般群組文字缺失 | 群組訊息可見範圍受限 | 檢查隱私模式與該群組內的角色 |
| 指定群組命令正常,一般文字缺失 | 接收路徑至少能處理一種訊息 | 確認是否真的需要完整群組內容 |
| 私訊和指定命令都沒有 | 隱私模式不足以解釋問題 | 檢查 token 身分、篩選設定和接收器 |
| 原始更新已到達,應用程式沒有顯示 | 應用程式篩選或處理問題 | 檢查處理條件與佇列紀錄 |
| 變更隱私設定後沒有差異 | 現有群組成員狀態需處理 | 重新加入機器人,再傳送新訊息 |
以上是診斷方向,不是確定原因。先記錄原始接收器收到什麼,再修改權限或程式碼。
1. 確認機器人身分與群組角色
透過可信任的 API 用戶端呼叫 getMe,確認部署中的 token 對應哪個機器人。Bot API 參考文件將 can_read_all_group_messages 定義為僅由 getMe 傳回的選用欄位;值為 true 表示隱私模式已關閉。
這不是特定群組的角色報告。仍需在受影響群組檢查機器人是否為成員、是否具有管理員身分。不要將 token 放入螢幕截圖、共用請求紀錄或客服工單。
2. 採用最小必要的可見範圍
如果機器人只回應明確請求,請測試指定其實際使用者名稱的命令,以及對機器人訊息的回覆。Telegram 也建議許多工作流程採用強制回覆互動,不必關閉隱私模式。
如果必須處理真人傳送的一般群組對話,由機器人擁有者檢查 BotFather 的 /setprivacy。擴大蒐集範圍前,先向群組管理員與成員說明。關閉隱私模式後,依官方指示協調移除並重新加入機器人,再核對群組角色。
不要在同一次實驗中修改隱私模式、提升管理員權限與遷移接收器,否則無法判斷哪項變更有效。
3. 檢查更新篩選,不要先切換傳遞方式
Bot API 的 allowed_updates 依更新類型篩選。測試文字訊息時,確認預期設定包含 message。Telegram 文件說明,省略 allowed_updates 會沿用先前設定,不代表重設。
篩選器不會授予機器人原本沒有的群組存取權;擴大群組存取範圍也無法修正排除了目標更新的篩選設定。
如果所有傳遞都失敗,請使用獨立的 getUpdates 與 setWebhook 切換排障流程,不要把切換傳遞方式當成隱私模式測試。
執行受控驗收測試
使用參與者知情的測試群組,由真人帳號執行以下步驟。這是建議的測試計畫,不是正式環境的實測結果:
- 私訊機器人傳送文字,確認基本接收路徑。
- 在群組傳送包含機器人實際使用者名稱的指定命令。
- 回覆機器人傳送的一則訊息。
- 傳送不含命令、也不是回覆的一般群組文字。
- 在核准的存取範圍變更前後,比對原始傳遞與應用程式紀錄。
隱私模式開啟時,指定互動能到達、一般文字缺失,符合文件描述。取得預期的較廣存取範圍後,再次測試一般文字,剩餘問題分別從傳遞與處理邏輯檢查。請使用新訊息;這不是歷史紀錄復原流程。不要用另一個機器人當傳送者,機器人之間的訊息行為需另行驗證。
UnifyPort 的適用範圍
UnifyPort 不是 BotFather 設定,也不是現有 Bot API webhook 的修復工具。它透過非官方介面連接訊息帳號,輸出標準化事件。如果需求是現有帳號的收件匣,而非公開機器人,請先閱讀 Telegram 授權文件再選擇架構。
在這條獨立路徑中,message.received 代表觀察到一則訊息;判定為入站訊息前,需檢查 data.message.direction。結構以事件文件為準。設定 signing_secret,並依 webhook 傳遞文件進行 HMAC-SHA256 簽章驗證。
標準化結構不會授予任意群組的存取權,也不保證找回漏收訊息。UnifyPort 沒有讀取訊息歷史的 REST API,也不保證重播。收到已授權事件時立即儲存,並避免把群組內容傳到不需要這些資料的下游系統。
常見問題
為何私訊正常,卻收不到群組文字?
私訊傳遞與群組可見範圍遵循不同規則。先檢查隱私模式與群組角色,再檢查更新和應用程式篩選。
一定要把機器人設為管理員嗎?
命令與回覆流程不需要。採用最小必要權限;管理員角色還有接收訊息以外的責任。
已關閉隱私模式,為何沒有變化?
Telegram 要求重新將機器人加入群組。確認機器人與群組正確,再由真人傳送新文字,檢查原始接收器。
改用 getUpdates 能看到更多群組訊息嗎?
不能。變更傳遞方式不會改變隱私模式或群組權限,應獨立診斷可見範圍。
來源與下一步
官方資料查核日期:2026-09-16。
帳號層級收件方案從 Telegram 授權文件開始;機器人專用方案則繼續使用官方 Bot API,先完成群組訊息驗收。
讓訊息接入變成一條穩定的產品管線。
先用統一 API 跑通傳送,再用標準事件把所有入站訊息接回業務系統。