Botframework 获取HeroCard的值并显示在旋转木马中
我可以问一下,选择后如何获得HeroCard的价值吗 及 是否以旋转木马格式显示英雄卡 这里有我的源代码和屏幕截图(在Emulator中显示)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
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更新了我的源代码,我需要将其水平显示。我的名片放错地方了吗?