如何添加通过Cards中的Prompt选项显示的自定义选项,以及如何使用c#在BOT V4中单击以触发选择操作?

时间:2019-05-23 18:02:17

标签: c# botframework bots chatbot

我正在使用带有瀑布类型的多个对话框的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

1 个答案:

答案 0 :(得分:0)

这绝对可以做到。我相当确定我了解您的要求。如果没有,请告诉我,我将编辑此答案。

创建英雄卡

重要的部分是确保:

  1. 卡上有一个按钮
  2. 该按钮的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("") });

结果

enter image description here

enter image description here

注释

我建议为此使用英雄卡,因为:

  • 您可以根据需要动态编程英雄卡
  • 如果您使用自适应卡,则捕获输入会比较棘手
  • 如果输入只是按钮,那么自适应卡就显得过分了
  • 正如@KyleDelaney所述,并非所有渠道都支持自适应卡

每张卡可以有任意数量的按钮,并且仍然可以使用。 Result链接到CardAction.value