【问题标题】:How to Prompt user without using PromptDialog in Microsoft Bot Framework如何在不使用 Microsoft Bot Framework 中的 PromptDialog 的情况下提示用户
【发布时间】:2017-06-17 19:57:04
【问题描述】:

我有以下 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 的情况下提示用户?

【问题讨论】:

    标签: c# botframework azure-language-understanding


    【解决方案1】:

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

    您可以尝试使用匿名方法,尽管您仍然拥有一个方法并采取一些技巧将其置于同一范围内。它可能不起作用!

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

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

    1. 不要使用Prompt,而是使用context.PostAsync 向用户显示问题
    2. 使用context.Wait 等待用户输入。您可以等待一个新方法(应该有 2 个参数,IDialogContextIAwaitable&lt;IMessageActivity&gt;),或者您可以只使用来自 LUIS 的 MessageReceived,覆盖它并在那里添加一些逻辑以了解消息何时不应发送LUIS 你应该执行taskdoer 逻辑。我建议您使用单独的方法。

    我很好奇你为什么不想使用Prompt

    【讨论】:

      猜你喜欢
      • 2018-11-09
      • 2018-03-08
      • 1970-01-01
      • 2017-09-26
      • 2020-02-17
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多