电报机器人奇怪的错误:错误的请求:错误的文件标识符/ HTTP URL指定

时间:2017-03-09 14:19:18

标签: php bots telegram telegram-bot

我正在使用bot发送消息到电报频道。

使用webhook方法。

我通过链接发送file_id。我从频道帖子中获得了file_id。

对于某些文件,如GIF和&视频格式(MP4),

当我使用此代码时:

$url = 'https://api.telegram.org/bot'.token.'/sendVideo?chat_id='.uid."&video=".$file."&caption="
.urlencode($caption);

file_get_contents($url);

我收到这样的错误:

{"ok":false,"error_code":400,"description":"Bad Request: wrong file identifier/HTTP URL specified"}

我真的不知道为什么会得到这个, 对于错误来说,这是随机的,因为我猜这个代码无关紧要。

我使用的是来自频道帖子的file_id。

该错误的原因是什么? 错误请求:错误的文件标识符/指定的HTTP URL

  • 我搜索了所有相关主题,我发现没有好消息。

7 个答案:

答案 0 :(得分:11)

documentation中提到了很多可能的原因:

  • 通过file_id重新发送时,无法更改文件类型。即视频无法作为照片发送,照片无法作为文档等发送。
  • 无法重新发送缩略图。
  • 通过file_id重新发送照片将发送所有尺寸。
  • file_id对于每个机器人都是唯一的,无法转移 从一个机器人到另一个机器人。

答案 1 :(得分:8)

你的Awnser是here @farzad

按file_id发送
file_id对于每个机器人都是唯一的,不能从一个机器人转移到另一个机器人。

答案 2 :(得分:1)

如果您将文件(照片,音频......)转发到机器人,您将获得此文件的有效file_id(适用于您的机器人)。使用此id发送然后文件应该是安全的,但它似乎不适用于某些文件(音频,视频......)! (可能是Telegram API错误)。

您可以将文件下载并重新上传到您的机器人,以获得新的file_id,此ID可用。

答案 3 :(得分:0)

转到@webpagebot并向他发送一个指向该文件的网址。电报的缓存将失效,这应该有效。似乎这是服务器上的错误。

在我的情况下,我无法通过电报应用程序上传图像(作为贴纸),http://.../blabla.webp,而不是通过电报机器人API。

答案 4 :(得分:0)

您的哑剧类型视频更改不正确

答案 5 :(得分:0)

如果您的电报服务器未显示您的网址或您的网址不正确,则表明此错误。

您还可以使用多段html post方法将数据发送到此url(请填写{YourBotToken}和{your_channel_name_with_Atsign}值):

<form action="https://api.telegram.org/bot{YourBotToken}/sendVideo" method="POST" enctype="application/x-www-form-urlencoded">
<input type="file" name="video" />
<input type="hidden" name="chat_id" value="{your_channel_name_with_Atsign}" />
<button type="submit" >send</button>
</form>

在c#示例代码中是:

 public bool sendVideo(string filename,string sendTo)
        {
            try
            {
                var botToken="{YourBotToken}";
                var sendTo="{your_channel_name_with_Atsign}";
                var filePath = "C:\\sample\\" + filename;

                var sendTo, ="@YourChannelNameWithAtSign";
                var bytesOfFile = System.IO.File.ReadAllBytes(filePath);
                var url = $"https://api.telegram.org/bot{botToken}/sendVideo";
                var res =Upload(url, sendTo, "video", bytesOfFile, filename).Result;

            }
            catch (Exception ex)
            {
                return false;
            }
            return true;
        }



        private static async Task<string> Upload(string actionUrl,string chat_id,string fileParamName, byte[] paramFileStream, string filename)
        {
            var formContent = new MultipartFormDataContent
            {
                {new StringContent(chat_id),"chat_id"},
                {new StreamContent(new MemoryStream(paramFileStream)),fileParamName,filename}
            };
            var myHttpClient = new HttpClient();
            var response = await myHttpClient.PostAsync(actionUrl.ToString(), formContent);
            string stringContent = await response.Content.ReadAsStringAsync();

            return stringContent;
        }

这种方式不需要网站,您可以从独立系统中使用它。

答案 6 :(得分:0)

出现同样的错误,这是因为:

Bots can currently send video files of up to 50 MB in size, this limit may be changed in the future.

https://core.telegram.org/bots/api#sendvideo

尝试发布另一个文件大小 <= 50 MB 的视频。