如何在不使用Microsoft Bot Framework中的PromptDialog的情况下提示用户

时间:2017-06-17 08:37:15

标签: c# botframework luis

我有LUIS意图实现 -

    [LuisIntent("MyIntent")]
    public async Task MyIntent(IDialogContext context, IAwaitable<IMessageActivity> res, LuisResult result)
    {
        var message = await res;
        try
        {
            await context.PostAsync("I see that you have below options <br/> 1. Do first task <br/> 2. Do second task <br/> 3. Do third task ");
            PromptDialog.Text(context, taskdoer, "You can ask me like - <br/>Do task 2<br/>or simply enter 2");
        }
        catch (Exception e)
        {
            await context.PostAsync("Error is <br/> " + e.ToString());
            context.Wait(MessageReceived);
        }
    }

taskdoer的定义 -

    private async Task taskdoer(IDialogContext context, IAwaitable<string> result)
    {
        string strTaskNumber = await result;
                if (strTaskNumber == "2")
                {
                    await context.PostAsync("So, you have entered  " + strTaskNumber);
                    await context.PostAsync("This is Task 2");
                    context.Wait(MessageReceived);
                }
                if (strTaskNumber == "3")
                {
                    await context.PostAsync("So, you have entered  " + strTaskNumber);
                    await context.PostAsync("This is Task 3");
                    context.Wait(MessageReceived);
                }
    }

我想要实现的是,如果不使用新方法 - taskdoer,我如何在MyIntent方法本身中实现taskdoer逻辑,但是在taskdoer中有用户提示输入? 是否可以在不使用Microsoft bot中的PromptDialog的情况下提示用户?

1 个答案:

答案 0 :(得分:3)

您无法以您正在查看的方式实现它。如果您需要来自用户的输入,您将始终必须以新方法对响应进行操作。

你可以尝试使用匿名方法,虽然你仍然有一个方法并做一些技巧让它在同一范围内。它可能不起作用!

PromptDialog.Text(context, async (IDialogContext ctx, IAwaitable<string> resume) =>
{
    // your magic here
}, "text");

如果您不想在intent方法中使用Prompt,另一种选择是:

  1. 不是使用Prompt,而是context.PostAsync向用户显示问题
  2. 使用context.Wait等待用户输入。您可以等待一个新方法(应该有2个参数IDialogContextIAwaitable<IMessageActivity>),或者您可以使用LUIS中的MessageReceived,覆盖它并在那里添加一些逻辑以了解何时消息不应该LUIS,您应该执行taskdoer逻辑。我建议你有一个单独的方法。
  3. 我很好奇为什么你不想使用Prompt