

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.

# Invocación de funciones de Lambda
<a name="lambda-invoke-functions"></a>

## Paso 1: Crear una función de Lambda
<a name="lambda-create-function"></a>

Durante la ejecución de la campaña, las campañas salientes invocarán la función Lambda con un lote de perfiles y esperarán una respuesta que contenga los resultados de cada uno.

### Solicita la carga útil
<a name="lambda-request-payload"></a>

Cuando se invoque la función Lambda, recibirá una carga útil JSON con la siguiente estructura:

#### Estructura de carga útil
<a name="lambda-payload-structure"></a>

```
{
  "InvocationMetadata": {
    "CampaignContext": {
      "CampaignId": "string",
      "RunId": "string",
      "ActionId": "string",
      "CampaignName": "string"
    }
  },
  "Items": {
    "CustomerProfiles": [
      {
        "ProfileId": "string",
        "CustomerData": "string",
        "IdempotencyToken": "string"
      }
    ]
  }
}
```

#### Descripciones de campos
<a name="lambda-field-descriptions"></a>

##### InvocationMetadata
<a name="lambda-invocation-metadata"></a>
+ **CampaignContext**: Contiene metadatos sobre la ejecución de la campaña
+ **CampaignId**: identificador único de la campaña
+ **RunId**: identificador único para esta campaña específica
+ **ActionId**: El identificador de la acción de flujo que ejecutan las campañas salientes
+ **CampaignName**: nombre de la campaña legible para los humanos

##### Items
<a name="lambda-items"></a>
+ **CustomerProfiles**: Variedad de perfiles de clientes para procesar (agrupados por lotes para garantizar la eficiencia)
+ **ProfileId**: identificador único para el perfil del cliente
+ **CustomerData**: cadena JSON del perfil del cliente
+ **IdempotencyToken**: token único para esta invocación específica para garantizar un procesamiento idempotente

#### Ejemplo de carga útil de solicitud
<a name="lambda-example-request"></a>

```
{
  "InvocationMetadata": {
    "CampaignContext": {
      "CampaignId": "campaign-12345",
      "RunId": "run-67890",
      "ActionId": "activity-abc123",
      "CampaignName": "Welcome Campaign"
    }
  },
  "Items": {
    "CustomerProfiles": [
      {
        "ProfileId": "customer-001",
        "CustomerData": "{\"firstName\":\"John\",\"lastName\":\"Doe\",\"email\":\"john.doe@example.com\"}",
        "IdempotencyToken": "token-xyz789"
      },
      {
        "ProfileId": "customer-002",
        "CustomerData": "{\"firstName\":\"Jane\",\"lastName\":\"Smith\",\"email\":\"jane.smith@example.com\"}",
        "IdempotencyToken": "token-abc456"
      }
    ]
  }
}
```

### Carga útil de respuesta esperada
<a name="lambda-response-payload"></a>

La función Lambda debe devolver una respuesta JSON con la siguiente estructura:

#### Estructura de la respuesta
<a name="lambda-response-structure"></a>

```
{
  "Items": {
    "CustomerProfiles": [
      {
        "Id": "string",
        "ResultData": {}
      }
    ]
  }
}
```

#### Descripciones de campos
<a name="lambda-response-field-descriptions"></a>

##### Items
<a name="lambda-response-items"></a>
+ **CustomerProfiles**: Matriz de resultados correspondiente a cada perfil de cliente de la solicitud
+ **ID**: debe coincidir con el `ProfileId` de la solicitud
+ **ResultData**: Objeto JSON personalizado que contiene los resultados del procesamiento (opcional)

#### Ejemplo de carga útil de respuesta
<a name="lambda-example-response"></a>

```
{
  "Items": {
    "CustomerProfiles": [
      {
        "Id": "customer-001",
        "ResultData": {
          "recommendedProduct": "Premium Plan",
          "score": 85,
          "nextAction": "send_email"
        }
      },
      {
        "Id": "customer-002",
        "ResultData": {
          "error": "Invalid customer data",
          "errorCode": "VALIDATION_ERROR"
        }
      }
    ]
  }
}
```

## Restricciones importantes
<a name="lambda-constraints"></a>

### Límites de tamaño de carga útil
<a name="lambda-payload-size-limits"></a>
+ **Tamaño máximo de carga útil de respuesta**: 32 KB por perfil de cliente
+ Si `ResultData` superas este límite, la invocación se marcará como no válida

### Requisitos de respuesta
<a name="lambda-response-requirements"></a>
+ Debe proporcionar una respuesta para cada uno de los `ProfileId` elementos incluidos en la solicitud
+ Las respuestas faltantes se tratarán como errores
+ El `Id` campo de la respuesta debe coincidir exactamente con el `ProfileId` de la solicitud

### Gestión de errores
<a name="lambda-error-handling"></a>
+ Si la función Lambda arroja una excepción, todos los perfiles del lote se marcarán como fallidos
+ Incluya los detalles del error `ResultData` para fines de depuración

### Tipo de invocación
<a name="lambda-invocation-type"></a>
+ **Tipo de invocación: `REQUEST_RESPONSE` (sincrónica**)
+ La función debería devolver los resultados en 30 segundos en lugar de procesarlos de forma asíncrona. Las respuestas que tarden más de 30 segundos provocarán un error en la acción

## Paso 2: Otorgue a Outbound Campaigns acceso a su función Lambda
<a name="lambda-grant-access"></a>

1. Abra la consola Amazon Connect en [https://console.aws.amazon.com/connect/](https://console.aws.amazon.com/connect/).

1. 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.

1. En el panel de navegación, en **Canales y comunicaciones**, selecciona **Campañas salientes**.

1. En la sección **Configurar acciones personalizadas**, usa el cuadro desplegable **Funciones de Lambda** para seleccionar la función que deseas añadir a tu instancia de campañas salientes.

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

## Paso 3: Invocar una Lambda desde una campaña
<a name="lambda-invoke-from-journey"></a>

1. Abre o crea un flujo de **viaje.**

1. Añada un bloque de **acciones personalizado** (en el grupo **Integrar**) a la cuadrícula. Conecte las ramas hacia y desde el bloque.

1. Elija el título del bloque de **acciones personalizado** para abrir su página de propiedades.

1. En **Función ARN**, elige una función de la lista de funciones que has añadido a tu instancia de campañas salientes.

## Paso 4: Consumir la respuesta de la función Lambda
<a name="lambda-consume-response"></a>

### Acceder directamente a las variables
<a name="lambda-access-variables"></a>

Para acceder a estas variables directamente en un bloque de flujo, añada el bloque después del bloque de **acciones personalizadas** y, a continuación, haga referencia a los atributos como se muestra en el siguiente ejemplo:

```
RecommendedProduct - $.LambdaInvocation.ResultData.recommendedProduct
Score - $.LambdaInvocation.ResultData.score
```

Asegúrese de que el nombre especificado para el atributo de origen coincida con el nombre de clave `ResultData` devuelto por la Lambda.