Интеграция LUIS-чата с Power BI - PullRequest
2 голосов
/ 19 февраля 2020

Есть ли способ получить график из Power BI через вызов API? Я обнаружил, что URL-адрес встраивания возвращен вызовом API Power BI, но есть ли способ отправить этот URL-адрес встраивания и показать график или отчет в чате (Skype или команды)?

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

У вас есть несколько доступных вариантов, но каждый ограничен по-разному. Все они несовершенны, учитывая ваш конкретный запрос 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]});
}

enter image description here

2) Создать статистику c вкладка (через манифест вашей команды) - может отображать связанный контент на вкладке. Однако это, вероятно, потребует некоторого уровня аутентификации, которого мне не хватает. Технически это работает в том, что на вкладке отображается кнопка входа, необходимая для доступа к контенту. Однако кнопка входа в систему для меня быстро открывает и закрывает окно браузера, не позволяя осуществить фактический вход на вкладку. Не уверен, если это указано c для меня или более серьезная проблема (консоль разработчика показывает ошибку ... может быть ошибка, требующая правильного исправления). Есть кнопка открытия в браузере, при нажатии которой откроет отчет в браузере пользователя. Вы можете ссылаться на документы пользовательских вкладок здесь .

{
  [...],
  "staticTabs": [
    {
      "entityId": "powerBITab",
      "name": "Power BI Report Tab",
      "contentUrl": "<<some link>>",
      "websiteUrl": "<<some link>>",
      "scopes": [
        "personal"
      ]
    }
  ],
  [...]
}

enter image description here

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;

enter image description here

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;

enter image description here

Манифесты приложения - Наконец, манифест приложения потребует включения определенных свойств для вашего бота или расширений обмена сообщениями для полной работы с командами. Просмотрите контрольный список манифеста приложения , включая фрагмент в нижней части, касающийся Дополнительные функции для ботов . Всегда полезно сослаться на схему манифеста .

Надежда на помощь!

0 голосов
/ 04 марта 2020

У меня есть решение проблемы. Я публикую это здесь, чтобы другие могли получить эти знания. Правильно, что в настоящее время Microsoft Bot Framework не поддерживает интерактивные диаграммы или встроенные диаграммы Power BI, поэтому для отображения диаграмм / графиков на ботах мы можем использовать API-интерфейсы диаграмм. API Chart возвращают нам изображение диаграммы в ответ на наш URL-адрес запроса. Пример кода:

Hero card code

В результате вышеприведенного кода я получаю вывод:

output

В настоящее время я нашел несколько сервисов API Chart, но все они платные.

  1. QuickChart

  2. ChartURL

  3. ImageChart

Надеюсь, это решение поможет вам.

...