メニュー
Amazon Lex
開発者ガイド

演習 3: Lambda 関数を追加する (AWS CLI)

ユーザー入力を検証し、ユーザーのインテントを達成する Lambda 関数をボットに追加します。

Lambda 関数を追加するには 5 つのステップを使用します。

  1. Lambda の AddPermission 関数を使用して OrderFlowers インテントを有効にし、Lambda の Invoke オペレーションを呼び出します。

  2. GetIntent オペレーションを使用して Amazon Lex からインテントを取得します。

  3. Lambda 関数を追加してインテントを更新します。

  4. PutIntent オペレーションを使用して、更新したインテントを Amazon Lex に送り返します。

  5. GetBot オペレーションと PutBot オペレーションを使用して、このインテントを使用するすべてのボットを再構築します。

InvokeFunction アクセス権限を追加する前に Lambda 関数をインテントに追加すると、次のエラーメッセージが表示されます。

 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. 

GetIntent オペレーションからのレスポンスには、インテントの特定のリビジョンを識別する checksum というフィールドが含まれています。PutIntent オペレーションを使用してインテントを更新するときに、このチェックサムの値を指定する必要があります。指定しないと、次のエラーメッセージが表示されます。

 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. 

この演習では、「演習 1: 設計図を使用して Amazon Lex ボットを作成する (コンソール)」の Lambda 関数を使用します。この Lambda 関数を作成する手順については、「ステップ 3: Lambda 関数を作成する (コンソール)」を参照してください。

注記

次の AWS CLI の例は、Unix、Linux、および macOS 用にフォーマットされています。Windows の場合は、"\$LATEST"$LATEST に変更してください。

Lambda 関数をインテントに追加するには

  1. AWS CLI で、InvokeFunction アクセス権限を OrderFlowers インテントに追加します。

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

    Lambda から次のレスポンスが送信されます。

    { "Statement": "{\"Sid\":\"LexGettingStarted-OrderFlowersBot\", \"Resource\":\"arn:aws:lambda:region:account ID:function:OrderFlowersCodeHook\", \"Effect\":\"Allow\", \"Principal\":{\"Service\":\"lex.amazonaws.com\"}, \"Action\":[\"lambda:InvokeFunction\"], \"Condition\":{\"ArnLike\": {\"AWS:SourceArn\": \"arn:aws:lex:region:account ID:intent:OrderFlowers:*\"}}}" }
  2. Amazon Lex からインテントを取得します。Amazon Lex は、出力を OrderFlowers-V3.json というファイルに送信します。

    aws lex-models get-intent --region region \ --endpoint endpoint \ --name OrderFlowers \ --intent-version "\$LATEST" > OrderFlowers-V3.json
  3. テキストエディタで、OrderFlowers-V3.json を開きます。

    1. createdDatelastUpdatedDateversion の各フィールドを見つけて削除します。

    2. fulfillmentActivity フィールドを更新します。

      "fulfillmentActivity": { "type": "CodeHook", "codeHook": { "uri": "arn:aws:lambda:region:account ID:function:OrderFlowersCodeHook", "messageVersion": "1.0" } }
    3. ファイルを保存します。

  4. AWS CLI で、更新したインテントを Amazon Lex に送信します。

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

インテントを更新したので、ボットを再構築します。

OrderFlowersBot ボットを再構築するには

  1. AWS CLI で、OrderFlowersBot ボットの定義を取得してファイルに保存します。

    aws lex-models get-bot --region region \ --endpoint endpoint \ --name OrderFlowersBot \ --version-or-alias "\$LATEST" > OrderFlowersBot-V3.json
  2. テキストエディタで、OrderFlowersBot-V3.json を開きます。createdDatelastUpdatedDatestatusversion の各フィールドを削除します。

  3. テキストエディタで、ボットの定義に次の行を追加します。

    "processBehavior": "BUILD",
  4. AWS CLI で、ボットの新しいリビジョンを構築します。

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

    サーバーからのレスポンスは次のとおりです。

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

次のステップ

演習 4: バージョンを発行する (AWS CLI)

このページの内容: