这是Botframework v4文档上的示例。但这行不通。 它在Microsoft机器人模拟器上显示“无法渲染卡”。 我正在尝试做的是carouselCard,但Microsoft示例中的这张简单卡已经无法使用。
{
"type": "message",
"text": "Plain text is ok, but sometimes I long for more...",
"attachments": [
{
"contentType": "application/vnd.microsoft.card.adaptive",
"content": {
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"type": "AdaptiveCard",
"version": "1.0",
"body": [
{
"type": "TextBlock",
"text": "Hello World!",
"size": "large"
},
{
"type": "TextBlock",
"text": "*Sincerely yours,*"
},
{
"type": "TextBlock",
"text": "Adaptive Cards",
"separation": "none"
}
],
"actions": [
{
"type": "Action.OpenUrl",
"url": "http://adaptivecards.io",
"title": "Learn More"
}
]
}
}
]
}
但是,如果我删除代码的顶部,则此代码有效:
{
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"type": "AdaptiveCard",
"version": "1.0",
"body": [
{
"type": "TextBlock",
"text": "Hello World!",
"size": "large"
},
{
"type": "TextBlock",
"text": "*Sincerely yours,*"
},
{
"type": "TextBlock",
"text": "Adaptive Cards",
"separation": "none"
}
],
"actions": [
{
"type": "Action.OpenUrl",
"url": "http://adaptivecards.io",
"title": "Learn More"
}
]
}
这就是我叫卡的方式。有更好的方法吗?
public class GetNameAndAgeDialog : WaterfallDialog
{
private readonly string _cards = @".\Resources\TryCarouselCard.json";
private static Attachment CreateAdaptiveCardAttachment(string filePath)
{
var adaptiveCardJson = File.ReadAllText(filePath);
var adaptiveCardAttachment = new Attachment()
{
ContentType = "application/vnd.microsoft.card.adaptive",
Content = JsonConvert.DeserializeObject(adaptiveCardJson),
};
return adaptiveCardAttachment;
}
public GetNameAndAgeDialog(string dialogId, IEnumerable<WaterfallStep> steps = null) : base(dialogId, steps)
{
AddStep(async (stepContext, cancellationToken) =>
{
var cardAttachment = CreateAdaptiveCardAttachment(_cards);
var reply = stepContext.Context.Activity.CreateReply();
reply.Attachments = new List<Attachment>() { cardAttachment };
await stepContext.Context.SendActivityAsync(reply, cancellationToken);
return await stepContext.ContinueDialogAsync();
});
}
}
答案 0 :(得分:1)
您发布的JSON的第一块“顶部”是活动中包含的卡片。确实,发布的JSON的第二个块实际上就是卡本身以及您想要放入Attachment
中的内容。
对于您的代码,对我来说看起来是正确的。我可能会考虑缓存附件JSON,因为您可能不想每次显示卡片时都访问文件系统,但这只是一种优化。
我不清楚您是遇到其他问题还是只是在寻找这种方法的验证。如果您仍然遇到问题,请用更多详细信息更新问题,我将更新我的答案以寻求帮助。