Как я могу отправить пользователю карточку с фотографией, которую я получил от Microsoft Graph, например, с URL-адреса https://graph.microsoft.com/v1.0/me/photo/$value
? Я думаю, что он возвращает большой двоичный объект, но вместо этого бот-фреймворк хочет URL-адрес изображения. Я попробовал это с CardFactory.heroCard(..., [photo], ...)
, но он этого не показал.
Отображение моего изображения из MS Graph в Azure Bot Services
Ответы (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'
});
me
проще. Я не знаю, какое отношение этот вопрос имеет к моей проблеме. - person AskYous   schedule 22.02.2019