

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Invocation de fonctions Lambda
<a name="lambda-invoke-functions"></a>

## Étape 1 : créer une fonction Lambda
<a name="lambda-create-function"></a>

Pendant l'exécution de la campagne, les campagnes sortantes invoquent votre fonction Lambda avec un lot de profils et attendent une réponse contenant des résultats pour chacun d'entre eux.

### Demande de charge utile
<a name="lambda-request-payload"></a>

Lorsque votre fonction Lambda est invoquée, elle reçoit une charge utile JSON dont la structure est la suivante :

#### Structure de la charge utile
<a name="lambda-payload-structure"></a>

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

#### Descriptions des champs
<a name="lambda-field-descriptions"></a>

##### InvocationMetadata
<a name="lambda-invocation-metadata"></a>
+ **CampaignContext**: contient des métadonnées relatives à l'exécution de la campagne
+ **CampaignId**: identifiant unique de la campagne
+ **RunId**: identifiant unique pour cette campagne spécifique
+ **ActionId**: identifiant de l'action de flux exécutée par les campagnes sortantes
+ **CampaignName**: Human-readable nom de la campagne

##### Éléments
<a name="lambda-items"></a>
+ **CustomerProfiles**: Ensemble de profils de clients à traiter (groupés pour plus d'efficacité)
+ **ProfileId**: Identifiant unique pour le profil du client
+ **CustomerData**: chaîne JSON du profil client
+ **IdempotencyToken**: jeton unique pour cette invocation spécifique afin de garantir un traitement idempotent

#### Exemple de charge utile de demande
<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"
      }
    ]
  }
}
```

### Charge utile de réponse attendue
<a name="lambda-response-payload"></a>

Votre fonction Lambda doit renvoyer une réponse JSON avec la structure suivante :

#### Structure de réponse
<a name="lambda-response-structure"></a>

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

#### Descriptions des champs
<a name="lambda-response-field-descriptions"></a>

##### Éléments
<a name="lambda-response-items"></a>
+ **CustomerProfiles**: Tableau de résultats correspondant à chaque profil client de la demande
+ **ID ** : Doit correspondre `ProfileId` à celui de la demande
+ **ResultData**: objet JSON personnalisé contenant les résultats de votre traitement (facultatif)

#### Exemple de charge utile de réponse
<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"
        }
      }
    ]
  }
}
```

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

### Limites de taille de charge utile
<a name="lambda-payload-size-limits"></a>
+ **Taille maximale de la charge utile de réponse ** : 32 Ko par profil client
+ Si vous `ResultData` dépassez cette limite, l'invocation sera marquée comme non valide

### Exigences en matière de réponse
<a name="lambda-response-requirements"></a>
+ Vous devez fournir une réponse pour chaque élément `ProfileId` inclus dans la demande
+ Les réponses manquantes seront traitées comme des erreurs
+ Le `Id` champ de la réponse doit correspondre exactement `ProfileId` à celui de la demande

### Gestion des erreurs
<a name="lambda-error-handling"></a>
+ Si votre fonction Lambda génère une exception, tous les profils du lot seront marqués comme ayant échoué
+ Inclure les détails de l'erreur à `ResultData` des fins de débogage

### Type d'invocation
<a name="lambda-invocation-type"></a>
+ **Type d'invocation ** : `REQUEST_RESPONSE` (synchrone)
+ Votre fonction devrait renvoyer les résultats dans les 30 secondes au lieu de les traiter de manière asynchrone. Les réponses qui prennent plus de 30 secondes entraîneront l'échec de l'action

## Étape 2 : Autoriser les campagnes sortantes à accéder à votre fonction Lambda
<a name="lambda-grant-access"></a>

1. Ouvrez la console Amazon Connect à l'adresse [ https://console.aws.amazon.com/connect/](https://console.aws.amazon.com/connect/).

1. Sur la page des instances, choisissez le nom de votre instance dans la colonne **Alias d’instance**. Ce nom d'instance apparaît dans l'URL que vous utilisez pour accéder à Amazon Connect.

1. Dans le volet de navigation, sous ** Canaux et communications**, sélectionnez Campagnes ** ** sortantes.

1. Dans la ** section ** Configurer des actions personnalisées, utilisez la ** liste déroulante des fonctions ** Lambda pour sélectionner la fonction à ajouter à votre instance de campagnes sortantes.

1. Choisissez **Ajouter une fonction Lambda**. Vérifiez que l'ARN de la fonction est ajouté sous **Fonctions Lambda**.

**Important**  
La procédure de console précédente ajoute automatiquement la politique basée sur les ressources requise à la fonction Lambda. Si vous utilisez la AWS CLI ou le SDK, vous pouvez appeler l'[PutConnectInstanceIntegration](https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-outbound-campaigns-v2_PutConnectInstanceIntegration.html)API avec la configuration `lambda` d'intégration. Cette API ajoute automatiquement la politique basée sur les ressources requise à votre fonction Lambda, comme le fait la console.  
Si vous devez ajouter la politique basée sur les ressources manuellement (par exemple, pour les appels entre comptes), ajoutez une déclaration de politique qui autorise le principal du `connect-campaigns.amazonaws.com` service à invoquer votre fonction. Vous pouvez éventuellement ajouter un `Condition` élément permettant de `AWS:SourceAccount` restreindre `AWS:SourceArn` l'accès à votre compte et à votre instance Connect Customer. Nous vous recommandons d'inclure les deux conditions. L'exemple suivant montre la déclaration de politique requise.  

```
{
  "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}}"
        }
      }
    }
  ]
}
```
Pour plus d'informations sur les politiques basées sur les ressources, consultez la section [ Utilisation de politiques basées sur les ressources pour Lambda ](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html) dans le Lambda Developer Guide. * *

## Étape 3 : Invoquer un Lambda depuis une campagne
<a name="lambda-invoke-from-journey"></a>

1. Ouvrez ou créez un ** flux ** Journey.

1. Ajoutez un ** bloc d'action ** personnalisé (dans le ** groupe ** Intégrer) à la grille. Connectez les branches vers et depuis le bloc.

1. Choisissez le titre du ** bloc d'action ** personnalisé pour ouvrir sa page de propriétés.

1. Sous ** Fonction ARN**, choisissez parmi la liste des fonctions que vous avez ajoutées à votre instance de campagnes sortantes.

## Étape 4 : consommer la réponse de la fonction Lambda
<a name="lambda-consume-response"></a>

### Accès direct aux variables
<a name="lambda-access-variables"></a>

Pour accéder à ces variables directement dans un bloc de flux, ajoutez le bloc après le ** bloc Action ** personnalisée, puis référencez les attributs comme indiqué dans l'exemple suivant :

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

Assurez-vous que le nom spécifié pour l'attribut source correspond au nom de clé dans le fichier `ResultData` renvoyé par le Lambda.