如何在LuisIntent中调用PromptDialog?

时间:2016-10-26 13:04:46

标签: c# botframework luis

我有一个带有几个LUIS意图的LuisDialog。在其中一些意图中,我可能需要向用户询问更多信息。在这些情况下,我正在尝试使用PromptDialog或PromptString。

我alredy试过这个:

[LuisIntent("MyIntent")]
public async Task MyIntent(IDialogContext context, LuisResult result)
{
    if (result.Entities.Count == 0)
    {

        PromptDialog.Text(context, AfterUserInputSymbol, "Message to the user", "Try again message", 2);
        result.Entities[0].Entity = userSymbol;                
    }

    //some other code

    context.Wait(MessageReceived);
}

private async Task AfterUserInputSymbol(IDialogContext context, IAwaitable<string> result)
{
    userSymbol = await result;
    context.Wait(MessageReceived);
}

而且:

[LuisIntent("MyIntent")]
public async Task MyIntent(IDialogContext context, LuisResult result)
{
    if (result.Entities.Count == 0)
    {
        PromptString dialog = new PromptString("Message to the user", "Try again message", 2);
        context.Call(dialog, AfterUserInputSymbol);
        result.Entities[0].Entity = userSymbol;                
    }

    //some other code

    context.Wait(MessageReceived);
}

private async Task AfterUserInputSymbol(IDialogContext context, IAwaitable<string> result)
{
    userSymbol = await result;
    context.Wait(MessageReceived);
}

在这两种情况下,提示都不会显示给用户,userSymbol的值将为空。当我调试代码时,只有当它到达此部分时才进入AfterUserInputSymbolresult.Entities[0].Entity = userSymbol;

如何在LuisIntent中提示更多信息?

1 个答案:

答案 0 :(得分:2)

由于您的问题中没有发布任何错误,因此不确定它到底发生了什么,但是可能发生的事情是您正在启动一个新对话框,并且您还有上下文。等等(MessageReceived)那里。如果您要启动对话框,则不必等待该流程中的消息,这就是我在那里添加else子句的原因。

 if (result.Entities.Count == 0)
    {
        PromptDialog.Text(context, AfterUserInputSymbol, "Message to the user", "Try again message", 2);
        // The following line shouldn't be here
        result.Entities[0].Entity = userSymbol;                
    }
    //here you should put an else
   else 
   {
    context.Wait(MessageReceived);
   }

另外,请记住,在尝试执行此操作后,您无法在调用对话框后将userSymbol分配给Luis Result实体。这将必须在ResumeAfter方法&#34; AfterUserInputSymbol&#34;中完成。

一旦你这样做,你可以手动调用你的Intent传递上下文和更新的Luis结果(你可能必须根据你想要达到的目的保存前一个)