You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Telegram Bot通过URL发图触发Bad Request错误的排查求助

解决Telegram Bot sendPhoto接口返回400错误的问题

我来帮你排查这个Bad Request: wrong file identifier/HTTP URL specified错误的原因,这类问题通常和图片URL的合规性或者Telegram的限制有关,下面是常见的几个原因和对应的解决办法:

1. URL格式或编码问题

Telegram对传入的URL有严格的格式要求:

  • 确保URL是完整的HTTPS/HTTP链接,不能缺失协议头(比如不能只写drscdn.500px.org/xxx,必须带https://
  • 检查URL是否正确编码,虽然你例子里用了https%3A%2F%2F编码,但有些特殊字符(比如空格、中文、特殊符号)可能没正确转义。建议用标准的URL编码工具处理后再传入,避免出现Telegram无法解析的字符。

2. 图片URL的访问限制

很多图片托管服务器会有防盗链或者User-Agent限制:

  • Telegram Bot在拉取图片时,会使用自己的专属User-Agent,部分网站会拒绝这类请求。你可以先测试:直接在浏览器里打开失败的图片URL,如果能正常显示,但Bot无法拉取,大概率是网站的防盗链策略阻止了Telegram的请求。
  • 解决办法:要么换一个允许公开访问的图片托管服务,要么先把图片下载到本地,再用multipart/form-data的方式上传给Telegram(而不是直接传URL)。

3. 图片文件的大小或格式不符合要求

Telegram对sendPhoto接口的图片有明确限制:

  • 图片文件大小不能超过10MB
  • 支持的格式仅限JPG、PNG、WebP、静态GIF,如果是其他格式(比如SVG、BMP),Telegram会直接拒绝处理。

4. URL的有效期问题

有些图片URL是临时生成的(比如带签名、过期时间的链接),当链接过期后,Telegram再去拉取就会返回错误。你可以检查失败的URL是否还能正常访问,如果已经失效,需要重新生成有效的图片链接。

测试与代码示例

你可以先把失败的图片URL放到浏览器里打开,确认:

  • 链接是否能正常加载图片
  • 链接是否是完整的HTTPS/HTTP地址
  • 图片大小和格式是否符合Telegram的要求

如果以上都没问题,那大概率是网站的防盗链限制,这时候建议先下载图片到本地,再通过本地文件上传的方式调用sendPhoto接口,这里给你一个Python的示例代码:

import requests

bot_token = "你的Bot Token"
chat_id = "你的Chat ID"
image_url = "你要发送的图片URL"

# 先下载图片到本地
response = requests.get(image_url)
with open("temp_image.jpg", "wb") as f:
    f.write(response.content)

# 上传本地图片到Telegram
api_url = f"https://api.telegram.org/bot{bot_token}/sendPhoto"
files = {"photo": open("temp_image.jpg", "rb")}
payload = {"chat_id": chat_id}
requests.post(api_url, files=files, data=payload)

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

火山引擎 最新活动