Telegram机器人调用sendMessage返回chat not found错误修复方案
错误原因
400 Bad Request: chat not found触发原因有两点:
- 未完成用户与机器人的会话初始化,Telegram禁止机器人主动向未给自己发过消息的用户推送内容
- 直接使用
@个人用户名作为chat_id参数,该参数在未完成会话绑定时无法被接口识别,且部分场景下用户名匹配存在优先级问题
遗漏配置与修复步骤
- 配置机器人隐私权限
打开Telegram找到BotFather,发送/setprivacy指令,选中你创建的目标机器人,选择Disable关闭隐私模式。未关闭该模式时,机器人无法接收你主动发送的普通消息,无法完成会话绑定。 - 主动发起会话初始化
进入你创建的机器人的对话窗口,发送任意内容,推荐直接发送/start指令。你之前发消息机器人无响应属于正常情况,刚通过BotFather创建的机器人默认没有配置任何消息回复逻辑,只要消息成功出现在对话窗口内,就代表初始化步骤完成,不需要机器人做出回复。
- 获取正确的chat_id
不要使用@用户名作为chat_id参数,调用接口获取当前账号对应的数字ID:
浏览器访问地址https://api.telegram.org/bot<你的机器人API Key>/getUpdates,在返回的JSON结构中找到message.chat.id对应的字段值,该值为一串纯数字,就是当前和机器人对话账号的有效chat_id。如果调用getUpdates返回的结果为空,回到机器人对话窗口再发送一条新消息,刷新接口页面即可拿到对应结果。
- 重新测试发消息接口
将原请求中的chat_id参数替换为上一步拿到的数字ID,构造请求:https://api.telegram.org/bot<你的机器人API Key>/sendMessage?chat_id=<获取到的数字chat_id>&text=Hello
请求返回"ok": true即为调用成功,你的Telegram账号会收到机器人发送的对应消息。
电脑端发通知的实现提示
- 妥善保管机器人API Key,泄露后他人可直接控制该机器人发送消息
- 电脑端不需要接入复杂SDK,直接通过任意编程语言发起HTTP请求调用上述sendMessage接口,即可实现通知推送,GET、POST请求方式均支持
- 如果后续出现调用失败,优先检查是否在Telegram客户端手动删除了和机器人的对话窗口,删除对话会重置会话状态,需要重新给机器人发一条消息完成初始化即可恢复
内容的提问来源于stack exchange,提问作者Dims
相关产品推荐
相关产品推荐

