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à.
Formato di evento di input e di risposta della funzione Lambda
Questa sezione descrive la struttura dei dati dell'evento che Amazon Lex fornisce a una funzione Lambda. Utilizza queste informazioni per analizzare l'input nel codice Lambda. Illustra inoltre il formato della risposta che Amazon Lex prevede di ricevere in restituzione dalla funzione Lambda.
Formato dell'evento di input
Di seguito è riportato il formato generale di un evento Amazon Lex passato a una funzione Lambda. Fai riferimento a queste informazioni quando scrivi la tua funzione Lambda.
Nota
Il formato di input potrebbe cambiare senza che corrisponda una modifica in messageVersion
. Il codice non dovrebbe generare errori se sono presenti nuovi campi.
{
"currentIntent": {
"name": "intent-name
",
"nluIntentConfidenceScore": score
,
"slots": {
"slot name
": "value
",
"slot name
": "value
"
},
"slotDetails": {
"slot name
": {
"resolutions" : [
{ "value": "resolved value
" },
{ "value": "resolved value
" }
],
"originalValue": "original text
"
},
"slot name
": {
"resolutions" : [
{ "value": "resolved value
" },
{ "value": "resolved value
" }
],
"originalValue": "original text
"
}
},
"confirmationStatus": "None, Confirmed, or Denied (intent confirmation, if configured)
"
},
"alternativeIntents": [
{
"name": "intent-name
",
"nluIntentConfidenceScore": score
,
"slots": {
"slot name
": "value
",
"slot name
": "value
"
},
"slotDetails": {
"slot name
": {
"resolutions" : [
{ "value": "resolved value
" },
{ "value": "resolved value
" }
],
"originalValue": "original text
"
},
"slot name
": {
"resolutions" : [
{ "value": "resolved value
" },
{ "value": "resolved value
" }
],
"originalValue": "original text
"
}
},
"confirmationStatus": "None, Confirmed, or Denied (intent confirmation, if configured)
"
}
],
"bot": {
"name": "bot name
",
"alias": "bot alias
",
"version": "bot version
"
},
"userId": "User ID specified in the POST request to Amazon Lex.
",
"inputTranscript": "Text used to process the request
",
"invocationSource": "FulfillmentCodeHook or DialogCodeHook
",
"outputDialogMode": "Text or Voice, based on ContentType request header in runtime API request
",
"messageVersion": "1.0",
"sessionAttributes": {
"key
": "value
",
"key
": "value
"
},
"requestAttributes": {
"key
": "value
",
"key
": "value
"
},
"recentIntentSummaryView": [
{
"intentName": "Name
",
"checkpointLabel": Label
,
"slots": {
"slot name
": "value
",
"slot name
": "value
"
},
"confirmationStatus": "None, Confirmed, or Denied (intent confirmation, if configured)
",
"dialogActionType": "ElicitIntent, ElicitSlot, ConfirmIntent, Delegate, or Close
",
"fulfillmentState": "Fulfilled or Failed
",
"slotToElicit": "Next slot to elicit
"
}
],
"sentimentResponse": {
"sentimentLabel": "sentiment
",
"sentimentScore": "score
"
},
"kendraResponse": {
Complete query response from Amazon Kendra
},
"activeContexts": [
{
"timeToLive": {
"timeToLiveInSeconds": seconds
,
"turnsToLive": turns
},
"name": "name
",
"parameters": {
"key name
": "value
"
}
}
]
}
Tieni conto delle ulteriori informazioni seguenti sui campi di evento:
-
currentIntent: fornisce i campi
name
,slots
,slotDetails
econfirmationStatus
dell'intento.nluIntentConfidenceScore
è la certezza che Amazon Lex ha che l'intento attuale è quello che meglio corrisponde all'intento attuale dell'utente.slots
è una mappa di nomi di slot, configurati per l'intento, per i valori degli slot che Amazon Lex ha riconosciuto nella conversazione con l'utente. Un valore di slot rimane null fino a quando l'utente non fornisca un valore.Il valore dello slot nell'evento di input potrebbe non corrispondere a uno dei valori configurati per lo slot. Ad esempio, se l'utente risponde al messaggio di richiesta "Quale colore preferisci per l'auto?" con «pizza», Amazon Lex restituirà «pizza» come valore dello slot. La funzione dovrebbe convalidare i valori per assicurare che questi abbiano senso nel contesto.
slotDetails
fornisce ulteriori informazioni su un valore dello slot. La matriceresolutions
contiene un elenco di valori aggiuntivi riconosciuti per lo slot. Ciascuno slot può avere un massimo di cinque valori.Il campo
originalValue
contiene il valore che l'utente ha inserito per lo slot. Quando il tipo di slot è configurato per restituire il valore di risoluzione superiore come valore dello slot,originalValue
potrebbe essere diverso dal valore del camposlots
.confirmationStatus
fornisce la risposta dell'utente a un messaggio di richiesta di conferma, se disponibile. Ad esempio, se Amazon Lex chiede «Vuoi ordinare una pizza grande al formaggio? », in base alla risposta dell'utente, il valore di questo campo può essereConfirmed
oDenied
. In caso contrario, il valore di questo campo èNone
.Se l'utente conferma l'intento, Amazon Lex imposta il campo su
Confirmed
. Se l'utente rifiuta l'intento, Amazon Lex imposta il valore suDenied
.Nella risposta di conferma, un'enunciazione utente potrebbe fornire aggiornamenti dello slot. Ad esempio, l'utente potrebbe dire "Sì, modifica dimensione a media". In questo caso, l'evento Lambda successivo presenterà il valore dello slot aggiornato,
PizzaSize
impostato sumedium
. Amazon Lex imposta ilconfirmationStatus
aNone
, in quanto l'utente ha modificato alcuni dati dello slot, richiedendo alla funzione Lambda di eseguire la convalida dei dati utente. -
Intenti alternativi— Se abiliti i punteggi di fiducia, Amazon Lex restituisce fino a quattro intenti alternativi. Ogni intento include un punteggio che indica il livello di sicurezza di Amazon Lex che l'intento è l'intento corretto in base all'enunciato dell'utente.
Il contenuto degli intenti alternativi è lo stesso del contenuto della
currentIntent
. Per ulteriori informazioni, consultare Usare i punteggi di. -
bot: informazioni sul bot che ha elaborato la richiesta.
-
name
: nome del bot che ha elaborato la richiesta. -
alias
: alias della versione del bot che ha elaborato la richiesta. -
version
: versione del bot che ha elaborato la richiesta.
-
-
userId— Questo valore è fornito dall'applicazione client. Amazon Lex lo passa alla funzione Lambda.
-
inputTranscript: testo utilizzato per elaborare la richiesta.
Se si tratta di un input di testo, il campo
inputTranscript
contiene il testo inserito dall'utente.In caso di input di flusso audio, il campo
inputTranscript
contiene il testo estratto dal flusso audio. Questo è il testo che viene effettivamente elaborato per riconoscere gli intenti e i valori dello slot. -
invocationSource: per indicare perché Amazon Lex invoca la funzione Lambda imposta uno dei seguenti valori:
-
DialogCodeHook
: Amazon Lex imposta questo valore per indirizzare la funzione Lambda all'inizializzazione della funzione e alla convalida dell'input di dati dell'utente.Quando l'intento è configurato per invocare una funzione Lambda come hook di codice di inizializzazione e di convalida, Amazon Lex invoca la funzione Lambda specificata su ciascun input dell'utente (enunciazione) dopo che Amazon Lex abbia compreso l'intento.
Nota
Se l'intento non è chiaro, Amazon Lex non sarà in grado di invocare la funzione Lambda.
-
FulfillmentCodeHook
— Amazon Lex imposta questo valore per indirizzare la funzione Lambda all'adempimento di un intento.Se l'intento è configurato per invocare una funzione Lambda come hook di codice di adempimento, Amazon Lex imposta il
invocationSource
a questo valore solo quando dispone di tutti i dati dello slot necessari per adempiere l'intento.
Nella configurazione dell'intento, puoi avere due funzioni Lambda separate per inizializzare e convalidare i dati utente e adempiere l'intento. Puoi inoltre utilizzare una funzione Lambda per entrambe le operazioni. In questo caso, la funzione Lambda può utilizzare
invocationSource
valore per seguire il percorso corretto del codice. -
-
outputDialogMode: per ogni input dell'utente, il client invia la richiesta ad Amazon Lex utilizzando una delle operazioni API di runtime,PostContentoPostText. Amazon Lex utilizza i parametri della richiesta per determinare se la risposta al client è di testo o vocale, quindi imposta il campo di conseguenza.
La funzione Lambda può utilizzare queste informazioni per generare un messaggio appropriato. Ad esempio, se il client prevede una risposta vocale, la funzione Lambda può restituire Speech Synthesis Markup Language (SSML) al posto del testo.
-
messageVersion: la versione del messaggio che identifica il formato dei dati di evento che giungono alla funzione Lambda e il formato previsto della risposta da parte di una funzione Lambda.
Nota
Puoi configurare questo valore quando definisci un intento. Nell'implementazione corrente, è supportata solo la versione 1.0 dei messaggi. Pertanto, la console presuppone il valore predefinito di 1.0 e non mostra la versione del messaggio.
-
sessionAttributes— Attributi di sessione specifici dell'applicazione che il client invia nella richiesta. Se vuoi che Amazon Lex li includa nella risposta al client, la funzione Lambda deve inviarli ad Amazon Lex nella risposta. Per ulteriori informazioni, consultaImpostazione degli attributi di sessione
-
requestAttributes— Attributi specifici della richiesta che il client invia nella richiesta. Utilizza gli attributi di richiesta per inviare informazioni che non devono essere conservate per l'intera sessione. Se non ci sono attributi della richiesta, il valore sarà null. Per ulteriori informazioni, consultaImpostazione degli attributi di richiesta
-
recentIntentSummaryView— Informazioni sullo stato di un intento. È possibile visualizzare informazioni sugli ultimi tre intenti utilizzati. Queste informazioni possono essere usate per impostare i valori nell'intento o per tornare a un intento precedente. Per ulteriori informazioni, consultare Gestione di sessioni con l'API di Amazon Lex.
-
sentimentResponse— Il risultato dell'analisi di un sentiment di Amazon Comprehend dell'ultimo enunciato. È possibile utilizzare queste informazioni per gestire il flusso di conversazione del bot in base all'emozione espressa dall'utente. Per ulteriori informazioni, consultare Analisi delle emozioni.
-
kendraResponse— Il risultato di una query su un indice Amazon Kendra. Presente solo nell'input a un hook di codice di adempimento e solo quando l'intento estende l'intento integrato
AMAZON.KendraSearchIntent
. Il campo contiene l'intera risposta della ricerca di Amazon Kendra. Per ulteriori informazioni, consultare AMAZON.KendraSearchIntent. -
Contesti attivi— Uno o più contesti attivi durante questo turno di una conversazione con l'utente.
-
TimeToLive— Il periodo di tempo o il numero di turni nella conversazione con l'utente in cui il contesto rimane attivo.
-
nome— il nome del contesto.
-
parametriun elenco di coppie chiave/valore che contiene il nome e il valore degli slot dall'intento che ha attivato il contesto.
Per ulteriori informazioni, consultare Impostazione del contesto dell'intento.
-
Formato della risposta
Amazon Lex prevede una risposta da una funzione Lambda nel formato seguente:
{
"sessionAttributes": {
"key1": "value1",
"key2": "value2"
...
},
"recentIntentSummaryView": [
{
"intentName": "Name
",
"checkpointLabel": "Label
",
"slots": {
"slot name
": "value
",
"slot name
": "value
"
},
"confirmationStatus": "None, Confirmed, or Denied (intent confirmation, if configured)
",
"dialogActionType": "ElicitIntent, ElicitSlot, ConfirmIntent, Delegate, or Close
",
"fulfillmentState": "Fulfilled or Failed
",
"slotToElicit": "Next slot to elicit
"
}
],
"activeContexts": [
{
"timeToLive": {
"timeToLiveInSeconds": seconds
,
"turnsToLive": turns
},
"name": "name
",
"parameters": {
"key name
": "value
"
}
}
],
"dialogAction": {
"type": "ElicitIntent, ElicitSlot, ConfirmIntent, Delegate, or Close
",
Full structure based on the type field. See below for details.
}
}
La risposta è costituita da quattro campi. LasessionAttributes
,recentIntentSummaryView
, eactiveContexts
i campi sono facoltativi,dialogAction
è obbligatorio. Il contenuto del campo dialogAction
dipende dal valore del campo type
. Per dettagli, consultare dialogAction.
sessionAttributes
Facoltativo. Se includi il campo sessionAttributes
, questo può essere vuoto. Se la funzione Lambda non restituisce gli attributi di sessione, l'ultimo notosessionAttributes
passata tramite l'API o la funzione Lambda rimangono. Per maggiori informazioni, consulta le operazioni PostContent e PostText.
"sessionAttributes": {
"key1": "value1
",
"key2": "value2
"
}
recentIntentSummaryView
Facoltativo. Se incluso, imposta i valori per uno o più intenti recenti. È possibile includere informazioni per un massimo di tre intenti. Ad esempio, puoi impostare i valori per gli intenti precedenti in base alle informazioni raccolte dall'intento corrente. Le informazioni contenute nel riepilogo devono essere valide per l'intento. Ad esempio, il nome dell'intento deve essere un intento nel bot. Se includi un valore di slot nella visualizzazione riepilogo, lo slot deve essere presente nell'intento. Se non includi la recentIntentSummaryView
nella risposta, tutti i valori degli intenti recenti rimangono invariati. Per ulteriori informazioni, vedere l'operazione PutSession o il tipo di dati IntentSummary.
"recentIntentSummaryView": [ { "intentName": "
Name
", "checkpointLabel": "Label
", "slots": { "slot name
": "value
", "slot name
": "value
" }, "confirmationStatus": "None, Confirmed, or Denied (intent confirmation, if configured)
", "dialogActionType": "ElicitIntent, ElicitSlot, ConfirmIntent, Delegate, or Close
", "fulfillmentState": "Fulfilled or Failed
", "slotToElicit": "Next slot to elicit
" } ]
Contesti attivi
Facoltativo. Se incluso, imposta il valore di uno o più contesti. Ad esempio, puoi includere un contesto per rendere idonei al riconoscimento uno o più intenti che hanno quel contesto come input idoneo per il riconoscimento nel prossimo turno della conversazione.
Tutti i contesti attivi che non sono inclusi nella risposta hanno i valori di time-to-live diminuiti e possono essere ancora attivi sulla richiesta successiva.
Se si specifica un time-to-live pari a 0 per un contesto incluso nell'evento di input, sarà inattivo nella richiesta successiva.
Per ulteriori informazioni, consultare Impostazione del contesto dell'intento.
dialogAction
Campo obbligatorio. LadialogAction
indirizza Amazon Lex verso l'operazione successiva e descrive cosa prevedere da parte dell'utente dopo che Amazon Lex abbia restituito una risposta al client.
Il campo type
indica l'operazione successiva. Determina inoltre gli altri campi che la funzione Lambda deve fornire come parte dell'dialogAction
value.
-
Close
: informa Amazon Lex di non prevedere una risposta da parte dell'utente. Ad esempio, "L'ordine della tua pizza è stato registrato" non richiede una risposta.Il campo
fulfillmentState
è obbligatorio. Amazon Lex utilizza questo valore per impostaredialogState
nel campoPostContentoPostTextrisposta all'applicazione client. I campimessage
eresponseCard
sono facoltativi. Se non specifichi un messaggio, Amazon Lex utilizza il messaggio di saluto o il messaggio di prosecuzione configurato per l'intento."dialogAction": { "type": "Close", "fulfillmentState": "
Fulfilled or Failed
", "message": { "contentType": "PlainText or SSML or CustomPayload
", "content": "Message to convey to the user. For example, Thanks, your pizza has been ordered.
" }, "responseCard": { "version":integer-value
, "contentType": "application/vnd.amazonaws.card.generic", "genericAttachments": [ { "title":"card-title
", "subTitle":"card-sub-title
", "imageUrl":"URL of the image to be shown
", "attachmentLinkUrl":"URL of the attachment to be associated with the card
", "buttons":[ { "text":"button-text
", "value":"Value sent to server on button click
" } ] } ] } } -
ConfirmIntent
: informa Amazon Lex che l'utente deve fornire una risposta affermativa o negativa per confermare o negare l'intento corrente.È necessario includere i campi
intentName
eslots
. Il camposlots
deve contenere una voce per ciascuno slot riempito per l'intento specificato. Non è necessario includere una voce nel camposlots
per gli slot che non vengono riempiti. È necessario includere il campomessage
se il campo intentoconfirmationPrompt
è nullo. Contenuti dimessage
Il campo restituito dalla funzione Lambda ha la precedenza rispetto alconfirmationPrompt
specificato nell'intento. Il camporesponseCard
è facoltativo."dialogAction": { "type": "ConfirmIntent", "message": { "contentType": "
PlainText or SSML or CustomPayload
", "content": "Message to convey to the user. For example, Are you sure you want a large pizza?
" }, "intentName": "intent-name
", "slots": { "slot-name": "value
", "slot-name": "value
", "slot-name": "value
" }, "responseCard": { "version":integer-value
, "contentType": "application/vnd.amazonaws.card.generic", "genericAttachments": [ { "title":"card-title
", "subTitle":"card-sub-title
", "imageUrl":"URL of the image to be shown
", "attachmentLinkUrl":"URL of the attachment to be associated with the card
", "buttons":[ { "text":"button-text
", "value":"Value sent to server on button click
" } ] } ] } } -
Delegate
: indirizza Amazon Lex a scegliere la prossima operazione in base alla configurazione del bot. Se la risposta non include alcun attributo di sessione, Amazon Lex mantiene gli attributi esistenti. Per ottenere un valore null di uno slot, non occorre includere il campo slot nella richiesta. Si riceverà un'eccezioneDependencyFailedException
se la funzione di adempimento restituisce l'operazione di dialogoDelegate
senza rimuovere alcuno slot.I campi
kendraQueryRequestPayload
ekendraQueryFilterString
sono facoltativi e utilizzati solo quando l'intento è derivato dall'intento integratoAMAZON.KendraSearchIntent
. Per ulteriori informazioni, consulta AMAZON.KendraSearchIntent."dialogAction": { "type": "Delegate", "slots": { "slot-name": "
value
", "slot-name": "value
", "slot-name": "value
" }, "kendraQueryRequestPayload": "Amazon Kendra query
", "kendraQueryFilterString": "Amazon Kendra attribute filters
" } -
ElicitIntent
: informa Amazon Lex che l'utente deve rispondere con un'enunciazione contenente un intento. Ad esempio, "Voglio una pizza grande", che indica l'intentoOrderPizzaIntent
. L'enunciazione «grande», invece, non è sufficiente affinché Amazon Lex deduca l'intento dell'utente.I campi
message
eresponseCard
sono facoltativi. Se non fornisci un messaggio, Amazon Lex utilizza uno dei messaggi di richiesta di chiarimento del bot. Se non viene definito alcun prompt di chiarimento, Amazon Lex restituisce un'eccezione 400 Bad Request (Richiesta non valida).{ "dialogAction": { "type": "ElicitIntent", "message": { "contentType": "
PlainText or SSML or CustomPayload
", "content": "Message to convey to the user. For example, What can I help you with?
" }, "responseCard": { "version":integer-value
, "contentType": "application/vnd.amazonaws.card.generic", "genericAttachments": [ { "title":"card-title
", "subTitle":"card-sub-title
", "imageUrl":"URL of the image to be shown
", "attachmentLinkUrl":"URL of the attachment to be associated with the card
", "buttons":[ { "text":"button-text
", "value":"Value sent to server on button click
" } ] } ] } } -
ElicitSlot
: informa Amazon Lex che l'utente dovrebbe fornire un valore dello slot nella risposta.I campi
intentName
,slotToElicit
eslots
sono obbligatori. I campimessage
eresponseCard
sono facoltativi. Se non specifichi un messaggio, Amazon Lex utilizza uno dei messaggi di richiesta di sollecitazione dello slot configurati per lo slot."dialogAction": { "type": "ElicitSlot", "message": { "contentType": "
PlainText or SSML or CustomPayload
", "content": "Message to convey to the user. For example, What size pizza would you like?
" }, "intentName": "intent-name
", "slots": { "slot-name": "value
", "slot-name": "value
", "slot-name": "value
" }, "slotToElicit" : "slot-name
", "responseCard": { "version":integer-value
, "contentType": "application/vnd.amazonaws.card.generic", "genericAttachments": [ { "title":"card-title
", "subTitle":"card-sub-title
", "imageUrl":"URL of the image to be shown
", "attachmentLinkUrl":"URL of the attachment to be associated with the card
", "buttons":[ { "text":"button-text
", "value":"Value sent to server on button click
" } ] } ] } }