ボットを使用して電報チャネルにメッセージを送信しています。
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を使用します。
そのエラーの理由は何ですか? Bad Request:不適切なファイル識別子/ HTTP URLが指定されました
ドキュメント で説明されているように、これには多くの考えられる理由があります。
あなたの所有者は here @farzad
file_idによる送信
file_idはボットごとに一意であり、ボット間で転送することはできません。
ファイル(写真、オーディオなど)をボットに転送すると、このファイル(ボット用)に有効なfile_id
を取得できます。このIDを使用してファイルを送信しても安全ですが、一部のファイル(オーディオ、ビデオなど)では機能しないようです。 (Telegram APIのバグである可能性があります)。
ファイルをダウンロードしてボットに再アップロードし、新しいfile_id
を取得すると、このIDが機能します。
@ webpagebot に移動し、ファイルのURLを送信します。電報のキャッシュは無効になり、これは機能するはずです。サーバーのバグのようです。
私の場合、(ステッカーとして)画像をアップロードできませんでした、http://.../blabla.webp
テレグラムアプリ経由ではなく、テレグラムボットAPI経由ではありません。
mimeタイプの動画は正しくありません。変更してください
電報サーバーからURLが表示されないか、URLが正しくない場合、このエラーが発生しています。
また、マルチパート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;
}
この方法では、ウェブサイトを用意する必要がなく、スタンドアロンシステムから使用できます。