c# - 带有英雄卡 c# 的 Bot Framework V4 选择提示
问题描述
我们曾经可以在如下对话框中使用英雄卡的选择提示作为提示,但由于某种原因,这已停止工作。该卡仍然正确显示,但是当您选择一个选项时,提示会一遍又一遍地重试。
var card = new HeroCard
{
Text = "Please choose an option.",
Buttons = new List<CardAction>()
};
foreach (var cl in input.ComplexList)
{
string objString = JsonConvert.SerializeObject(cl.complexObject);
card.Buttons.Add(new CardAction(
ActionTypes.PostBack,
cl.Name,
null,
objString,
objString,
objString));
}
card.Buttons.Add(new CardAction(
ActionTypes.PostBack,
"Cancel",
null,
"Cancel",
"Cancel",
"Cancel"));
var promptOptions = new PromptOptions
{
Prompt = (Activity)MessageFactory.Attachment(card.ToAttachment())
};
return await stepContext.PromptAsync(nameof(ChoicePrompt), promptOptions, cancellationToken);
我看到我们现在可以定义提示的样式 AddDialog(new ChoicePrompt(nameof(ChoicePrompt)) { Style = ListStyle.HeroCard });
现在我的问题是我使用英雄卡在按钮值中隐藏了一些额外信息,以便在瀑布对话框的下一步中使用,这不再是一个选项,还是我错过了什么?
如果我将选择提示样式设置为 HeroCard 并删除指定的英雄卡,那么选择只允许向用户显示的文本。
解决方案
您可以将样式属性放在 PromptOptions
var promptOptions = new PromptOptions {
Prompt = (Activity) MessageFactory.Attachment(card.ToAttachment()),
Style = ListStyle.HeroCard
};
在 BotBuilderv4 中,ChoicePrompt 需要IList<Choice>
在 PromptOptions
using Microsoft.Bot.Builder.Dialogs.Choices;
var choices = new List<Choice> () {
new Choice() {
Value = "Value1",
// Synonyms
Synonyms = new string[] {};
},
new Choice() {
Value = "Value2",
Synonyms = new string[] {};
},
new Choice() {
Value = "Value3",
Synonyms = new string[] {};
},
};
var promptOptions = new PromptOptions() {
Prompt = (Activity) reply,
RetryPrompt = (Activity) retry,
Choices = choices,
/* ^^^^^^^^^^^^^^^^^^ */
Style = ListStyle.HeroCard,
};
return await stepContext.PromptAsync(nameof(ChoicePrompt), promptOptions, cancellationToken);
其中Choice.Value
是您放入 CardAction 的值value
:
new CardAction(ActionTypes.PostBack,title : "Cancel", value : "Cancel");
在下一步中,您可以获得用户的选择
private async Task<DialogTurnResult> NextStep(WaterfallStepContext stepContext, CancellationToken cancellationToken) {
var result = (FoundChoice) stepContext.Result;
// you can parse it as an enum or use it as is
string UserChoice = result.Value
// your logic here
}
推荐阅读
- python - 包含 True 的数据框的颜色行
- python - Django防止多用户登录
- r - 按组运行 R 代码
- gnuplot - 如何增加直方图行堆栈样式中的条形间隙?
- sqlite - SQLite3 类缺失
- javascript - 如何通过 XMLHttpRequest 从 PHP 获取 MySQL 数据到 Javascript 并按时间顺序输出数据?
- python - 代码在本地主机上工作,但不在服务器上 - https://www.nseindia.com/api/equity-stockIndices?index=NIFTY%2050 - python
- regex - Flutter dart 使用正则表达式将字符串拆分为较小的组
- c# - API 中的哪里是 ApiName 的值,用于分配 IdentiyServer4 的授权?
- node.js - React API 调用状态永远挂起