Botframework 获取HeroCard的值并显示在旋转木马中

Botframework 获取HeroCard的值并显示在旋转木马中,botframework,azure-bot-service,Botframework,Azure Bot Service,我可以问一下,选择后如何获得HeroCard的价值吗 及 是否以旋转木马格式显示英雄卡 这里有我的源代码和屏幕截图(在Emulator中显示) JObject-jObj=JObject.Parse(内容); var stopNames=jObj.SelectToken(“legs[2].stops.stopName”); var stopIds=jObj.SelectToken(“legs[2].stops.stopId”); JArray stops=(JArray)jObj.SelectTo

我可以问一下,选择后如何获得HeroCard的价值吗

是否以旋转木马格式显示英雄卡

这里有我的源代码和屏幕截图(在Emulator中显示)

JObject-jObj=JObject.Parse(内容);
var stopNames=jObj.SelectToken(“legs[2].stops.stopName”);
var stopIds=jObj.SelectToken(“legs[2].stops.stopId”);
JArray stops=(JArray)jObj.SelectToken(“legs[2].stops”);

var attachments=new List

要以旋转木马格式显示英雄卡,您只需向旋转木马添加多张英雄卡

例如:

var reply = MessageFactory.Carousel(new Attachment[]
        {
            new HeroCard(
                //title: stopIds.ToString()+ stopNames.ToString(),
                buttons: new CardAction[]
                {
                    new CardAction(ActionTypes.ImBack, title: "title1" , value: "value1")
                }

                ).ToAttachment(),
              new HeroCard(
                //title: stopIds.ToString()+ stopNames.ToString(),
                buttons: new CardAction[]
                {
                    new CardAction(ActionTypes.ImBack, title: "title2", value:"value2")
                }

                ).ToAttachment(),
                new HeroCard(
                //title: stopIds.ToString()+ stopNames.ToString(),
                buttons: new CardAction[]
                {
                    new CardAction(ActionTypes.ImBack, title: "title3", value:"value3")
                }

                ).ToAttachment()
        }
        );
        await turnContext.SendActivityAsync(reply);
在您的情况下,因为您正在使用类型为ActionTypes.ImBack的CardAction

将作为文本发送,您可以通过执行以下操作获得该值:

var value = turnContext.Activity.Text
        JObject jObj = JObject.Parse(content);
        var stopNames = jObj.SelectToken("legs[2].stops.stopName");
        var stopIds = jObj.SelectToken("legs[2].stops.stopId");
        JArray stops = (JArray)jObj.SelectToken("legs[2].stops");

        var attachments = new List<Attachment>();
        foreach (JToken stop in stops)
        {
            stopIds = (string)stop.SelectToken("stopId");
            stopNames = (string)stop.SelectToken("stopName");


            var herocard = new HeroCard(
                 //title: stopIds.ToString()+ stopNames.ToString(),
                 buttons: new CardAction[]
                 {
                    new CardAction(ActionTypes.ImBack, title: stopNames.ToString() , value: stopIds.ToString())
                 }

                 ).ToAttachment();

            attachments.Add(herocard);


        }
        var reply = MessageFactory.Carousel(attachments);

        await turnContext.SendActivityAsync(reply);
更新

关于您对如何从foreach循环发送转盘的评论

请尝试以下操作:

var value = turnContext.Activity.Text
        JObject jObj = JObject.Parse(content);
        var stopNames = jObj.SelectToken("legs[2].stops.stopName");
        var stopIds = jObj.SelectToken("legs[2].stops.stopId");
        JArray stops = (JArray)jObj.SelectToken("legs[2].stops");

        var attachments = new List<Attachment>();
        foreach (JToken stop in stops)
        {
            stopIds = (string)stop.SelectToken("stopId");
            stopNames = (string)stop.SelectToken("stopName");


            var herocard = new HeroCard(
                 //title: stopIds.ToString()+ stopNames.ToString(),
                 buttons: new CardAction[]
                 {
                    new CardAction(ActionTypes.ImBack, title: stopNames.ToString() , value: stopIds.ToString())
                 }

                 ).ToAttachment();

            attachments.Add(herocard);


        }
        var reply = MessageFactory.Carousel(attachments);

        await turnContext.SendActivityAsync(reply);
JObject-jObj=JObject.Parse(内容);
var stopNames=jObj.SelectToken(“legs[2].stops.stopName”);
var stopIds=jObj.SelectToken(“legs[2].stops.stopId”);
JArray stops=(JArray)jObj.SelectToken(“legs[2].stops”);
var attachments=新列表();
foreach(JToken停止在停止中)
{
stopId=(字符串)stop.SelectToken(“stopId”);
stopNames=(字符串)stop.SelectToken(“stopName”);
var herocard=新herocard(
//标题:stopIds.ToString()+stopNames.ToString(),
按钮:新CardAction[]
{
新的CardAction(ActionTypes.ImBack,标题:stopNames.ToString(),值:stopIds.ToString())
}
).ToAttachment();
附件.添加(herocard);
}
var reply=MessageFactory.Carousel(附件);
等待turnContext.SendActivityAsync(回复);

您需要做的是首先创建一个附件列表,然后从foreach循环内部动态添加到其中,旋转木马应该在foreach循环之外,因为您需要发送一个包含多张卡的旋转木马,但奇怪的是,它不能在Bot Framework Emulator和Web Chat中显示旋转木马。我给您的示例正确显示为旋转木马(水平)我可以问一下如何显示垂直旋转木马是水平显示卡片的,如果你想在一张卡片上垂直显示多个按钮,我可以给你举个例子,但是没有一个“垂直旋转木马”,至少我不知道,你可以做一个“垂直旋转木马”使用AdaptiveCardsi更新了我的源代码,我需要将其水平显示。我的名片放错地方了吗?