我正在使用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
答案 0 :(得分:11)
documentation中提到了很多可能的原因:
答案 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 的视频。