Paso 2a (opcional): revisión de los detalles del flujo de información escrita (consola) - Amazon Lex V1

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.

Paso 2a (opcional): revisión de los detalles del flujo de información escrita (consola)

En esta sección se explica el flujo de información entre el cliente y Amazon Lex cuando el cliente utiliza la voz para enviar solicitudes. Para obtener más información, consulte PostContent.

  1. El usuario dice: Me gustaría pedir unas flores.

    1. El cliente (la consola) envía la siguiente solicitud PostContent a Amazon Lex:

      POST /bot/OrderFlowers/alias/$LATEST/user/4o9wwdhx6nlheferh6a73fujd3118f5w/content HTTP/1.1 x-amz-lex-session-attributes: "e30=" Content-Type: "audio/x-l16; sample-rate=16000; channel-count=1" Accept: "audio/mpeg" Request body input stream

      Tanto la URI de la solicitud como el cuerpo proporcionan información a Amazon Lex:

      • URI de la solicitud: proporciona el nombre del bot (OrderFlowers), su alias ($LATEST) y el nombre del usuario (una cadena aleatoria que identifica al usuario). content indica que se trata de una solicitud de la API PostContent (no una solicitud PostText).

      • Encabezados de solicitudes

        • x-amz-lex-session-attributes: el valor con codificación base64 representa “{}”. Cuando el cliente realiza la primera solicitud, no existen atributos de la sesión.

        • Content-Type: refleja el formato de audio.

      • Cuerpo de la solicitud: la transmisión de audio de la entrada del usuario ("Me gustaría pedir unas flores.").

      nota

      En caso de que el usuario elija enviar texto ("Me gustaría pedir unas flores") a la API PostContent en lugar de hablar, el cuerpo de la solicitud será la entrada del usuario. El encabezado Content-Type se fija en consecuencia:

      POST /bot/OrderFlowers/alias/$LATEST/user/4o9wwdhx6nlheferh6a73fujd3118f5w/content HTTP/1.1 x-amz-lex-session-attributes: "e30=" Content-Type: "text/plain; charset=utf-8" Accept: accept Request body input stream
    2. Amazon Lex deduce la intención (OrderFlowers) a partir de la transmisión de entrada. A continuación, elige uno de los slots de la intención (en este caso, FlowerType) y una de sus preguntas para obtener valores y, luego, envía una respuesta con los siguientes encabezados:

      x-amz-lex-dialog-state:ElicitSlot x-amz-lex-input-transcript:I would like to order some flowers. x-amz-lex-intent-name:OrderFlowers x-amz-lex-message:What type of flowers would you like to order? x-amz-lex-session-attributes:e30= x-amz-lex-slot-to-elicit:FlowerType x-amz-lex-slots:eyJQaWNrdXBUaW1lIjpudWxsLCJGbG93ZXJUeXBlIjpudWxsLCJQaWNrdXBEYXRlIjpudWxsfQ==

      Los valores de encabezado proporcionan la siguiente información:

      • x-amz-lex-input-transcript: proporciona la transcripción del audio (entrada del usuario) de la solicitud

      • x-amz-lex-message: proporciona la transcripción del audio que devuelve Amazon Lex en la respuesta

      • x-amz-lex-slots: la versión de la codificación de base64 de los slots y los valores:

        {"PickupTime":null,"FlowerType":null,"PickupDate":null}
      • x-amz-lex-session-attributes: la versión de la codificación de base64 de los atributos de la sesión ({})

      El cliente reproduce el audio en el cuerpo de la respuesta.

  2. El usuario dice: rosas

    1. El cliente (la consola) envía la siguiente solicitud PostContent a Amazon Lex:

      POST /bot/OrderFlowers/alias/$LATEST/user/4o9wwdhx6nlheferh6a73fujd3118f5w/content HTTP/1.1 x-amz-lex-session-attributes: "e30=" Content-Type: "audio/x-l16; sample-rate=16000; channel-count=1" Accept: "audio/mpeg" Request body input stream ("roses")

      El cuerpo de la solicitud es la transmisión de audio de la entrada del usuario (rosas). No hay sessionAttributes.

    2. Amazon Lex interpreta la transmisión de entrada en el contexto de la intención actual (recuerda que ha solicitado al usuario información sobre la ranura FlowerType). En primer lugar, Amazon Lex actualiza el valor de ranura de la intención actual. Después, elige otro slot (PickupDate), junto con uno de los mensajes de pregunta (¿Cuándo desea pasar a por las rosas?) y devuelve una respuesta con los siguientes encabezados:

      x-amz-lex-dialog-state:ElicitSlot x-amz-lex-input-transcript:roses x-amz-lex-intent-name:OrderFlowers x-amz-lex-message:When do you want to pick up the roses? x-amz-lex-session-attributes:e30= x-amz-lex-slot-to-elicit:PickupDate x-amz-lex-slots:eyJQaWNrdXBUaW1lIjpudWxsLCJGbG93ZXJUeXBlIjoicm9zaSdzIiwiUGlja3VwRGF0ZSI6bnVsbH0=

      Los valores de encabezado proporcionan la siguiente información:

      • x-amz-lex-slots: la versión de la codificación de base64 de los slots y los valores:

        {"PickupTime":null,"FlowerType":"roses","PickupDate":null}
      • x-amz-lex-session-attributes: la versión de la codificación de base64 de los atributos de la sesión ({})

      El cliente reproduce el audio en el cuerpo de la respuesta.

  3. El usuario dice: mañana

    1. El cliente (la consola) envía la siguiente solicitud PostContent a Amazon Lex:

      POST /bot/OrderFlowers/alias/$LATEST/user/4o9wwdhx6nlheferh6a73fujd3118f5w/content HTTP/1.1 x-amz-lex-session-attributes: "e30=" Content-Type: "audio/x-l16; sample-rate=16000; channel-count=1" Accept: "audio/mpeg" Request body input stream ("tomorrow")

      El cuerpo de la solicitud es la transmisión de audio de la entrada del usuario ("mañana"). No hay sessionAttributes.

    2. Amazon Lex interpreta la transmisión de entrada en el contexto de la intención actual (recuerda que ha solicitado al usuario información sobre la ranura PickupDate). Amazon Lex actualiza el valor de ranura (PickupDate) de la intención actual. A continuación, elige otro slot para obtener el valor (PickupTime) y una de las preguntas para obtener valores (¿Cuándo desea recoger las rosas el 18/03/2017?), y devuelve una respuesta con los siguientes encabezados:

      x-amz-lex-dialog-state:ElicitSlot x-amz-lex-input-transcript:tomorrow x-amz-lex-intent-name:OrderFlowers x-amz-lex-message:When do you want to pick up the roses on 2017-03-18? x-amz-lex-session-attributes:e30= x-amz-lex-slot-to-elicit:PickupTime x-amz-lex-slots:eyJQaWNrdXBUaW1lIjpudWxsLCJGbG93ZXJUeXBlIjoicm9zaSdzIiwiUGlja3VwRGF0ZSI6IjIwMTctMDMtMTgifQ== x-amzn-RequestId:3a205b70-0b69-11e7-b447-eb69face3e6f

      Los valores de encabezado proporcionan la siguiente información:

      • x-amz-lex-slots: la versión de la codificación de base64 de los slots y los valores:

        {"PickupTime":null,"FlowerType":"roses","PickupDate":"2017-03-18"}
      • x-amz-lex-session-attributes: la versión de la codificación de base64 de los atributos de la sesión ({})

      El cliente reproduce el audio en el cuerpo de la respuesta.

  4. El usuario dice: 18:00 h

    1. El cliente (la consola) envía la siguiente solicitud PostContent a Amazon Lex:

      POST /bot/OrderFlowers/alias/$LATEST/user/4o9wwdhx6nlheferh6a73fujd3118f5w/content HTTP/1.1 x-amz-lex-session-attributes: "e30=" Content-Type: "text/plain; charset=utf-8" Accept: "audio/mpeg" Request body input stream ("6 pm")

      El cuerpo de la solicitud es la transmisión de audio de la entrada del usuario ("18:00 h"). No hay sessionAttributes.

    2. Amazon Lex interpreta la transmisión de entrada en el contexto de la intención actual (recuerda que ha solicitado al usuario información sobre la ranura PickupTime). Primero actualiza el valor de slot de la intención actual.

      Ahora Amazon Lex detecta que tiene información para todas las ranuras. Sin embargo, la intención OrderFlowers se ha configurado con un mensaje de confirmación. Por lo tanto, Amazon Lex necesita una confirmación explícita del usuario antes de cumplir con la intención. Envía una respuesta con los siguientes encabezados para solicitar la confirmación antes de encargar las flores:

      x-amz-lex-dialog-state:ConfirmIntent x-amz-lex-input-transcript:six p. m. x-amz-lex-intent-name:OrderFlowers x-amz-lex-message:Okay, your roses will be ready for pickup by 18:00 on 2017-03-18. Does this sound okay? x-amz-lex-session-attributes:e30= x-amz-lex-slots:eyJQaWNrdXBUaW1lIjoiMTg6MDAiLCJGbG93ZXJUeXBlIjoicm9zaSdzIiwiUGlja3VwRGF0ZSI6IjIwMTctMDMtMTgifQ== x-amzn-RequestId:083ca360-0b6a-11e7-b447-eb69face3e6f

      Los valores de encabezado proporcionan la siguiente información:

      • x-amz-lex-slots: la versión de la codificación de base64 de los slots y los valores:

        {"PickupTime":"18:00","FlowerType":"roses","PickupDate":"2017-03-18"}
      • x-amz-lex-session-attributes: la versión de la codificación de base64 de los atributos de la sesión ({})

      El cliente reproduce el audio en el cuerpo de la respuesta.

  5. El usuario dice: Sí

    1. El cliente (la consola) envía la siguiente solicitud PostContent a Amazon Lex:

      POST /bot/OrderFlowers/alias/$LATEST/user/4o9wwdhx6nlheferh6a73fujd3118f5w/content HTTP/1.1 x-amz-lex-session-attributes: "e30=" Content-Type: "audio/x-l16; sample-rate=16000; channel-count=1" Accept: "audio/mpeg" Request body input stream ("Yes")

      El cuerpo de la solicitud es la transmisión de audio de la entrada del usuario ("Sí"). No hay sessionAttributes.

    2. Amazon Lex interpreta la transmisión de entrada y entiende que el usuario desea continuar con el pedido. La intención OrderFlowers se ha configurado con ReturnIntent como la actividad de cumplimiento. Esto provoca que Amazon Lex devuelva todos los datos de la intención al cliente. Amazon Lex devuelve una respuesta con lo siguiente:

      x-amz-lex-dialog-state:ReadyForFulfillment x-amz-lex-input-transcript:yes x-amz-lex-intent-name:OrderFlowers x-amz-lex-session-attributes:e30= x-amz-lex-slots:eyJQaWNrdXBUaW1lIjoiMTg6MDAiLCJGbG93ZXJUeXBlIjoicm9zaSdzIiwiUGlja3VwRGF0ZSI6IjIwMTctMDMtMTgifQ==

      El encabezado de la respuesta x-amz-lex-dialog-state está configurado en ReadyForFulfillment. Ahora el cliente podrá llevar a cabo la intención.

  6. Ahora, pruebe de nuevo el bot. Para establecer un nuevo contexto (usuario), elija el enlace Clear en la consola. Proporcione datos para la intención OrderFlowers e incluya algunos datos no válidos. Por ejemplo:

    • Jazmín como tipo de flor (este tipo de flor no se admite)

    • Ayer como el día en que desea recoger las flores

    Observe que el bot acepta estos valores, ya que no tiene ningún código para inicializar y validar los datos de usuario. En la siguiente sección, añadirá una función de Lambda para que lo haga. Tenga en cuenta lo siguiente en relación con la función de Lambda:

    • Valida los datos de slot después de cada entrada de usuario. Gestiona la intención al final. Es decir, el bot procesa el pedido de flores y devuelve un mensaje al usuario en lugar de simplemente devolver los datos de slot al cliente. Para obtener más información, consulte Uso de funciones de Lambda.

    • También establece los atributos de la sesión. Para obtener más información acerca de los atributos de la sesión, consulte PostText.

      Una vez completada la sección Introducción, puede realizar los ejercicios adicionales (Ejemplos adicionales: creación de bots de Amazon Lex). Reserva de viaje usa los atributos de sesión para compartir información entre intenciones y entablar una conversación dinámica con el usuario.

Paso siguiente

Paso 3: creación de una función de Lambda (consola)