先定位失败方向
“消息失败”至少可能是发送失败、接收失败、权限失败或重复消费。先用一条唯一测试消息和明确时间记录现象,不要同时切换 Bot、Profile 和网络模式。
一、凭据只做存在性检查
if [ -n "${TELEGRAM_BOT_TOKEN:-}" ]; then echo token=set; else echo token=missing; fi
绝不打印完整 Token。若怀疑泄露,应在 Telegram 侧撤销并重新生成。确认后台进程是否继承了与前台相同的环境变量。
二、确认 Chat ID 和 Bot 权限
Bot 能收到更新,不代表它能向目标会话发送消息。群组需要确认 Bot 已加入并具备必要权限;频道、群组和私聊的标识形式也不同。先在一个你能控制的测试会话中验证,再扩大范围。
三、区分轮询和 Webhook
轮询模式要求进程持续运行并能访问 Telegram API;Webhook 模式要求公网 HTTPS、正确路由和证书。两种模式不要同时启用,否则可能出现更新被另一端消费、消息延迟或重复。
检查网络时只验证域名解析、HTTPS 连接和应用层返回码,不要把带 Token 的完整 URL 写入日志。
四、检查限流和重复实例
连续发送失败时,查看错误码和 Retry-After;不要立即并发重试。若重复回复或更新丢失,检查是否有多个 Gateway、Cron 或容器实例同时运行。
ps -ef | grep -i '[h]ermes'
五、最小消息验收
用固定短文本完成:启动一个实例、发送一条消息、确认返回码、确认目标会话收到一次、停止实例。成功后再恢复长文本、附件、定时任务和多 Agent。长输出可参考自动分段方案。