MS Teams 中的自适应卡片模板

Adaptive Cards Templating in MS Teams

我似乎无法让它工作。如果我向 MS Teams 发送以下自适应卡负载:

{
  "$schema" : "http://adaptivecards.io/schemas/adaptive-card.json",
  "version" : "1.3",
  "type" : "AdaptiveCard",
  "body" : [ {
    "type" : "Container",
    "style" : "emphasis",
    "items" : [ {
      "type" : "Input.Text",
      "value" : "${form.name}",
      "id" : "name",
      "label" : "Name"
    } ]
  } ],
  "$data" : {
    "form" : {
      "name" : "geoff hurst"
    },
  }
}

我在 Teams 中收到这样的回复:

我本以为模板应该在客户端扩展,但这似乎没有发生。我是不是误会了?

所以简单来说,Teams 没有能力呈现 模板(基本上这意味着获取卡片模板和数据有效负载并将它们组合在一起)- 它只能接受最终版卡。

因此,如果您想使用模板,则需要在您这边实现数据 + 模板功能,以将 final 卡片有效负载发送到 Teams .有关如何在 js 或 dotnet 中执行此操作的示例,请参阅 here。说实话,如果您使用的是 js(例如 Node),模板化只不过是字符串替换,如果您使用的是 dotnet(例如 C#),那么您可能更愿意使用强类型的 Adaptive Card 库,在这种情况下,您将组合代码中已有的“模板”和“数据”。

我认为模板的最佳用途可能是您从某种“模板存储库”接收模板,但我认为 Teams 实际上还没有任何此类东西。

您尝试使用的方法不允许您使用动态数据,我希望您将数据作为单独的对象使用并使用模板 SDK。

请查看此sample,了解如何使用模板:

var templateJSON = File.ReadAllText(Path.Combine(".", "CardPath"));
AdaptiveCardTemplate template = new AdaptiveCardTemplate(templateJSON);
var memberData = new
{
    userName = member.Name,
    userUPN = member.UserPrincipalName,
    userAAD = member.AadObjectId
};
string cardJSON = template.Expand(memberData);
var adaptiveCardAttachment = new Attachment
{
    ContentType = "application/vnd.microsoft.card.adaptive",
    Content = JsonConvert.DeserializeObject(cardJSON),
};
await turnContext.SendActivityAsync(MessageFactory.Attachment(adaptiveCardAttachment), cancellationToken);

如您所见,在上面的代码片段中,我们需要创建一个模型,其中包含我们在卡片中使用的字段。

在您的情况下,您需要创建一个具有 属性 形式的对象 -> name

var formData = new
{
    form = new
    {
        name = "Testing"
    }
};

之后使用 expand 方法,其余代码将相同。