不确定如何使用choiceprompt
private async Task<DialogTurnResult> PromptForRequestStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
return await stepContext.PromptAsync(
RequestPrompt,
new PromptOptions
{
Prompt = MessageFactory.Text("Please choose a location."),
RetryPrompt = MessageFactory.Text("Sorry, please choose a location from the list."),
Choices = ChoiceFactory.ToChoices(new List<string> { "1", "2", "3" }),
});
}
private async Task<DialogTurnResult> PromptForTutorialStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
// Save name, if prompted.
var context = stepContext.Context;
var location = stepContext.Result;
var greetingState = await UserProfileAccessor.GetAsync(context);
greetingState.Request = stepContext.Result as string;
await UserProfileAccessor.SetAsync(stepContext.Context, greetingState);
if (greetingState.Request == "1")
{
var opts = new PromptOptions
{
Prompt = new Activity
{
Type = ActivityTypes.Message,
Text = $"1- Login to OneDrive" + Environment.NewLine + "2- Upload a file" + Environment.NewLine + "3- Create a folder",
},
};
return await stepContext.PromptAsync(OneDrivePrompt, opts);
}
运行机器人时。显示选项,然后我可以按带有“ 1”的按钮输入1。我不确定如何使用我使用的choiceprompt来使瀑布步的下一步工作。当我做一个简单的文本提示时,代码起作用了。我将其更改为choiceprompt,它不起作用。我需要做些什么才能使其正常工作?
答案 0 :(得分:0)
您是否有资料库可以查看工作与损坏之间的区别?
从目前的情况看,需要检查以下几件事: 1)“返回等待stepContext.PromptAsync(OneDrivePrompt,opts);”看起来像是不必要的等待。让Task类来完成它。
2)您知道程序在哪一行停止吗?
答案 1 :(得分:0)
我假设您是说RequestPrompt
变量中带有id值的提示被定义为ChoicePrompt
?
如果是这样,ChoicePrompt
的结果将是一个FoundChoice
实例。因此,假设在该提示之后执行的步骤是您在此处显示的PromptForTutorialStepAsync
,则将结果强制转换为FoundChoice
,然后使用该API来访问实际值。
最简单(尽管有争议但不是最清晰)的方式如下:
var location = ((FoundChoice)stepContext.Result).Value;