Übung 3: Fügen Sie eine Lambda-Funktion hinzu (AWS CLI) - Amazon Lex V1

Wenn Sie Amazon Lex V2 verwenden, lesen Sie stattdessen das Amazon Lex V2-Handbuch.

 

Wenn Sie Amazon Lex V1 verwenden, empfehlen wir, Ihre Bots auf Amazon Lex V2 zu aktualisieren. Wir fügen V1 keine neuen Funktionen mehr hinzu und empfehlen dringend, V2 für alle neuen Bots zu verwenden.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Übung 3: Fügen Sie eine Lambda-Funktion hinzu (AWS CLI)

Fügen Sie eine Lambda-Funktion hinzu, die Benutzereingaben validiert und die Benutzerabsicht für den Bot erfüllt.

Das Hinzufügen eines Lambda-Ausdrucks erfolgt in fünf Schritten.

  1. Benutze das LambdaAddPermissionFunktion zum Aktivieren desOrderFlowersAbsicht, das Lambda anzurufenAufrufenverwenden.

  2. Verwenden derGetIntent-Vorgang, um die Absicht von Amazon Lex abzurufen.

  3. Aktualisieren Sie die Absicht, indem Sie die Lambda-Funktion hinzufügen.

  4. Verwenden derPutIntentOperation, um die aktualisierte Absicht an Amazon Lex zurückzusenden.

  5. Verwenden Sie die Operationen GetBot und PutBot, um einen Bot wiederherzustellen, der die Absicht verwendet.

Um die Befehle in dieser Übung auszuführen, müssen Sie wissen, in welcher Region die Befehle ausgeführt werden. Eine Liste der Regionen finden Sie unter Kontingente des Modellbaus .

Wenn Sie eine Lambda-Funktion einer Absicht hinzufügen, bevor Sie dieInvokeFunction-Berechtigung erhalten Sie die folgende Fehlermeldung:

            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.
        

Die Antwort der Operation GetIntent enthält ein Feld namens checksum, das die spezifische Version der Absicht angibt. Wenn Sie die Operation PutIntent zum Aktualisieren einer Absicht verwenden, müssen Sie den Prüfsummenwert angeben. Wenn Sie dies nicht tun, wird die folgende Fehlermeldung angezeigt:

            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.
        

In dieser Übung wird die Lambda-Funktion ausÜbung 1: Erstellen Sie einen Amazon Lex Lex-Bot mithilfe eines Blueprints (Konsole)aus. Eine Anleitung zum Erstellen der Lambda-Funktion finden Sie unterSchritt 3: Erstellen einer Lambda-Funktion (Lambda-Funktion)aus.

Anmerkung

Das folgende AWS CLI-Beispiel ist für Unix, Linux und macOS formatiert. Ändern Sie unter Windows "\$LATEST" in $LATEST.

So fügen Sie einer Absicht eine Lambda-Funktion hinzu
  1. Fügen Sie in der AWS CLI der Absicht InvokeFunction die Berechtigung OrderFlowers hinzu:

    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 sendet die folgende Antwort:

    {
        "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. Rufen Sie die Absicht von Amazon Lex ab. Amazon Lex sendet die Ausgabe in eine Datei namensOrderFlowers-V3.jsonaus.

    aws lex-models get-intent \ --region region \ --name OrderFlowers \ --intent-version "\$LATEST" > OrderFlowers-V3.json
  3. Öffnen Sie OrderFlowers-V3.json in einem Text-Editor.

    1. Suchen und löschen Sie createdDate, lastUpdatedDate und version.

    2. Aktualisieren Sie das Feld fulfillmentActivity:

      "fulfillmentActivity": { "type": "CodeHook", "codeHook": { "uri": "arn:aws:lambda:region:account ID:function:OrderFlowersCodeHook", "messageVersion": "1.0" } }
    3. Speichern Sie die Datei.

  4. In derAWS CLI, senden Sie die aktualisierte Absicht an Amazon Lex:

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

Erstellen Sie den Bot neu, nachdem die Absicht aktualisiert wurde.

So erstellen Sie den Bot OrderFlowersBot
  1. Rufen Sie in der AWS CLI die Definition des Bots OrderFlowersBot ab und speichern Sie sie in einer Datei:

    aws lex-models get-bot \ --region region \ --name OrderFlowersBot \ --version-or-alias "\$LATEST" > OrderFlowersBot-V3.json
  2. Öffnen Sie OrderFlowersBot-V3.json in einem Texteditor. Entfernen Sie die Felder createdDate, lastUpdatedDate, status und version.

  3. Fügen Sie im Texteditor die folgende Zeile in die Bot-Definition ein:

    "processBehavior": "BUILD",
  4. Erstellen Sie in der AWS CLI eine neue Version des Bots:

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

    Die Antwort des Servers:

    {
        "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"
    }
    

Nächster Schritt

Übung 4: Veröffentlichen einer Version (AWS CLI)