У вас есть несколько доступных вариантов, но каждый ограничен по-разному. Все они несовершенны, учитывая ваш конкретный запрос c (т. Е. График отображается в чате). Вам нужно будет решить, какой из них лучше для вас.
1) Отправить адаптивную карту (или карту героя), содержащую ссылку, активируемую кликом (через вашего бота) - откроется отдельная вкладка / окно, отображающее связанный контент. Ниже приведено изображение значка рядом со ссылкой, но вы можете включить полное изображение с указанием графика / отчета. Вы можете поэкспериментировать с дизайном адаптивных карт здесь .
async sendCardStep (stepContext) {
const adaptiveCard = {
"type": "AdaptiveCard",
"version": "1.0",
"body": [
{
"type": "TextBlock",
"text": "Power BI Report",
"size": "Large"
},
{
"type": "TextBlock",
"text": "Description of the report..."
},
{
"type": "Container",
"items": [
{
"type": "ColumnSet",
"columns": [
{
"type": "Column",
"width": "stretch",
"minHeight": "200px",
"id": "column1",
"items": [
{
"type": "Image",
"altText": "",
"url": "<<some link>>",
"height": "200px",
"width": "20px"
}
]
},
{
"type": "Column",
"width": "stretch",
"selectAction": {
"type": "Action.OpenUrl",
"id": "powerBIAction",
"title": "Click to Open",
"url": "<<some link>>"
},
"id": "colum2",
"style": "default",
"items": [
{
"type": "ActionSet",
"actions": [
{
"type": "Action.OpenUrl",
"title": "Click to Open",
"url": "<<some link>>",
"id": "openUrl"
}
]
}
],
"verticalContentAlignment": "Center"
}
],
"id": "columnSet",
"minHeight": "200px",
"horizontalAlignment": "Left"
}
]
}
],
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json"
}
const adaptiveMessage = CardFactory.adaptiveCard(adaptiveCard);
await context.sendActivity({attachments:[adaptiveMessage]});
}
2) Создать статистику c вкладка (через манифест вашей команды) - может отображать связанный контент на вкладке. Однако это, вероятно, потребует некоторого уровня аутентификации, которого мне не хватает. Технически это работает в том, что на вкладке отображается кнопка входа, необходимая для доступа к контенту. Однако кнопка входа в систему для меня быстро открывает и закрывает окно браузера, не позволяя осуществить фактический вход на вкладку. Не уверен, если это указано c для меня или более серьезная проблема (консоль разработчика показывает ошибку ... может быть ошибка, требующая правильного исправления). Есть кнопка открытия в браузере, при нажатии которой откроет отчет в браузере пользователя. Вы можете ссылаться на документы пользовательских вкладок здесь .
{
[...],
"staticTabs": [
{
"entityId": "powerBITab",
"name": "Power BI Report Tab",
"contentUrl": "<<some link>>",
"websiteUrl": "<<some link>>",
"scopes": [
"personal"
]
}
],
[...]
}
3) Создать модуль задачи (через манифест вашей команды и бот) - Это похоже на вариант № 1. Разница в том, что это становится функцией вашего бота и команд, а не только вашего бота. Другими словами, он доступен для вашего бота, но в ответ на некоторые действия, предпринятые в командах (в отличие от шага водопада или действия диалога компонентов, отправленного вашим ботом). Вы можете ссылаться на документы модулей задач здесь .
{
[...],
"composeExtensions": [
{
"botId": "613ed145-a6da-4412-9435-30ac5325c84e",
"commands": [
{
"id": "openPowerBI",
"type": "action",
"context": [
"compose"
],
"description": "Command to run action to open Power BI graph",
"title": "Open Power BI Report",
"fetchTask": true,
"taskInfo": {
"title": "Card title",
"width": "medium",
"height": "medium",
"url": "<<some link>>"
}
}
]
}
],
[...]
}
const { TeamsActivityHandler, CardFactory, MessageFactory } = require('botbuilder');
class TeamsMessagingExtensionsActionBot extends TeamsActivityHandler {
constructor() {
super();
// See https://aka.ms/about-bot-activity-message to learn more about the message and other activity types.
this.onMessage(async (context, next) => {
const heroCard = this.getHeroCardMenu();
const heroMessage = MessageFactory.attachment(heroCard);
await context.sendActivity(heroMessage);
// By calling next() you ensure that the next BotHandler is run.
await next();
});
this.onMembersAdded(async (context, next) => {
const card = this.getGetHeroCardMenu();
const message = MessageFactory.attachment(card);
await context.sendActivity(message);
// By calling next() you ensure that the next BotHandler is run.
await next();
});
};
getHeroCardMenu() {
return CardFactory.heroCard('Open Power BI Report',
'Description of the report...',
null, // No images
[{ type: 'invoke', title: 'Click to Open', value: { type: 'task/fetch', data: 'adaptivecard' } }]);
}
handleTeamsTaskModuleFetch(context, taskModuleRequest) {
// taskModuleRequest.data can be checked to determine different paths.
return {
task: {
type: 'continue',
value: {
card: this.getTaskModuleAdaptiveCard(),
height: 220,
width: 400,
title: 'Adaptive Card: Inputs'
}
}
};
}
getTaskModuleAdaptiveCard() {
return CardFactory.adaptiveCard({
version: '1.0.0',
type: 'AdaptiveCard',
"body": [
{
"type": "TextBlock",
"text": "Power BI Report"
},
{
"type": "ActionSet",
"actions": [
{
"type": "Action.OpenUrl",
"title": "Click to Open",
"url": "<<some link>>",
"id": "powerBIAction",
"iconUrl": "<<some link>>"
}
]
}
]
});
}
}
module.exports.TeamsMessagingExtensionsActionBot = TeamsMessagingExtensionsActionBot;
4) Создать действие расширение для обмена сообщениями (через ваш манифест Команд) - это создает модальный режим со встроенным в него отчетом. В настоящее время он страдает той же проблемой, что и вкладка, в которой отображается кнопка входа в отчет, но мигает только открытое окно браузера, которое немедленно закрывается. Опять же, я не уверен, указана ли эта ошибка c для меня или нет. Нет кнопки «открыть в браузере». Вы можете ссылаться на документацию по расширению обмена сообщениями здесь .
const { TeamsActivityHandler } = require('botbuilder');
class TeamsMessagingExtensionsActionBot extends TeamsActivityHandler {
handleTeamsMessagingExtensionFetchTask(context, action) {
return {
task: {
type: 'continue',
value: {
width: 500,
height: 450,
title: 'Open Power BI Report',
url: '<<some link>>',
fallbackUrl: 'https://powerbi.microsoft.com/en-us/'
}
}
};
}
}
module.exports.TeamsMessagingExtensionsActionBot = TeamsMessagingExtensionsActionBot;
Манифесты приложения - Наконец, манифест приложения потребует включения определенных свойств для вашего бота или расширений обмена сообщениями для полной работы с командами. Просмотрите контрольный список манифеста приложения , включая фрагмент в нижней части, касающийся Дополнительные функции для ботов . Всегда полезно сослаться на схему манифеста .
Надежда на помощь!