You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加特定前缀后无法向Telegram Bot发送消息,请求排查

问题原因及解决方案

核心问题

取消注释添加前缀的代码后发送失败,本质是GET请求的URL参数未编码+长度限制导致的:

  • 直接将包含换行、反引号、空格的消息拼接到URL的query参数中,这些特殊字符未经过URL编码会破坏请求结构,Telegram服务器无法正确解析参数。
  • 添加前缀后消息长度增加,可能触发了GET请求的URL长度上限,导致请求被静默拒绝。
  • 之前没看到报错是因为代码没有打印Telegram返回的响应内容,实际上服务器可能已经返回了格式错误或参数无效的提示。

修复方案

改用POST请求传递参数,避免URL编码和长度限制问题,修改后的代码如下:

import requests
import json
import pandas as pd
import numpy as np

TOKEN = '......'
chat_id = '.......'

nparr = np.array(['a','b'])

message = ''    
df2 = pd.DataFrame({'Weight':[45, 88, 56, 15, 71], 
                'Name':['Sam', 'Andrea', 'Alex', 'Robin', 'Kia'], 
                'Age':[14, 25, 55, 8, 21]}) 
message = df2.to_string(index=False, header=False)
message = f'```\n{message}```'  # 保持表格格式
message = np.array2string(nparr) +  'some\n' + message
message = 'for testing_' + message  # 现在可以正常启用
message = message + '\ntime:....' 

# 使用POST请求,参数通过JSON传递
url = f"https://api.telegram.org/bot{TOKEN}/sendMessage"
payload = {
    "chat_id": chat_id,
    "text": message,
    "parse_mode": "Markdown"
}
response = requests.post(url, json=payload)
# 打印响应内容排查问题
print(response.text)
print(message)

额外建议

  • 始终打印response.text,Telegram会返回具体的错误信息(比如Markdown格式错误、参数缺失),方便快速定位问题。
  • 如果必须使用GET请求,需要对message进行URL编码,比如使用urllib.parse.quote(message)处理后再拼接,但POST方式更稳定可靠。

内容的提问来源于stack exchange,提问作者user18425837

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 09:07:49