

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 tu función Lambda con un lote de perfiles y esperan una respuesta con los resultados de cada uno de ellos.

### Carga útil de la solicitud
<a name="lambda-request-payload"></a>

Cuando se invoque la función de 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 están ejecutando las campañas salientes
+ **CampaignName**: Human-readable nombre de la campaña

##### Items
<a name="lambda-items"></a>
+ **CustomerProfiles**: Conjunto de perfiles de clientes para procesar (agrupados en lotes para mayor 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 a fin de 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 de 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 correspondientes 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
<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` 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 de Lambda produce 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ónico)
+ La función debería devolver los resultados en un plazo de 30 segundos en lugar de procesarlos de forma asincrónica. Las respuestas que tarden más de 30 segundos provocarán un error en la acción

## Paso 2: Conceda a las campañas salientes acceso a su función de Lambda
<a name="lambda-grant-access"></a>

1. Abra la consola de 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 quieres 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**.

**importante**  
El procedimiento de consola anterior agrega automáticamente la política basada en los recursos requerida a la función Lambda. Si usa la AWS CLI o el SDK, puede llamar a la [ PutConnectInstanceIntegration ](https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-outbound-campaigns-v2_PutConnectInstanceIntegration.html) API con la configuración de integración. `lambda` Esta API agrega automáticamente la política basada en los recursos requerida a la función de Lambda, tal como lo hace la consola.  
Si necesita agregar la política basada en los recursos de forma manual (por ejemplo, para las invocaciones entre cuentas), agregue una declaración de política que otorgue al principal del `connect-campaigns.amazonaws.com` servicio permiso para invocar su función. Si lo desea, puede añadir un `Condition` elemento y restringir el acceso a su cuenta `AWS:SourceAccount` y `AWS:SourceArn` a la instancia de Connect Customer. Te recomendamos incluir ambas condiciones. El siguiente ejemplo muestra la declaración de política requerida.  

```
{
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "connect-campaigns.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:{{region}}:{{account-id}}:function:{{function-name}}",
      "Condition": {
        "StringEquals": {
          "AWS:SourceAccount": "{{account-id}}"
        },
        "ArnLike": {
          "AWS:SourceArn": "arn:aws:connect:{{region}}:{{account-id}}:instance/{{instance-id}}"
        }
      }
    }
  ]
}
```
Para obtener más información sobre las políticas basadas en recursos, consulte [ Uso de políticas basadas en recursos para Lambda ](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html) en la Guía para desarrolladores 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. Agregue un ** bloque de acción ** personalizado (en el ** grupo ** Integrar) a la cuadrícula. Conecte las ramas hacia y desde el bloque.

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

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

## Paso 4: Consume 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 Acción ** personalizada 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 la clave que aparece `ResultData` en el archivo Lambda.