Flere skjemaer i Microsoft bot rammeverk

stemmer
0

Jeg har to former. Jeg trenger å få tilgang til både skjemaer basert på brukerens input.

Formene er som følger

 internal static IDialog<JObject> BuildTravelForm()
    {
        travelstatus = 1;
        leaveStatus = 0;
        return Chain.From(() => FormDialog.FromForm(TravelForm.BuildForm))
            .Do(async (context, order) =>
            {
                try
                {
                    travelstatus = 0;
                    var completed = await order;
                    string source = (string)completed.GetValue(Question1);
                    string destination = (string)completed.GetValue(Question2);
                    await context.PostAsync(Your travel request is awaiting approval +   + from +   + source +   + to +   + destination);
                }
                catch (Exception)
                {

                    await context.PostAsync(Thank you);
                }
            });
    }

Den andre går som dette

internal static IDialog<JObject> BuildLeaveForm()
    {
        leaveStatus = 1;
        travelstatus = 0;
        return Chain.From(() => FormDialog.FromForm(LeaveForm.BuildForm))
            .Do(async (context,order)=>
        {
            leaveStatus = 0;
            var completed = await order;
            string startDate = (string)completed.GetValue(Question1);
            string endDate = (string)completed.GetValue(Question2);
            await context.PostAsync(Your leave is applied +   + from +   + startDate +   + to +   + endDate);
        });
    }

Kontrolleren metoden er som følger

 public async Task<Activity> Post([FromBody]Activity activity)
    {

        try
        {
            if (activity.Type == ActivityTypes.Message)
            {
                if (leaveStatus == 1 && travelstatus==0)
                { 
                    //nested if to check intents to follow
                    await Conversation.SendAsync(activity, BuildLeaveForm);
                }
                else if(travelstatus == 1 && leaveStatus==0)
                {
                    await Conversation.SendAsync(activity, BuildTravelForm);
                }
                else
                {
                    ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));
                    StateClient stateClient = activity.GetStateClient();
                    string replyMessage = ;
                    Luis stluis = await GetEntityFromLUIS(activity.Text);
                    if (stluis.intents.Count() > 0)
                    {
                        Activity reply;
                        ///await Conversation.SendAsync(activity, MakeGreetings);
                        using (var file = Assembly.GetExecutingAssembly().GetManifestResourceStream(Javis_V2.IntentLibrary.json))
                        {
                            o2 = JObject.Parse(new StreamReader(file).ReadToEnd());
                            string luisIntent = stluis.intents[0].intent;
                            if (luisIntent == LeaveManager)
                            {
                                await Conversation.SendAsync(activity, BuildLeaveForm);
                            }
                            else if(luisIntent==TravelManager)
                            {
                                await Conversation.SendAsync(activity, BuildTravelForm);
                            }
                            else
                            {
                                leaveStatus = 0;
                                travelstatus = 0;
                                replyMessage = (string)o2.GetValue(luisIntent);
                                if(replyMessage==)
                                {
                                    replyMessage = Sorry! Not getting you;
                                }
                                reply = activity.CreateReply(replyMessage);
                                await connector.Conversations.ReplyToActivityAsync(reply);
                            }
                        }
                    }
                }
            }
            else
            {
                HandleSystemMessage(activity);
            }
            return null;

        }
        catch (Exception exp)
        {
            Debug.WriteLine(exp);
            return null;
        }
    }

Problemet er at når den første formen er ferdig, og når den andre formen blir utløst gjennom luis hensikt, dukker opp den første form. Jeg leter etter noe uten bruk av dialoger.

Enhver form for hjelp er verdsatt. Takk på forhånd.

Publisert på 26/12/2016 klokken 06:29
kilden bruker
På andre språk...                            


1 svar

stemmer
0

Denne linjen er spørsmålet:

   if (leaveStatus == 1 && travelstatus==0)
                { 
                    //nested if to check intents to follow
                    await Conversation.SendAsync(activity, BuildLeaveForm);
                    await connector.Conversations.ReplyToActivityAsync(activity.CreateReply("Thanks"));
                }
                else if(travelstatus == 1 && leaveStatus==0)
                {
                    await Conversation.SendAsync(activity, BuildTravelForm);
                    await connector.Conversations.ReplyToActivityAsync(activity.CreateReply("Thanks"));
                }

Hvis du ser på koden ovenfor, kan BuildTravelForm eller BuildLeaveForm klart generere en feil, og avslutte det uten å kalle det kjededrift Do. Hvis alt utfører ok, vil det ringe Do ellers vil det rett og slett hoppe over det. Så det beste stedet å nullstille status er etter avvente uttalelse som er sikret å bli kalt etter ferdigstillelse av dialogen.

Jeg vil gjøre som dette:

   if (leaveStatus == 1 && travelstatus==0)
                { 
                    //nested if to check intents to follow
                    await Conversation.SendAsync(activity, BuildLeaveForm);
                    travelstatus =0; leaveStatus=0;
                    await connector.Conversations.ReplyToActivityAsync(activity.CreateReply("Thanks"));
                }
                else if(travelstatus == 1 && leaveStatus==0)
                {
                    await Conversation.SendAsync(activity, BuildTravelForm);
                    travelstatus =0; leaveStatus=0;
                    await connector.Conversations.ReplyToActivityAsync(activity.CreateReply("Thanks"));
                }

Må sjekke om det fungerer godt.

Svarte 28/12/2016 kl. 08:13
kilden bruker

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