Telegram Bot调用sendMessage时报错“Bad Request: message text is empty”求助
解决Telegram Bot sendMessage报错“Bad Request: message text is empty”的排查步骤
我之前帮朋友处理过几乎一模一样的问题,结合实际经验给你几个可行的排查方向:
确认请求参数的实际有效性:
虽然你提到用UTF-8编码,但GET请求的参数很容易因为URL编码遗漏或变量赋值出错导致text为空。比如文本含&、%这类特殊字符时,未正确编码会直接截断参数;或者代码里的变量被意外清空(比如依赖库更新导致字符串处理逻辑异常)。建议先测试纯文本内容(如test message),同时检查text参数名是否拼写正确(别写成txt之类的低级错误)。用curl验证基础请求是否正常:
直接用curl发送最简测试请求,排除代码逻辑的干扰:curl "https://api.telegram.org/bot<你的BotToken>/sendMessage?chat_id=<测试ChatID>&text=HelloWorld"如果这个请求成功,说明问题肯定出在你的代码逻辑里;如果仍报错,大概率是Bot权限或Telegram临时问题,但结合你GetUpdates正常的情况,后者概率极低。
排查中间层干扰:
若你的Bot部署在服务器上,近期是否更换过代理、CDN或防火墙规则?部分网关会过滤GET参数或限制URL长度——如果消息文本较长,GET请求的URL可能超过服务器允许的上限,导致text被截断为空。这种情况建议换成POST方法,将参数放在请求体中(这也是Telegram API推荐的方式,更适配长文本和复杂参数)。检查文本生成逻辑:
有没有最近的代码更新(或依赖库自动更新)导致消息文本为空?比如从数据库/第三方接口取数据时返回空值,或者条件判断错误导致文本未正常生成。建议在发送请求前添加日志,打印要发送的text内容,确认它确实不是空字符串。
内容的提问来源于stack exchange,提问作者Kryvich
相关产品推荐
相关产品推荐

