C# 如何将Prompt.Choice()的结果转发到当前对话框?

C# 如何将Prompt.Choice()的结果转发到当前对话框?,c#,botframework,C#,Botframework,我正在使用PromptDialog.Choice()向用户显示不同的选项。尝试次数设置为0,因此如果他们键入任何无效选项,则不会重试 在本例中,我希望将输入的文本传递给当前对话框,该对话框显示提示并让它处理消息 正确的做法是什么?我尝试在提示符对话框的resume处理程序中创建一个新的活动,并直接调用MessageReceivedAsync()方法,但a)没有按预期工作,b)似乎是一个黑客行为 例如,提示“我不确定您想做什么。显示帮助还是继续尝试?”有两个选项“帮助”和“继续尝试”。但是,如果用

我正在使用
PromptDialog.Choice()
向用户显示不同的选项。尝试次数设置为0,因此如果他们键入任何无效选项,则不会重试

在本例中,我希望将输入的文本传递给当前对话框,该对话框显示提示并让它处理消息

正确的做法是什么?我尝试在提示符对话框的resume处理程序中创建一个新的活动,并直接调用
MessageReceivedAsync()
方法,但a)没有按预期工作,b)似乎是一个黑客行为

例如,提示“我不确定您想做什么。显示帮助还是继续尝试?”有两个选项“帮助”和“继续尝试”。但是,如果用户现在输入“一加一是什么?”,我希望当前的对话框能够处理这个问题


我也可以提出不同的问题:如何用另一个对话框替换堆栈顶部的当前对话框?这将允许我只调用相同的对话框。

我认为调用
MessageReceivedAsync
将是一种方法。关键是从正在创建的活动中传递一个
IAwaitable

代码应该如下所示:

await MessageReceivedAsync(context, Awaitable.FromItem(yourActivity));

为答案添加更多的上下文。我遇到了一个类似于下面链接中提到的问题的需求。此外,还使用了为同一问题提供的其中一个选项

虽然上面的问题被标记为与当前问题重复,但我觉得这个问题缺少路易斯的背景

如果创建的
活动
没有
频道
发件人
收件人
信息,则在创建回复时可能会出现一些异常。因此,下面的代码将帮助您创建正确的活动,并在将其移交给Luis之前设置正确的消息

路易斯意图法

    [LuisIntent("PerformSearch")]
    public async Task Search(IDialogContext context, IAwaitable<IMessageActivity> activity, LuisResult result)
    {
        var msg = await activity;
        msg.Value = result;
        await context.Forward(new SearchDialog(), ResumeAfterSearchPerformed, msg, CancellationToken.None);

    }

看起来……每当我查看NodeJS示例时,它们似乎在堆栈管理方面提供了更大的灵活性……这在NodeJS中似乎也是可能的:
    private async Task ResumeAfterSearchPerformed(IDialogContext context, IAwaitable<object> result)
    {

        var msg = await result;            
        var userSearchString = msg.ToString();
        if (userSearchString.Equals("searchCompleted", StringComparison.InvariantCultureIgnoreCase))
        {                
            context.Wait(MessageReceived);
        }
        else
        {
            // At this point send the message back to LUIS MessageReceived 
            // method to re-identify the intent and trigger the method
            Activity myActivity = (Activity)context.Activity;
            myActivity.Text = userSearchString;
            await MessageReceived(context, Awaitable.FromItem(myActivity));
        }
    }
 Activity reply = ((Activity)message).CreateReply();
 reply.AttachmentLayout = AttachmentLayoutTypes.Carousel;