使用取决于每个场景的动态生成的 Adaptive Card 进行提示
Prompt using a dynamically generated Adaptive Card that depends on each scenario
我有一个自定义的 WaterfallDialog,其中一个步骤提示用户在一道菜中填写一组可变选项(对于餐厅)。
问题是我想动态生成卡片:根据选择的菜肴,Input.ChoiceSets的数量会有所不同。我的意思是,cad 本身的布局会根据菜肴类型而有所不同。
我的make提示调用是这样的:
private async Task<DialogTurnResult> ConfigureDishStep(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
return await stepContext.PromptAsync("ConfigureDish", new PromptOptions(), cancellationToken);
}
但是如您所见,PromptAsync
使用必须使用 AddDialog[=33 在父对话框中注册的 dialogId
(“ConfigureDish”)调用提示=].这使得无法根据菜肴类型配置卡。如果我必须在使用之前注册每个提示,并且这是在父对话框的构造函数中完成的:
AddDialog(new AdaptiveCardPrompt(ConfigureDish, CreateAdaptiveCardPromptSettings()));
那么如何为每个ConfigureDishStep
提供动态生成的卡片?
虽然很高兴看到人们使用 Michael Richardson 的自适应卡片提示,但不幸的是,它与其他提示不同,因为它使用了在构建时创建的不可变附件。自适应卡提示仅允许使用一张特定卡在某种程度上是有道理的,但是使用该卡 class 很难完成您想要做的事情。我可以为你想出几个选项:
- 构造多个自适应卡片提示。虽然希望尽可能多地重复使用提示是很常见的,但即使在你不必。尽管在您的情况下您可能必须这样做。
- 在幕后操纵 activity。 总有一种方法可以破解代码来做你想做的事。例如,您可以在提示发送时使用中间件来操作 activity,或者您可以使用反射来修改持有卡片的私有变量。
- 不要使用自适应卡提示。您可以创建自己的 class 来满足您的需求。或者,一种常见的解决方案是仅使用文本提示,然后在您的代码确定传入 activity 来自自适应卡后手动设置传入 activity 的文本。
您可能有兴趣阅读我的博客 post 了解更多信息:https://blog.botframework.com/2019/07/02/using-adaptive-cards-with-the-microsoft-bot-framework/
我有一个自定义的 WaterfallDialog,其中一个步骤提示用户在一道菜中填写一组可变选项(对于餐厅)。
问题是我想动态生成卡片:根据选择的菜肴,Input.ChoiceSets的数量会有所不同。我的意思是,cad 本身的布局会根据菜肴类型而有所不同。
我的make提示调用是这样的:
private async Task<DialogTurnResult> ConfigureDishStep(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
return await stepContext.PromptAsync("ConfigureDish", new PromptOptions(), cancellationToken);
}
但是如您所见,PromptAsync
使用必须使用 AddDialog[=33 在父对话框中注册的 dialogId
(“ConfigureDish”)调用提示=].这使得无法根据菜肴类型配置卡。如果我必须在使用之前注册每个提示,并且这是在父对话框的构造函数中完成的:
AddDialog(new AdaptiveCardPrompt(ConfigureDish, CreateAdaptiveCardPromptSettings()));
那么如何为每个ConfigureDishStep
提供动态生成的卡片?
虽然很高兴看到人们使用 Michael Richardson 的自适应卡片提示,但不幸的是,它与其他提示不同,因为它使用了在构建时创建的不可变附件。自适应卡提示仅允许使用一张特定卡在某种程度上是有道理的,但是使用该卡 class 很难完成您想要做的事情。我可以为你想出几个选项:
- 构造多个自适应卡片提示。虽然希望尽可能多地重复使用提示是很常见的,但即使在你不必。尽管在您的情况下您可能必须这样做。
- 在幕后操纵 activity。 总有一种方法可以破解代码来做你想做的事。例如,您可以在提示发送时使用中间件来操作 activity,或者您可以使用反射来修改持有卡片的私有变量。
- 不要使用自适应卡提示。您可以创建自己的 class 来满足您的需求。或者,一种常见的解决方案是仅使用文本提示,然后在您的代码确定传入 activity 来自自适应卡后手动设置传入 activity 的文本。
您可能有兴趣阅读我的博客 post 了解更多信息:https://blog.botframework.com/2019/07/02/using-adaptive-cards-with-the-microsoft-bot-framework/