Añadir condiciones a las conversaciones ramificadas - 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.

Añadir condiciones a las conversaciones ramificadas

Puede usar la ramificación condicional para controlar la ruta que sigue su cliente durante la conversación con su bot. Puede ramificar la conversación en función de los valores de los slots, los atributos de sesión, los contenidos del modo de entrada y los campos de transcripción de entrada o una respuesta de Amazon Kendra.

Puede definir hasta cuatro ramas. Cada rama tiene una condición que debe cumplirse para que Amazon Lex V2 siga esa rama. Si ninguna de las ramas cumple su condición, se sigue una rama predeterminada.

Cuando define una rama, define la acción que Amazon Lex V2 debe realizar si las condiciones correspondientes a esa rama resultan verdaderas. Puede definir cualquiera de las siguientes acciones:

  • Una respuesta enviada al usuario.

  • Valores de slots para aplicarlos a los slots.

  • Valores de los atributos de sesión para la sesión actual.

  • El siguiente paso de la conversación. Para obtener más información, consulte Crear rutas de conversación.


                Puede elegir diferentes opciones para la ramificación condicional.

Cada rama condicional tiene una expresión booleana que debe cumplirse para que Amazon Lex V2 siga esa rama. Existen operadores de comparación y booleanos, funciones y operadores cuantificadores que puede utilizar para sus condiciones. Por ejemplo, la siguiente condición se vuelve verdadera si el slot {edad} es inferior a 24.

{age} < 24

La siguiente condición se cumple si el slot multivalor {ingredientes} contiene la palabra «piña».

{toppings} CONTAINS "pineapple"

Puede combinar varios operadores de comparación con un operador booleano para condiciones más complejas. Por ejemplo, la siguiente condición se cumple si el valor del slot {marca} es «Honda» y el valor del slot {modelo} es «Civic». Use paréntesis para establecer el orden de evaluación.

({make} = "Honda") AND ({model} = "Civic")

En los siguientes temas se proporcionan detalles sobre los operadores y las funciones de las ramas condicionales.

nota

El 17 de agosto de 2022, Amazon Lex V2 publicó un cambio en la forma en que se gestionan las conversaciones con el usuario. Este cambio le da más control sobre la ruta que sigue el usuario a lo largo de la conversación. Para obtener más información, consulte Comprender la gestión del flujo de conversaciones. Los bots creados antes del 17 de agosto de 2022 no admiten mensajes de enlace de código de diálogo, ni permiten establecer valores, configurar los pasos siguientes ni añadir condiciones.

Operadores de comparación

Amazon Lex V2 admite los siguientes operadores de comparación para las condiciones:

  • Igual (=)

  • Distinto de (!=)

  • Menor que (<)

  • Menor que o igual a (<=)

  • Mayor que (>)

  • Mayor que o igual a (>=)

Cuando se utiliza un operador de comparación, se utilizan las siguientes reglas.

  • El lado izquierdo debe ser una referencia. Por ejemplo, para hacer referencia a un valor del slot, utilice {slotName}. Para hacer referencia a un valor de atributo de sesión, utilice [attribute]. Para el modo de entrada y la transcripción de entrada, se utiliza $.inputMode y $.inputTranscript.

  • El lado derecho debe ser constante y del mismo tipo que el lado izquierdo.

  • Cualquier expresión que haga referencia a un atributo que no se haya establecido se considera inválida y no se evalúa.

  • Al comparar un slot con varios valores, el valor utilizado es una lista separada por comas de todos los valores interpretados.

Las comparaciones se basan en el tipo de slot de la referencia. Se resuelven de la siguiente manera:

  • Cadenas: las cadenas se comparan en función de su representación en ASCII. Esta comparación no distingue entre mayúsculas y minúsculas.

  • Números: los slots basados en números se convierten de la representación de cadena a un número y, a continuación, se comparan.

  • Fecha/hora: los slots basados en el tiempo se comparan en función de la serie temporal. La fecha u hora anterior se considera más pequeña. En cuanto a la duración, los períodos más cortos se consideran más pequeños.

Operadores booleanos

Amazon Lex V2 admite operadores booleanos para combinar operadores de comparación. Permiten crear declaraciones similares a las siguientes:

({number} >= 5) AND ({number} <= 10)

También puede utilizar las siguientes operaciones:

  • Y (&&)

  • O (||)

  • NO (!)

Operadores cuantificadores

Los operadores cuantificadores evalúan los elementos de una secuencia y determinan si uno o más elementos cumplen la condición.

  • CONTIENE: determina si el valor especificado está contenido en un slot con varios valores y devuelve el valor verdadero si lo es. Por ejemplo, {toppings} CONTAINS "pineapple" devuelve el valor verdadero si el usuario pidió piña para su pizza.

Funciones

Las funciones deben ir precedidas de la cadena fn.. El argumento de la función es una referencia a un slot, un atributo de sesión o un atributo de solicitud. Amazon Lex V2 proporciona dos funciones para obtener información de los valores de los slots: SessionAttribute o RequestAttribute.

  • fn.COUNT (): cuenta el número de valores de un slot con varios valores.

    Por ejemplo, si el slot {toppings} contiene el valor «pepperoni, piña»:

    fn.COUNT({toppings}) = 2

  • fn.IS_SET (): el valor es verdadero si se establece un slot, un atributo de sesión o un atributo de solicitud en la sesión actual.

    Basado en el ejemplo anterior:

    fn.IS_SET({toppings})

  • fn.length (): el valor es la longitud del valor del atributo de sesión, el valor de ranura o el atributo de ranura que se establece en la sesión actual. Esta función no admite ranuras de valores múltiples ni ranuras compuestas.

    Ejemplo:

    Si la ranura {credit-card-number} contiene el valor «123456781234":

    fn.LENGTH({credit-card-number}) = 12

Ejemplos de expresiones condicionales

Estos son algunos ejemplos de expresiones condicionales. NOTA: $. representa el punto de entrada a la respuesta JSON de Amazon Lex. El valor que sigue a $. se analizará en la respuesta de Amazon Lex para recuperar el valor. Las expresiones condicionales que utilicen la referencia de ruta JSON al bloque de transcripciones en la respuesta de Amazon Lex solo se admitirán en las mismas configuraciones regionales que admiten las puntuaciones de transcripción de ASR.

Tipo de valor Caso de uso Expresión condicional
Slot personalizado El valor del slot pizzaSize es igual a grande {pizzaSize} = "large"
Slot personalizado pizzaSize es igual a grande o mediana {pizzaSize} = "large" O {pizzaSize} = "medium"
Slot personalizado Expresiones con () y AND/OR {pizzaType} = "pepperoni" O {pizzaSize} = "medium" O {pizzaSize} = "small"
Slot personalizado (slot con varios valores) Compruebe si uno de los ingredientes es cebolla {toppings} CONTAINS "Onion"
Slot personalizado (slot con varios valores) El número de ingredientes es superior a 3 fn.COUNT({topping}) > 2
AMAZON.AlphaNumeric bookingID es ABC123 {bookingID} = "ABC123"
AMAZON.Number el valor del slot de edad es superior a 30 {age} > 30
AMAZON.Number el valor del slot de edad es igual a 10 {age} = 10
AMAZON.Date valor del slot dateOfBirth antes de 1990 {dateOfBirth} < "1990-10-01"
AMAZON.State el valor del slot destinationState es igual a Washington {destinationState} = "washington"
AMAZON.Country el valor del slot destinationCountry es no Estados Unidos {destinationCountry} != "united states"
AMAZON.FirstName el valor del slot firstName es John {firstName} = "John"
AMAZON.PhoneNumber el valor del slot phoneNumber es 716767891932 {phoneNumer} = 716767891932
AMAZON.Percentage Compruebe si el valor del slot porcentual es mayor o igual a 78 {percentage} >= 78
AMAZON.EmailAddress el valor del slot emailAddress es userA@hmail.com {emailAddress} = "userA@hmail.com"
AMAZON.LastName el valor del slot lastName es Doe {lastName} = "Doe"
AMAZON.City El valor del slot de la ciudad es igual a Seattle {city} = "Seattle"
AMAZON.Time La hora es después de las 8 p. m. {time} > "20:00"
AMAZON.StreetName el valor del slot streetName es Boren Avenue {streetName} = "boren avenue"
AMAZON.Duration el valor del slot travelDuration es inferior a 2 horas {travelDuration} < P2H
Modo de entrada El modo de entrada es voz $.inputMode = "Speech"
Transcripción de entrada La transcripción de entrada equivale a «Quiero una pizza grande» $.inputTranscript = "I want a large pizza"
Atributos de sesión compruebe el atributo customer_subscription_type [customer_subcription_type] = "yearly"
Atributo de solicitud compruebe el indicador retry_enabled ((retry_enabled)) = "TRUE"
Respuesta de Kendra La respuesta de Kendra contiene preguntas frecuentes fn.IS_SET(((x-amz-lex:kendra-search-response-question_answer-question-1)))
Expresión condicional con transcripciones Expresiones condicionales que utilizan la ruta JSON de transcripciones $.transcriptions[0].transcriptionConfidence < 0.8 AND $.transcriptions[1].transcriptionConfidence > 0.5
Establecer atributos de sesión Establezca los atributos de sesión mediante la ruta JSON de las transcripciones y los valores de los slots. [sessionAttribute] = "$.transcriptions..." AND [sessionAttribute] = "{<slotName>}"
Establecer valores de slot Establezca los valores de slot utilizando atributos de sesión y la ruta JSON de las transcripciones. {slotName} = [<sessionAttribute>] AND {slotName} = "$.transcriptions..."
nota

slotName hace referencia al nombre de un slot en el bot de Amazon Lex. Si el slot no está resuelto (nulo) o si no existe, las asignaciones se ignoran durante el tiempo de ejecución. sessionAttribute hace referencia al nombre del atributo de sesión que establece el cliente en el momento de la compilación.