使用Python Requests调用Telegram Bot API发送消息遇400错误求助
解决Telegram Bot API 400 Bad Request(message text is empty)问题
问题根源
你的代码中,requests.post使用了params参数传递请求参数,这会将参数拼接在URL的查询字符串中。但Telegram Bot API的sendMessage接口要求POST请求的参数放在请求体(form-data或JSON格式)中,接口无法从URL查询参数中读取text字段,因此返回"message text is empty"错误。
修正方案
将请求参数从params参数改为data或json参数传递:
方案1:使用form-data格式(data参数)
import requests def send(text): token = 'your_token_goes_here' payload = {'chat_id': xxx, 'text': text, 'parse_mode': 'HTML'} resp = requests.post('https://api.telegram.org/bot{}/sendMessage'.format(token), data=payload) resp.raise_for_status() send('hello')
方案2:使用JSON格式(json参数,推荐)
import requests def send(text): token = 'your_token_goes_here' payload = {'chat_id': xxx, 'text': text, 'parse_mode': 'HTML'} resp = requests.post('https://api.telegram.org/bot{}/sendMessage'.format(token), json=payload) resp.raise_for_status() send('hello')
额外检查项
- 确认
chat_id为正确的数值或字符串(如果是用户ID,可通过getUpdates接口获取) - 确保
token替换为你机器人的真实令牌 - 若使用
parse_mode: HTML,需保证text内容符合Telegram的HTML格式规范(比如闭合标签、避免禁用标签)
内容的提问来源于stack exchange,提问作者Jing918
相关产品推荐
相关产品推荐

