【问题标题】:LUIS chatbot integration with Power BILUIS 聊天机器人与 Power BI 的集成
【发布时间】:2020-02-19 07:44:54
【问题描述】:

有什么方法可以通过 API 调用从 Power BI 获取图表?我发现 Power BI API 调用返回了嵌入 URL,但是有没有办法发送这个嵌入 URL 并在聊天机器人(Skype 或团队)中显示图表或报告?

【问题讨论】:

  • 我知道使用 Teams 机器人,您可以从 power bi 发布您的报告/仪表板的 url。但是 Power Bi Embed url 需要一个容器来显示报告,我相信这个容器不可用。但我看到了一些用于团队的示例机器人,比如 Sky-scanner,它们在其中显示航班信息,如卡片。也许你可以在你的聊天机器人中拥有一些功能,它可以保存(包含)嵌入 url 并显示为报告。
  • 你查到了吗?
  • 不,我仍在寻找一种方法来做到这一点,因为 Microsoft bot 框架聊天窗口不支持 Html,因此我无法嵌入 iframe 之类的容器。此外,它具有丰富 UI 的卡片类,但没有提供嵌入式 URL 选项。目前,它将显示图像或视频链接。
  • 是的,如前所述,您需要容器来保存 Teams 的 iframe 和聊天机器人,而 Skype 不提供此功能。我会说现在是不可能的。
  • 你有没有其他方法可以根据我的数据库数据在机器人聊天窗口中显示图表和图形报告?

标签: powerbi botframework chatbot azure-language-understanding


【解决方案1】:

您有几个选项可供您选择,但每个选项都有不同的限制。鉴于您的特定要求(即聊天中显示的图表),所有这些都是不完美的。您需要决定哪个最适合您。

1) 发送包含可点击链接的自适应卡片(或英雄卡片)(通过您的机器人) - 这将打开一个显示链接内容的单独选项卡/窗口。下面包含链接旁边的图标图像,但您可以包含指示图表/报告的完整图像。您可以尝试设计自适应卡片here

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) 创建一个静态选项卡(通过您的 Teams 清单) - 这可以在选项卡中显示链接的内容。但是,这可能需要我缺乏的某种级别的身份验证。从技术上讲,这是因为该选项卡显示了访问内容所需的登录按钮。但是,我的登录按钮会快速打开和关闭浏览器窗口,而不允许实际登录该选项卡。不确定这是特定于我还是更大的问题(开发人员的控制台显示错误......可能是需要适当修复的错误)。有一个在浏览器中打开的按钮,当点击该按钮时,在用户的浏览器中打开报告。您可以参考自定义标签文档here

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

3) 创建任务模块(通过您的 Teams 清单和机器人) - 这类似于选项 #1。不同之处在于它成为您的机器人和团队的功能,而不是严格来说是您的机器人。换句话说,它可以从您的机器人访问,但响应团队中采取的某些操作(相对于从您的机器人发送的瀑布步骤或组件对话活动)。您可以参考任务模块文档here

{
  [...],
  "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) 创建操作消息扩展(通过您的 Teams 清单) - 这将创建一个模式,其中嵌入了报告。目前,它遇到了与选项卡相同的问题,即显示报告登录按钮,但只闪烁打开一个立即关闭的浏览器窗口。同样,我不确定此错误是否特定于我。没有在浏览器中打开按钮选项。您可以参考消息扩展文档here

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;

应用清单 - 最后,应用清单需要包含某些属性,您的 bot 或消息传递扩展程序才能与 Teams 充分配合。查看app manifest checklist,包括底部关于Submission extras for bots 的sn-p。也可以参考manifest schema

希望有帮助!

【讨论】:

  • 感谢@Steven Kanberg 提供如此详细的答案。方法 4 对我来说看起来不错,让我尝试实现它。
【解决方案2】:

我找到了解决问题的办法。我将其发布在这里,以便其他人可以获得这些知识。 Microsoft bot 框架目前不支持 Power BI 的交互式图表或嵌入式图表是正确的,因此要在 bot 上显示图表/图形,我们可以使用图表 API。图表 API 将图表图像作为对我们请求 URL 的响应返回给我们。示例代码:

在上述代码的结果中,我得到了输出:

目前,我发现很少有 Chart API 服务,但都是付费服务。

  1. QuickChart

  2. ChartURL

  3. ImageChart

我希望这个解决方案对您有所帮助。

【讨论】:

    猜你喜欢
    • 2019-06-02
    • 2022-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 2021-01-09
    • 1970-01-01
    相关资源
    最近更新 更多