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.
-
Utilisez la AddPermissionfonction Lambda pour activer l'
OrderFlowers
intention d'appeler l'opération Lambda Invoke. -
Utilisez l'GetIntentopération pour obtenir l'intention d'Amazon Lex.
-
Mettez à jour l'intention d'ajouter la fonction Lambda.
-
Utilisez cette PutIntent opération pour renvoyer l'intention mise à jour à Amazon Lex.
-
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'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 functionLambda function ARN
in the context of intentintent 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: Intentintent name
already exists. If you are trying to updateintent 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
-
Dans l'AWS CLI, ajoutez l'autorisation
InvokeFunction
pour l'intentionOrderFlowers
: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-accountaccount 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:*\"}}}" } -
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 -
Ouvrez le fichier
OrderFlowers-V3.json
dans un éditeur de texte.-
Recherchez les champs
createdDate
,lastUpdatedDate
etversion
et supprimez-les. -
Mettez à jour le champ
fulfillmentActivity
:"fulfillmentActivity": { "type": "CodeHook", "codeHook": { "uri": "arn:aws:lambda:
region
:account ID
:function:OrderFlowersCodeHook", "messageVersion": "1.0" } } -
Enregistrez le fichier.
-
-
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
-
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 -
Ouvrez
OrderFlowersBot-V3.json
dans un éditeur de texte. Supprimez les champscreatedDate
,lastUpdatedDate
,status
etversion
. -
Dans l'éditeur de texte, ajoutez la ligne suivante à la définition du bot :
"processBehavior": "BUILD",
-
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.jsonLa 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)