PromptDialog på ubestemt antall spørsmål

stemmer
4

Jeg forsøker å skrive en bot som ville tillate brukere å opprette en forespørsel (eksempel. Jeg ønsker å kjøpe en t-skjorte eller jeg ønsker å fikse min datamaskin). Avhengig av forespørsel om de velger, vil de bli bedt om en rekke spørsmål knyttet til den forespørsel; spørsmålene er knyttet direkte til forespørsel om de velger. For tiden er jeg forsøke å iterere gjennom denne listen over spørsmål og bruke PromptDialog.Text metode for å få svar. Men dette spør bare det siste spørsmålet i listen, og når et svar blir gitt Jeg får en feilmelding med ugyldig behov: forventet Vent, har gjort som meldingen.

private async Task ListOfferings(IDialogContext context, IAwaitable<string>  result)
{
   string name = await result;
   var offerings = Offerings.Where((x) =>          
      CultureInfo.CurrentCulture.CompareInfo.IndexOf(x.Name, name, 
      CompareOptions.IgnoreCase) >= 0
   );
   if (offerings.Count() != 0)
   {
      PromptDialog.Choice(context, CreateOffering, offerings, Which of these would you like?);
   }
   else
   {
      await context.PostAsync(string.Format(Could not find an offering with name {0}, name));
      context.Wait(MessageReceived);
   }
}


private async Task CreateOffering(IDialogContext context, IAwaitable<Offering> result)
{
   var offering = result.GetAwaiter().GetResult();
   await context.PostAsync(string.Format(***CREATING {0}***, offering.Name.ToUpper()));

   foreach (var question in offering.Questions)
   {
      PromptDialog.Text(context, null, question.Question);
   }
}

Er det mulig å gjøre noe som dette, der jeg ønsker å dynamisk bestemme spørsmålene vil brukeren bli spurt under kjøring eller er jeg pålagt å ta en mer statisk, manus tilnærming?

Publisert på 08/06/2016 klokken 10:36
kilden bruker
På andre språk...                            


1 svar

stemmer
4

Du kan ikke bare gjøre flere samtaler med PromptDialog.Texti en loop, fordi du må vente på en brukers svar etter hvert spørsmål. Prøv å gjøre det på denne måten:

private int questionNumber;
private Offering offering;

private async Task CreateOffering(IDialogContext context, IAwaitable<Offering> result)
{
    offering = await result;
    await context.PostAsync($"***CREATING {offering.Name.ToUpper()}***");
    questionNumber = 0;
    // fix access to a particular question in case Questions is not an IList
    PromptDialog.Text(context, OnQuestionReply, offering.Questions[questionNumber].Question);
}

private async Task OnQuestionReply(IDialogContext context, IAwaitable<string> result)
{
    var answer = await result;
    // handle the answer for questionNumber as you need

    questionNumber++;
    // use Count instead of Length in case it is not an array
    if (questionNumber < offering.Questions.Length)
    {
        PromptDialog.Text(context, OnQuestionReply, offering.Questions[questionNumber].Question);
    }
    else
    {
        // do what you need when all the questions are answered
        await context.PostAsync("I have no more questions for this offering.");
        context.Wait(MessageReceived);
    }
}
Svarte 28/08/2016 kl. 05:04
kilden bruker

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