Hvordan jeg kaller PromptDialog gjør innsiden av en LuisIntent?

stemmer
1

Jeg har en LuisDialog med flere LUIS hensikter. I noen av disse hensikter kan jeg trenger å spørre brukeren om mer informasjon. I disse tilfellene prøver jeg å bruke en PromptDialog eller en lede.

Jeg jo egentlig prøvd dette:

[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);
}

Og dette:

[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);
}

I begge tilfeller blir bedt om ikke vises til brukeren og verdien av userSymbolfår en null. Når jeg debugging koden bare kommer inn i AfterUserInputSymbolnår det kommer tallet til denne delen:result.Entities[0].Entity = userSymbol;

Hvordan kan jeg be om mer informasjon inne i en LuisIntent?

Publisert på 26/10/2016 klokken 13:04
kilden bruker
På andre språk...                            


1 svar

stemmer
2

Ikke sikker på nøyaktig hva det er som skjer, siden det ikke er noen feil postet i spørsmålet ditt, men noe som kan skje er at du starter en ny dialog og også har du context.Wait (MessageReceived) der. Hvis du lanserer en dialog, trenger du ikke å vente på en melding i denne flyten, det er derfor jeg vil legge til et annet klausul der.

 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);
   }

Også ha i tankene at du ikke vil være i stand til å tildele userSymbol til Luis Resultat foretaket etter ringer dialogen som du prøver å gjøre. Som må gjøres i ResumeAfter metoden "AfterUserInputSymbol".

Når du gjør det, kan du manuelt ringe Intent passerer sammenheng og den nyere Luis Resultat (du må kanskje spare den forrige avhengig av hva du prøver å oppnå)

Svarte 26/10/2016 kl. 13:39
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more