

Avis de fin de support : le 15 septembre 2025, le support pour Amazon Lex V1 AWS sera interrompu. Après le 15 septembre 2025, vous ne pourrez plus accéder à la console Amazon Lex V1 ni aux ressources Amazon Lex V1. Si vous utilisez Amazon Lex V2, consultez plutôt le [guide Amazon Lex V2](https://docs.aws.amazon.com/lexv2/latest/dg/what-is.html). 

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.

# Exercice 3 : Ajouter une fonction Lambda ()AWS CLI
<a name="gs-cli-update-lambda"></a>

Ajoutez une fonction Lambda qui valide les entrées de l'utilisateur et répond à l'intention de l'utilisateur à l'égard du bot.

L'ajout d'une expression Lambda est un processus en cinq étapes.

1. [Utilisez la [AddPermission](https://docs.aws.amazon.com/lambda/latest/dg/API_AddPermission.html)fonction Lambda pour activer l'`OrderFlowers`intention d'appeler l'opération Lambda Invoke.](https://docs.aws.amazon.com/lambda/latest/dg/lambda-api-permissions-ref.html)

1. Utilisez l'[GetIntent](API_GetIntent.md)opération pour obtenir l'intention d'Amazon Lex.

1. Mettez à jour l'intention d'ajouter la fonction Lambda.

1. Utilisez cette [PutIntent](API_PutIntent.md) opération pour renvoyer l'intention mise à jour à Amazon Lex.

1. Utilisez les opération [GetBot](API_GetBot.md) et [PutBot](API_PutBot.md) pour reconstruire les bots qui utilisent cette intention.

Pour exécuter les commandes de cet exercice, vous devez connaître la région dans laquelle les commandes seront exécutées. Pour obtenir la liste des régions, consultez [Quotas liés à la création de modèle](gl-limits.md#gl-limits-model-building).

Si vous ajoutez une fonction Lambda à une intention avant d'ajouter l'`InvokeFunction`autorisation, le message d'erreur suivant s'affiche :

```
            An error occurred (BadRequestException) when calling the 
            PutIntent operation: Lex is unable to access the Lambda 
            function {{Lambda function ARN}} in the context of intent 
            {{intent ARN}}.  Please check the resource-based policy on 
            the function.
```

La réponse générée par l'opération `GetIntent` contient le champ `checksum`, qui identifie une révision spécifique de l'intention. Lorsque vous utilisez l'opération [PutIntent](API_PutIntent.md) pour mettre à jour une intention, vous devez fournir la valeur du total de contrôle. Dans le cas contraire, vous obtiendrez le message d'erreur suivant :

```
            An error occurred (PreconditionFailedException) when calling 
            the PutIntent operation: Intent {{intent name}} already exists. 
            If you are trying to update {{intent name}} you must specify the 
            checksum.
```

Cet exercice utilise la fonction Lambda de. [Exercice 1 : créer un robot Amazon Lex à l'aide d'un plan (console)](gs-bp.md) Pour obtenir des instructions sur la création de la fonction Lambda, reportez-vous à la section. [Étape 3 : Création d'une fonction Lambda (console)](gs-bp-create-lambda-function.md)

**Note**  
L' AWS CLI exemple suivant est formaté pour Unix, Linux et macOS. Pour Windows, remplacez `"\$LATEST"` par `$LATEST`.

**Pour ajouter une fonction Lambda à une intention**

1. Dans le AWS CLI, ajoutez l'`InvokeFunction`autorisation correspondant à l'`OrderFlowers`intention :

   ```
   aws lambda add-permission \
       --region {{region}} \
       --function-name OrderFlowersCodeHook \
       --statement-id LexGettingStarted-OrderFlowersBot \
       --action lambda:InvokeFunction \
       --principal lex.amazonaws.com \
       --source-arn "arn:aws:lex:{{region}}:{{account ID}}:intent:OrderFlowers:*"
       --source-account {{account ID}}
   ```

   Lambda envoie la réponse suivante :

   ```
   {
       "Statement": "{\"Sid\":\"LexGettingStarted-OrderFlowersBot\",
         \"Resource\":\"arn:aws:lambda:{{region}}:{{account ID}}:function:OrderFlowersCodeHook\",
         \"Effect\":\"Allow\",
         \"Principal\":{\"Service\":\"lex.amazonaws.com\"},
         \"Action\":[\"lambda:InvokeFunction\"],
         \"Condition\":{\"StringEquals\":
           {\"AWS:SourceAccount\": \"{{account ID}}\"},
           {\"AWS:SourceArn\":
             \"arn:aws:lex:{{region}}:{{account ID}}:intent:OrderFlowers:*\"}}}"
   }
   ```

1. Obtenez l'intention auprès d'Amazon Lex. Amazon Lex envoie la sortie vers un fichier appelé**OrderFlowers-V3.json**.

   ```
   aws lex-models get-intent \
       --region {{region}} \
       --name OrderFlowers \
       --intent-version "\$LATEST" > OrderFlowers-V3.json
   ```

1. Ouvrez le fichier **OrderFlowers-V3.json** dans un éditeur de texte.

   1. Recherchez les champs `createdDate`, `lastUpdatedDate` et `version` et supprimez-les.

   1. Mettez à jour le champ `fulfillmentActivity` :

      ```
          "fulfillmentActivity": {
              "type": "CodeHook",
              "codeHook": {
                  "uri": "arn:aws:lambda:{{region}}:{{account ID}}:function:OrderFlowersCodeHook",
                  "messageVersion": "1.0"
              }
          }
      ```

   1. Enregistrez le fichier.

1. Dans le AWS CLI, envoyez l'intention mise à jour à Amazon Lex :

   ```
   aws lex-models put-intent \
       --region {{region}} \
       --name OrderFlowers \
       --cli-input-json file://OrderFlowers-V3.json
   ```

Maintenant que vous avez mis à jour l'intention, reconstruisez le bot. 

**Pour reconstruire le bot `OrderFlowersBot`**

1. Dans le AWS CLI, obtenez la définition du `OrderFlowersBot` bot et enregistrez-la dans un fichier :

   ```
   aws lex-models get-bot \
       --region {{region}} \
       --name OrderFlowersBot \
       --version-or-alias "\$LATEST" > OrderFlowersBot-V3.json
   ```

1. Ouvrez **OrderFlowersBot-V3.json** dans un éditeur de texte. Supprimez les champs `createdDate`, `lastUpdatedDate`, `status` et `version`.

1. Dans l'éditeur de texte, ajoutez la ligne suivante à la définition du bot :

   ```
   "processBehavior": "BUILD",
   ```

1. Dans le AWS CLI, créez une nouvelle version du bot :

   ```
   aws lex-models put-bot \
       --region {{region}} \
       --name OrderFlowersBot \
       --cli-input-json file://OrderFlowersBot-V3.json
   ```

   La réponse du serveur est :

## Étape suivante
<a name="gs-cli-next-exercise-4"></a>

[Exercice 4 : Publication d'une version (AWS CLI)](gs-cli-publish.md)