Si utiliza Amazon Lex V2, consulte la guía de Amazon Lex V2.
Si utiliza Amazon Lex V1, le recomendamos que actualice los bots a Amazon Lex V2. Hemos dejado de agregar nuevas características a V1, por lo que recomendamos encarecidamente utilizar V2 para todos los nuevos bots.
Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Formato del evento de entrada y de la respuesta de la función de Lambda
En esta sección se describe la estructura de los datos de eventos que Amazon Lex proporciona a una función de Lambda. Utilice esta información para analizar la entrada en el código de Lambda. También explica el formato de la respuesta que Amazon Lex espera que devuelva la función de Lambda.
Formato del evento de entrada
A continuación se muestra el formato general de un evento de Amazon Lex que se pasa a una función de Lambda. Utilice esta información cuando escriba la función de Lambda.
nota
El formato de entrada puede cambiar sin un cambio correspondiente en messageVersion
. El código no debería devolver un error si hay nuevos campos.
{
"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
"
}
}
]
}
Tenga en cuenta la siguiente información adicional sobre los campos del evento:
-
currentIntent: proporciona los campos
name
,slots
,slotDetails
yconfirmationStatus
de la intención.nluIntentConfidenceScore
es la confianza que Amazon Lex tiene en que la intención actual es la mejor para cumplir con la intención actual del usuario.slots
es una asignación de nombre de ranura, que se configura para la intención, para rellenar las ranuras con los valores que Amazon Lex ha reconocido en la conversación con el usuario. Un valor de slot es nulo hasta que el usuario proporciona un valor.El valor de ranura del evento de entrada podría no coincidir con uno de los valores configurados para la ranura. Por ejemplo, si el usuario responde a la pregunta “¿Qué color de automóvil prefiere?”, con “pizza”, Amazon Lex devolverá “pizza” como valor de ranura. Su función debería validar los valores para asegurarse de que tienen sentido en el contexto.
slotDetails
proporciona información adicional acerca de un valor de slot. La matrizresolutions
contiene una lista de los valores adicionales que se reconocen para el slot. Cada slot puede tener un máximo de cinco valores.El campo
originalValue
contiene el valor que el usuario ha introducido para el slot. Cuando el tipo de slot se configura para devolver el valor de resolución superior como valor de slot,originalValue
podría ser diferente al valor del camposlots
.confirmationStatus
proporciona la respuesta del usuario a un mensaje de confirmación, si existe. Por ejemplo, si Amazon Lex pregunta “¿Desea pedir una pizza de quesos grande?”, el valor de este campo puede serConfirmed
oDenied
en función de la respuesta del usuario. De lo contrario, el valor de este campo esNone
.Si el usuario confirma la intención, Amazon Lex establece el valor del campo en
Confirmed
. Si el usuario deniega la intención, Amazon Lex establece el valor del campo enDenied
.En la respuesta de confirmación, un enunciado del usuario puede proporcionar actualizaciones de slot. Por ejemplo, el usuario podría decir: "sí, cambiar el tamaño a mediana". En este caso, el evento de Lambda subsiguiente tendrá el valor de ranura actualizado y
PizzaSize
establecerá el valor enmedium
. Amazon Lex establececonfirmationStatus
enNone
porque el usuario ha modificado algunos datos de ranura, de modo que la función de Lambda tiene que validar los datos del usuario. -
alternativeIntents: si ha habilitado las puntuaciones de confianza, Amazon Lex devuelve hasta cuatro intenciones alternativas. Cada intención incluye una puntuación que indica el nivel de confianza que Amazon Lex tiene en que la intención es la correcta, según el enunciado del usuario.
El contenido de las intenciones alternativas es el mismo que el contenido del campo
currentIntent
. Para obtener más información, consulte Uso de puntuaciones de confianza. -
bot: información sobre el bot que ha procesado la solicitud.
-
name
: nombre del bot que ha procesado la solicitud. -
alias
: alias de la versión del bot que ha procesado la solicitud. -
version
: versión del bot que ha procesado la solicitud.
-
-
userId: este valor lo proporciona la aplicación cliente. Amazon Lex simplemente lo pasa a la función de Lambda.
-
inputTranscript: texto que se utiliza para procesar la solicitud.
Si la entrada era texto, el campo
inputTranscript
contiene el texto que ha introducido el usuario.Si la entrada era una transmisión de audio, el campo
inputTranscript
contiene el texto que se ha extraído de la transmisión de audio. Este es el texto que se procesa realmente para reconocer los valores de las intenciones y slot. -
invocationSource: para indicar por qué Amazon Lex llama la función de Lambda, se establece en uno de los siguientes valores:
-
DialogCodeHook
: Amazon Lex configura este valor para que la función de Lambda inicialice la función y valide la entrada de datos del usuario.Si la intención está configurada para invocar una función de Lambda como enlace de código de validación e inicialización, Amazon Lex invoca la función de Lambda especificada en cada entrada del usuario (enunciado) después de que Amazon Lex haya reconocido la intención.
nota
Si la intención no está clara, Amazon Lex no podrá llamar la función de Lambda.
-
FulfillmentCodeHook
: Amazon Lex establece este valor para indicar a la función de Lambda que cumpla con una intención.Si la intención está configurada para invocar una función de Lambda como enlace de código de cumplimiento, Amazon Lex establece este valor en
invocationSource
después de disponer de todos los datos de ranura para cumplir con la intención.
En la configuración de una intención puede haber dos funciones de Lambda distintas, una para inicializar y validar los datos de usuario y otra para cumplir con la intención. También puede utilizar una función de Lambda para ambas acciones. En ese caso, la función de Lambda puede utilizar el valor
invocationSource
para seguir la ruta de código correcta. -
-
outputDialogMode: para cada entrada de usuario, el cliente envía la solicitud a Amazon Lex mediante una de las operaciones de la API en tiempo de ejecución: PostContent o PostText. Amazon Lex utiliza los parámetros de la solicitud para determinar si la respuesta al cliente es texto o voz y define el valor de este campo según corresponda.
La función de Lambda puede utilizar esta información para generar un mensaje apropiado. Por ejemplo, si el cliente espera una respuesta de voz, la función de Lambda podría responder en formato SSML (Speech Synthesis Markup Language) en lugar de con texto.
-
messageVersion: la versión del mensaje que identifica el formato de los datos de evento que se van a pasar a la función de Lambda y el formato que se espera en la respuesta de la función de Lambda.
nota
Puede configurar este valor a la hora de definir una intención. En la implementación actual, solo se admite la versión 1.0 de los mensajes. Por lo tanto, la consola asume el valor predeterminado de 1.0 y no muestra el mensaje de la versión.
-
sessionAttributes: atributos de la sesión específicos de la aplicación que el cliente envía en la solicitud. Si desea que Amazon Lex los incluya en la respuesta al cliente, la función de Lambda debe devolverlos a Amazon Lex en la respuesta. Para obtener más información, consultar Definición de atributos de la sesión
-
requestAttributes: atributos específicos de la solicitud que el cliente envía en la solicitud. Utilice los atributos de solicitud para pasar información que no tiene por qué persistir durante toda la sesión. Si no hay atributos de solicitud, el valor será nulo. Para obtener más información, consultar Definición de los atributos de solicitud
-
recentIntentSummaryView: información acerca del estado de una intención. Puede consultar información acerca de las tres últimas intenciones que se hayan utilizado. Puede utilizar esta información para establecer los valores de la intención o para volver a una intención anterior. Para obtener más información, consulte Administración de sesiones con la API de Amazon Lex.
-
sentimentResponse: el resultado de un análisis de opiniones de Amazon Comprehend del último enunciado. Puede utilizar esta información para administrar el flujo de la conversación del bot en función del sentimiento expresado por el usuario. Para obtener más información, consulte Análisis de opiniones.
-
kendraResponse: el resultado de una consulta en un índice de Amazon Kendra. Solo está presente en la entrada de un enlace de código de cumplimentación y solo cuando la intención es más amplia que la intención de
AMAZON.KendraSearchIntent
incorporada. El campo contiene toda la respuesta de la búsqueda de Amazon Kendra. Para obtener más información, consulte AMAZON.KendraSearchIntent. -
activeContexts: uno o más contextos activos durante este turno de una conversación con el usuario.
-
timeToLive: la duración o el número de turnos de la conversación con el usuario en que el contexto permanece activo.
-
name: el nombre del contexto.
-
parameters: una lista de pares clave/valor que contiene el nombre y el valor de las ranuras de la intención que ha activado el contexto
Para obtener más información, consulte Establecimiento del contexto de la intención.
-
Formato de respuesta
Amazon Lex espera una respuesta de una función de Lambda con el siguiente formato:
{
"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 respuesta se compone de cuatro campos. Los campos sessionAttributes
, recentIntentSummaryView
y activeContexts
son opcionales, pero el campo dialogAction
es obligatorio. El contenido del campo dialogAction
depende del valor del campo type
. Para obtener más información, consulte dialogAction.
sessionAttributes
Opcional. Si incluye el campo sessionAttributes
, puede estar vacío. Si la función de Lambda no devuelve los atributos de la sesión, se pasa el último campo sessionAttributes
conocido a través de la API o se mantiene la función de Lambda. Para obtener más información, consulte las operaciones PostContent y PostText.
"sessionAttributes": {
"key1": "value1
",
"key2": "value2
"
}
recentIntentSummaryView
Opcional. Si se incluye, establece los valores de una o varias intenciones recientes. Puede incluir información de hasta tres intenciones. Por ejemplo, puede establecer los valores de intenciones anteriores en función de la información recopilada por la intención actual. La información del resumen debe ser válida para la intención. Por ejemplo, el nombre de la intención debe ser una intención en el bot. Si incluye un valor de slot en la vista de resumen, el slot debe existir en la intención. Si no incluye recentIntentSummaryView
en la respuesta, todos los valores de las intenciones recientes permanecen sin cambios. Para obtener más información, consulte la operación PutSession o el tipo de datos 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
" } ]
activeContexts
Opcional. Si se incluye, establece el valor para uno o más contextos. Por ejemplo, puede incluir un contexto para que una o más intenciones que tengan ese contexto como entrada se puedan reconocer en el siguiente turno de la conversación.
Los valores de tiempo de vida de los contextos activos que no se han incluido en la respuesta se reducen, aunque los contextos pueden seguir activos en la siguiente solicitud.
Si especifica un tiempo de vida de 0 para un contexto incluido en el evento de entrada, estará inactivo en la próxima solicitud.
Para obtener más información, consulte Establecimiento del contexto de la intención.
dialogAction
Obligatorio. El campo dialogAction
indica a Amazon Lex el siguiente paso y describe lo que cabe esperar del usuario después de que Amazon Lex devuelva una respuesta al cliente.
El campo type
indica el siguiente paso. También determina el resto de los campos que tiene que proporcionar la función de Lambda como parte del valor dialogAction
.
-
Close
: indica a Amazon Lex que no debe esperar una respuesta del usuario. Por ejemplo, "Your pizza order has been placed" no requiere una respuesta.El campo
fulfillmentState
es obligatorio. Amazon Lex utiliza este valor para definir el campodialogState
en la respuesta PostContent o PostText a la aplicación cliente. Los camposmessage
yresponseCard
son opcionales. Si no especifica un mensaje, Amazon Lex usa el mensaje de despedida o el mensaje de seguimiento que se ha configurado para la intención."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 a Amazon Lex que se espera que el usuario dé una respuesta afirmativa o negativa para confirmar o denegar la intención actual.Debe incluir los campos
intentName
yslots
. El camposlots
debe incluir una entrada por cada uno de los slots de la intención especificada que se han rellenado. No es necesario que incluya en el camposlots
una entrada para los slots sin rellenar. Debe incluir el campomessage
si el campoconfirmationPrompt
de intención es nulo. El contenido del campomessage
devuelto por la función de Lambda tiene prioridad sobre el objetoconfirmationPrompt
especificado en la intención. El camporesponseCard
es opcional."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
: indica a Amazon Lex que elija el siguiente paso en función de la configuración del bot. Si la respuesta no incluye atributos de sesión, Amazon Lex mantiene los atributos de sesión existentes. Si desea que un valor de slot sea nulo, no debe incluir el campo de slot en la solicitud. Se producirá una excepciónDependencyFailedException
si la función de cumplimentación devuelve la acción de diálogoDelegate
sin eliminar ningún slot.Los campos
kendraQueryFilterString
ykendraQueryRequestPayload
son opcionales y solo se utilizan cuando la intención procede de la intención integrada enAMAZON.KendraSearchIntent
. Para obtener más información, consulte 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
: indica a Amazon Lex que se espera que el usuario responda con un enunciado que incluya una intención. Por ejemplo, "I want a large pizza", que indica la intenciónOrderPizzaIntent
. Por otra parte, el enunciado “large” no es suficiente para que Amazon Lex deduzca la intención del usuario.Los campos
message
yresponseCard
son opcionales. Si no proporciona un mensaje, Amazon Lex utiliza una de las preguntas aclaratorias del bot. Si no hay ninguna pregunta aclaratoria definida, Amazon Lex devuelve la excepción 400 de solicitud errónea.{ "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
: indica a Amazon Lex que se espera que el usuario proporcione un valor de ranura en la respuesta.Los campos
intentName
,slotToElicit
yslots
son obligatorios. Los camposmessage
yresponseCard
son opcionales. Si no especifica un mensaje, Amazon Lex utiliza una de las solicitudes para obtener valores de ranura configuradas para la ranura."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
" } ] } ] } }