Не удается получить доступ к изображениям из Microsoft Teams Activity при добавлении в буфер обмена - PullRequest
1 голос
/ 15 апреля 2020

Я работаю над ботом, который получает сообщения от Команд через Botframework и отправляет их в другое приложение. Я использую. NET Core.

Пока все отлично работает, я могу перемещать тексты, смайлики, файлы и т. Д. c. Но у меня проблема с изображениями в буфере обмена.

При отправке обычного файла я могу получить к нему доступ с помощью Attachment.Content ["downloadUrl"] действия, которое я получаю от Botframework.

Но когда я вставляю изображения из буфера обмена, они сохраняются другим способом: с помощью действия я получаю два вложения с разными URL-адресами (одно для макета и одно для ресурса изображения, я полагаю?), Как на изображении ниже, но, пытаясь получить изображение, я получаю 401 Unauthorized.

Есть ли способ получить доступ к этим изображениям, вставленным из буфера обмена, или они, вероятно, видны / доступны только внутри команд Microsoft?

Помоги мне, Оби-Ван Кеноби. Ты моя единственная надежда.

Спасибо за ваше время!

РЕДАКТИРОВАТЬ: Спасибо за ваш теплый прием!

Я использую перегрузку OnMessageActivityAsyn c отсюда:
https://docs.microsoft.com/en-us/microsoftteams/platform/bots/bot-basics?tabs=csharp#bot -logi c

    public class BotActivityHandler : Microsoft.Bot.Builder.Teams.TeamsActivityHandler
    {
        [...]

        protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
        {
            // it's either this url or the one parsed from the html, but both receive a 401 with a GET request like below or with Postman
            var imageUrl = turnContext.Activity.Attachments.Where(x => !x.ContentUrl.IsNullOrEmpty()).ToList().First().ContentUrl;

            var response = await myHttpClient.GetAsync(imageUrl);
            var img = await response.Content.ReadAsStreamAsync();
        }
[...]

TurnContext включает Activity с два вложения: одно имеет содержимое типа

<div><div>\n<div><span><img
src=\"https://eu-api.asm.skype.com/v1/objects/[...]/views/imgo\"
 width=\"247\" id=\"[...]\" itemscope=\"\" itemtype=\"http://schema.skype.com/AMSImage\"\"></span>\n\n</div>\n\n\n</div>\n</div>

, а другое - ContentUrl вроде

"https://smba.trafficmanager.net/emea/v3/attachments/[...]/views/original"

Activity received form Microsoft Teams

1 Ответ

0 голосов
/ 21 апреля 2020

Отвечено в https://github.com/MicrosoftDocs/msteams-docs/issues/1561

Можно использовать MicrosoftAppCredentials для получения токена JWT для доступа к изображениям.

var token = await new MicrosoftAppCredentials("appId", "password").GetTokenAsync();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

...