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 方法,其余代码将相同。
我似乎无法让它工作。如果我向 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 方法,其余代码将相同。