Invocar funciones AWS Lambda - Amazon Connect

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.

Invocar funciones AWS Lambda

Amazon Connect puede interactuar con sus propios sistemas y tomar diferentes rutas en flujos de forma dinámica. Para lograrlo, invoque funciones de AWS Lambda en un flujo, obtenga resultados y llame a sus propios servicios o interactúe con otros servicios o almacenes de datos de AWS. Para obtener más información, consulte la Guía para desarrolladores de AWS Lambda.

Para invocar una función de Lambda de un flujo, realice las siguientes tareas.

Crear una función de Lambda

Cree una función de Lambda con cualquier tiempo de ejecución y configúrela. Para obtener más información, consulte Introducción a Lambda en la Guía para desarrolladores de AWS Lambda.

Si crea la función de Lambda en la misma región que el centro de contacto, puede utilizar la consola de Amazon Connect para añadir la función de Lambda a la instancia como se describe en la siguiente tarea, Agregar una función de Lambda a la instancia de Amazon Connect. Esto agrega automáticamente permisos de recursos que permiten a Amazon Connect invocar la función de Lambda. De lo contrario, si la función de Lambda se encuentra en una región diferente, puede agregarla al flujo con el diseñador de flujos y agregar los permisos de recursos con el comando add-permission, con la entidad principal de connect.amazonaws.com y el ARN de la instancia de Amazon Connect. Para obtener más información, consulte Uso de políticas basadas en recursos para AWS Lambda en la Guía para desarrolladores de AWS Lambda.

Agregar una función de Lambda a la instancia de Amazon Connect

Para poder utilizar una función de Lambda en un flujo, debe agregarla a su instancia de Amazon Connect.

Agregar una función de Lambda a la instancia
  1. Abra la consola de Amazon Connect desde https://console.aws.amazon.com/connect/.

  2. En la página de instancias, el nombre de la instancia que hay en la columna Alias de instancia. Este nombre de instancia aparece en la URL que utiliza para acceder a Amazon Connect.

    
                        Página de instancias del centro de contacto virtual de Amazon Connect, alias de instancia.
  3. En el panel de navegación, elija Flujos.

  4. En la sección AWS Lambda, utilice el cuadro desplegable Function (Función) para seleccionar la función que desea agregar a su instancia.

    sugerencia

    El menú desplegable muestra solo aquellas funciones que están en la misma región que la instancia. Si no se enumeran funciones, elija Crear una nueva función de Lambda, que abre la consola de AWS Lambda.

    Para utilizar una Lambda en una región o cuenta diferente, en el Invocar a la función AWS Lambda , en Seleccionar una función, puede introducir el ARN de una Lambda. A continuación, configure la política basada en recursos correspondiente en esa Lambda para permitir que el flujo la llame.

    Para llamar a lambda:AddPermission, debe:

    • Establecer la entidad principal a connect.amazonaws.com

    • Establecer la cuenta de origen para que sea la cuenta en la que se encuentra su instancia

    • Establecer el ARN de origen al ARN de su instancia

    Para obtener más información, consulte Concesión de acceso a la función a otras cuentas.

  5. Elija Agregar función Lambda. Confirme que el ARN de la función se añade en Funciones de Lambda.

Ahora puede hacer referencia a esta función de Lambda en los flujos del contacto.

Invocación de una función de Lambda desde un flujo

  1. Abra o cree un flujo.

  2. Agregue un bloque Invocar a la función AWS Lambda (en el grupo Integrate (Integrar)) a la cuadrícula. Conecte las ramas hacia y desde el bloque.

  3. Elija el título del bloque Invocar a la función AWS Lambda para abrir la página de propiedades.

  4. En Select a function (Seleccionar una función), elija de la lista de funciones que ha agregado a su instancia.

  5. (Opcional) En Function input parameters (Parámetros de entrada de función), elija Add a parameter (Agregar un parámetro). Puede especificar pares de clave-valor que se envían a la función de Lambda cuando se invoca. También puede especificar un valor de Tiempo de espera para la función.

  6. En Tiempo de espera (máx. 8 segundos), especifique cuánto tiempo debe esperar Lambda a que se agote el tiempo de espera. Transcurrido este tiempo, el contacto se encamina hacia la ramificación Error.

Para cada invocación de función de Lambda desde un flujo, se transfiere un conjunto predeterminado de información relacionada con el contacto en curso, así como cualquier atributo adicional definido en la sección Parámetros de entrada de función del bloque Invocar función de AWS Lambda agregado.

A continuación, se muestra un ejemplo de solicitud JSON a una función de Lambda:

{ "Details": { "ContactData": { "Attributes": { "exampleAttributeKey1": "exampleAttributeValue1" }, "Channel": "VOICE", "ContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX", "CustomerEndpoint": { "Address": "+1234567890", "Type": "TELEPHONE_NUMBER" }, "CustomerId": "someCustomerId", "Description": "someDescription", "InitialContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX", "InitiationMethod": "INBOUND | OUTBOUND | TRANSFER | CALLBACK", "InstanceARN": "arn:aws:connect:aws-region:1234567890:instance/c8c0e68d-2200-4265-82c0-XXXXXXXXXX", "LanguageCode": "en-US", "MediaStreams": { "Customer": { "Audio": { "StreamARN": "arn:aws:kinesisvideo::eu-west-2:111111111111:stream/instance-alias-contact-ddddddd-bbbb-dddd-eeee-ffffffffffff/9999999999999", "StartTimestamp": "1571360125131", // Epoch time value "StopTimestamp": "1571360126131", "StartFragmentNumber": "100" // Numberic value for fragment number } } }, "Name": "ContactFlowEvent", "PreviousContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX", "Queue": { "ARN": "arn:aws:connect:eu-west-2:111111111111:instance/cccccccc-bbbb-dddd-eeee-ffffffffffff/queue/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "Name": "PasswordReset" "OutboundCallerId": { "Address": "+12345678903", "Type": "TELEPHONE_NUMBER" } }, "References": { "key1": { "Type": "url", "Value": "urlvalue" } }, "SystemEndpoint": { "Address": "+1234567890", "Type": "TELEPHONE_NUMBER" } }, "Parameters": {"exampleParameterKey1": "exampleParameterValue1", "exampleParameterKey2": "exampleParameterValue2" } }, "Name": "ContactFlowEvent" }

La solicitud se divide en dos partes:

  • Datos de contacto: Amazon Connect siempre los transfiere para cada contacto. Algunos parámetros son opcionales.

    Esta sección puede incluir atributos que se hayan asociado previamente a un contacto, por ejemplo, cuando se utiliza un bloque Establecer atributos de contacto en un flujo. Este mapa puede estar vacío si no hay ningún atributo guardado.

    En la siguiente imagen se muestra dónde aparecerían estos atributos en la página de propiedades de Establecer atributos de contacto.

    
                        La página de propiedades del bloque Establecer atributos de contacto.
  • Parámetros: son parámetros específicos de esta llamada que se han definido al crear la función de Lambda. En la siguiente imagen se muestra dónde aparecerían estos parámetros en la página de propiedades del bloque Invocar función de AWS Lambda.

    
                        Los parámetros de entrada de la función en el bloque Invocar función de AWS Lambda.

El bloque Invocar Lambda puede recibir parámetros de entrada en formato JSON y admite tanto los tipos de datos primitivos como JSON anidado. A continuación, se muestra un ejemplo de una entrada JSON que puede utilizarse en el bloque Invocar Lambda.

{ "Name": "Jane", "Age":10, "isEnrolledInSchool": true, "hobbies": { "books":["book1", "book2"], "art":["art1", "art2"] } }

Política de reintentos de invocación

Si su invocación de Lambda en un flujo está limitada, se reintentará la solicitud. También se reintentará si se produce un error de servicio general (500).

Cuando una invocación sincrónica devuelve un error, Amazon Connect lo reintenta hasta tres veces, durante un máximo de ocho segundos. En ese momento, el flujo avanzará por la ramificación de error.

Para obtener más información sobre los reintentos de Lambda, consulte Control de errores y reintentos automáticos en AWS Lambda.

Invocación de varias funciones de Lambda

Los clientes no oyen nada mientras se ejecuta una función de Lambda. Recomendamos agregar un bloque Reproducir mensaje entre las funciones para mantener a los clientes atentos y conscientes de la larga interacción.

Configuración de la función de Lambda para analizar el evento

Para transferir correctamente atributos y parámetros entre su función de Lambda y Amazon Connect, configure su función para analizar correctamente la solicitud JSON enviada desde el bloque Invocar función de AWS Lambda o Establecer atributos de contacto, y defina cualquier lógica de negocio que deba aplicarse. El análisis de JSON depende del tiempo de ejecución que utilice para su función.

Por ejemplo, en el siguiente código se muestra cómo acceder a exampleParameterKey1 desde el bloque Invocar función de AWS Lambda y a exampleAttributeKey1 desde el bloque Establecer atributos de contacto mediante Node.JS:

exports.handler = function(event, context, callback) { // Example: access value from parameter (Invoke AWS Lambda function) let parameter1 = event['Details']['Parameters']['exampleParameterKey1']; // Example: access value from attribute (Set contact attributes block) let attribute1 = event['Details']['ContactData']['Attributes']['exampleAttributeKey1']; // Example: access customer's phone number from default data let phone = event['Details']['ContactData']['CustomerEndpoint']['Address']; // Apply your business logic with the values // ... }

Verificar la respuesta de la función

sugerencia

No se puede hacer referencia a una matriz en un flujo. Las matrices solo se pueden usar en otra función de Lambda.

La respuesta de la función de Lambda podría ser STRING_MAP o JSON y debe establecerse al configurar el bloque Invocar función de AWS Lambda en el flujo. Si la validación de la respuesta se establece en STRING_MAP, la función de Lambda debe devolver un objeto plano de pares clave/valor del tipo cadena. De lo contrario, si la validación de la respuesta se establece en JSON, la función de Lambda puede devolver cualquier JSON válido, incluido un JSON anidado.


                El bloque de flujo de invocación de la función de AWS Lambda que destaca la utilización de un mapa de cadenas o json.

La respuesta de Lambda puede ser de hasta 32 kb. Si no puede alcanzar Lambda, la función genera una excepción, la respuesta no se entiende o la función de Lambda tarda más tiempo que el límite, el flujo salta a la etiqueta Error.

Pruebe la salida devuelta por su función de Lambda para confirmar que se consumirá correctamente cuando se devuelva a Amazon Connect. El siguiente ejemplo muestra una respuesta de muestra en Node.JS:

exports.handler = function(event, context, callback) { // Extract data from the event object let phone = event['Details']['ContactData']['CustomerEndpoint']['Address']; // Get information from your APIs let customerAccountId = getAccountIdByPhone(phone); let customerBalance = getBalanceByAccountId(customerAccountId); let resultMap = { AccountId: customerAccountId, Balance: '$' + customerBalance, } callback(null, resultMap); }

En este ejemplo se muestra una respuesta de ejemplo mediante Python:

def lambda_handler(event, context): // Extract data from the event object phone = event['Details']['ContactData']['CustomerEndpoint']['Address'] // Get information from your APIs customerAccountId = getAccountIdByPhone(phone) customerBalance = getBalanceByAccountId(customerAccountId) resultMap = { "AccountId": customerAccountId, "Balance": '$%s' % customerBalance } return resultMap

La salida que devuelve la función debe ser un objeto plano de pares de clave-valor con valores que incluyen solo caracteres alfanuméricos, guion y guion bajo. El tamaño de los datos devueltos debe ser inferior a 32 KB de datos UTF-8.

En el siguiente ejemplo se muestra la salida JSON de estas funciones de Lambda:

{ "AccountId": "a12345689", "Balance": "$1000" }

Si la validación de la respuesta se establece en JSON, la función de Lambda puede devolver incluso un JSON anidado, por ejemplo:

{ "Name": { "First": "John", "Last": "Doe" }, "AccountId": "a12345689", "OrderIds": ["x123", "y123"] }

Puede devolver cualquier resultado siempre que sean pares clave-valor simples.

Consumo de la respuesta de la función de Lambda

Existen dos formas de utilizar la respuesta de la función en su flujo. Puede o bien hacer referencia directamente a las variables devueltas por Lambda o almacenar los valores devueltos por la función como atributos de contacto y, a continuación, hacer referencia a los atributos almacenados. Si utiliza una referencia externa a una respuesta de una función de Lambda, la referencia siempre recibirá la respuesta de la función que se ha invocado más recientemente. Para utilizar la respuesta de una función antes de invocar a la función subsiguiente, debe guardarse la respuesta como atributo de contacto o pasarse como un parámetros a la siguiente función.

1. Acceder directamente a las variables

Si accede directamente a las variables, puede utilizarlas en los bloques de flujo, pero no se incluyen en los registros de contacto. Para acceder a estas variables directamente en un bloque de flujo, agregue el bloque después del bloque Invocar función de AWS Lambda y, a continuación, haga referencia a los atributos como se muestra en el siguiente ejemplo:

Name - $.External.Name Address - $.External.Address CallerType - $.External.CallerType

La siguiente imagen muestra la página de propiedades del bloque Reproducir mensaje. Las variables se especifican en el bloque de conversión de texto a voz.


                    La página de propiedades del bloque Reproducir mensaje.

Asegúrese de que el nombre especificado para el atributo de origen coincide con el nombre de clave devuelto por Lambda.

2. Almacenar variables como atributos de contacto

Si almacena las variables como atributos de contacto, puede utilizarlas a lo largo del flujo y se incluyen en los registros de contacto.

Para almacenar los valores devueltos como atributos de contacto y, a continuación, hacer referencia a ellos, utilice un bloque Establecer atributos de contacto en su flujo después del bloque Invocar función de AWS Lambda. Elija Usar atributo, Externo para Tipo. Siguiendo el ejemplo que estamos utilizando, establezca Atributo de destino a MyAccountId y establezca el atributo a AccountId. Haga lo mismo para MyBalance y Saldo. En la siguiente imagen se muestra esta configuración.


                    La página de propiedades del bloque Establecer atributos de contacto.

Añada dirección como Atributo de origen y utilice returnedContactAddress como la Clave de destino. A continuación, agregue CallerType como Atributo de origen y utilice returnedContactType para la Clave de destino, como se muestra en la siguiente imagen.


                    La página de propiedades del bloque Reproducir mensaje.

Asegúrese de que el nombre especificado para el atributo de origen externo coincide con el nombre de clave devuelto por Lambda.

Tutorial: crear una función de Lambda e invocarla en un flujo

Paso 1: crear el ejemplo de Lambda

  1. Inicie sesión en AWS Management Console y abra la consola de AWS Lambda en https://console.aws.amazon.com/lambda/.

  2. En AWS Lambda, elija Crear función.

  3. Elija Crear desde cero, si aún no está seleccionado. En Información básica, para Nombre de función, introduzca MyFirstConnectLambda. Para el resto de las opciones, acepte los valores predeterminados. Estas opciones se muestran en la siguiente imagen de la consola de AWS Lambda.

    
                            La consola de AWS Lambda.
  4. Elija Crear función.

  5. En el cuadro Código fuente, en la pestaña index.js, elimine el código de la plantilla del editor de código.

  6. Copie y pegue el siguiente código en el editor de código como se muestra en la siguiente imagen:

    
                            La sección Código fuente, el botón de implementación.
    exports.handler = async (event, context, callback) => { // Extract information const customerNumber = event.Details.ContactData.CustomerEndpoint.Address; const companyName = event.Details.Parameters.companyName; // Fetch data const balance = await fetchBalance(customerNumber, companyName); const support = await fetchSupportUrl(companyName); // Prepare result const resultMap = { customerBalance: balance, websiteUrl: support } callback(null, resultMap); } async function fetchBalance(customerPhoneNumber, companyName) { // Get data from your API Gateway or Database like DynamoDB return Math.floor(Math.random() * 1000); } async function fetchSupportUrl(companyName) { // Get data from your API Gateway or Database like DynamoDB return 'www.GGG.com/support'; }

    Este código va a generar un resultado aleatorio para customerBalance.

  7. Elija Implementar.

  8. Después de elegir Implementar, elija Probar para iniciar el editor de pruebas.

  9. En el cuadro de diálogo Configurar evento de prueba, seleccione Crear nuevo evento. Para Nombre de evento, introduzca ConnectMock como nombre de la prueba.

  10. En el cuadro Evento JSON, elimine el código de ejemplo e introduzca el siguiente código en su lugar.

    { "Details": { "ContactData": { "Attributes": {}, "Channel": "VOICE", "ContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX", "CustomerEndpoint": { "Address": "+1234567890", "Type": "TELEPHONE_NUMBER" }, "InitialContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX", "InitiationMethod": "INBOUND | OUTBOUND | TRANSFER | CALLBACK", "InstanceARN": "arn:aws:connect:aws-region:1234567890:instance/c8c0e68d-2200-4265-82c0-XXXXXXXXXX", "PreviousContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX", "Queue": { "ARN": "arn:aws:connect:eu-west-2:111111111111:instance/cccccccc-bbbb-dddd-eeee-ffffffffffff/queue/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "Name": "PasswordReset" }, "SystemEndpoint": { "Address": "+1234567890", "Type": "TELEPHONE_NUMBER" } }, "Parameters": { "companyName": "GGG" } }, "Name": "ContactFlowEvent" }
  11. Elija Guardar.

  12. Seleccione Test (Probar). Debería ver algo similar a la siguiente imagen:

    
                            La sección Código fuente, el botón de prueba.

    Su equilibrio será diferente. El código genera un número aleatorio.

Paso 2: agregar su Lambda a Amazon Connect

  1. Vaya a la consola de Amazon Connect, en https://console.aws.amazon.com/connect/.

  2. Elija su alias de instancia de Amazon Connect.

    
                            Página de instancias del centro de contacto virtual de Amazon Connect, alias de instancia.
  3. En el menú de navegación, elija Flujos.

  4. En la sección AWS Lambda, utilice el cuadro desplegable Funciones de Lambda para seleccionar MyFirstConnectLambda.

    
                            La página de flujos, la sección AWS Lambda.
  5. Elija Agregar función Lambda.

Paso 3: crear el flujo de contacto

La siguiente imagen es un ejemplo del flujo que va a crear mediante los pasos de este procedimiento. Contiene los siguientes bloques: Establecer atributos de contacto, Reproducir mensaje, Invocar función de AWS Lambda, otro bloque Establecer atributos de contacto, otro bloque Reproducir mensaje y, por último, un bloque Desconectar.


                    Un flujo que llama al bloque Invocar función de AWS Lambda.
  1. Inicie sesión en el sitio web de administración de Amazon Connect en https://nombre de instancia.my.connect.aws/.

  2. En el menú de navegación, vaya a Enrutamiento, Flujos, Crear un flujo de contacto.

  3. Arrastre un bloque Establecer atributos de contacto a la cuadrícula y configure la página de propiedades que se muestra en la siguiente imagen:

    
                            Un bloque Establecer atributos de contacto.
    1. Espacio de nombres = Definido por el usuario.

    2. Atributo = companyName.

    3. Elija Establecer manualmente. Valor = GGG.

    4. Elija Guardar.

  4. Arrastre un bloque Reproducir pregunta a la cuadrícula y configure su página de propiedades como se muestra en la siguiente imagen:

    
                            Un bloque de reproducción de mensaje.
    1. Elija Texto a voz o texto de chat, Establecer manualmente y establezca Interpretar como a SSML. Introduzca el siguiente texto en el cuadro para el texto que se pronunciará:

      Hello, thank you for calling $.Attributes.companyName inc.

    2. Elija Guardar.

  5. Arrastre otro bloque Reproducir pregunta a la cuadrícula y configure su página de propiedades como se muestra en la siguiente imagen:

    
                            Un bloque de reproducción de mensaje.
    1. Elija Texto a voz o texto de chat, Establecer manualmente y establezca Interpretar como a Texto. Introduzca el siguiente texto en el cuadro para el texto que se pronunciará:

      Please try again later.

    2. Elija Guardar.

  6. Arrastre un bloque Invocar a la función AWS Lambda a la cuadrícula y configure su página de propiedades como se muestra en la siguiente imagen:

    
                            Un bloque Invocar función de AWS Lambda.
    1. Elija Seleccionar manualmente y, a continuación, elija MyFirstConnectLambda en la lista desplegable.

    2. En la casilla Clave de destino, introduzca companyName. (Esto se envía a Lambda).

    3. Elija la casilla Establecer dinámicamente.

    4. En Espacio de nombres, seleccione Definido por el usuario.

    5. En Atributo, introduzca companyName.

    6. Elija Guardar.

  7. Arrastre un bloque Establecer atributos de contacto a la cuadrícula, elija Agregar otro atributo y configure su página de propiedades como se muestra en la siguiente imagen:

    
                            Un bloque Establecer atributos de contacto.
    1. Espacio de nombres = Definido por el usuario. Atributo = MyBalance.

    2. Elija Establecer dinámicamente.

    3. Espacio de nombres = Externo.

    4. Atributo = customerBalance. Este es el resultado de Lambda.

    5. Elija Add another attribute (Añadir otro atributo).

    6. Espacio de nombres = Definido por el usuario.

    7. Atributo = MyURL.

    8. Seleccione Establecer dinámicamente. Espacio de nombres = Externo.

    9. Atributo = websiteUrl. Este es el resultado de Lambda.

    10. Elija Guardar.

  8. Arrastre un bloque Reproducir pregunta a la cuadrícula y configure su página de propiedades como se muestra en la siguiente imagen:

    
                            Un bloque de reproducción de mensaje.
    1. Elija Texto a voz o texto de chat y establezca Interpretar como a SSML. Introduzca el siguiente texto en el cuadro:

      Your remaining balance is <say-as interpret-as="characters">$.Attributes.MyBalance</say-as>.

      Thank you for calling $.Attributes.companyName.

      Visit $.Attributes.MyURL for more information.

    2. Elija Guardar.

  9. Arrastre un bloque Desconectar/colgar a la cuadrícula.

  10. Conecte todos los bloques para que su flujo se parezca a la imagen mostrada al principio de este procedimiento.

  11. Introduzca MyFirstConnectFlow como nombre y, a continuación, elija Publicar.

  12. En el menú de navegación, vaya a Canales, Números de teléfono.

  13. Seleccione su número de teléfono.

  14. Seleccione MyFirstConnectFlow y elija Guardar.

Ahora pruébelo. Llame al número. Debería escuchar un mensaje de bienvenida, su saldo y la página web que debe visitar.