如何从BotFramework中的PromptDialog选项访问当前的MessageActivity

时间:2016-12-14 21:53:18

标签: botframework

我通过PromptDialog.choice方法向用户提供了4个选项。在我的Resume方法中,我想将用户转发到一个对话框来处理他们的选择。我无法再访问当前的MessageActivity对象  并想知道我的选择是什么?如果可能的话,我想传递原始的消息。传递一个空的似乎是一个黑客。 PrintGraphicDialog对话框只显示一个图形图像并返回4个选项。使用Context.Call命中PrintGraphicDialog的StartAsync方法并进行context.wait()调用,该调用要求用户键入内容。然后它打印图形。不完全是想要的。

private void ShowOptions(IDialogContext context)
{
    PromptDialog.Choice(context, this.OnOptionSelected, new List<string>() { OptionOne, OptionTwo, OptionThree, OptionFour }, "Please select from the following options:", "Not a valid option", 3);
}

private async Task OnOptionSelected(IDialogContext context, IAwaitable<string> result)
{
    try
    {
        string optionSelected = await result;

        switch (optionSelected)
        {
            case OptionOne:
                await context.Forward(new PrintGraphicDialog(), this.ResumeAfterOptionDialog, context.MakeMessage(), CancellationToken.None);
                break;
            case OptionTwo:
                break;
            case OptionThree:
                break;
            case OptionFour:
                break;
        }
    }
    catch (TooManyAttemptsException ex)
    {
    }
}

2 个答案:

答案 0 :(得分:0)

您可以在调用PromptDialog.Choice之前将消息存储在变量中,然后在Resume方法中使用它。

答案 1 :(得分:0)

由于我转发控件的对话框实际上只需要原始消息中的一些属性,我只是创建了一个类,将它们存储在那里并在转发之前,执行context.MakeMessage()并使用存储的off属性填充它。似乎应该有更好的方法。