智能机器人和 SDK

可以使用以下工具或功能之一创建在 Microsoft Teams 中工作的机器人:

具有 Microsoft Bot Framework 的机器人

Teams 机器人包括以下内容:

  • 由你主持的公共访问的 Web 服务。
  • Web 服务的 Bot Framework 注册。
  • Teams 应用服务包用于将 Teams 客户端连接到 Web 服务。

提示

使用开发人员门户将 Web 服务注册到 Bot Framework 并指定应用配置。 有关详细信息,请参阅通过 Teams 开发人员门户管理应用

Bot Framework 是一个丰富的 SDK,用于使用 C#、Java、Python 和 JavaScript 创建机器人。 如果具有基于 Bot Framework 的机器人,则可以对其进行修改以在 Teams 中工作。 使用 C# 或 Node.js 来利用我们的 SDK。 这些工具包拓展了基本机器人生成器 SDK 的类和方法,见如下所示:

  • 使用专用卡类型,例如连接器卡Microsoft 365 组。
  • 设置与活动相关的 Teams 特定频道数据。
  • 处理消息扩展请求。

可以在任何 Web 编程技术中开发 Teams 应用,并直接调用 Bot Framework REST API。 在所有情况下,都必须执行令牌处理。

具有 Power Virtual Agents 的机器人

Power Virtual Agents 是在 Microsoft Power 平台和 Bot Framework 上构建的聊天机器人服务。 Power Virtual Agent 开发过程使用引导式、无代码和图形界面方法,使团队成员能够轻松创建和维护智能虚拟代理。 在 Power Virtual Agents门户中创建聊天机器人后,可以轻松地将其与 Teams 集成。 有关入门的详细信息,请参阅 Power Virtual Agents 文档

注意

不得使用 Microsoft Power Platform 创建要发布到 Microsoft Teams 应用商店的应用。 Microsoft Power Platform 应用只能发布到组织的应用商店。

具有 Webhook 和连接器的机器人

Webhook 和连接器将机器人连接到 Web 服务。 使用 Webhook 和连接器,可以创建用于基本交互的机器人,例如创建工作流或其他简单命令。 它们仅在创建它们的团队中可用,适用于特定于公司工作流的简单流程。 有关详细信息,请参阅什么是 Webhook 和连接器

机器人的优点

Microsoft Teams 中的机器人可以进行一对一对话、群聊或参与团队的频道。 每个范围都为聊天机器人提供了独特的机会和挑战。

在频道中 在群组聊天中 在一对一聊天中
广阔的范围 成员数减少 传统方式
简洁的个人交互 @mention 到机器人 问答机器人
@mention 到机器人 类似于频道 讲笑话和做笔记的机器人

在频道中

频道包含多个用户之间的线程对话,甚至多达 2000 人。 这可能会让机器人拥有广阔的范围,但是个人交互需要简洁。 传统的多轮次交互不起作用。 相反,必须查找使用交互式卡片或对话 (TeamsJS v1.x) 中称为任务模块,或将对话移动到一对一对话以收集大量信息。 机器人仅有权访问其所在的 @mentioned消息。 可以使用 Microsoft Graph 和组织级别权限从对话中检索额外的消息。

在以下情况下,机器人在频道中效果更好:

  • 通知,特别是在为用户提供交互卡以便获取额外信息时。
  • 像投票和调查这样的反馈场景。
  • 单个请求或响应周期可解决交互,结果对多个成员对话非常有用。
  • 可以通过社交或娱乐机器人得到很棒的猫图像,随机挑选赢家等。

在群组聊天中

群聊是在三个及以上人员之间进行的非按线索组织的对话。 其中的成员一般比频道中的少且更短暂。 与通道类似,机器人只能直接访问消息 @mentioned

如果机器人在频道中工作良好,那么在群聊中也会更好。

在一对一聊天中

一对一聊天是对话机器人与用户进行交互的传统方式。 一对一对话机器人的一些示例包括:

  • 问答机器人
  • 在其他系统中启动工作流的机器人。
  • 讲笑话的机器人。
  • 记录笔记的机器人。 在创建一对一聊天机器人之前,请考虑基于对话的界面是否是展示功能的最佳方式。

机器人的缺点

机器人与用户之间的广泛对话是一种完成任务的缓慢而复杂的方法。 支持过多命令(尤其是各种命令)的机器人不会成功或被用户正面查看。

在聊天中具有多轮体验

广泛的对话需要开发人员保持状态。 若要退出此状态,用户必须超时或选择“ 取消”。 此外,这个过程也很繁琐。 例如,请查看以下对话方案:

用户:安排与 Megan 的会议。

机器人:我找到了 200 个结果,包括名字和姓氏。

用户:安排与 Megan Bowen 的会面。

机器人:好吧,要在什么时间与 Megan Bowen 见面?

用户:下午 1:00。

机器人:哪一天?

支持过多的命令

由于当前机器人菜单中只有 6 个命令,因此不太可能以任何频率使用其他命令。 深入到特定区域的机器人,而不是试图成为用途广泛的助理,工作状况和费用会更合理。

维护大型知识库

机器人的一个缺点是,很难使用未调调的响应维护大型检索知识库。 机器人最适合进行简短、快速的交互,而不适合在寻找答案的长列表之间切换。

限制和已知问题

如果无法在开发人员门户中创建机器人,请确保满足以下条件:

  • 为用户启用应用注册:在组织范围内禁用应用注册时,除具有Microsoft Entra管理员访问权限的用户以外的用户 () 无法注册新应用。 若要允许用户注册应用,管理员必须在Microsoft Entra管理中心“用户可以注册应用程序”切换为“”。

  • 向特定用户授予注册新应用的权限

    • 对于应用注册限制为每个用户 250 个应用的 Microsoft 365 许可证,请确保租户管理员将Microsoft Entra ID 添加到具有以下角色的用户:

      有关如何分配角色的信息,请参阅向用户分配Microsoft Entra角色

    • 对于 Microsoft 365 (P1、P2、E3 或 E5 计划) 许可证,其中应用注册限制默认为租户限制 (每个用户超过 300,000) ,请确保租户管理员向用户添加Microsoft Entra ID,并向用户分配具有以下权限的自定义角色

      • microsoft.directory/applications/create
      • microsoft.directory/applications/createAsOwner

代码段

以下代码提供了频道团队范围的机器人活动示例:


protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
    var mention = new Mention
    {
        Mentioned = turnContext.Activity.From,
        // EncodeName: Converts the name to a valid XML name.
        Text = $"<at>{XmlConvert.EncodeName(turnContext.Activity.From.Name)}</at>",
    };
    
    // MessageFactory.Text(): Specifies the type of text data in a message attachment.
    var replyActivity = MessageFactory.Text($"Hello {mention.Text}.");
    replyActivity.Entities = new List<Entity> { mention };

    // Sends a message activity to the sender of the incoming activity.
    await turnContext.SendActivityAsync(replyActivity, cancellationToken);
}

以下代码提供了一对一聊天的机器人活动示例:


// Handle message activity
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
    // Remove recipient mention text from Text property.
    // Use with caution because this function is altering the text on the Activity.
    turnContext.Activity.RemoveRecipientMention();
    var text = turnContext.Activity.Text.Trim().ToLower();

    // Sends a message activity to the sender of the incoming activity.
    await turnContext.SendActivityAsync(MessageFactory.Text($"Your message is {text}."), cancellationToken);
}

代码示例

示例名称 Description .NETCore Node.js Python 清单
Teams 对话自动程序 此示例应用演示如何使用机器人框架 v4 中提供的不同机器人对话事件。 View View View View
机器人示例 机器人框架 v4 示例集 View View View

后续步骤

另请参阅