Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何添加通过卡片内的提示选项显示的自定义选项&;使用c#在BOT V4中选择单击时触发操作?_C#_Botframework_Bots_Chatbot - Fatal编程技术网

如何添加通过卡片内的提示选项显示的自定义选项&;使用c#在BOT V4中选择单击时触发操作?

如何添加通过卡片内的提示选项显示的自定义选项&;使用c#在BOT V4中选择单击时触发操作?,c#,botframework,bots,chatbot,C#,Botframework,Bots,Chatbot,我正在使用c#bot framework v4 sdk开发一个聊天机器人,它具有多个瀑布式对话框,其中一个对话框类将通过提示选项显示一组选项按钮 现在,我想知道提示选项或提示选项中的这些选项是一起显示在一张卡片中,还是在bot framework v4 I的瀑布式对话框中使用c#显示在英雄卡或富卡中。 这样,如果我在显示的卡内选择一个选择按钮,则在下一步中应触发相应的选项 通常,在正常情况下,我们在下一步中获取响应,然后根据需要继续,但我想知道的是,是否有一种方法可以在卡中显示这些选择按钮,以便

我正在使用c#bot framework v4 sdk开发一个聊天机器人,它具有多个瀑布式对话框,其中一个对话框类将通过提示选项显示一组选项按钮

现在,我想知道提示选项或提示选项中的这些选项是一起显示在一张卡片中,还是在bot framework v4 I的瀑布式对话框中使用c#显示在英雄卡或富卡中。 这样,如果我在显示的卡内选择一个选择按钮,则在下一步中应触发相应的选项

通常,在正常情况下,我们在下一步中获取响应,然后根据需要继续,但我想知道的是,是否有一种方法可以在卡中显示这些选择按钮,以便在单击时,我可以在下一步中执行相应的操作

或者这是不可能的,期望是错误的

如果有办法,你能提供一个详细的一步一步的指南,如何实现它,因为我是新的编码和机器人

可能我的问题不太详细,所以为了解释我的查询,让我用WaterwallDialog 1的示例进行解释:

我已经知道的:

步骤1:使用提示选项显示自定义选项

步骤2:根据步骤1中单击的选择,通过导航到另一个对话框或根据需要执行步骤2中的功能来执行相关流程

我想实现的目标或知道如何实现的目标

步骤1:将先前显示的自定义选项显示为单个按钮并排显示,而不是以卡片的形式显示,如英雄卡、富卡或任何其他卡片

第2步:按照上述第2步中的说明,接受单击的选择

请注意,这些自定义选项有时是动态的,因此我无法通过使用固定选项设计卡来硬编码以显示它。我能够在正常提示选项中动态地获得选项,但我不确定如何将它们放入英雄卡等卡中,并作为正常选项使用

如果有办法,请你提供一个详细的一步一步的指导,因为我是新的代码和机器人。或者这是一个错误的期望,它无法实现

让我知道我的问题是否仍然含糊不清或无法理解

谢谢和问候
柴坦洋

这是绝对可以做到的。我很确定我明白你在找什么。如果没有,请告诉我,我将编辑此答案

创建英雄卡 重要的是确保:

  • 卡片上有一个按钮
  • 按钮有一个
    CardAction
    ,带有
    ImBack
    动作类型和相应的
  • var heroCard1=新的heroCard1
    {
    Title=“Option1”,
    Subtitle=“Subtitle”,
    Text=“一些文本”,
    图像=新列表{新图像(“https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg") },
    按钮=新列表{new CardAction(ActionTypes.ImBack,“Option1”,值:“Option1”)},
    };
    var heroCard2=新的heroCard2
    {
    Title=“Option2”,
    Subtitle=“Subtitle”,
    Text=“一些文本”,
    图像=新列表{新图像(“https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg") },
    按钮=新列表{new CardAction(ActionTypes.ImBack,“Option2”,值:“Option2”)},
    };
    var heroCard3=新HeroCard
    {
    Title=“Option3”,
    Subtitle=“Subtitle”,
    Text=“一些文本”,
    图像=新列表{新图像(“https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg") },
    按钮=新列表{new CardAction(ActionTypes.ImBack,“Option3”,值:“Option3”)},
    };
    
    将英雄卡添加到消息中
    var reply=stepContext.Context.Activity.CreateReply();
    reply.AttachmentLayout=attachmentlayoututypes.Carousel;
    reply.Attachments.Add(heroCard1.ToAttachment());
    reply.Attachments.Add(heroCard2.ToAttachment());
    reply.Attachments.Add(heroCard3.ToAttachment());
    
    发送消息,然后发送空白文本提示 默认情况下,任何类型的卡都不会等待用户输入。空白文本提示用于强制等待并捕获用户的输入,将其发送到下一个步骤。
    wait-stepContext.Context.SendActivityAsync(reply);
    返回wait-stepContext.PromptAsync(nameof(TextPrompt),new-PromptOptions(){Prompt=MessageFactory.Text(“”)});
    
    结果

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

    • 您可以根据需要动态编程英雄卡
    • 如果您使用自适应卡,捕获输入会有点棘手
    • 如果输入仅仅是按钮,那么自适应卡就太过分了
    • 正如@KyleDelaney提到的,并非所有通道都支持自适应卡
    每张卡上可以有任意数量的按钮,但它仍然可以工作。
    结果
    链接到
    CardAction.value


    每@MattStannett


    如果要传递复杂对象而不是简单字符串,可以使用
    PostBack
    操作和
    jsonvert.SerializeObject
    将对象转换为字符串。使用
    PostBack
    意味着该消息不会显示在聊天中,可以从
    result
    对象中检索结果,然后使用
    jsonvert.DeserializeObject

    读取结果。我想我理解您想知道的内容。看起来像你想要的吗?嗨,马特,不完全一样。就像我知道如何导航到瀑布中的下一步一样,如果单击任何选项按钮并执行相应的选项相关流程,我实际上想问或实现的是,有没有一种方法可以通过提示选项显示这些选项按钮,这些选项可以显示在富卡或英雄卡或任何oth中