为何Telegram Bot无法发送消息?附代码及运行环境
Telegram Bot无法发送消息的排查方案
- getUpdates接口调用问题:你的
get_chat_id函数直接取result[0],如果Bot最近没收到任何消息(比如你很久没给Bot发过消息),result会是空列表,这时候会抛出索引错误。另外,调用getUpdates接口官方推荐用GET请求,虽然POST也能工作,但更规范。建议先给Bot发一条消息再运行代码,或者给函数加异常处理:
def get_chat_id(bot_token): request = requests.get(f'https://api.telegram.org/bot{bot_token}/getUpdates') result = request.json()['result'] if not result: raise ValueError("Bot没有收到任何更新,请先给Bot发一条消息") return result[0]['message']['chat']['id']
Bot权限与对话限制:
- 私人聊天:Bot不能主动给未发过消息的用户发消息,必须你先给Bot发一条消息,Bot才能获取到你的chat_id并发送消息。
- 群组/频道:如果是给群组发消息,要确保Bot已经被添加到群组,并且拥有发送消息的权限(至少要有普通成员的发消息权限,必要时设为管理员)。
库版本与方法名问题:你导入的
telegram库如果是python-telegram-bot,不同版本方法名有差异:- v13及更早版本用
sendMessage - v20+版本已改为
send_message(小写加下划线)
先检查库版本:
pip show python-telegram-bot如果是v20+,把
my_bot.sendMessage改成my_bot.send_message。另外注意,别误装了telegram这个功能有限的库,建议卸载后安装正确的库:pip uninstall telegram pip install python-telegram-bot- v13及更早版本用
Token正确性:确认你的
bot_token是从BotFather获取的完整正确值,格式应为123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11,不要漏字符或加多余符号。
内容的提问来源于stack exchange,提问作者John Doe
相关产品推荐
相关产品推荐

