Telegram机器人跨Bot发消息及回复转发、发送状态验证问询
可行解决方案
Telegram官方确实限制机器人之间直接互发消息,Bot API不支持机器人向其他机器人发送消息,也无法接收其他机器人的回复,以下是几种绕开限制的可行方案:
1. 普通用户账号中转
用一个普通Telegram账号作为消息中转站,流程如下:
- Bot2收到真实用户的消息后,将消息转发给这个普通账号
- 普通账号将消息转发给Bot1
- 普通账号监听Bot1的回复,再转发回Bot2
- Bot2将回复转发给真实用户
- 实现要点:必须使用支持MTProto协议的库(比如Pyrogram、Telethon)登录普通账号,因为Bot API仅适用于机器人账号,无法操作普通用户的消息收发。
2. 直接调用Bot1的后端API
如果Bot1是你开发的或有权限访问其后端,让Bot1暴露HTTP接口替代消息交互:
- 在Bot1的后端开发一个接口(比如
/api/get_reply),接收用户的提问内容参数 - Bot2收到用户消息后,直接调用该接口获取回复内容
- Bot2将接口返回的内容转发给真实用户
- 优势:完全避开Telegram的机器人互发限制,流程更高效,无需依赖额外账号。
3. 私密频道中转(限Bot1支持频道监听)
创建一个仅Bot1、Bot2可见的私密频道,作为消息传递的中间载体:
- 将Bot1和Bot2都设为频道管理员
- Bot2收到用户消息后,添加唯一标识(比如用户ID+请求UUID),发送到频道
- Bot1监听频道消息,处理后将回复附带相同标识发回频道
- Bot2监听频道内Bot1的消息,通过标识匹配到对应用户,再转发回复
- 注意:此方法仅适用于Bot1可以配置为监听频道消息的场景,第三方机器人大概率不支持。
状态验证方法
消息发送验证
- 普通账号中转:在普通账号转发消息后,检查账号的已发送消息记录,或监听Bot1的已读回执(若Bot1开启该功能),确认消息已被Bot1接收。
- API调用:直接检查接口的HTTP状态码(比如200表示调用成功)和返回内容,若成功拿到回复文本则说明Bot1已处理请求。
- 频道中转:查看频道消息记录,确认Bot2的消息已成功发布到频道。
回复接收验证
- 普通账号中转:在普通账号的代码中添加消息监听逻辑,一旦收到来自Bot1的消息,对比消息中的唯一标识(比如转发时附带的用户ID),确认是对应请求的回复。
- API调用:调用接口后直接获取返回值,无需额外监听,返回内容即为Bot1的回复。
- 频道中转:监听频道内Bot1发送的消息,通过预先约定的唯一标识匹配到对应的用户请求,验证回复的对应性。
错误排查验证
- 权限检查:确认普通账号未被Bot1拉黑,Bot1和Bot2在频道中拥有足够的消息收发权限。
- 日志记录:在Bot2和中转账号/频道的代码中添加详细日志,记录每一步操作(比如「已转发用户123的消息到中转账号」「收到Bot1的回复:XXX」),通过日志定位卡壳环节。
- 分步测试:先单独测试中转账号与Bot1的交互是否正常,再测试Bot2与中转账号的交互,最后整合全流程,逐步排查问题点。
内容的提问来源于stack exchange,提问作者Mega Wirex
相关产品推荐
相关产品推荐

