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 AWS Lambda las funciones de un flujo, busque los resultados y llame a sus propios servicios o interactúe con otros almacenes de AWS datos o servicios. 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.
Tareas
- Crear una función de Lambda
- Agregar una función de Lambda a la instancia de Amazon Connect
- Invocación de una función de Lambda desde un flujo
- Práctica recomendada para invocar varias funciones Lambda
- Configuración de la función de Lambda para analizar el evento
- Verificar la respuesta de la función
- Consumo de la respuesta de la función de Lambda
- Tutorial: crear una función de Lambda e invocarla en un flujo
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 Lambda se encuentra en una región diferente, puede añadirla al flujo mediante el diseñador de flujos y añadir los permisos de recursos mediante el comando add-permission, con un principal de connect.amazonaws.com
y el de la instancia ARN 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
-
Abra la consola Amazon Connect en https://console.aws.amazon.com/connect/
. -
En la página de instancias, el nombre de la instancia que hay en la columna Alias de instancia. El nombre de esta instancia aparece en el URL que utilizas para acceder a Amazon Connect.
-
En el panel de navegación, elija Flujos.
-
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 aparece ninguna función en la lista, seleccione Crear una nueva función Lambda, que abrirá la AWS Lambda consola.
Para usar una Lambda en una región o cuenta diferente, en Seleccione una función Invocar a la función AWS Lambda , puede introducir la 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
-
Defina la fuente como ARN la ARN de su instancia.
Para obtener más información, consulte Concesión de acceso a la función a otras cuentas.
-
-
Elija Agregar función Lambda. Confirme que ARN la función se ha agregado en Funciones 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
-
Abra o cree un flujo.
-
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.
-
Elija el título del bloque Invocar a la función AWS Lambda para abrir la página de propiedades.
-
En Select a function (Seleccionar una función), elija de la lista de funciones que ha agregado a su instancia.
-
(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.
-
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.
El siguiente es un ejemplo de JSON solicitud a una función 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.
-
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 .
El bloque Invoke Lambda puede recibir parámetros de entrada JSON en formato, que se adapta tanto a tipos de datos primitivos como anidados. JSON El siguiente es un ejemplo de una JSON entrada que se puede utilizar en el bloque Invoke 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 cómo Lambda lo reintenta, consulte Gestión de errores y reintentos automáticos en Lambda. AWS
Práctica recomendada para invocar varias funciones Lambda
Amazon Connect limita la duración de una secuencia de funciones de Lambda a 20 segundos. Agota el tiempo de espera y muestra un mensaje de error cuando el tiempo total de ejecución excede ese umbral. Como los clientes no oyen nada mientras se ejecuta una función de Lambda, es recomendable que agregue un bloque Reproducir mensaje entre las funciones para mantener al cliente conectado durante una interacción larga.
Al dividir una cadena de funciones de Lambda con el bloque Reproducir mensaje, podrá invocar varias funciones que duren más del umbral de 20 segundos.
Configuración de la función de Lambda para analizar el evento
Para transferir correctamente los atributos y parámetros entre la función Lambda y Amazon Connect, configure la función para que analice correctamente la JSON solicitud enviada desde el bloque de AWS Lambda funciones Invoke o establezca los atributos de contacto y defina la lógica empresarial que deba aplicarse. La forma en JSON que se analice depende del tiempo de ejecución que utilice para la función.
Por ejemplo, el código siguiente muestra cómo acceder exampleParameterKey1
desde el bloque de AWS Lambda funciones Invoke y exampleAttributeKey1
desde el bloque Set contact attributes 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 Lambda puede ser STRING _ MAP o JSON debe configurarse al configurar el bloque de funciones Invoke AWS Lambda en el flujo. Si la validación de la respuesta se establece en STRING _MAP, la función Lambda debería devolver un objeto plano de pares clave/valor del tipo cadena. De lo contrario, si la validación de respuestas está establecida enJSON, la función Lambda puede devolver cualquier respuesta válida, JSON incluida la anidada. 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 UTF -8 datos.
El siguiente ejemplo muestra el JSON resultado de estas funciones Lambda:
{ "AccountId": "a12345689", "Balance": "$1000" }
Si la validación de la respuesta se establece enJSON, la función Lambda puede devolver incluso una respuesta anidadaJSON, 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, añada el bloque después del bloque de AWS Lambda funciones Invoke 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 text-to-speech bloque.
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 Set contact attributes en su flujo después del bloque de AWS Lambda funciones Invoke. 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.
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.
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
Inicie sesión en AWS Management Console y abra la AWS Lambda consola en https://console.aws.amazon.com/lambda/
. -
En AWS Lambda, selecciona Crear función.
-
Elija Crear desde cero, si aún no está seleccionado. En Información básica, en Nombre de la función, escriba 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.
-
Seleccione Crear función.
-
En el cuadro Código fuente, en la pestaña index.js, elimine el código de la plantilla del editor de código.
-
Copie y pegue el siguiente código en el editor de código como se muestra en la siguiente imagen:
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 generará un resultado aleatorio para. customerBalance
-
Elija Implementar.
-
Después de elegir Implementar, elija Probar para iniciar el editor de pruebas.
-
En el cuadro de diálogo Configurar evento de prueba, seleccione Crear nuevo evento. En Nombre del evento, introduzca ConnectMockcomo nombre de la prueba.
-
En el JSON cuadro Evento, elimine el código de muestra 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" }
-
Seleccione Guardar.
-
Seleccione Test (Probar). Debería ver algo similar a la siguiente imagen:
Su equilibrio será diferente. El código genera un número aleatorio.
Paso 2: agregar su Lambda a Amazon Connect
-
Diríjase a la consola Amazon Connect, en https://console.aws.amazon.com/connect/
. -
Elija su alias de instancia de Amazon Connect.
-
En el menú de navegación, elija Flujos.
-
En la AWS Lambda sección, utilice el cuadro desplegable Funciones Lambda para seleccionar. MyFirstConnectLambda
-
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.
-
Inicie sesión en el sitio web Amazon Connect de administración en https://
instance name
.my.connect.aws/. -
En el menú de navegación, vaya a Enrutamiento, Flujos, Crear un flujo de contacto.
-
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:
-
Espacio de nombres = Definido por el usuario.
-
Atributo =. companyName
-
Elija Establecer manualmente. Valor = GGG.
-
Seleccione Guardar.
-
-
Arrastre un bloque Reproducir pregunta a la cuadrícula y configure su página de propiedades como se muestra en la siguiente imagen:
-
Elija T ext-to-speech o texto del chat, configure manualmente y configure Interpretar como SSML. Introduzca el siguiente texto en el cuadro para el texto que se pronunciará:
Hello, thank you for calling $.Attributes.companyName inc.
-
Seleccione Guardar.
-
-
Arrastre otro bloque Reproducir pregunta a la cuadrícula y configure su página de propiedades como se muestra en la siguiente imagen:
-
Elija T ext-to-speech o texto de chat, configure manualmente y configure Interpretar como texto. Introduzca el siguiente texto en el cuadro para el texto que se pronunciará:
Please try again later.
-
Seleccione Guardar.
-
-
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:
-
Elija Seleccionar manualmente y, a continuación, elija una opción en el MyFirstConnectLambdamenú desplegable.
-
En el cuadro Clave de destino, ingresa companyName. (Esto se envía a Lambda).
-
Elija la casilla Establecer dinámicamente.
-
En Espacio de nombres, seleccione Definido por el usuario.
-
En Atributo, introduzca companyName.
-
Seleccione Guardar.
-
-
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:
-
Espacio de nombres = Definido por el usuario. Atributo = MyBalance.
-
Elija Establecer dinámicamente.
-
Espacio de nombres = Externo.
-
Atributo = customerBalance. Este es el resultado de Lambda.
-
Elija Add another attribute (Añadir otro atributo).
-
Espacio de nombres = Definido por el usuario.
-
Atributo = Mi URL.
-
Seleccione Establecer dinámicamente. Espacio de nombres = Externo.
-
Atributo = websiteUrl. Este es el resultado de Lambda.
-
Seleccione Guardar.
-
-
Arrastre un bloque Reproducir pregunta a la cuadrícula y configure su página de propiedades como se muestra en la siguiente imagen:
-
Elija T ext-to-speech o texto del chat y defina Interpret como 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.
-
Seleccione Guardar.
-
-
Arrastre un bloque Desconectar/colgar a la cuadrícula.
-
Conecte todos los bloques para que su flujo se parezca a la imagen mostrada al principio de este procedimiento.
-
Introduce MyFirstConnectFlowel nombre y, a continuación, selecciona Publicar.
-
En el menú de navegación, vaya a Canales, Números de teléfono.
-
Seleccione su número de teléfono.
-
Seleccione MyFirstConnectFlowy 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.