Microsoft Bot Work, LUIS, ta litt action når meldingen ikke har en hensikt

stemmer
4

Jeg begynte å lære Microsoft Bot Work nylig, så jeg begynte å lage en chatbot og jeg tror jeg gjør det galt

Jeg gjør chatbot på denne måten:

-> Jeg får meldingen bruker
-> sende til LUIS
-> få intensjon og enhetene
-> velg mitt svar og sende det.

det er ok, men får følgende situasjon:

BRUKER: Jeg vil endre min e-post. -> hensikt: ChangeInfo enheter: e-post / verdi: e-post

Chatbot: Fortell meg din nye e-post please. -> Intent: noIntent enheter: noEntities

BRUKER: email@email.com -> hensikt: IDon'tKnow enheter: e-post / verdi: email@email.com

Jeg tar denne situasjonen, når brukeren sender sin e-post, sender jeg til Luis, men en e-post ikke har en hensikt, bare har en enhet, men en e-post kan brukes i mange forskjellige situasjoner, Mitt spørsmål er, hvordan min bot know sammenheng med samtalen for å forstå denne e-posten er for forandring e-post og ikke sende en e-post eller oppdatere denne e-post eller en annen ting.

koden min på GitHub her , det er en stygg kode, jeg vet, men jeg gjør dette bare for å forstå bot rammeverk, etter at jeg vil la denne koden vakrere

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


2 svar

stemmer
3

Dette bør være så enkelt som å bruke en LuisDialog og et sett med spørsmål for å administrere brukere flyte. Nedenfor finner du noen raske code Jeg satt sammen for å vise deg hvordan dette kan gjøres. Du trenger ikke ekstra trinn eller legge til ekstra enheter, eller gå til Luis med e gitt av brukeren.

Jeg vil anbefale deg å lese litt mer om LuisDialog og dialogbokser generelt som måten du bruker Luis i kontrolleren jeg tror ikke er veien å gå.

Her er en god Luis Utvalg og her en god en rundt multi-dialoger .

eksempel~~POS=TRUNC

namespace MyNamespace
{
    using System;
    using System.Threading.Tasks;
    using Microsoft.Bot.Builder.Dialogs;
    using Microsoft.Bot.Builder.Internals.Fibers;
    using Microsoft.Bot.Builder.Luis;
    using Microsoft.Bot.Builder.Luis.Models;
    using Microsoft.Bot.Connector;

    [Serializable]
    [LuisModel("YourModelId", "YourSubscriptionKey")]
    public class MyLuisDialog : LuisDialog<object>
    {
        [LuisIntent("")]
        [LuisIntent("None")]
        public async Task None(IDialogContext context, LuisResult result)
        {
            string message = "Não entendi, me diga com outras palavras!";

            await context.PostAsync(message);
            context.Wait(this.MessageReceived);
        }

        [LuisIntent("ChangeInfo")]
        public async Task ChangeInfo(IDialogContext context, IAwaitable<IMessageActivity> activity, LuisResult result)
        {
            // no need to go to luis again..
            PromptDialog.Text(context, AfterEmailProvided, "Tell me your new email please?");
        }

        private async Task AfterEmailProvided(IDialogContext context, IAwaitable<string> result)
        {
            try
            {
                var email = await result;

                // logic to store your email...
            }
            catch
            {
                // here handle your errors in case the user doesn't not provide an email
            }

          context.Wait(this.MessageReceived);
        }

        [LuisIntent("PaymentInfo")]
        public async Task Payment(IDialogContext context, IAwaitable<IMessageActivity> activity, LuisResult result)
        {
            // logic to retrieve the current payment info..
            var email = "test@email.com";

            PromptDialog.Confirm(context, AfterEmailConfirmation, $"Is it {email} your current email?");
        }

        private async Task AfterEmailConfirmation(IDialogContext context, IAwaitable<bool> result)
        {
            try
            {
                var response = await result;

                // if the way to store the payment email is the same as the one used to store the email when going through the ChangeInfo intent, then you can use the same After... method; otherwise create a new one
                PromptDialog.Text(context, AfterEmailProvided, "What's your current email?");
            }
            catch
            {
                // here handle your errors in case the user doesn't not provide an email
            }

            context.Wait(this.MessageReceived);
        }
    }
}
Svarte 27/12/2016 kl. 14:57
kilden bruker

stemmer
3

I min bot flyt, jeg bruker en stepvariabel som jeg endre fra front-end. Og en annen stepvariabel som jeg endre fra boten. Dette hjelper meg å identifisere hvilke skritt jeg er i samtale. Du kan gjøre det samme for å identifisere hva boten ber brukeren.

var data = {step: "asked_email"};
var msg = builder.Message(session).addEntity(data).text("Your message.");
session.send(msg);

Hvis du ikke ønsker å sende en bestemt skritt å LUIS for anerkjennelse, kan du håndtere det i onBeginDialogbehandleren:

intents.onBegin(function (session, args, next) {
  if (session.message.step !== "email") {
    next();
  } else {
    //Do something else and not go to LUIS.
    session.endDialog();
  }
});

Du kan finne referansen til LUIS onBeginDialog her: https://docs.botframework.com/en-us/node/builder/chat/IntentDialog/#onbegin--ondefault-handlers

Detaljer om meldingsdata finner du her: https://docs.botframework.com/en-us/node/builder/chat-reference/classes/_botbuilder_d_.message.html#entities

Svarte 27/12/2016 kl. 10:27
kilden bruker

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