Показать мое изображение из MS Graph в Azure Bot Services - PullRequest
0 голосов
/ 20 февраля 2019

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

1 Ответ

0 голосов
/ 07 марта 2019

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

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

В SDK узла BotBuilder V4 вы можете преобразовать двоичный файл изображения в 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'
});
...