我使用 Microsoft Bot Framework 制作了一个普通机器人,并将其部署到 Azure 门户。
除了引导到 Teams 之外,我怎样才能使其成为 Teams 应用程序,例如,使其成为 Teams 应用程序包。 我在 Github 上检查了一些示例代码,发现一般机器人与 Teams 机器人有些不同,例如,一般机器人扩展了 ActivityHandler,但 Teams 机器人扩展了 TeamsActivityHandler。请问如何将我的机器人变成 Teams 应用程序?我需要更改我制作的机器人的代码吗?
谢谢
除了少数例外,您实际上不需要更改机器人代码即可部署到 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 无法处理此问题,并且在单击按钮时会出错(至少在使用标准活动处理程序时,不确定使用
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 中运行,您就可以针对您遇到的任何具体问题创建一个新问题。
编辑:要创建 Teams 应用程序包,您实际上要做的就是创建 Teams 应用程序清单并在“机器人”部分的清单中提供 Microsoft 应用程序 ID。您可以在 Teams 内的开发者门户应用中执行此操作。我无法再访问它,因此无法提供更具体的说明,但它非常简单,除了清单中的应用程序元数据之外,基本上只需要机器人的应用程序 ID。