Crea un agente RBM basato su Dialogflow (avanzato)

In questo codelab, imparerai a utilizzare Dialogflow per creare un'interfaccia di conversazione per potenziare un agente RBM.

Cosa creerai in questo codelab?

  • Un agente Dialogflow che supporta la conversazione di un agente RBM
  • Un'interfaccia di conversazione per un negozio di biciclette fittizio che consente agli utenti di conoscere le informazioni sul negozio di biciclette e impostare appuntamenti per riparare o riparare la bicicletta

Che cosa imparerai

  • Come utilizzare i tre costrutti principali (intent, entità e contesti) di Dialogflow per creare un'interfaccia di conversazione
  • Come connettere la tua interfaccia di conversazione ai tuoi servizi e alle tue API utilizzando l'editor in linea e di fulfillment di Dialogflow (basato su Cloud Functions per Firebase)
  • Come creare tipi di risposta RBM da Dialogflow per creare un'esperienza RBM avanzata per gli utenti

Che cosa ti serve

  • Un account Google

Crea ed esegui query sul primo agente

Durata: 10:00

Crea il tuo primo agente Dialogflow

Per creare un agente Dialogflow:

  1. Apri una nuova scheda e accedi a Dialogflow.
  2. Fai clic su Crea agente nel riquadro di navigazione a sinistra.

  3. Inserisci &codet;CodelabRBMBikeShop" per il nome dell'agente e "Inglese" come lingua predefinita, quindi imposta il fuso orario predefinito sul tuo fuso orario. Fai clic su Crea.

La console di Dialogflow

A questo punto dovresti vedere la console Dialogflow. Se stai lavorando su uno schermo più piccolo e il menu di navigazione a sinistra è nascosto, fai clic sul pulsante di navigazione nell'angolo in alto a sinistra. Il pulsante delle impostazioni ti consente di accedere alle impostazioni dell'agente corrente.

Al centro della pagina viene mostrato un elenco di intent per l'agente. Per impostazione predefinita, gli agenti di Dialogflow utilizzano due intent. Il tuo agente corrisponde a Intent di riserva predefinito quando non comprende ciò che dicono gli utenti. L'intent di benvenuto predefinito saluta i tuoi utenti. Puoi modificare questi intent per personalizzare l'esperienza.

A destra è visualizzato il simulatore Dialogflow. In questo modo puoi provare l'agente parlando o digitando messaggi.

Esecuzione di query sull'agente

Gli agenti Dialogflow sono descritti meglio come moduli NLU (Natural Language interpret). che possono essere inclusi nella tua app, nel tuo prodotto o nel tuo servizio per trasformare le richieste degli utenti naturali in dati strategici.

È ora di provare l'agente. Nel simulatore a destra, fai clic nel campo di testo Prova ora, digita "Hi" e premi Invio.

Dialogflow identifica la query, corrisponde all'intent di benvenuto predefinito e risponde con un saluto generico. Questo funziona perché Dialogflow addestra automaticamente l'intent di benvenuto predefinito con alcuni saluti di esempio.

Crea un agente RBM

Accedi alla Console per gli sviluppatori delle comunicazioni aziendali, quindi fai clic su Crea agente.

Nel campo Nome, inserisci"Negozio di biciclette del tuo nome" (come"Agente bici di Sean") e seleziona una regione, quindi fai clic su Crea agente.

Connettere l'agente RBM a Dialogflow

Dopo aver creato l'agente RBM, fai clic sull'agente per visualizzare la pagina Panoramica dell'agente. Fai clic sul link Integrazioni nella barra di navigazione a sinistra.

Per impostazione predefinita, gli agenti RBM utilizzano Google Cloud Pub/Sub per gestire i messaggi degli utenti. Per connettere il tuo agente RBM all'agente Dialogflow creato in precedenza, fai clic sull'integrazione Dialogflow.

Nella finestra di dialogo, fai clic su Collega modello esistente. Segui le istruzioni per concedere al tuo agente RBM le autorizzazioni per chiamare l'agente Dialogflow, quindi fai clic su Avanti.

Infine, devi fornire l'ID progetto Dialogflow. In una scheda del browser diversa da quella della Business Communications Developer Console, vai a Dialogflow e apri l'agente CodelabRBMBikeShop che hai creato in precedenza. Fai clic sull'icona a forma di ingranaggio accanto al nome del progetto nel riquadro di navigazione a sinistra.

Fai clic per accedere alle impostazioni del modello. In PROGETTO GOOGLE,trova e copia l'ID progetto.

Torna alla scheda con la Business Console Communications Console aperta, incolla l'ID progetto nella finestra di dialogo e fai clic su Avvia integrazione.

Questo processo richiede circa due minuti. Al termine, dovresti vedere l'opzione di integrazione Dialogflow evidenziata e un link Visualizza agente disponibile.

Tutti i messaggi da e verso il tuo agente ora sono gestiti dall'agente Dialogflow di CodelabRBMBikeShop.

Invita il tuo dispositivo di test e invia un messaggio

Prima di immergerti in Dialogflow, configuriamo il dispositivo di test. Se non hai ancora un dispositivo in grado di ricevere messaggi RBM, segui questa guida per preparare il tuo dispositivo.

Nella console per gli sviluppatori di Business Communications, fai clic su Dispositivi nel pannello di navigazione a sinistra. Nel modulo, inserisci il numero di telefono completo del dispositivo in formato E.164 (ad esempio, +12223334444) e fai clic su Aggiungi.

Sul tuo dispositivo, ricevi l'invito al test. Tocca Rendimi un tester.

Nel browser, individua il dispositivo nell'elenco Dispositivi e inviagli un messaggio di prova. Se hai ricevuto un messaggio sul tuo dispositivo dall'agente RBM, è tutto pronto per continuare con questo codelab.

Creazione dell'intent di benvenuto

In genere con un agente RBM basato su Dialogflow, per avviare una conversazione si effettua una chiamata API che specifica il numero di telefono dell'utente e l'intent Dialogflow che inizia la conversazione (di solito l'intent di benvenuto dell'agente). Per questo codelab, ignoreremo questo passaggio e utilizzeremo invece il thread di conversazione già creato nel passaggio precedente con il dispositivo di test della Business Developer Communications Console. Tuttavia, se volete saperne di più su questa funzionalità API, consultare questa guida.

Per iniziare, aggiungi le risposte RBM all'intent di benvenuto predefinito in modo che Dialogflow possa utilizzarlo con il tuo agente RBM. Innanzitutto, vai alla scheda del browser con Dialogflow aperto. Fai clic su Intent di benvenuto predefinito, scorri verso il basso fino alla sezione Risposte, fai clic su + nell'elenco dei tipi di risposta e seleziona RCS Business Messaging (RBM).

Fai clic su Aggiungi risposte, quindi seleziona Risposta semplice. Nel campo di testo per Risposta semplice inserisci " "Ciao, ti diamo il benvenuto nel negozio di biciclette Hogarth." Posso aiutarti? (sostituisci Hogarth con il tuo nome), quindi fai clic su Salva.

Avvio di una conversazione

Ora che hai configurato un intent di benvenuto, torna al tuo dispositivo di test e invia il messaggio "Ciao". Questo messaggio attiva l'intent di benvenuto predefinito e dovresti vedere qualcosa di simile all'immagine seguente.

Aggiorna l'intenzione di benvenuto

Ora che Dialogflow invia un semplice messaggio, aggiornalo per renderlo un po' più utile. Vogliamo offrire non solo un saluto all'utente, ma anche indicazioni sulle sue azioni.

L'agente che stiamo creando deve supportare due funzionalità principali: controllare l'orario di apertura e pianificare un appuntamento. Sostituisciamo il nostro semplice messaggio di benvenuto con una scheda che fornisce risposte suggerite per eseguire queste interazioni.

In Intent di benvenuto predefinito's, Risposte, seleziona la scheda RCS Business Messaging (RBM). Rimuovi l'attuale Risposta semplice facendo clic sull'icona del cestino. Quindi, fai clic su Aggiungi risposte e seleziona Scheda interattiva autonoma.

Nel modulo della carta interattiva Stand, inserisci quanto segue:

  • Card Title: Ciao, ti diamo il benvenuto nel negozio di biciclette di Hogarth.
  • Descrizione della carta: come posso aiutarti? Seleziona una delle seguenti opzioni:
  • Seleziona orientamento scheda: verticale
  • URL immagine/video: https://storage.googleapis.com/df-rbm-codelab/bike-shop.jpg
  • Seleziona media altezza: media

Fai clic su Aggiungi suggerimento e inserisci quanto segue:

  • Testo del suggerimento: Quali sono gli orari di apertura?
  • Postback del suggerimento: answer_hours

Aggiungi un altro suggerimento facendo clic su Aggiungi suggerimento e inserendo quanto segue:

  • Testo del suggerimento: fissa un appuntamento
  • Postback del suggerimento: Response_appointment

Fai clic su Salva.

Fate una prova!

Una volta che il modello ha detto "Formazione agente completata", torna al dispositivo e invia il messaggio "Ciao" all'agente. A questo punto dovresti vedere la scheda interattiva autonoma che hai appena progettato.

Prova a toccare Quali sono gli orari di apertura?. Noterai che l'intent di riserva predefinito viene attivato. Questo perché l'agente Dialogflow non sa come gestire i dati postback configurati per questo suggerimento.

Risolviamo il problema.

Creare l'intenzione Ore

Dialogflow utilizza gli intent per classificare le intenzioni di un utente. Gli intent contengono frasi di addestramento, che sono esempi di ciò che un utente potrebbe dire all'agente. Ad esempio, qualcuno che voglia conoscere gli orari di apertura del nostro negozio di biciclette potrebbe chiedere "Quando apri il canale." "Quali sono i tuoi orari?" o "Come tardi posso entrare inquoquot;.

Tutte queste query sono uniche, ma hanno la stessa intenzione: ottenere informazioni su quando è aperto il nostro negozio di biciclette.

Per coprire questa query, crea un intent "Orario":

  1. Nel riquadro di navigazione a sinistra, fai clic sul segno + accanto ad Intent.
  2. In Nome intent, inserisci "Orario".
  3. In Frasi di addestramento, fai clic su Aggiungi espressione utente e inserisci quanto segue, premendo Invio dopo ogni voce:

    • When do you open?
    • What are your hours?
    • How late can I come in?
    • reply_hours

    Quest'ultima frase di addestramento viene utilizzata per mappare i dati postback che hai configurato nella sezione precedente con questo intent.

  4. In Risposte, fai clic su + e seleziona RCS Business Messaging (RBM).

  5. Fai clic su Aggiungi risposte e seleziona Risposta semplice.

  6. Nel campo di testo per Risposta semplice, inserisci "Siamo aperti ogni giorno feriale dalle 9:00 alle 17:30".

  7. Fai clic su Salva.

Fate una prova!

Ora prova a chiedere all'agente gli orari. Sul tuo dispositivo, nella conversazione per l'agente RBM, digita "Quando sei open?&quot" e invia il messaggio all'agente.

L'agente ora risponde correttamente alla query. Tieni presente che anche se la tua query era un po' diversa dalla frase di addestramento ("when you are open?" versus "when do you open?"), Dialogflow ha comunque abbinato la query all'intent corretto. Puoi anche provare a toccare Quali sono gli orari di apertura? nella scheda interattiva.

Dialogflow utilizza frasi di addestramento come esempio per un modello di machine learning per abbinare le query degli utenti all'intent corretto. Il modello di machine learning confronta la query con ogni intent dell'agente, assegna un punteggio a ogni intent e viene abbinata all'intent con il punteggio più alto. Se l'intent con il punteggio più alto ha un punteggio molto basso, l'intent di riserva viene abbinato.

Aggiunta di fulfillment

Anche se funziona, l'agente che abbiamo creato si comporta in modo un po' innaturale. Quando l'utente chiede, ad esempio, "Sei aperto?", l'agente risponderà con "Siamo aperti tutti i giorni feriali dalle 9:00 alle 17:30". Sarebbe molto più naturale e utile che ci dicesse direttamente se il negozio è aperto.

Per farlo, il nostro agente deve verificare se il negozio è attualmente aperto e generare una risposta diversa in entrambi i casi. In Dialogflow, questo tipo di logica complessa dovrebbe essere implementata nel webhook di evasione.

Un webhook di evasione è un server HTTP chiamato da Dialogflow con informazioni sullo stato della conversazione corrente. Il codice di evasione esegue le azioni richieste, quindi genera una risposta che Dialogflow restituisce all'utente.

Ora esamineremo il processo di deployment di un webhook di evasione che rende il nostro agente più utile.

Configurazione: deployment e abilitazione fulfillment

Dialogflow dispone di un editor Cloud Functions for Firebase integrato che ti consente di scrivere ed eseguire il deployment di codice JavaScript che gestirà il tuo fulfillment.

Nel riquadro di navigazione a sinistra di Dialogflow, fai clic su Fulfillment per aprire la pagina di evasione degli ordini. Fai clic sul pulsante di attivazione/disattivazione accanto a Editor incorporato per attivare l'editor di Cloud Functions for Firebase.

Noterai che l'editor contiene due file: "index.js", che contiene il codice principale per il fulfillment, e "package.json", che specifica i dettagli che richiedono dipendenze.

Ora importeremo del codice di esempio su cui basare la distribuzione.

Copia e incolla il testo di questo file in "index.js", sostituendo tutti i suoi contenuti attuali:

https://storage.googleapis.com/df-rbm-codelab/index.js

Scorri fino in fondo alla pagina e fai clic su POSIZIONA. Dopo circa un minuto, il deployment del tuo codice verrà eseguito in Cloud Functions per Firebase.

Una volta eseguito il deployment della funzione, vedrai la data e l'ora del deployment in fondo alla pagina:

Dai un'occhiata al codice di evasione degli ordini. La funzione hoursHandler chiama currentlyOpen per determinare se il negozio è attualmente aperto e aggiunge una risposta RBM diversa a seconda della condizione.

function hoursHandler(agent) {
    let responseText = 'We\'re currently closed, but we open every weekday at 9am!';
    if (currentlyOpen()) {
      responseText = 'We\'re open now!! We close at 5pm today.';
    }

    let payload = {
    "fulfillmentMessages": [
        {
          "platform": "GOOGLE_RBM",
          "rbmText": {
              "text": responseText
          }
        }
      ]
    };

    return response.status(200).json(payload);
}

La riga intentMap.set('Hours', hoursHandler); indica alla libreria di fulfillment che la funzione hoursHandler deve essere eseguita quando l'intent "Hours" viene abbinato. Tuttavia, dobbiamo anche comunicare a Dialogflow di abilitare l'evasione degli ordini per "Hours".

Nel riquadro di navigazione a sinistra, fai clic su Intent e apri l'intent "Ore". Apri la sezione Fulfillment in basso e seleziona Abilita chiamata webhook per questo intent, in modo che sia attivata.

Dopo aver salvato l'intent, puoi provare. Nel simulatore a destra, inserisci "Sei open?". Se fai clic su Informazioni di diagnostica e controlli la risposta dell'API, dovresti vedere la risposta di evasione degli ordini. Tieni presente che il fuso orario utilizzato dal server di Cloud Functions for Firebase sarà UTC, quindi la risposta potrebbe non essere corretta per l'ora locale corrente.

Se si verifica un errore nel fulfillment, Dialogflow utilizza qualsiasi risposta definita nella sezione Risposte della pagina Intent, consentendo all'agente di recuperare l'invio correttamente.

Successivamente, utilizzeremo le entità per estrarre le parti pertinenti della query dell'utente. In questo modo, gli utenti possono fissare un appuntamento con il nostro negozio per la riparazione o la riparazione.

Estrazione dei dati con entità

Durata: 12:00

In questa sezione vedremo come estrarre i dati dalla query di un utente per consentire agli utenti di prendere un appuntamento con il nostro negozio di biciclette per richiedere la riparazione o la riparazione di una bicicletta.

Aggiungere parametri agli intent

I parametri sono parole o frasi pertinenti nelle query di un utente che Dialogflow estrae in modo che l'agente possa fornire una risposta adeguata. Creerai un nuovo intent con i parametri e scoprirai come includere i relativi valori nelle risposte.

  1. Fai clic su + accanto a Intent nel riquadro di navigazione a sinistra per creare un nuovo intent.
  2. Come nome dell'intent, inserisci "Fissa appuntamento" nella parte superiore della pagina.
  3. Aggiungi quanto segue come frasi di addestramento:
    • reply_appointment
    • I'd like to schedule an appointment for next Thursday
    • I'd like to get my bike fixed, I have a mountain bike that needs servicing
    • My bike is broken
    • Can I schedule service for 4pm tomorrow?
    • Can you fix my road bike?
    • Can I set up an appointment for noon on Friday?

Dialogflow rileva automaticamente i parametri noti nelle frasi di addestramento e li crea automaticamente.

Sotto Frasi di addestramento, Dialogflow compila automaticamente la tabella dei parametri con le informazioni che raccoglie:

  • il parametro è facoltativo (non obbligatorio)
  • denominati date e time
  • corrisponde al tipo di entità di sistema @sys.date e @sys.time**
  • ha il valore di $date e $time
  • non è un elenco

Utilizzare i dati dei parametri

Puoi utilizzare il valore di un parametro nelle risposte. In questo caso, puoi utilizzare $date e $time nelle tue risposte e queste verranno sostituite con la data e l'ora specificate nella query al tuo agente.

In Risposte, aggiungi la scheda Messaggistica aziendale RCS, aggiungi quanto segue a una Risposta semplice e fai clic su Salva:

Great! I've set up your appointment for $date at $time.  See you then!

Fate una prova!

Ora, interroga il tuo agente con "Posso prendere un appuntamento per le 14 di domani?" nel simulatore nel riquadro a destra.

Nella parte inferiore dell'output del simulatore è visibile che Dialogflow ha estratto correttamente i parametri "domani" e "14:00" dalla query e li ha analizzati correttamente come data e ora. Ora prova la stessa cosa dal dispositivo di prova e scopri come la risposta include correttamente la data e l'ora analizzate.

Parametri obbligatori

Nel caso del nostro negozio di biciclette, dobbiamo conoscere i valori di data e ora prima di poter fissare un appuntamento. Per impostazione predefinita, tutti i parametri Dialogflow sono facoltativi. Per renderle obbligatorie, dobbiamo selezionare la casella accanto a ciascun parametro che vogliamo rendere obbligatorio. Seleziona la casella accanto a ciascun parametro nell'intent "Fissa appuntamento":

Ora che ogni parametro è obbligatorio, dobbiamo creare un prompt per ogni parametro. I messaggi chiedono all'utente di fornire un valore per il parametro non fornito quando l'utente ha inizialmente indicato la propria intenzione (in questo caso, di fissare un appuntamento). Fai clic su Definisci richieste per creare un prompt per un parametro e inserisci le seguenti richieste per ogni parametro:

Parametro Messaggio
date In quale giorno vuoi venire?
time Quale orario preferisci?

Dopo aver inserito le richieste, fai clic su Salva.

Fate una prova!

Sul tuo dispositivo, tocca il suggerimento di Fissa un appuntamento o digita "Voglio correggere la mia bici". Ricevi la risposta "In che giorno vuoi che arrivi"? Indica una data (domani) e riceverai una risposta con una richiesta di data. Rispondi e vedrai che l'appuntamento è stato impostato.

Le query contenenti alcune informazioni nella richiesta iniziale (ad esempio: "Vorrei impostare un appuntamento per domani") compila il parametro corretto (la data), salta il messaggio della data (in quale giorno vuoi entrare in entrata) e passa alla richiesta di ora ("Quale ora funziona per te?").

Abbiamo appena usato entità e parametri Dialogflow per creare una conversazione completamente unica senza codice e senza quasi nessuna configurazione. Ora vedremo come utilizzare la distribuzione per guidare le risposte dell'utente a richieste come "Come vorresti fissare un appuntamento?".

Configurazione: abilitazione evasione degli ordini

Nel riquadro di navigazione a sinistra, fai clic su Intent e apri l'intent "Fissa appuntamento". Apri Fulfillment, seleziona Abilita chiamata webhook per questo intent e Attiva chiamata webhook per il riempimento degli slot in modo che siano entrambi attivati, e fai clic su Salva.

Quando entrambi sono attivati, quando questo intent viene attivato, Dialogflow utilizza il fulfillment per generare le risposte per i parametri richiesti, se necessario, nonché la risposta RBM per l'intent.

Implementa il fulfillment

Nel riquadro di navigazione a sinistra di Dialogflow, fai clic su Fulfillment per aprire la pagina di evasione degli ordini. Scorri verso il basso fino alla riga

intentMap.set('Hours', hoursHandler);

E aggiungi quanto segue come riga successiva:

intentMap.set('Make Appointment', makeAppointment);

Questo indica alla libreria di evasione che la funzione makeAppointment deve essere eseguita quando l'intenzione"Fissa appuntamento"corrisponde.

Successivamente, copia il codice riportato di seguito e incollalo sotto la funzione currentlyOpen. Le due funzioni, getSuggestedTimes e getSuggestedDates, creano utili elenchi di chip per semplificare le risposte degli utenti.

function getSuggestedTimes() {
  return [
        {
          "reply": {
            "text": "9 am",
            "postbackData": "9:00am"
            }
        },
        {
          "reply": {
            "text": "10 am",
            "postbackData": "10:00am"
          }
        },
        {
          "reply": {
            "text": "1 pm",
            "postbackData": "1:00pm"
          }
        },
        {
          "reply": {
            "text": "2 pm",
            "postbackData": "2:00pm"
          }
        }
      ];
}

function getSuggestedDates() {
  return [
        {
          "reply": {
            "text": "Tomorrow",
            "postbackData": "Tomorrow"
          }
        },
        {
          "reply": {
            "text": "A week from now",
            "postbackData": "A week from now"
          }
        },
        {
          "reply": {
            "text": "Two weeks from now",
            "postbackData": "Two weeks from now"
          }
        }
      ];
}

Quindi, sotto hoursHandler, copia e incolla il codice riportato di seguito, quindi fai clic su Esegui il deployment.

function makeAppointment(agent) {
    // extract required parameters
    const appointmentDate = agent.parameters.date;
    const appointmentTime = agent.parameters.time;

    const gotAppointmentDate = appointmentDate.length > 0;
    const gotAppointmentTime = appointmentTime.length > 0;

    let responseText = '';
    let suggestions = [];

    if(gotAppointmentDate && gotAppointmentTime) {
      // We have all required parameters, return success message
      responseText = 'Great! I\'ve set up your appointment for ' +
          appointmentDate + ' at ' + appointmentTime + '.  See you then!';
    }
    else if(gotAppointmentDate) {
      responseText = 'What time works for you?';
      suggestions = getSuggestedTimes();
    }
    else if(gotAppointmentTime) {
      responseText = 'What day do you want to come in?';
      suggestions = getSuggestedDates();
    }
    else {
      responseText = 'What day do you want to come in?';
      suggestions = getSuggestedDates();
    }

    let payload = {
      "fulfillmentMessages": [
      {
        "platform": "GOOGLE_RBM",
        "rbmText": {
          "text": responseText,
          "rbmSuggestion": suggestions
        }
      }
    ]
    };

    return response.status(200).json(payload);
  }

Dedica qualche minuto a esaminare il codice. Tieni presente che i parametri obbligatori vengono controllati per i valori e, se non sono impostati, richiedono all'utente un messaggio adeguato e un insieme di suggerimenti.

Fate una prova!

Sul tuo dispositivo, tocca il suggerimento di Fissa un appuntamento o digita "Voglio correggere la mia bici". Otterrai la risposta "In quale giorno vorresti entrare entro, con alcuni suggerimenti utili: "Domani", "Una settimana da adesso" e "Due settimane da adesso". Indica una data (domani) per ricevere una risposta in cui chiedi un po' di tempo. Rispondi e vedrai che l'appuntamento è stato impostato.

Gestisci stato con contesti

Durata: 7:00

Aggiungere contesti allo stato di conversazione

Una volta che l'utente ha fissato un appuntamento, potremmo volerti raccogliere altre informazioni. Immagina che il nostro negozio di biciclette offra due tipi di appuntamento: riparazione o messa a punto. Vogliamo sapere quali di queste esigenze gli utenti hanno bisogno.

Per iniziare, aggiorniamo la risposta dell'intenzione di "Fissa un appuntamento" per chiedere all'utente il tipo di appuntamento di cui ha bisogno. Sostituisci la risposta di operazione riuscita nella funzione di evasione makeAppointment con il testo che segue, quindi fai clic su Esegui il deployment.

responseText = 'Great! I\'ve set up your appointment for ' +
    appointmentDate + ' at ' + appointmentTime + '.  Do you need a repair for just a tune-up?';

Per raccogliere la risposta a questa domanda, dobbiamo creare un altro intent. Tuttavia, è importante che la nuova intenzione corrisponda a questa domanda solo dopo che è già stata data risposta alla domanda. Per applicarlo, possiamo definirlo come intenzione di follow-up.

Gli intent di follow-up sono intent che possono essere abbinati solo dopo che la loro intenzione di essere "genitori" (in questo caso il nostro "Appuntamento?") è stata abbinata. Fai clic su Intent nel riquadro di navigazione a sinistra (se il menu è nascosto, fai clic sul pulsante Menu Menu nell'angolo in alto a sinistra). Quindi passa il mouse sopra l'intent "Fissa appuntamento" e fai clic su Aggiungi intent di follow-up , a destra del nome dell'intent:

In seguito, fai clic su personalizzata nel menu a discesa.

Dialogflow assegna automaticamente all'intent di follow-up "Fissa un appuntamento - personalizzato" e la freccia indica la relazione tra gli intent.

Le intenzioni di follow-up possono essere individuate solo dopo che è stata trovata una corrispondenza con l'intent principale. Poiché questo intent verrà abbinato solo dopo l'intenzione di "Fissa un appuntamento", possiamo presumere che l'utente abbia appena posto la domanda "Hai bisogno di una riparazione o solo di un'iscrizione?".

Per acquisire la risposta a questa domanda, dobbiamo prima definire alcune entità.

Creazione della prima entità

Dialogflow consente di definire entità sviluppatore, che funzionano in modo simile alle entità di sistema di Dialogflow. Per iniziare, creiamo un tipo di entità. Dato che vogliamo che gli utenti possano scegliere il tipo di appuntamento che vogliono fare con il nostro negozio, chiamiamo il tipo di entità AppointmentType. Aggiungeremo due entità nel tipo di entità AppointmentType per i due diversi tipi di appuntamenti: service e fix.

Per creare un tipo di entità:

  1. Fai clic su + accanto a Entità nel riquadro di navigazione a sinistra.
  2. Per il nome del tipo di entità, inserisci "AppointmentType".
  3. Fai clic sul campo di testo e aggiungi le seguenti voci:
    • servizio
    • correggi
  4. Quando inserisci una voce, premi il tasto Tab per spostare il cursore nel campo del sinonimo. Aggiungi i seguenti sinonimi per ogni voce. Assicurati di aggiungere ogni parola singolarmente anziché copiare e incollare l'intera stringa:
Entry Sinonimo
servizio
  • servizio
  • revisione
  • manutenzione
  • sintonizzazione
  • sintonizzati
correggi
  • correggi
  • repair
  • ripara
  • rotto
  • gomma a terra
  • fisso
  1. Fai clic su Salva.

Ogni tipo di entità deve avere quanto segue:

  • un nome per definire la categoria ("AppType")
  • una o più voci ("service", "fix")
  • uno o più sinonimi ("manutenzione", "perfezionamento" ecc.)

Dialogflow gestisce elementi semplici come pluralità e lettere maiuscole, ma assicurati di aggiungere tutti i sinonimi possibili. Più aggiungi, più l'agente può determinare le tue entità.

Aggiunta della nuova entità

Ora che abbiamo definito il nostro tipo di entità per l'appuntamento, possiamo utilizzarlo nelle Frasi di formazione della nostra sezione "Fissa un appuntamento - personalizzata".

  1. Fai clic su Intent nel riquadro di navigazione a sinistra, quindi fai clic sulla freccia accanto all'intent "Fissa un appuntamento" per visualizzarne gli intent aggiuntivi. Fai clic sull'intent "Fissa appuntamento - personalizzato".
  2. Aggiungi quanto segue come frasi di addestramento:

    • Puoi fornire il servizio di assistenza per le biciclette?
    • Mi serve una riparazione.

  3. Il tipo di entità Appunti dovrebbe apparire automaticamente nelle frasi di addestramento che hai inserito. Il parametro AppointmentType viene aggiunto alla tabella, sotto la sezione Frasi di addestramento. Fai clic sulla casella di controllo per contrassegnare questo parametro come OBBLIGATO.

  4. Fai clic su Definisci richieste e inserisci "Possiamo riparare o riparare la tua bicicletta. Quale vuoi?"

  5. In Risposte, modifica la risposta in "OK". Programmamo un $AppointmentType, quindi fai clic su Salva.

Fate una prova!

Sul tuo dispositivo, tocca il suggerimento di Fissa un appuntamento o digita "Voglio correggere la mia bici". Otterrai la risposta "In quale giorno vorresti entrare entro, con alcuni suggerimenti utili: "Domani", "Una settimana da adesso" e "Due settimane da adesso". Indica una data (domani) per ricevere una risposta con la richiesta di un altro giorno.

Seleziona un orario e vedrai la nuova risposta creata che chiede se si tratta di servizio o di un'ottimizzazione.

Ora, inserisci "Mi serve una riparazione". Dovresti vedere la risposta "OK", pianificheremo una correzione. Questo indica che Dialogflow ha estratto il tipo di Appuntamento corretto come entità.

Al momento, la risposta per questo intent ("Ok, pianificheremo una correzione" non è di alcuna utilità). Mi piacerebbe che la risposta confermasse la data e l'ora in cui l'appuntamento era programmato. Per fare ciò, abbiamo bisogno della data e dell'ora, ma i parametri della data e dell'ora sono presenti solo nell'intent "Fissa appuntamento" e non nell'intento

Intent e contesti

Per rispondere con un parametro raccolto dall'intent "Fissa appuntamento", devi sapere come funzionano gli intent di follow-up. Gli intent di follow-up utilizzano i contesti per tenere traccia dell'attivazione di un intent principale. Se controlli l'intento di "Appuntamenti", vedrai "Approfondimento appuntamento" indicato come contesto di output, preceduto dal numero 2:

Dopo che viene abbinata l'intenzione "Fissa appuntamento", Dialogflow allega il contesto alla chiamata per due turni. Pertanto, quando l'utente risponde alla domanda ("Hai bisogno di una riparazione o solo di un tunengquoquo;), il contesto "RendiAppuntamento-Approfondimento" è attivo. Tutti gli intent con lo stesso contesto di input sono fortemente preferiti quando Dialogflow soddisfa gli intent.

Fai clic su Intent nel riquadro di navigazione a sinistra, quindi fai clic su "Intent". - Personalizzato - personalizzato.

Puoi vedere che l'intent ha lo stesso contesto di input ("MakeAppuntamento- followup") del contesto di output di "Fissa appuntamento". Per questo motivo, "&Appuntamento - personalizzato" corrisponde solo dopo l'intenzione di "Appuntamenti".

Contesti e parametri

I contesti memorizzano i valori dei parametri, il che significa che puoi accedere ai valori dei parametri definiti nella sezione "Fissa un appuntamento" in altri intent, ad esempio "Rendi un appuntamento - personalizzato".

Aggiungi la seguente risposta a "NoApp - custom" intent e fai clic su Save: "Ok, pianificheremo un $AppType, #MakeAppunto- followup.date, alle #MakeAppunque.followup.time. Ci vediamo allora."

Ora puoi eseguire una nuova query sull'agente e ricevere la risposta corretta. Per prima cosa inserisci "Posso fissare un appuntamento per la manutenzione della bicicletta alle 11 di domani?&quot"; e poi rispondere alla domanda con "Mi serve una riparazione".

Nella risposta che conferma l'appuntamento, dovresti vedere che i valori del parametro data e ora sono stati recuperati dal contesto.

Migliorare il formato delle risposte

Durata: 5:00

Utilizza la distribuzione per formattare la data e l'ora

Come probabilmente avrai notato, la data e l'ora indicate nel messaggio di operazione riuscita non sono molto facili da usare. Per risolvere il problema, dobbiamo utilizzare di nuovo la distribuzione in modo da poter utilizzare JavaScript per formattare i parametri di data e ora in modo che possano essere letti facilmente da un utente.

Vai all'intent"Fissa appuntamento - personalizzato"facendo clic su Intent nel riquadro di navigazione a sinistra, quindi fai clic su " &Appuntamenti - personalizzati". Scorri fino in fondo alla pagina e attiva Abilita chiamata webhook per questo intent, quindi fai clic su Salva.

Fai clic su link Adempimento nella barra di navigazione a sinistra. Copia il codice riportato di seguito e incollalo sotto la funzione makeAppointment.

function makeAppointmentFollowUp(agent) {
    let context = agent.getContext('makeappointment-followup');

    // extract required parameters
    const appointmentDate = new Date(context.parameters.date);
    const appointmentTime = new Date(context.parameters.time);
    const appointmentType = agent.parameters.AppointmentType;

    // format date and time to be human-readable
    const dateAsString = appointmentDate.toLocaleDateString('en-US',
        { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' });
    const timeAsString = appointmentTime.toLocaleString('en-US',
        { hour: 'numeric', minute: 'numeric', hour12: true });

    // compose response for user
    let responseText = 'Okay, we'll schedule a ' + appointmentType + ', ' + dateAsString +
        ', at ' + timeAsString + '.  We'll see you then.';

    let payload = {
      "fulfillmentMessages": [
      {
        "platform": "GOOGLE_RBM",
        "rbmText": {
          "text": responseText
        }
      }
    ]
    };

    return response.status(200).json(payload);
  }

Sotto questa funzione, trova la riga intentMap.set('Make appointment', makeAppointment); e aggiungi intentMap.set('Make appointment - custom', makeAppointmentFollowUp); in modo che, quando viene richiamato l'intent di follow-up, venga chiamata la funzione che hai incollato in precedenza.

Controlla il codice makeAppointmentFollowUp e scopri come i parametri vengono estratti sia dal contesto in arrivo sia da questo intent. Prima di generare responseText, il codice formatta la data e l'ora in modo che sia leggibile.

Fate una prova!

Sul tuo dispositivo, tocca il suggerimento di Fissa un appuntamento o digita "Voglio correggere la mia bici". Otterrai la risposta "In quale giorno vorresti entrare entro, con alcuni suggerimenti utili: "Domani", "Una settimana da adesso" e "Due settimane da adesso". Indica una data (domani) per ricevere una risposta con la richiesta di un altro giorno.

Seleziona un orario e vedrai la nuova risposta creata che chiede se si tratta di servizio o di un'ottimizzazione.

Ora, inserisci "Mi serve una riparazione". Dovresti vedere la risposta che conferma l'appuntamento con il tipo di appuntamento, la data e l'ora in un formato leggibile.

È tutto.

Durata: 1:00

Ottimo!

Ora hai completato tutte le fasi di creazione di un agente RBM basato su Dialogflow.

Divertiti a sviluppare questa nuova entusiasmante piattaforma!