Telegram Bot - 错误请求:指定了错误的文件标识符/HTTP URL

Nac*_*alb 0 python web telegram-bot

我在通过该sendDocument方法将文件上传到电报时遇到了一个奇怪的问题。我正在用python-telegram-botpython编写一个机器人。我尝试向用户发送一个 ZIP 文件,将 URL 作为document. 这是网址:http://telegram.someurl.tdl/32487352.zip

bot.send_document(
    chat_id,
    document=document,
    filename=filename,
    timeout=60)
Run Code Online (Sandbox Code Playgroud)

据我所知,我的文件遵循 Telegram 给出的规则:http://telegram.someurl.tdl/32487352.zip

  • 为 Telegram 提供 HTTP URL
    • http://telegram.someurl.tdl/32487352.zip
  • 最大 20 MB
    • 2.14 MB
  • 正确的 MIME 类型
    • application/zip
  • 通过 URL 发送目前仅适用于 gif、pdf 和 zip 文件
    • ZIP file

这些是标题:

Accept-Ranges ?bytes
Connection ?keep-alive
Content-Length ?2247049
Content-Type ?application/zip
Date ?Sun, 29 Oct 2017 21:15:36 GMT
ETag ?"59f5e6e6-224989"
Last-Modified ?Sun, 29 Oct 2017 14:34:14 GMT
Server ?nginx/1.10.3 (Ubuntu)
Run Code Online (Sandbox Code Playgroud)

该文件由 nginx (v1.10.3) 提供,使用这个简单的配置。

server {
    listen 80;
    server_name telegram.someurl.tdl;

    root /path/to/download_dir;
    location / {
        try_files $uri $uri/ =404;
    }
}
Run Code Online (Sandbox Code Playgroud)

当然,Where/path/to/download_dir替换为实际路径。

正如标题中所说,我得到的错误是这个:

Accept-Ranges ?bytes
Connection ?keep-alive
Content-Length ?2247049
Content-Type ?application/zip
Date ?Sun, 29 Oct 2017 21:15:36 GMT
ETag ?"59f5e6e6-224989"
Last-Modified ?Sun, 29 Oct 2017 14:34:14 GMT
Server ?nginx/1.10.3 (Ubuntu)
Run Code Online (Sandbox Code Playgroud)

还发送另一个我在网上找到的 ZIP 文件:http : //techslides.com/demos/samples/sample.zip

我已经在寻找解决方案,例如。这个Telegram bot 奇怪的错误:错误的请求:错误的文件标识符/HTTP URL 指定,这为什么我在电报机器人中得到错误的文件标识符/HTTP URL 指定错误?不要帮助。

我希望你们能帮我解决这个问题。

Nac*_*alb 5

我的一个朋友帮助了我,我们可以解决这个问题。根据 Telegram Bot API 文档,我所做的一切都是正确的,但看起来文档并不完整。

问题是我的文件名。该文件必须以字母开头。它不能以数字开头。所以例如。test123.zipt123.zip工作,但123.zip1test.zip不。

2020 年 7 月更新:

Telegram 似乎改变了它的文件名政策。我只是尝试了以下名称,并且每个名称都有效。我的猜测是他们现在接受任何文件名,尽管并非每个客户端都以相同的方式保存文件:

\-\-\-\-.zip   # in Telegram Desktop on Windows shown as "\-\-\-\-.zip" but saved as "_-_-_-_-.zip"
               # in Telegram on Android shown and saved as "----.zip"
hällo.zip
1.zip
test\nme.zip   # even with a filename with a literal new line character
               # in Telegram Desktop on Windows shown as "testme.zip" but saved as "test_me.zip"
               # in Telegram on Android shown and saved as "testme.zip"
tttt.zip
!test.zip
test!.zip
ttt.zip
t.zip
t1.zip
1t.zip
000.zip
äääää.zip
Run Code Online (Sandbox Code Playgroud)

测试如下:

for path in paths:
    print(path)
    chat.send_document('http://test.someurl.tdl/%s' % path, path)
Run Code Online (Sandbox Code Playgroud)