选择提示出现问题

时间:2019-01-05 23:16:18

标签: c# botframework

不确定如何使用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,它不起作用。我需要做些什么才能使其正常工作?

2 个答案:

答案 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;