【问题标题】:How can I turn my bot into a MS Teams app如何将我的机器人变成 MS Teams 应用程序
【发布时间】:2021-05-25 08:21:03
【问题描述】:

我使用 Microsoft Bot Framework 制作了一个普通的机器人,并将其部署到 Azure 门户。

除了引导到 Teams 之外,我如何才能使其成为 Teams 应用,例如,使其成为 Teams 应用包。 我在 Github 上查看了一些示例代码,发现通用机器人与 Teams 机器人有点不同,例如,通用机器人扩展了 ActivityHandler,而团队机器人扩展了 TeamsActivityHandler。请问如何将我的机器人变成 Teams 应用程序?我需要修改我经常制作的机器人的代码吗?

谢谢

【问题讨论】:

    标签: botframework microsoft-teams microsoft-appstudio


    【解决方案1】:

    除了少数例外,您实际上不需要更改机器人代码即可部署到 Teams 频道。但是,我确实认为在开发过程中应该注意和考虑一些事情。首先,我假设您已经或知道如何从机器人服务打开频道。完成此操作后,您可以在 Teams 中测试您的机器人,甚至无需创建 Teams 应用,只需将 Microsoft 应用 ID 粘贴到聊天收件人:字段(显然不建议共享此 ID 进行一般测试)。

    您可能需要的主要更改是删除提及。这些将与 QnA Maker 和/或 LUIS 混淆,因为它们包含在查询字符串中。我一直在做这个作为 onMessage 处理程序的第一步。我目前的机器人为此使用正则表达式,例如

    if (context._activity.text) ( // Make sure there is activity text before trying to replace
        context._activity.text = context._activity.text.replace(/(@|<at>)((Bot Name)|(Teams App Manifest Name))(<\/at>)? ?/g, '');
    }
    

    但是,我也看到 TurnContext 对象可以通过TurnContext.removeRecipientMention(context.activity); 执行此操作,不过我自己并没有真正尝试过。如果它有效,如果您发现自己像我过去所做的那样更改机器人名称,那将非常有帮助......

    我对我的机器人所做的另一项主要更改是创建带有菜单按钮的团队特定的自适应卡片。默认情况下,Action.Submit 将适用于 Web 频道,但不适用于 Teams 频道。一个典型的动作看起来像

    {
        "type": "ActionSet",
        "actions": [
            {
                "type": "Action.Submit",
                "title": "Get Order Status",
                "data": "Get Order Status"
            }
        ]
    }
    

    但 Teams 无法处理此问题,并且会在单击按钮时出错(至少在使用标准 Activity 处理程序时,不确定使用 TeamsActivityHandler 是否相同。)相反,您应该在显示卡片之前检查频道使用Action.Submit 操作并显示替代卡片。例如

    if (context.activity.channelId == 'msteams') {
        var welcomeCard = CardHelper.GetMenuCardTeams(welcomeMessage,'Y','Y');
    } else {
        var welcomeCard = CardHelper.GetMenuCard(welcomeMessage,'Y','Y');
    }
    

    然后你对 Teams 的操作看起来像

    {
        "type": "ActionSet",
        "actions": [
            {
                "type": "Action.Submit",
                "title": "Get Order Status",
                "data": {
                    "msteams": {
                        "type": "imBack",
                        "value": "Get Order Status"
                    }
                }
            }
        ]
    }
    

    我尝试将这些组合起来,但效果不佳。您可以向处理程序添加一些内容以使 Teams 卡片在 Web 中工作,但文本不会像典型按钮那样插入到聊天中,而是本质上类似于反向通道事件。我更喜欢这种方法。

    除此之外,您应该能够按原样运行您的机器人,您的单独问题中提到的附件除外。我还没有让它工作,我相信这可能与不使用 TeamsActivityHandler 有关,但我不确定。

    希望这会有所帮助。继续尝试,一旦机器人在 Teams 中运行,您就可以针对遇到的任何特定问题创建一个新问题。

    【讨论】:

    • @mechabunny19c 这是否解决了您的问题?如果是这样,请考虑接受并支持此答案,以便其他人可以找到它。
    猜你喜欢
    • 2022-01-28
    • 2019-01-05
    • 2021-10-14
    • 2021-05-30
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多