Botframework QnA Maker机器人自适应卡:如何在C中添加数据对象#

Botframework QnA Maker机器人自适应卡:如何在C中添加数据对象#,botframework,microsoft-teams,adaptive-cards,qnamaker,Botframework,Microsoft Teams,Adaptive Cards,Qnamaker,我使用“无代码”的方式在Azure中生成一个机器人,并将其连接到QnA Maker知识库 然后我修改了代码,以便Bot使用AdaptiveCards而不是HeroCards来支持MS Teams频道中的降价格式(QnA Maker使用的格式) 当知识库发出一些提示时,我正在尝试向这些自适应卡添加SubmitActions。目标是,如果用户单击这些提交,它会自动将消息发送回Bot 请在下面找到我实现的代码: // adaptive card creation var plCardBis = new

我使用“无代码”的方式在Azure中生成一个机器人,并将其连接到QnA Maker知识库

然后我修改了代码,以便Bot使用AdaptiveCards而不是HeroCards来支持MS Teams频道中的降价格式(QnA Maker使用的格式)

当知识库发出一些提示时,我正在尝试向这些自适应卡添加SubmitActions。目标是,如果用户单击这些提交,它会自动将消息发送回Bot

请在下面找到我实现的代码:

// adaptive card creation
var plCardBis = new AdaptiveCard(new AdaptiveSchemaVersion(1, 0));
plCardBis.Body.Add(new AdaptiveTextBlock()
{
    Text = result.Answer,
    Wrap = true
});

// Add all prompt
foreach (var prompt in result.Context.Prompts)
{
    plCardBis.Actions.Add(new AdaptiveCards.AdaptiveSubmitAction()
    {
        Title = prompt.DisplayText,
        Data = prompt.DisplayText
    });
}
//create the the attachment
var attachmentBis = new Attachment()
{
    ContentType = AdaptiveCard.ContentType,
    Content = plCardBis
};

//add the attachment
chatActivity.Attachments.Add(attachmentBis);

return chatActivity;
这在WebChat中运行良好,但是在团队中,如果单击提示,则会生成错误。查看internet,我发现我应该为团队的数据字段使用对象,而不是简单的字符串:

"data": {
"msteams": {
    "type": "imBack",
    "value": "Text to reply in chat"
    },
}
你知道我怎么能在C#中做到吗?如何更新代码以将此对象添加到数据字段?根据用户提出的问题,操作的数量可能会有所不同


任何帮助都将不胜感激

基本上,有两个选项可以附加到“数据”中—普通字符串值或任何自定义对象。对于您的场景,您需要一个自定义对象,因此您需要在项目中定义一个类来匹配您的需要,例如:

public class MsTeamsDataResponseWrapper
{
  [JsonProperty("msteams")]
  public MsTeamsResponse MsTeamsResponse { get; set; }
}

public class MsTeamsResponse
{
  [JsonProperty("type")]
  public string Type { get; set; } = "imBack";

  [JsonProperty("value")]
  public string Value { get; set; }
}
然后你会这样使用它:

...
Data = new MsTeamsDataResponseWrapper() { MsTeamsResponse = new MsTeamsResponse() { Value = prompt.DisplayText } }
...

在本例中,“Type”已默认为“imBack”,但如果您想覆盖默认值,也可以在稍后阶段将其用于“messageBack”。

在它自己的问题中,情况要好得多-现在我可以更好地看到这个问题:-)