Отображение моего изображения из MS Graph в Azure Bot Services

Как я могу отправить пользователю карточку с фотографией, которую я получил от Microsoft Graph, например, с URL-адреса https://graph.microsoft.com/v1.0/me/photo/$value? Я думаю, что он возвращает большой двоичный объект, но вместо этого бот-фреймворк хочет URL-адрес изображения. Я попробовал это с CardFactory.heroCard(..., [photo], ...), но он этого не показал.


comment
Используете ли вы Node BotBuilder SDK v4?   -  person Kyle Delaney    schedule 20.02.2019
comment
Да @KyleDelaney   -  person AskYous    schedule 20.02.2019
comment
Ваша цель — показать пользователю фото его профиля?   -  person Kyle Delaney    schedule 22.02.2019
comment
Нет. Это чтобы показать чье-то фото. Я использовал /me только потому, что это проще, чем найти идентификатор конкретного пользователя. me проще. Я не знаю, какое отношение этот вопрос имеет к моей проблеме.   -  person AskYous    schedule 22.02.2019
comment
Есть ли конкретное руководство, которое вы использовали, чтобы помочь вам аутентифицировать Microsoft Graph API?   -  person Kyle Delaney    schedule 28.02.2019
comment
Да. Это для получения доступ к Microsoft Graph и этому для получения изображения.   -  person AskYous    schedule 28.02.2019
comment
Какой канал вы используете? Есть способ вставлять фото в сообщения, но это зависит от возможностей канала. Если канал не поддерживает встроенные изображения, вам придется загрузить фотографию на общедоступный URL-адрес, и, возможно, не стоит раскрывать чьи-то личные данные таким образом.   -  person Kyle Delaney    schedule 07.03.2019
comment
Я использую веб-канал. Он принимает изображения, но только URL-адрес изображения. Не капля изображения.   -  person AskYous    schedule 07.03.2019
comment
Вы имеете в виду веб-чат?   -  person Kyle Delaney    schedule 07.03.2019
comment
Мой ответ приемлем?   -  person Kyle Delaney    schedule 11.03.2019
comment
Возможно, это произойдет только через некоторое время, пока я не смогу его протестировать (мы работаем над другим проектом). Я предполагаю, что он работает, и отмечу его как ответ.   -  person AskYous    schedule 12.03.2019


Ответы (1)


документация описывает, как включить встроенный двоичный файл изображения в сообщение:

Для каналов, поддерживающих встроенные двоичные файлы изображения, вы можете установить для свойства contentUrl элемента Attachment двоичный код изображения base64 (например, data:image/png;base64,iVBORw0KGgo…). Канал будет отображать изображение или URL-адрес изображения рядом с текстовой строкой сообщения.

В BotBuilder V4 Node SDK вы можете преобразовать двоичный файл изображения в base64 следующим образом:

// After getting an HTTP response:

var imageType = "image/jpeg"
var imageBytes = Buffer.from(response.data).toString('base64');
var imageSrc = `data:${imageType};base64,${imageBytes}`;

var reply = MessageFactory.attachment({
    contentType: imageType,
    contentUrl: imageSrc,
    name: "Your photo"
}, "Here it is:");

await turnContext.sendActivity(reply);

Есть один нюанс, о котором следует помнить. Если вы используете библиотеку Axios (это хорошая идея, поскольку она позволяет вам ожидать HTTP-запросов), вам нужно будет установить responseType в конфигурации на arrayBuffer, иначе двоичный файл изображения может быть отформатирован неправильно, и изображение не будет отображаться:

var response = await axios.get("https://graph.microsoft.com/v1.0/me/photo/$value", {
    responseType: 'arraybuffer'
});
person Kyle Delaney    schedule 07.03.2019