Exercice 3 : Ajouter une fonction Lambda () AWS CLI - Amazon Lex V1

Si vous utilisez Amazon Lex V2, consultez plutôt le guide Amazon Lex V2.

 

Si vous utilisez Amazon Lex V1, nous vous recommandons de mettre à niveau vos robots vers Amazon Lex V2. Nous n'ajoutons plus de nouvelles fonctionnalités à la V1 et recommandons vivement d'utiliser la V2 pour tous les nouveaux robots.

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

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 AddPermissionfonction Lambda pour activer l'OrderFlowersintention d'appeler l'opération Lambda Invoke.

  2. Utilisez l'GetIntentopération pour obtenir l'intention d'Amazon Lex.

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

  4. Utilisez cette PutIntent opération pour renvoyer l'intention mise à jour à Amazon Lex.

  5. Utilisez les opération GetBot et PutBot 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 .

Si vous ajoutez une fonction Lambda à une intention avant d'ajouter l'InvokeFunctionautorisation, 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 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) 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)

Note

L'exemple d'AWS CLI est mis en forme pour Unix, Linux et macOS. Pour Windows, remplacez "\$LATEST" par $LATEST.

Pour ajouter une fonction Lambda à une intention
  1. Dans l'AWS CLI, ajoutez l'autorisation InvokeFunction pour l'intention OrderFlowers :

    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:*\"}}}"
    }
  2. 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
  3. Ouvrez le fichier OrderFlowers-V3.json dans un éditeur de texte.

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

    2. Mettez à jour le champ fulfillmentActivity :

      "fulfillmentActivity": { "type": "CodeHook", "codeHook": { "uri": "arn:aws:lambda:region:account ID:function:OrderFlowersCodeHook", "messageVersion": "1.0" } }
    3. Enregistrez le fichier.

  4. Dans leAWS 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 l'AWS CLI, accédez à la définition du bot OrderFlowersBot et enregistrez-la dans un fichier :

    aws lex-models get-bot \ --region region \ --name OrderFlowersBot \ --version-or-alias "\$LATEST" > OrderFlowersBot-V3.json
  2. Ouvrez OrderFlowersBot-V3.json dans un éditeur de texte. Supprimez les champs createdDate, lastUpdatedDate, status et version.

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

    "processBehavior": "BUILD",
  4. Dans l'AWS CLI, créez une autre 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 :

    {
        "status": "READY", 
        "intents": [
            {
                "intentVersion": "$LATEST", 
                "intentName": "OrderFlowers"
            }
        ], 
        "name": "OrderFlowersBot", 
        "locale": "en-US", 
        "checksum": "checksum", 
        "abortStatement": {
            "messages": [
                {
                    "content": "Sorry, I'm not able to assist at this time", 
                    "contentType": "PlainText"
                }
            ]
        }, 
        "version": "$LATEST", 
        "lastUpdatedDate": timestamp, 
        "createdDate": timestamp, 
        "clarificationPrompt": {
            "maxAttempts": 2, 
            "messages": [
                {
                    "content": "I didn't understand you, what would you like to do?", 
                    "contentType": "PlainText"
                }
            ]
        }, 
        "voiceId": "Salli", 
        "childDirected": false, 
        "idleSessionTTLInSeconds": 600, 
        "description": "Bot to order flowers on the behalf of a user"
    }
    

Étape suivante

Exercice 4 : Publication d'une version (AWS CLI)