我正在使用带有瀑布类型的多个对话框的c#bot框架v4 sdk开发聊天机器人,其中一个对话框类将通过Prompt选项显示一组选择buttona。
现在,我想知道提示选项或提示选项中的这些选择是否一起显示在使用bot框架v4的c#(瀑布对话框)中的英雄或富人卡中。 这样,如果我在显示的卡片内选择一个选择按钮,则应该在下一步中触发相应的选项。
通常,通常情况下,我们会在下一步中进行响应,然后根据需要进行操作,但是我想知道的是,如果有一种方法,我们可以在卡中显示这些选择按钮,以便在单击时可以执行下一步分别采取什么行动?
或者这不能完成并且期望是错误的?
如果有办法,您可以提供详细的分步指南,以实现如何实现它,因为我是编码和bot的新手?
可能是我的问题没有详细介绍,所以为了解释我的查询,让我以瀑布对话1为例进行解释:
我所知道的:
步骤1:使用“提示”选项显示“自定义选择”选项
第2步:基于STEP 1中的单击选项,通过导航到另一个对话框或根据需要执行此STEP#2本身的功能来执行相关过程
我想实现或知道如何实现
步骤1:将先前显示的自定义选择选项显示为单独的按钮并排显示,而不是以HERO CARD或RICH卡或任何其他卡之类的卡形式显示。
第2步:按照我们通常在上面的步骤#2中的说明进行操作,接受单击的选择。
请注意,这些自定义选项有时是动态的,因此我无法通过设计具有固定选项的卡来对其进行硬编码来显示它。我可以在常规提示选项中动态获得选择,但是我不确定如何将它们放入诸如HERO CARDS和Etc之类的卡片中,但仍可作为常规选择选项使用。
如果有办法,请提供详细的逐步指南,因为我是代码和bot的新手。还是这是一个错误的期望,无法实现?
让我知道我的查询是否仍然不清楚或无法理解。
感谢与问候 ChaitanyaNG
答案 0 :(得分:0)
这绝对可以做到。我相当确定我了解您的要求。如果没有,请告诉我,我将编辑此答案。
重要的部分是确保:
CardAction
的操作类型为ImBack
,并带有相应的value
var heroCard1 = new HeroCard
{
Title = "Option1",
Subtitle = "subtitle",
Text = "Some text",
Images = new List<CardImage> { new CardImage("https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg") },
Buttons = new List<CardAction> { new CardAction(ActionTypes.ImBack, "Option1", value: "Option1") },
};
var heroCard2 = new HeroCard
{
Title = "Option2",
Subtitle = "subtitle",
Text = "Some text",
Images = new List<CardImage> { new CardImage("https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg") },
Buttons = new List<CardAction> { new CardAction(ActionTypes.ImBack, "Option2", value: "Option2") },
};
var heroCard3 = new HeroCard
{
Title = "Option3",
Subtitle = "subtitle",
Text = "Some text",
Images = new List<CardImage> { new CardImage("https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg") },
Buttons = new List<CardAction> { new CardAction(ActionTypes.ImBack, "Option3", value: "Option3") },
};
var reply = stepContext.Context.Activity.CreateReply();
reply.AttachmentLayout = AttachmentLayoutTypes.Carousel;
reply.Attachments.Add(heroCard1.ToAttachment());
reply.Attachments.Add(heroCard2.ToAttachment());
reply.Attachments.Add(heroCard3.ToAttachment());
默认情况下,任何种类的卡都不等待用户输入。空白文本提示用于强制等待并捕获用户的输入,并将其发送到下一步。
await stepContext.Context.SendActivityAsync(reply);
return await stepContext.PromptAsync(nameof(TextPrompt), new PromptOptions() { Prompt = MessageFactory.Text("") });
我建议为此使用英雄卡,因为:
每张卡可以有任意数量的按钮,并且仍然可以使用。 Result
链接到CardAction.value