使用Python Bot API向Telegram私有频道发送消息失败求助
解决Telegram Bot向私有频道发消息报"chat not found"的问题
问题原因
公开频道可以通过@频道用户名(比如@testme100)作为chat_id正常发消息,但私有频道URL里的特殊后缀(比如你用的@vMjFCXBghv00NDZl)是私密标识符,Telegram API无法通过它定位到私有频道,必须用数字格式的频道ID才行。
解决步骤
给机器人分配私有频道管理员权限
必须把机器人添加为私有频道的管理员,至少要开启"发送消息"权限,否则就算拿到ID也发不了消息。获取私有频道的数字ID
- 先在私有频道里发一条任意消息
- 调用Telegram Bot API的
getUpdates接口:https://api.telegram.org/bot<你的BOT_API_KEY>/getUpdates - 在返回的JSON数据里找到对应频道的
chat对象,提取里面的id字段——格式一般是-100xxxxxxxxxx(以负数开头,代表这是频道类型的聊天ID)
替换代码中的chat_id
把原来的chat_id = '@testme100'换成你拿到的数字ID。
修正后的代码示例
import requests # 替换为你的机器人token bot_token = "你的BOT_API_KEY" # 替换为私有频道的数字ID,比如-1001234567890 chat_id = "-1001234567890" text = 'Hello, world!' url = f'https://api.telegram.org/bot{bot_token}/sendMessage' data = {'chat_id': chat_id, 'text': text} response = requests.post(url, data=data) if response.status_code == 200: print('Message sent successfully.') else: print(f'Error sending message: {response.text}')
补充说明
- 私有频道的数字ID是固定的,获取一次后可以长期使用
- 如果调用
getUpdates没返回数据,检查机器人是否已加入频道,且发送测试消息的时间不超过24小时(API只保留最近的更新记录)
内容的提问来源于stack exchange,提问作者Jaffer Wilson
相关产品推荐
相关产品推荐

