Для приложения чат-бота платформы Microsoft Bot, над которым я работаю, я настроил «Регистрация канала Bot» и разместил его на Azure.
Один из сценариев ios ожидает пользователя записать видео по скайпу и отправить в ответ. У меня есть функция Azure, которая сохраняет записанное видео из Skype в учетную запись хранения Azure.
Проблема, с которой я сталкиваюсь, заключается в том, когда я записываю видео в Skype () с помощью функции обмена видеосообщениями.
Чтобы получить доступ к загруженному видео из Skype, я предоставляю соответствующий токен на предъявителя вместе с вышеупомянутым URL, но не могу получить к нему доступ.
Несмотря на то, что файл загружен из Skype в Очередь (Azure функция Очередь срабатывает), доступ к этому файлу запрещен.
Предполагая, что последние исправления могут помочь, я обновил все ссылки на. NET core 3.0.1 на сегодняшний день. С нетерпением ждем желаемого подхода к решению этой проблемы.
Примечание. Эта проблема возникает только в версии «Skype для рабочего стола».
Ниже приведен блок кода для вашей справки.
private static async Task<HttpResponseMessage> RequestFile(string contentUrl, ILogger logger, string serviceUrl)
{
var credentials = DIContainer.Instance.GetService<MicrosoftAppCredentials>();
var token = await credentials.GetTokenAsync();
using (var connectorClient = new ConnectorClient(new Uri(serviceUrl), credentials.MicrosoftAppId, credentials.MicrosoftAppPassword))
{
using (var httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/octet-stream"));
var test = await httpClient.GetAsync(uri, HttpCompletionOption.ResponseContentRead);
return test;
}
}
}
Добавление дополнительных фрагментов кода:
private async Task<(string, string)> TrySaveAndGetContentUrl(IMessageActivity activity, string user)
{
var attachments = activity.Attachments;
if (attachments?.Any() ?? false)
{
var video = attachments.First();
return (await _attachmentsService.Save(video, user), video.ContentUrl);
}
return (null, null);
}
///_attachmentsService.Save method implementation
public async Task<string> Save(Attachment attachment, string user)
{
_logger.LogInformation("Enqueue save command. {@Attachment}", attachment);
var blobName = $"{user}/{Guid.NewGuid().ToString()}-{attachment.Name}";
var blob = _cloudBlobContainer.GetBlockBlobReference(blobName);
await EnqueueSaveCommand(attachment.ContentUrl, blobName, user);
return blob.Uri.ToString();
}
Пожалуйста, обратитесь к приведенному ниже блоку кода, чтобы сохранить вложения в Azure blob.
private async Task EnqueueSaveCommand(string contentUrl, string blobName, string user)
{
var queue = _queueClient.GetQueueReference(RouteNames.MediaAttachmentQueue); //RouteNames.MediaAttachmentQueue is "media-attachment-queue"
await queue.CreateIfNotExistsAsync();
var serializedMessage = JsonConvert.SerializeObject(new SaveMediaAttachmentCommand
{
FromUrl = contentUrl,
AttachmentName = blobName,
UserName = "userid@gmail.com",
});
var queueMessage = new CloudQueueMessage(serializedMessage);
await queue.AddMessageAsync(queueMessage);
}
Пожалуйста, предложите.