跳到主要内容

将智能体连接到 Microsoft Teams

Microsoft Teams 渠道让用户可以在 Teams 私聊、团队频道和群聊中与 n8n 智能体对话。

信息

功能可用范围

Microsoft Teams 渠道可用于:

  • **n8n Cloud:**自 n8n 2.46.0 起的所有套餐。
  • **自托管:**自 n8n 2.46.0 起的所有套餐。
信息

预览状态

智能体的 Microsoft Teams 渠道处于预览阶段,可能在后续版本中发生变化。请避免在生产环境中依赖此功能。

连接 Teams 有两种方式:

  • 推荐设置:使用 Microsoft 账号登录,n8n 会为你创建应用注册、Azure Bot 和 Teams 应用。
  • 手动设置(界面显示为 Use your own Microsoft app,使用自己的 Microsoft 应用):自行创建应用注册和 Azure Bot,再向 n8n 提供凭据。

具体步骤请参阅设置 Teams 渠道。两种设置方式的最终结果相同。下文关于智能体使用位置、消息监听方式、主动发送的消息、文件和 Microsoft Graph 权限的说明均适用于两种方式。

Teams 渠道的工作原理 ​

Teams 智能体由四部分组成:Microsoft 侧的三个资源,以及 n8n 中的一个凭据。

组成部分作用
Microsoft Entra 应用注册为机器人提供身份。这是单租户应用,因此只能在你的组织中使用。
Azure Bot接收来自 Teams 的消息并转发到 n8n。使用免费的 F0 层级,并启用 Microsoft Teams 渠道。
Teams 应用包包含应用清单和图标的 zip 文件。用户在 Teams 中添加此应用,即可联系智能体。
Microsoft Entra Service Principal 凭据在 n8n 中保存应用注册的租户 ID、客户端 ID 和客户端密钥。

有人在 Teams 中向智能体发送消息时:

  1. Teams 将消息发送到 Azure Bot。
  2. Azure Bot 将消息转发到你的 n8n 实例。
  3. n8n 运行智能体的已发布版本。
  4. 智能体在同一聊天或帖子中回复。处理期间,Teams 会显示正在输入的提示。

每个帖子对应一个独立会话,因此智能体会记住同一帖子中之前的消息。要重新开始,请发送 /new。如果某个工具需要批准,智能体会发送审批卡片。在频道和群聊中,只有需要回应的人能看到该卡片。

信息

先发布智能体

Teams 渠道运行智能体的已发布版本。发布前,智能体不会接收 Teams 消息。可以提前设置渠道,n8n 会在发布时连接渠道。

用户可以在哪里使用智能体 ​

在 **Choose where it works(选择使用位置)**步骤中,决定用户可以在哪里联系智能体。私聊始终开启。你也可以启用团队频道和群聊,并选择智能体是否读取其中的每条消息。

选项使用位置如何开始对话新增权限谁来批准
Direct chat(私聊)与智能体一对一聊天打开应用并发送消息无无需批准
Team channels(团队频道)已添加应用的团队中的频道将应用添加到团队,然后在频道中 @提及智能体ChannelMessage.Read.Group团队所有者在添加应用时批准
Group and meeting chats(群聊和会议聊天)已添加应用的群聊和会议聊天将应用添加到聊天,然后 @提及智能体ChatMessage.Read.Chat将应用添加到聊天的人
Read all channel messages(读取所有频道消息)团队频道频道中的任何消息除 Team channels 所需权限外,无其他权限团队所有者在添加应用时批准
Read all group-chat messages(读取所有群聊消息)群聊和会议聊天聊天中的任何消息除 Group and meeting chats 所需权限外,无其他权限将应用添加到聊天的人

表中的权限是特定资源同意(RSC)权限。它们包含在应用包中,仅适用于添加该应用的团队或聊天,允许智能体读取其中的消息和粘贴的图片,不授予访问组织其他内容的权限。

这些选项属于应用包的一部分。如果以后修改选项,n8n 会构建新的应用包,你需要重新上传或发布。参阅管理 Teams 渠道。

智能体如何监听频道和群聊 ​

在私聊中,每条消息都会运行智能体,回复内容会随着生成逐字显示。

在团队频道和群聊中,智能体有两种监听方式。智能体处理完成后,回复会作为一条完整消息发送。

仅在提及时响应 ​

这是默认方式。只有有人 @提及智能体时,它才会参与:

  • 有人 @提及智能体时,它会加入对话。在频道中,加入的是该帖子;在群聊中,加入的是整个聊天。
  • 加入后,该帖子或聊天中的后续消息即使没有提及智能体,也会传递给它。
  • 智能体尚未加入的帖子或聊天中的消息,不会传递给它。

读取所有消息 ​

启用 **Read all channel messages(读取所有频道消息)**或 **Read all group-chat messages(读取所有群聊消息)**后:

  • 频道或聊天中的每条消息都会运行智能体,无需 @提及。
  • 智能体自行决定是否回复。如果消息不是发给它的,可以保持沉默。
  • 每条消息都会消耗模型额度,即使智能体不回复。
  • n8n 会忽略其他机器人发送的消息。

用户直接向智能体求助时,保留默认设置即可。如果智能体需要跟踪完整对话,例如回答未直接向它提出的问题,可以开启读取所有消息选项。在消息频繁的频道中,这会消耗大量模型额度。

智能体主动发送的消息 ​

智能体不仅能回复,还能主动发起对话,例如通过“向 anna@example.com 发送周一摘要”这样的定时任务:

  • 私信:智能体向某个人发送私信。该用户必须已在 Teams 中添加此应用。
  • 频道和群聊消息:智能体在团队频道或群聊中发起新帖子。该团队或聊天必须已添加此应用。

要联系某个人,智能体需要其 Teams ID;要联系频道,则需要频道 ID。它可以为你查找这些 ID:

  • 按电子邮件查找:根据电子邮件地址查找用户,需要 User.ReadBasic.All。
  • 按名称查找:根据团队名和频道名查找频道,例如“Marketing General”。需要 Team.ReadBasic.All 和 Channel.ReadBasic.All。

这些权限由管理员与文件访问权限一并批准,参阅 Microsoft Graph 权限。未获得这些权限时,只要有人曾在某个频道中 @提及智能体,它仍可以联系该频道;如果已知某个人的 Teams ID,也仍可以联系该用户。

文件及文件权限 ​

用户可以在消息中附加文件,智能体会连同文本一起接收。每个文件最大为 10 MB,每条消息最多附加 10 个文件。如果 n8n 无法读取文件,智能体仍会收到消息。

文件如何传递给智能体,取决于用户在哪里发送。

私信中的文件 ​

在私聊中,Teams 会随消息本身发送文件,无需额外权限。

频道和群聊中的文件 ​

在团队频道和群聊中,Teams 不会将文件包含在消息中。n8n 会通过 Microsoft Graph 再次读取消息,以找到文件:

  • 粘贴的图片可以使用应用已有的 RSC 权限访问,即 ChannelMessage.Read.Group 或 ChatMessage.Read.Chat,参阅用户可以在哪里使用智能体。无需其他权限。
  • 附加文件存储在 SharePoint 或 OneDrive 中。要下载这些文件,应用注册需要 Microsoft Graph 的 Files.Read.All 应用程序权限,并获得管理员同意。参阅 Microsoft Graph 权限。

即使拥有 Files.Read.All,n8n 也只会在满足以下任一条件时下载文件:

  • 文件位于该频道的 **Files(文件)**文件夹中。
  • 文件位于消息发送者的 OneDrive 中。

这可以防止智能体打开与当前对话无关的文件。

智能体无法读取文件时 ​

如果 n8n 无法下载文件,会将原因告知智能体,让它向发送者解释:

原因处理方法
管理员尚未批准权限按批准访问权限中的说明批准,然后最多等待一小时。
Teams 中的应用缺少权限上传或发布最新应用包。旧应用包可能没有 RSC 权限。
文件不在该频道的文件中,且发送者不是文件所有者请发送者在频道中共享文件,或从自己的 OneDrive 共享。

限制 ​

  • Teams 渠道仅适用于 Microsoft 全球云,不支持主权云。
  • 机器人凭据必须使用客户端密钥,不支持证书身份验证。
  • 每个凭据只能将一个智能体连接到 Teams,每个智能体只能有一个 Teams 连接。
  • 按名称查找频道时,智能体最多搜索 50 个团队。
  • 推荐设置始终在西欧区域的 n8n-agents 资源组中创建机器人。
  • 每个文件最大为 10 MB,每条消息最多附加 10 个文件。
  • 情景记忆暂不适用于 Teams 对话。智能体会记住同一帖子中的早期消息,但不会回想其他帖子或聊天中的上下文。

本节内容 ​

  • 设置 Teams 渠道:通过推荐或手动方式连接智能体与 Teams,并批准 Microsoft Graph 权限。
  • 管理 Teams 渠道:发布或上传应用、更新应用、续订客户端密钥、断开 Teams 连接,以及解决常见问题。

相关资源 ​

本文为社区中文翻译。查看对应英文原文