用户特定视图

早些时候,如果在 Teams 对话中发送了自适应卡片,则所有用户都会看到完全相同的卡片内容。 随着通用操作模型和 refresh 自适应卡片的引入,机器人开发人员现在可以向用户提供自适应卡片的用户特定视图。 同一个自适应卡片现在可以刷新到用户特定的自适应卡片。 自适应卡片提供强大的方案,例如审批、轮询创建者控制、票证、事件管理和项目管理卡。

注意

  • 机器人发送的自适应卡片支持用户特定视图,并且依赖于通用操作。
  • 最多 60 个不同的用户可以看到不同版本的卡片,其中包含其他信息或操作。

例如,Contoso 的安全检查员 Megan 希望创建事件并将其分配给 Alex。 梅根还希望团队中的每个人都知道这一事件。 Megan 使用由自适应卡片通用操作提供支持的 Contoso 事件报告消息扩展。

自适应卡片的用户特定视图

以下代码提供了自适应卡片的示例:

{
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "type": "AdaptiveCard",
  "originator":"c9b4352b-a76b-43b9-88ff-80edddaa243b",
  "version": "1.4",
  "refresh": {
    "action": {
      "type": "Action.Execute",
      "title": "Refresh",
      "verb": "editOrResolveView",
      "data": {
            "refresh info": "<refresh info>"
      }
    },
    "userIds": ["<Megan's user MRI>", "<Alex's user MRI>"]
  },
  "body": [
    {
      "type": "TextBlock",
      "text": "Incident 1234"
    },
    {
      "type": "TextBlock",
      "text": "Incident details: <incident details>"
    }
  ]
}

若要发送自适应卡片,请刷新用户特定视图,并调用对机器人的请求:

  1. 当 Megan 创建新事件时,机器人会在 Teams 对话中发送包含事件详细信息的自适应卡片或通用卡片。
  2. 现在,此卡会自动刷新到 Megan 和 Alex 的用户特定视图。 Alex 和 Megan 的用户 MRI 添加到自适应卡 JSON 的 refresh 属性的 属性中userIds。 该卡对于对话中的其他用户保持不变。
  3. 对于 Megan,自动刷新会 adaptiveCard/action 触发对机器人的调用请求。 机器人可以返回事件创建者卡片,其中包含 Edit 按钮作为对此调用请求的响应。
  4. 同样,对于 Alex,自动刷新会触发对机器人的另一个 adaptiveCard/action 调用请求。 机器人可以返回事件所有者卡 Resolve 按钮作为对此调用请求的响应。

调用从 Teams 客户端发送到机器人的请求

以下代码提供了从 Alex 和 Megan 的 Teams 客户端发送到机器人的调用请求的示例:

{ 
  "type": "invoke",
  "name": "adaptiveCard/action",

  // ... other properties omitted for brevity

  "value": { 
    "action": { 
      "type": "Action.Execute", 
      "id": "", 
      "verb": "editOrResolveView",
      "data": { 
            "refresh info": "<refresh info>"
      } 
    },
    "trigger": "automatic" 
  }
}

adaptiveCard/action invoke 响应卡

以下代码提供了 Megan 的 adaptiveCard/action invoke 响应卡的示例:

{
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "type": "AdaptiveCard",
  "originator":"c9b4352b-a76b-43b9-88ff-80edddaa243b",
  "version": "1.4",
  "refresh": {
    "action": {
      "type": "Action.Execute",
      "title": "Refresh",
      "verb": "editOrResolveView"
    },
    "userIds": ["<Megan's user MRI>", "<Alex's user MRI>"]
  },
  "body": [
    {
      "type": "TextBlock",
      "text": "Incident 1234"
    },
    {
      "type": "TextBlock",
      "text": "Incident details: <incident details>"
    }
  ],
  "actions": [
    {
      "type": "Action.Execute",
      "title": "Edit",
      "verb": "edit",
      "data": {
            "additional info": "<additional info>",
            ...
      }
    }
  ]
}

alex 的 adaptiveCard/action 调用响应卡

以下代码提供了 Alex 的 adaptiveCard/操作调用响应卡的示例:

{
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "type": "AdaptiveCard",
  "originator":"c9b4352b-a76b-43b9-88ff-80edddaa243b",
  "version": "1.4",
  "refresh": {
    "action": {
      "type": "Action.Execute",
      "title": "Refresh",
      "verb": "editOrResolveView"
    },
    "userIds": ["<Megan's user MRI>", "<Alex's user MRI>"]
  },
  "body": [
    {
      "type": "TextBlock",
      "text": "Incident 1234"
    },
    {
      "type": "TextBlock",
      "text": "Incident details: <incident details>"
    }
  ],
  "actions": [
    {
      "type": "Action.Execute",
      "title": "Resolve",
      "verb": "resolve",
      "data": {
            "additional info": "<additional info>",
            ...
      }
    }
  ]
}

调用响应以返回自适应卡片

以下代码提供了返回自适应卡的调用响应示例:

string cardJson = "<adaptive card json>";
var card = JsonConvert.DeserializeObject(cardJson);

var adaptiveCardResponse = JObject.FromObject(new
 {
    statusCode = 200,
    type = "application/vnd.microsoft.adaptive.card",
    value = card
 });

以下列表提供了用户特定视图的卡片设计指南:

  • 刷新行为:通过在 属性中Refresh指定userIds特定视图,最多可为发送到对话的特定卡片创建 60 个用户特定视图。

    • userIds如果未在 属性中Refresh指定 字段,则当会话中成员少于或等于 60 个时,Teams 客户端可以自动触发所有用户的刷新。

    • 若要让用户手动触发卡片刷新,可以从消息选项菜单中选择“ 刷新 ”。 如果会话中成员少于 60 个,则所有用户都会发生这种情况,或者当会话中存在全部或少于 60 个用户时,该事件发生在列表中未指定的 userIds 用户组中。

  • 基本卡:机器人发送消息,该消息嵌入卡的基本版本。 对话的所有成员都可以查看相同的内容。 机器人稍后通过刷新为节中指定的 userIds 用户提取用户特定卡片。

  • 刷新超时:Teams 客户端通过两种方式触发刷新:通过 刷新 或选择 “执行”。 仅当上次调用中的卡片超过一分钟时,才会触发刷新。 可以通过向数据包添加时间戳并在发送刷新卡之前对其进行检查来控制刷新行为。

  • 对于用户特定视图,Teams 客户端存储每个用户 50 个最新的缓存卡。 当新卡需要缓存时,存储会根据上次读取时间删除最早的卡片,并将它替换为最新的卡片。 在一段时间后,没有还原已删除的卡片的过程。 用户还可以清除 Teams 缓存以从应用商店中删除卡片。

  • 消息更新可用于更新基本卡,并同时刷新用户特定卡。 打开聊天或频道也会为启用了 “刷新 ”的用户刷新卡片。

  • 对于用户切换到操作视图的较大组(需要响应者动态更新)的方案,可以继续向列表中添加多达 60 个用户 userIds 。 当第 61 个用户做出响应时,可以从列表中删除第一响应者。 对于从 userIds 列表中删除的用户,可以提供手动 刷新 以获取最新结果。

  • 提示用户获取用户特定视图,其中他们只能看到卡片的特定视图或某些操作。

注意

机器人返回的用户特定卡仅发送到为其请求的特定客户端。 例如,如果用户切换到其他客户端(例如从桌面切换到移动设备),则会触发另一个调用事件来提取刷新的卡片。

代码示例

示例名称 Description .NET Node.js 清单
顺序工作流自适应卡片 此示例演示了机器人中顺序工作流、用户特定视图和当前自适应卡片的实现。 View View View

另请参阅