Dettagli del flusso di informazioni - Amazon Lex versione 1

Se utilizzi Amazon Lex V2, consulta invece la guida Amazon Lex V2.

 

Se utilizzi Amazon Lex V1, ti consigliamo di aggiornare i bot ad Amazon Lex V2. Non stiamo più aggiungendo nuove funzionalità alla V1 e consigliamo vivamente di utilizzare la V2 per tutti i nuovi bot.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Dettagli del flusso di informazioni

Il piano di bot ScheduleAppointment mostra principalmente l'utilizzo di carte di risposta generate dinamicamente. La funzione Lambda in questo esercizio include schede di risposta nella sua risposta ad Amazon Lex. Amazon Lex include le schede di risposta nella risposta al cliente. Questa sezione descrive quanto segue:

Nota

L'esempio presuppone che tu stia utilizzando il client Facebook Messenger, che non trasmette gli attributi di sessione nella richiesta ad Amazon Lex. Di conseguenza, negli esempi di richieste mostrati in questa sezione il campo sessionAttributes è vuoto. Se si testa il bot utilizzando il client fornito nella console Amazon Lex, il client include gli attributi di sessione.

Questa sezione descrive cosa accade dopo ogni input utente.

  1. Utente: tipi Book an appointment.

    1. Il client (console) invia la seguente richiesta PostContent ad Amazon Lex:

      POST /bot/ScheduleAppointment/alias/$LATEST/user/bijt6rovckwecnzesbthrr1d7lv3ja3n/text "Content-Type":"application/json" "Content-Encoding":"amz-1.0" { "inputText":"book appointment", "sessionAttributes":{} }

      Sia la richiesta URI che il corpo forniscono informazioni ad Amazon Lex:

      • RichiestaURI: fornisce il nome del bot (ScheduleAppointment), l'alias del bot ($LATEST) e l'ID del nome utente. La fine text indica che si tratta di una PostText (nonPostContent) richiesta. API

      • Corpo della richiesta: include l'input utente (inputText) e il campo sessionAttributes vuoto.

    2. DainputText, Amazon Lex rileva l'intento ()MakeAppointment. Il servizio richiama la funzione Lambda, configurata come code hook, per eseguire l'inizializzazione e la convalida passando il seguente evento. Per informazioni dettagliate, consultare Formato dell'evento di input.

      { "currentIntent": { "slots": { "AppointmentType": null, "Date": null, "Time": null }, "name": "MakeAppointment", "confirmationStatus": "None" }, "bot": { "alias": null, "version": "$LATEST", "name": "ScheduleAppointment" }, "userId": "bijt6rovckwecnzesbthrr1d7lv3ja3n", "invocationSource": "DialogCodeHook", "outputDialogMode": "Text", "messageVersion": "1.0", "sessionAttributes": {} }

      Oltre alle informazioni inviate dal cliente, Amazon Lex include anche i seguenti dati:

      • currentIntent: fornisce informazioni sull'intento corrente.

      • invocationSource— Indica lo scopo della chiamata alla funzione Lambda. In questo caso, lo scopo è eseguire l'inizializzazione e la convalida dei dati utente. (Amazon Lex sa che l'utente non ha ancora fornito tutti i dati dello slot per soddisfare l'intento.)

      • messageVersion— Attualmente Amazon Lex supporta solo la versione 1.0.

    3. A questo punto, tutti i valori di slot sono null (non c'è nulla da convalidare). La funzione Lambda restituisce la seguente risposta ad Amazon Lex, indirizzando il servizio a ottenere informazioni per lo slot. AppointmentType Per informazioni sul formato della risposta, consulta l'argomento Formato della risposta.

      { "dialogAction": { "slotToElicit": "AppointmentType", "intentName": "MakeAppointment", "responseCard": { "genericAttachments": [ { "buttons": [ { "text": "cleaning (30 min)", "value": "cleaning" }, { "text": "root canal (60 min)", "value": "root canal" }, { "text": "whitening (30 min)", "value": "whitening" } ], "subTitle": "What type of appointment would you like to schedule?", "title": "Specify Appointment Type" } ], "version": 1, "contentType": "application/vnd.amazonaws.card.generic" }, "slots": { "AppointmentType": null, "Date": null, "Time": null }, "type": "ElicitSlot", "message": { "content": "What type of appointment would you like to schedule?", "contentType": "PlainText" } }, "sessionAttributes": {} }

      La risposta include i campi dialogAction e sessionAttributes. Il campo dialogAction restituisce inoltre i seguenti campi:

      • type— Impostando questo campo suElicitSlot, la funzione Lambda indirizza Amazon Lex a ottenere il valore per lo slot specificato nel campo. slotToElicit La funzione Lambda fornisce anche un messaggio da message trasmettere all'utente.

      • responseCard— Identifica un elenco di valori possibili per lo slot. AppointmentType Un client che supporta le schede di risposta (ad esempio, Facebook Messenger) visualizza una scheda di risposta per consentire all'utente di scegliere un tipo di appuntamento, come nell'immagine seguente:

        Scheda di risposta che richiede il tipo di appuntamento da fissare e tre opzioni: pulizia (30 minuti), canale radicolare (60 minuti) e sbiancamento (30 minuti).
    4. Come indicato dialogAction.type nella risposta della funzione Lambda, Amazon Lex invia la seguente risposta al client:

      JSONrisposta contenente informazioni sull'intenzione di fissare un appuntamento e sullo slot del tipo di appuntamento da ottenere.

      Il cliente legge la risposta, quindi visualizza il messaggio: «Che tipo di appuntamento vorresti fissare?» e la scheda di risposta (se il client supporta le schede di risposta).

  2. Utente: a seconda del client, l'utente dispone di due opzioni:

    • Se la scheda di risposta è visualizzata, scegli devitalizzazione (60 min) o digita root canal.

    • Se il client non supporta le schede di risposta, digita root canal.

    1. Il client invia la seguente PostText richiesta ad Amazon Lex (sono state aggiunte interruzioni di riga per motivi di leggibilità):

      POST /bot/BookTrip/alias/$LATEST/user/bijt6rovckwecnzesbthrr1d7lv3ja3n/text "Content-Type":"application/json" "Content-Encoding":"amz-1.0" { "inputText": "root canal", "sessionAttributes": {} }
    2. Amazon Lex richiama la funzione Lambda per la convalida dei dati utente inviando il seguente evento come parametro:

      { "currentIntent": { "slots": { "AppointmentType": "root canal", "Date": null, "Time": null }, "name": "MakeAppointment", "confirmationStatus": "None" }, "bot": { "alias": null, "version": "$LATEST", "name": "ScheduleAppointment" }, "userId": "bijt6rovckwecnzesbthrr1d7lv3ja3n", "invocationSource": "DialogCodeHook", "outputDialogMode": "Text", "messageVersion": "1.0", "sessionAttributes": {} }

      Nei dati di evento, nota quanto segue:

      • invocationSource continua a essere DialogCodeHook. In questa fase, eseguiamo soltanto la convalida dei dati utente.

      • Amazon Lex imposta il AppointmentType campo nello currentIntent.slots slot suroot canal.

      • Amazon Lex passa semplicemente il sessionAttributes campo tra il client e la funzione Lambda.

    3. La funzione Lambda convalida l'input dell'utente e restituisce la seguente risposta ad Amazon Lex, indirizzando il servizio a ottenere un valore per la data dell'appuntamento.

      { "dialogAction": { "slotToElicit": "Date", "intentName": "MakeAppointment", "responseCard": { "genericAttachments": [ { "buttons": [ { "text": "2-15 (Wed)", "value": "Wednesday, February 15, 2017" }, { "text": "2-16 (Thu)", "value": "Thursday, February 16, 2017" }, { "text": "2-17 (Fri)", "value": "Friday, February 17, 2017" }, { "text": "2-20 (Mon)", "value": "Monday, February 20, 2017" }, { "text": "2-21 (Tue)", "value": "Tuesday, February 21, 2017" } ], "subTitle": "When would you like to schedule your root canal?", "title": "Specify Date" } ], "version": 1, "contentType": "application/vnd.amazonaws.card.generic" }, "slots": { "AppointmentType": "root canal", "Date": null, "Time": null }, "type": "ElicitSlot", "message": { "content": "When would you like to schedule your root canal?", "contentType": "PlainText" } }, "sessionAttributes": {} }

      La risposta include di nuovo i campi dialogAction e sessionAttributes. Il campo dialogAction restituisce inoltre i seguenti campi:

      • type— Impostando questo campo suElicitSlot, la funzione Lambda indirizza Amazon Lex a ottenere il valore per lo slot specificato nel campo. slotToElicit La funzione Lambda fornisce anche un messaggio da message trasmettere all'utente.

      • responseCard— Identifica un elenco di valori possibili per lo slot. Date Un client che supporta le schede di risposta (ad esempio, Facebook Messenger) visualizza una scheda di risposta che consente all'utente di scegliere la data di un appuntamento, come nell'immagine seguente:

        Scheda di risposta che indica la data per la programmazione del canale radicolare e tre opzioni: 2-15, 2-16 e 2-17.

        Sebbene la funzione Lambda abbia restituito cinque date, il client (Facebook Messenger) ha un limite di tre pulsanti per una scheda di risposta. Pertanto, nello screenshot sono visualizzati solo i primi tre valori.

        Queste date sono codificate nella funzione Lambda. In un'applicazione di produzione, puoi utilizzare un calendario per ottenere le date disponibili in tempo reale. Poiché le date sono dinamiche, è necessario generare la scheda di risposta dinamicamente nella funzione Lambda.

    4. Amazon Lex rileva dialogAction.type e restituisce al client la seguente risposta che include informazioni dalla risposta della funzione Lambda.

      JSONrisposta contenente l'intenzione di fissare un appuntamento, il tipo di appuntamento inserito e un messaggio indicante la data dell'appuntamento.

      Il client visualizza il messaggio: When would you like to schedule your root canal? e la scheda di risposta (se il client supporta le schede di risposta).

  3. Utente: tipi Thursday.

    1. Il client invia la seguente PostText richiesta ad Amazon Lex (sono state aggiunte interruzioni di riga per motivi di leggibilità):

      POST /bot/BookTrip/alias/$LATEST/user/bijt6rovckwecnzesbthrr1d7lv3ja3n/text "Content-Type":"application/json" "Content-Encoding":"amz-1.0" { "inputText": "Thursday", "sessionAttributes": {} }
    2. Amazon Lex richiama la funzione Lambda per la convalida dei dati utente inviando il seguente evento come parametro:

      { "currentIntent": { "slots": { "AppointmentType": "root canal", "Date": "2017-02-16", "Time": null }, "name": "MakeAppointment", "confirmationStatus": "None" }, "bot": { "alias": null, "version": "$LATEST", "name": "ScheduleAppointment" }, "userId": "u3fpr9gghj02zts7y5tpq5mm4din2xqy", "invocationSource": "DialogCodeHook", "outputDialogMode": "Text", "messageVersion": "1.0", "sessionAttributes": {} }

      Nei dati di evento, nota quanto segue:

      • invocationSource continua a essere DialogCodeHook. In questa fase, eseguiamo soltanto la convalida dei dati utente.

      • Amazon Lex imposta il Date campo nello currentIntent.slots slot su2017-02-16.

      • Amazon Lex passa semplicemente il passaggio sessionAttributes tra il client e la funzione Lambda.

    3. La funzione Lambda convalida l'input dell'utente. Questa volta la funzione Lambda determina che non ci sono appuntamenti disponibili nella data specificata. Restituisce la seguente risposta ad Amazon Lex, indicando al servizio di richiedere nuovamente un valore per la data dell'appuntamento.

      { "dialogAction": { "slotToElicit": "Date", "intentName": "MakeAppointment", "responseCard": { "genericAttachments": [ { "buttons": [ { "text": "2-15 (Wed)", "value": "Wednesday, February 15, 2017" }, { "text": "2-17 (Fri)", "value": "Friday, February 17, 2017" }, { "text": "2-20 (Mon)", "value": "Monday, February 20, 2017" }, { "text": "2-21 (Tue)", "value": "Tuesday, February 21, 2017" } ], "subTitle": "When would you like to schedule your root canal?", "title": "Specify Date" } ], "version": 1, "contentType": "application/vnd.amazonaws.card.generic" }, "slots": { "AppointmentType": "root canal", "Date": null, "Time": null }, "type": "ElicitSlot", "message": { "content": "We do not have any availability on that date, is there another day which works for you?", "contentType": "PlainText" } }, "sessionAttributes": { "bookingMap": "{\"2017-02-16\": []}" } }

      La risposta include di nuovo i campi dialogAction e sessionAttributes. Il campo dialogAction restituisce inoltre i seguenti campi:

      • Campo dialogAction:

        • type— La funzione Lambda imposta questo valore su ElicitSlot e reimposta il slotToElicit campo su. Date La funzione Lambda fornisce anche un messaggio appropriato da trasmettere message all'utente.

        • responseCard: restituisce un elenco di valori per lo slot Date.

      • sessionAttributes- Questa volta la funzione Lambda include l'attributo bookingMap session. Il relativo valore è la data richiesta dell'appuntamento e gli appuntamenti disponibili (un oggetto vuoto indica che non vi sono appuntamenti disponibili).

    4. Amazon Lex rileva dialogAction.type e restituisce al client la seguente risposta che include informazioni dalla risposta della funzione Lambda.

      JSONrisposta che mostra l'intenzione di fissare un appuntamento e messaggio che chiarisce che non c'è disponibilità nella data richiesta dal cliente.

      Il client visualizza il messaggio: We do not have any availability on that date, is there another day which works for you? e la scheda di risposta (se il client supporta le schede di risposta).

  4. Utente: a seconda del client, l'utente dispone di due opzioni:

    • Se la scheda di risposta viene visualizzata, scegli 15-2 (mer.) o digita Wednesday.

    • Se il client non supporta le schede di risposta, digita Wednesday.

    1. Il client invia la seguente PostText richiesta ad Amazon Lex:

      POST /bot/BookTrip/alias/$LATEST/user/bijt6rovckwecnzesbthrr1d7lv3ja3n/text "Content-Type":"application/json" "Content-Encoding":"amz-1.0" { "inputText": "Wednesday", "sessionAttributes": { } }

      Nota

      Il client di Facebook Messenger non imposta alcun attributo di sessione. Se desideri mantenere gli stati della sessione tra le richieste, devi farlo nella funzione Lambda. In un'applicazione reale, puoi avere la necessità di conservare questi attributi di sessione in un database back-end.

    2. Amazon Lex richiama la funzione Lambda per la convalida dei dati utente inviando il seguente evento come parametro:

      { "currentIntent": { "slots": { "AppointmentType": "root canal", "Date": "2017-02-15", "Time": null }, "name": "MakeAppointment", "confirmationStatus": "None" }, "bot": { "alias": null, "version": "$LATEST", "name": "ScheduleAppointment" }, "userId": "u3fpr9gghj02zts7y5tpq5mm4din2xqy", "invocationSource": "DialogCodeHook", "outputDialogMode": "Text", "messageVersion": "1.0", "sessionAttributes": { } }

      Amazon Lex si currentIntent.slots è aggiornato impostando lo Date slot su2017-02-15.

    3. La funzione Lambda convalida l'input dell'utente e restituisce la seguente risposta ad Amazon Lex, indirizzandolo a ottenere il valore per l'ora dell'appuntamento.

      { "dialogAction": { "slots": { "AppointmentType": "root canal", "Date": "2017-02-15", "Time": "16:00" }, "message": { "content": "What time on 2017-02-15 works for you? 4:00 p.m. is our only availability, does that work for you?", "contentType": "PlainText" }, "type": "ConfirmIntent", "intentName": "MakeAppointment", "responseCard": { "genericAttachments": [ { "buttons": [ { "text": "yes", "value": "yes" }, { "text": "no", "value": "no" } ], "subTitle": "Is 4:00 p.m. on 2017-02-15 okay?", "title": "Confirm Appointment" } ], "version": 1, "contentType": "application/vnd.amazonaws.card.generic" } }, "sessionAttributes": { "bookingMap": "{\"2017-02-15\": [\"10:00\", \"16:00\", \"16:30\"]}" } }

      La risposta include di nuovo i campi dialogAction e sessionAttributes. Il campo dialogAction restituisce inoltre i seguenti campi:

      • Campo dialogAction:

        • type— La Lambda funzione imposta questo valore suConfirmIntent, indirizzando Amazon Lex a ottenere la conferma dell'utente dell'orario dell'appuntamento suggerito nelmessage.

        • responseCard— Restituisce un elenco di valori sì/no tra cui l'utente può scegliere. Se il client supporta le schede di risposta, visualizza la scheda di risposta, come mostrato nel seguente esempio:

          Scheda di risposta che mostra la conferma dell'appuntamento e due opzioni: sì e no.
      • sessionAttributes- La funzione Lambda imposta l'attributo bookingMap session con il suo valore impostato sulla data dell'appuntamento e sugli appuntamenti disponibili in quella data. In questo esempio, si tratta di appuntamenti di 30 minuti. Per una devitalizzazione che richieda un'ora, è possibile scegliere solo le 16:00.

    4. Come indicato nella risposta della dialogAction.type funzione Lambda, Amazon Lex restituisce la seguente risposta al client:

      JSONrisposta che mostra l'intenzione di fissare un appuntamento e tutti gli slot sono stati riempiti.

      Il client visualizza il messaggio: A che ora del 15/02/2017 funziona per te? Le 16:00 sono la nostra unica disponibilità, funziona per te?

  5. Utente: scegli yes.

    Amazon Lex richiama la funzione Lambda con i seguenti dati di evento. Poiché l'utente ha rispostoyes, Amazon Lex imposta confirmationStatus a Confirmed e imposta il Time campo currentIntent.slots su4 p.m.

    { "currentIntent": { "slots": { "AppointmentType": "root canal", "Date": "2017-02-15", "Time": "16:00" }, "name": "MakeAppointment", "confirmationStatus": "Confirmed" }, "bot": { "alias": null, "version": "$LATEST", "name": "ScheduleAppointment" }, "userId": "u3fpr9gghj02zts7y5tpq5mm4din2xqy", "invocationSource": "FulfillmentCodeHook", "outputDialogMode": "Text", "messageVersion": "1.0", "sessionAttributes": { } }

    Una volta confermato, confirmationStatus la funzione Lambda elabora l'intento (prenota un appuntamento dal dentista) e restituisce la seguente risposta ad Amazon Lex:

    { "dialogAction": { "message": { "content": "Okay, I have booked your appointment. We will see you at 4:00 p.m. on 2017-02-15", "contentType": "PlainText" }, "type": "Close", "fulfillmentState": "Fulfilled" }, "sessionAttributes": { "formattedTime": "4:00 p.m.", "bookingMap": "{\"2017-02-15\": [\"10:00\"]}" } }

    Tieni presente quanto segue:

    • La funzione Lambda ha aggiornato sessionAttributes.

    • dialogAction.typeè impostato suClose, il che indica ad Amazon Lex di non aspettarsi una risposta da parte dell'utente.

    • dialogAction.fulfillmentState è impostato su Fulfilled, a indicare che l'intento è stato realizzato.

    Il cliente visualizza il messaggio: Ok, ho prenotato il tuo appuntamento. Ci vediamo alle 16:00 il 15/02/2017.