【问题标题】:Prompt using a dynamically generated Adaptive Card that depends on each scenario使用动态生成的自适应卡提示取决于每个方案
【发布时间】:2021-06-07 15:12:26
【问题描述】:

我有一个自定义 WaterfallDialog,其中一个步骤会提示用户在菜肴中填写一组可变选项(用于餐馆)。

问题是我希望卡片是动态生成的:根据选择的菜,Input.ChoiceSets 的数量会有所不同。我的意思是,cad 本身的布局会因菜肴类型而异。

我的提示是这样的:

private async Task<DialogTurnResult> ConfigureDishStep(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
    return await stepContext.PromptAsync("ConfigureDish", new PromptOptions(), cancellationToken);
}

但如您所见,PromptAsync 使用必须使用 AddDialog 在父对话框中注册的 dialogId(“ConfigureDish”)调用提示。这样就无法根据菜肴类型配置卡。如果我必须在使用它之前注册每个提示,并且这是在父对话框的构造函数中完成的:

AddDialog(new AdaptiveCardPrompt(ConfigureDish, CreateAdaptiveCardPromptSettings()));

那么如何为每个ConfigureDishStep提供动态生成的卡片呢?

【问题讨论】:

标签: c# .net botframework adaptive-cards


【解决方案1】:

虽然很高兴看到人们使用 Michael Richardson 的 Adaptive Card 提示,但不幸的是,它与其他提示不同,因为它使用了在构建时创建的不可变附件。在某种程度上,自适应卡片提示只允许使用一张特定的卡片是有道理的,但是使用该类很难做你想做的事情。我可以为你想出几个选择:

  1. 构建多个自适应卡片提示。虽然希望尽可能多地重复使用提示是很常见的,但即使您不必为每种情况定义单独的提示也是一种很好的做法。虽然在你的情况下你可能不得不这样做。
  2. 在幕后操纵活动。 总有办法破解代码来做你想做的事。例如,您可以在提示发送活动时使用中间件来操作活动,或者您可以使用反射来修改保存卡片的私有变量。
  3. 不要使用自适应卡片提示。您可以创建自己的类来满足您的需求。或者,一种常见的解决方案是仅使用文本提示,然后在您的代码确定传入活动来自自适应卡片后手动设置传入活动的文本。

您可能有兴趣阅读我的博文以了解更多信息:https://blog.botframework.com/2019/07/02/using-adaptive-cards-with-the-microsoft-bot-framework/

【讨论】:

    猜你喜欢
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多