Telegram机器人可向自身发消息但无法给其他用户发送的问题求助
Telegram Bot 无法向非本人用户发送消息问题排查
问题描述
尝试使用以下代码向Telegram群组或非本人用户发送消息:
import requests token = "my_bot_token" url = f"https://api.telegram.org/bot{token}" Index = "Hola" myPersonalId = "my_personal_id" params = {"chat_id": myPersonalId, "text": Index} #John r = requests.get(url + "/sendMessage", params=params) JosephId = "Joseph_ID" params = {"chat_id": JosephId, "text": Index} #Joseph r = requests.get(url + "/sendMessage", params=params)
代码中向本人chat_id发送消息的请求可正常执行,但向Joseph的chat_id发送消息的请求失败,且代码无报错,此前认为只要拥有目标chat_id即可发送消息,寻求解决办法。
排查与解决办法
- 目标用户未主动与Bot互动:Telegram的隐私规则限制,Bot只能给主动发过消息的用户发送消息。让Joseph先给你的Bot发一条消息(任意内容),之后Bot就能正常给他发消息了。
- Chat ID不正确:确认Joseph的Chat ID是否准确。可以让Joseph给Bot发消息后,调用
getUpdates接口获取正确ID:
在返回的JSON数据里找到对应消息的r = requests.get(url + "/getUpdates") print(r.json())chat.id字段,这就是正确的Chat ID。 - Bot被用户屏蔽/拉黑:检查Joseph是否将Bot拉黑,或者在Telegram隐私设置中禁止了Bot发送消息。如果是这种情况,需要用户解除屏蔽。
- 改用POST请求:Telegram官方推荐使用
POST请求发送消息,GET请求可能在某些场景下受限。修改代码中的请求方式:r = requests.post(url + "/sendMessage", json=params) - 查看请求返回的错误信息:代码中未打印请求结果,无法定位具体问题。添加打印语句查看Telegram返回的错误详情:
比如返回print(r.json()){"ok":false,"error_code":403,"description":"Forbidden: bot was blocked by the user"},就明确是被用户屏蔽了。
内容的提问来源于stack exchange,提问作者Ankit
相关产品推荐
相关产品推荐

