我在电报中创建了一个机器人(@ mp3lyric_bot_test),并在我的频道(@ mp3lyric_test)中将其设置为管理员。现在我希望make a request使用telegram api将频道发送到频道。
我的mp3在网上,类似这样:http://bayanbox.ir/download/7028444634071302239/Sound-1.mp3
首先我用这种方法下载mp3:
<activity
// ....
android:noHistory="false" />
然后使用以下代码发送该字节数组(fileBytes):
我的机器人令牌是247655935:AAEhpYCeoXA5y7V8Z3WrVcNJ3AaChORjfvw
public static Task<byte[]> DownloadAsync(string requestUriSt)
{
var requestUri = new Uri(requestUriSt);
byte[] fileBytes;
using (var httpClient = new HttpClient())
{
using (var request = new HttpRequestMessage(HttpMethod.Get, requestUri))
{
using (var responseMessage = await httpClient.SendAsync(request))
{
fileBytes = await responseMessage.Content.ReadAsByteArrayAsync();
var audioString = Encoding.UTF8.GetString(fileBytes, 0, fileBytes.Length);
}
}
}
return fileBytes;
}
我有两个错误:
“请求实体太大”
error_code:400,说明:“错误请求:网址必须为UTF-8”(使用该mp3进行28kb的测试后)
答案 0 :(得分:1)
要发送新的AudioFile,您可以使用SendAudio方法,但使用InputFile字段。
首先创建一个InputFile
对象,然后在audio
方法的SendAudio
参数中传递这些字节
如果您需要 重新发送 相同的AudioFile
给另一个用户,那么您可以使用String
选项作为{{1} } audio
答案 1 :(得分:0)
我查找我的代码以发送我的字节数组(fileBytes),现在它可以工作:
using (var client = new HttpClient())
{
var uri = new Uri("https://api.telegram.org/bot247655935:AAEhpYCeoXA5y7V8Z3WrVcNJ3AaChORjfvw/sendAudio?chat_id=@mp3lyric_test");
using (var multipartFormDataContent = new MultipartFormDataContent())
{
var streamContent = new StreamContent(new MemoryStream(fileBytes));
streamContent.Headers.Add("Content-Type", "application/octet-stream");
streamContent.Headers.Add("Content-Disposition", "form-data; name=\"audio\"; filename=\"Sound-1.mp3\"");
multipartFormDataContent.Add(streamContent, "file", "Sound-1.mp3");
using (var message = await client.PostAsync(uri, multipartFormDataContent))
{
var contentString = await message.Content.ReadAsStringAsync();
}
}
}