使用Telegram Bot API的sendMessage时无法通过Webhook接收消息求助
Telegram Bot Webhook 无法接收自身sendMessage消息的原因与解决办法
这是Telegram Bot API的默认设计逻辑,不是你的操作有误:
- 官方规则:机器人通过
sendMessage等API主动发送的消息,不会触发Webhook的更新推送。Telegram这么做是为了避免循环触发(比如机器人发消息后又收到自己的消息,导致重复处理逻辑)。只有用户、其他机器人或账号主动发送的消息、命令、回调事件等,才会推送到Webhook。
验证Webhook本身是否正常
可以先做个简单测试:
- 调用
getWebhookInfo接口(https://api.telegram.org/bot<你的token>/getWebhookInfo),检查返回的URL是否正确、有没有错误日志。 - 让用户手动给机器人发一条消息,看你的PHP页面是否能通过
file_get_contents("php://input")接收到更新,以此排除Webhook配置问题。
如果需要记录自身发送的消息
不要依赖Webhook,直接在调用sendMessage后保存返回结果即可:
// 调用sendMessage接口 $apiUrl = "https://api.telegram.org/bot123...:xyz.../sendmessage?chat_id=-123...&text=testText"; $response = file_get_contents($apiUrl); // 解析返回的消息数据 $sentMessage = json_decode($response, true); // 将消息数据存入数据库或日志,后续需要时直接读取 // 示例:写入日志文件 file_put_contents('sent_messages.log', json_encode($sentMessage) . PHP_EOL, FILE_APPEND);
Telegram的sendMessage返回结果里包含了消息ID、发送时间、内容等完整信息,完全可以替代Webhook接收的更新数据。
内容的提问来源于stack exchange,提问作者Adriano Ellero
相关产品推荐
相关产品推荐

