Preparar el formato de respuesta - Amazon Lex

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.

Preparar el formato de respuesta

El segundo paso para integrar una función de Lambda en el bot de Amazon Lex V2 consiste en comprender los campos de la respuesta de la función de Lambda y determinar qué parámetros desea manipular. El siguiente objeto JSON muestra el formato general de una respuesta de Lambda que se devuelve a Amazon Lex V2:

{ "sessionState": { // see Estado de la sesión for details about the structure }, "messages": [ { "contentType": "CustomPayload | ImageResponseCard | PlainText | SSML", "content": string, "imageResponseCard": { "title": string, "subtitle": string, "imageUrl": string, "buttons": [ { "text": string, "value": string }, ... ] } }, ... ], "requestAttributes": { string: string, ... } }

Cada campo en la respuesta se describe a continuación.

El estado de la conversación entre el usuario y el bot de Amazon Lex V2 que desea devolver. Consulte Estado de la sesión para obtener más información sobre la estructura. Este campo siempre es obligatorio.

Lista de mensajes que Amazon Lex V2 devuelve al cliente para la siguiente sesión de la conversación. Si el contentType que ha proporcionado es PlainText, CustomPayload o SSML, escriba en el campo content el mensaje que desea devolver al cliente. Si el contentType que ha proporcionado es ImageResponseCard, proporcione los detalles de la tarjeta en el campo imageResponseCard. Si no proporciona mensajes, Amazon Lex V2 utiliza el mensaje apropiado definido cuando se creó el bot.

El campo messages es obligatorio si dialogAction.type es ElicitIntent o ConfirmIntent.

Cada elemento de la lista es una estructura con el siguiente formato, que contiene información sobre un mensaje para devolverlo al usuario. A continuación se muestra un ejemplo:

{ "contentType": "CustomPayload | ImageResponseCard | PlainText | SSML", "content": string, "imageResponseCard": { "title": string, "subtitle": string, "imageUrl": string, "buttons": [ { "text": string, "value": string }, ... ] } }

A continuación, se proporciona una descripción de cada campo:

  • Tipo de contenido: el tipo de mensaje que se va a utilizar.

    CustomPayload: una cadena de respuesta que se puede personalizar para incluir datos o metadatos para la aplicación.

    ImageResponseCard: una imagen con botones que el cliente puede seleccionar. Consulte Tarjeta de respuesta de imagen para obtener más información.

    PlainText: una cadena de texto simple.

    SSML: una cadena que incluye el lenguaje de marcado de síntesis de voz para personalizar la respuesta de audio.

  • Contenido: el mensaje que se va a enviar al usuario. Utilice este campo si el tipo de mensaje es PlainText, CustomPayload, o SSML.

  • Tarjeta de respuesta de imagen: contiene la definición de la tarjeta de respuesta que se mostrará al usuario. Utilice este campo si el tipo de mensaje es ImageResponseCard. Corresponde a una estructura que contiene los siguientes campos:

    • título: el título de la tarjeta de respuesta.

    • subtítulo: la solicitud para que el usuario seleccione un botón.

    • URL de imagen: enlace a una imagen de la tarjeta.

    • botones: lista de estructuras que contienen información sobre un botón. Cada estructura contiene un campo text con el texto que se debe mostrar y un campo value con el valor que se debe enviar a Amazon Lex V2 si el cliente selecciona ese botón. Puede incluir hasta tres botones.

Estructura que contiene atributos específicos de la solicitud para la respuesta al cliente. Para obtener más información, consulte Establecer atributos de solicitud. Este campo es opcional.

Campos obligatorios en la respuesta

Como mínimo, la respuesta de Lambda debe incluir un objeto sessionState. Dentro de eso, proporcione un objeto dialogAction y especifique el campo type. En función del type de la dialogAction que proporcione, es posible que haya otros campos obligatorios para la respuesta de Lambda. Estos requisitos se describen a continuación, junto con algunos ejemplos prácticos mínimos:

El delegado permite a Amazon Lex V2 determinar el siguiente paso. No hay más campos obligatorios.

{ "sessionState": { "dialogAction": { "type": "Delegate" } }

Obtener intención pide al cliente que exprese una intención. Debe incluir al menos un mensaje en el campo messages para que se manifieste una intención.

{ "sessionState": { "dialogAction": { "type": "ElicitIntent" }, "messages": [ { "contentType": PlainText, "content": "How can I help you?" } ] }

Obtener slot solicita al cliente que proporcione un valor de slot. Debe incluir el nombre del slot en el campo slotToElicit del objeto dialogAction. También debe incluir el name de intent en el objeto sessionState.

{` "sessionState": { "dialogAction": { "slotToElicit": "OriginCity", "type": "ElicitSlot" }, "intent": { "name": "BookFlight" } } }

Confirmar intención confirma los valores de los slots del cliente y si la intención está lista para cumplirse. Debe incluir el name del intent en el objeto sessionState y los slots que deben confirmarse. También debe incluir al menos un mensaje en el campo messages para solicitar al usuario que confirme los valores de los slots. Su mensaje debería arrojar una respuesta de «sí» o «no». Si el usuario responde «sí», Amazon Lex V2 establece el confirmationState de la intención en Confirmed. Si el usuario responde «no», Amazon Lex V2 establece el confirmationState de la intención en Denied.

{ "sessionState": { "dialogAction": { "type": "ConfirmIntent" }, "intent": { "name": "BookFlight", "slots": { "DepartureDate": { "value": { "originalValue": "tomorrow", "interpretedValue": "2023-05-09", "resolvedValues": [ "2023-05-09" ] } }, "DestinationCity": { "value": { "originalValue": "sf", "interpretedValue": "sf", "resolvedValues": [ "sf" ] } }, "OriginCity": { "value": { "originalValue": "nyc", "interpretedValue": "nyc", "resolvedValues": [ "nyc" ] } } } } }, "messages": [ { "contentType": PlainText, "content": "Okay, you want to fly from {OriginCity} to \ {DestinationCity} on {DepartureDate}. Is that correct?" } ] }

Cerrar finaliza el proceso de cumplimiento de la intención e indica que no se espera ninguna otra respuesta del usuario. Debe incluir el name y el state de la intent en el objeto sessionState. Los estados de intención compatibles son Failed, Fulfilled y InProgress.

"sessionState": { "dialogAction": { "type": "Close" }, "intent": { "name": "BookFlight", "state": "Failed | Fulfilled | InProgress" } }