

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 des campagnes, les campagnes sortantes invoqueront votre fonction Lambda avec un lot de profils et attendent une réponse contenant les résultats pour chacun d'entre eux.

### Charge utile de la demande
<a name="lambda-request-payload"></a>

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

#### Structure de 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 pour la campagne
+ **RunId**: identifiant unique pour cette campagne spécifique lancée
+ **ActionId**: identifiant de l'action de flux exécutée par les campagnes sortantes
+ **CampaignName**: nom lisible par l'homme de la campagne

##### Éléments
<a name="lambda-items"></a>
+ **CustomerProfiles**: éventail de profils clients à traiter (regroupés par lots 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 plutôt que de procéder de manière asynchrone. Les réponses qui prennent plus de 30 secondes entraîneront l'échec de l'action

## Étape 2 : accordez aux campagnes sortantes l'accès à 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**.

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

1. Ouvrez ou créez un flux de **parcours**.

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 **Function ARN**, choisissez dans la liste des fonctions que vous avez ajoutées à votre instance de campagnes sortantes.

## Étape 4 : Utiliser 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 **d'action personnalisé**, 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é indiqué dans le code `ResultData` renvoyé par le Lambda.