Skip to content

关于本页

本页介绍更夫所基于的开源内核 Keep 的通用能力。更夫在其上提供国内化增强:钉钉/企业微信/飞书通知、国产大模型接入、LDAP 认证与值班管理。部署与上手请看快速上手。

认证 ​

此提供商需要身份验证。

  • webhook_url: Teams Webhook Url(必需:True,敏感:True)

在工作流中 ​

此提供商可用于工作流。

作为"操作"来进行更改或更新数据,示例:

yaml
actions:
    - name: Query teams
      provider: teams
      config: "{{ provider.my_provider_name }}"
      with:
        message: {value}  # 要发送的消息
        typeCard: {value}  # 卡片类型。可以是 "MessageCard"(旧版)或 "message"(用于自适应卡片)。默认为 "message"
        themeColor: {value}  # 十六进制颜色(仅与 MessageCard 类型一起使用)
        sections: {value}  # 对于 MessageCard:自定义信息部分数组。对于自适应卡片:遵循自适应卡片架构的卡片元素数组。可以作为 JSON 字符串或数组提供。
        schema: {value}  # 自适应卡片的架构 URL。默认为 "http://adaptivecards.io/schemas/adaptive-card.json"
        attachments: {value}  # 自适应卡片的自定义附件数组(覆盖默认附件结构)。可以作为 JSON 字符串或数组提供。
        mentions: {value}  # 要包含在自适应卡片中的用户提及列表。每个提及应该是包含 'id'(用户 ID、Microsoft Entra 对象 ID 或 UPN)和 'name'(显示名称)键的字典。
示例:[{"id": "user-id-123", "name": "John Doe"}, {"id": "john.doe@example.com", "name": "John Doe"}]

请查看以下工作流示例:

连接 Provider ​

新版 Teams

  1. 在新版 Teams 客户端中,选择 Teams 并导航至您要添加传入 Webhook 的频道。 2. 选择频道名称右侧的更多选项 ••• 。 3. 选择管理频道

::: note 对于不是频道管理员的成员,管理频道选项位于频道右上角的打开频道详情选项下。 :::

4. 选择编辑
5. 搜索传入 Webhook 并选择添加。
6. 选择添加
7. 提供 webhook 的名称并在需要时上传图片。 8. 选择创建。
9. 复制并保存对话框中存在的唯一 webhook URL。该 URL 映射到频道,您可以使用它向 Teams 发送信息。 10. 选择完成。
webhook 现在可在 Teams 频道中使用。

经典 Teams

  1. 在经典 Teams 客户端中,选择 Teams 并导航至您要添加传入 Webhook 的频道。 2. 从右上角选择更多选项 ••• 。 3. 从下拉菜单中选择连接器。
4. 搜索传入 Webhook 并选择添加。
5. 选择添加。
6. 提供 webhook 的名称并在需要时上传图片。 7. 选择创建。
8. 复制并保存对话框中存在的唯一 webhook URL。该 URL 映射到频道,您可以使用它向 Teams 发送信息。 9. 选择完成。

注意事项 ​

使用自适应卡片时(typeCard="message"):

  • sections 参数应遵循 自适应卡片架构
  • themeColor 对自适应卡片会被忽略
  • 如果未提供 sections,消息将显示为简单的文本块
  • sections 和 attachments 都可以作为 JSON 字符串或数组提供
  • 您可以使用 mentions 参数在自适应卡片中提及用户

工作流示例 ​

您也可以在我们的 examples 文件夹中的 Keep GitHub 存储库中找到此示例。

yaml
id: 6bc7c72e-ab3d-4913-84dd-08b9323195ae
description: Teams Adaptive Cards Example
disabled: false
triggers:
  - type: manual
  - filters:
      - key: source
        value: r".*"
    type: alert
consts: {}
name: Keep Teams Adaptive Cards
owners: []
services: []
steps: []
actions:
  - name: teams-action
    provider:
      config: "{{ providers.teams }}"
      type: teams
      with:
        message: ""
        sections: '[{"type": "TextBlock", "text": "{{alert.name}}"}, {"type": "TextBlock", "text": "Tal from Keep"}]'
        typeCard: message
        # Optional: Add mentions to notify specific users
        # mentions: '[{"id": "user@example.com", "name": "User Name"}]'

您也可以在我们的 examples 文件夹中找到带有用户提及的示例。

::: note sections 参数是一个遵循自适应卡片架构的 JSON 字符串,但也可以是一个对象。 如果它是字符串,它将被解析为 JSON 字符串。 :::

使用 Sections ​

python
provider.notify(
    message="Fallback text",
    typeCard="message",
    sections=[
        {
            "type": "TextBlock",
            "text": "Hello from Adaptive Card!"
        },
        {
            "type": "Image",
            "url": "https://example.com/image.jpg"
        }
    ]
)

使用自定义附件 ​

python
provider.notify(
    typeCard="message",
    attachments=[{
        "contentType": "application/vnd.microsoft.card.adaptive",
        "content": {
            "type": "AdaptiveCard",
            "version": "1.2",
            "body": [
                {
                    "type": "TextBlock",
                    "text": "Custom Attachment Example"
                }
            ]
        }
    }]
)

在自适应卡片中使用用户提及 ​

您可以使用 mentions 参数在自适应卡片中提及用户。您的卡片中的文本应包含格式为 <at>User Name</at> 的提及,您需要在 mentions 参数中提供用户的 ID 和名称。

Teams 支持三种类型的用户 ID 进行提及:

  • Teams 用户 ID(格式:29:1234...)
  • Microsoft Entra 对象 ID(格式:49c4641c-ab91-4248-aebb-6a7de286397b)
  • 用户主体名称 (UPN)(格式:user@example.com)
python
provider.notify(
    typeCard="message",
    sections=[
        {
            "type": "TextBlock",
            "text": "Hello <at>John Doe</at>, please review this alert!"
        }
    ],
    mentions=[
        {
            "id": "john.doe@example.com",  # Can be UPN, Microsoft Entra Object ID, or Teams User ID
            "name": "John Doe"
        }
    ]
)

您也可以在单个卡片中提及多个用户:

python
provider.notify(
    typeCard="message",
    sections=[
        {
            "type": "TextBlock",
            "text": "Hello <at>John Doe</at> and <at>Jane Smith</at>, please review this alert!"
        }
    ],
    mentions=[
        {
            "id": "john.doe@example.com",
            "name": "John Doe"
        },
        {
            "id": "49c4641c-ab91-4248-aebb-6a7de286397b",  # Microsoft Entra Object ID
            "name": "Jane Smith"
        }
    ]
)

在 YAML 工作流中,您可以将提及作为 JSON 字符串提供:

yaml
actions:
  - name: teams-action
    provider:
      config: "{{ providers.teams }}"
      type: teams
      with:
        typeCard: message
        sections: '[{"type": "TextBlock", "text": "Hello <at>John Doe</at>, please review this alert!"}]'
        mentions: '[{"id": "john.doe@example.com", "name": "John Doe"}]'

相关链接 ​

基于 MIT 协议开源的 Keep · 由更夫社区维护