연습 3: Lambda 함수 추가(AWS CLI) - Amazon Lex V1

Amazon Lex V2를 사용하는 경우 Amazon Lex V2 가이드를 대신 참조하십시오.

 

Amazon Lex V1을 사용하는 경우 봇을 Amazon Lex V2로 업그레이드하는하는 것이 좋습니다. 더 이상 V1에 새로운 기능을 추가하지 않으므로 모든 새 봇에 V2를 사용할 것을 강력히 권장합니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

연습 3: Lambda 함수 추가(AWS CLI)

사용자 입력을 검증하고 사용자의 의도를 이행하는 Lambda 함수를 봇에 추가합니다.

Lambda 표현식 추가는 5단계 프로세스입니다.

  1. AddPermission 함수를 사용하여 OrderFlowers 의도가 Lambda 호출 작업을 호출하도록 합니다.

  2. GetIntent 작업을 사용하여 Amazon Lex 에서 의도를 가져옵니다.

  3. Lambda 함수를 추가하도록 의도를 업데이트합니다.

  4. PutIntent 작업을 사용하여 업데이트된 의도를 다시 Amazon Lex로 보냅니다.

  5. GetBotPutBot 작업을 사용하여 해당 의도를 사용하는 봇을 다시 구축합니다.

이 연습에서 명령을 실행하려면 명령이 실행될 리전을 알아야 합니다. 리전 목록은 모델 구축 할당량 을 참조하십시오.

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 함수 만들기(콘솔)을 참조하십시오.

참고

다음은 Unix, Linux, macOS용 형식으로 지정된 AWS CLI 예제입니다. Windows의 경우 "\$LATEST"$LATEST로 변경합니다.

의도에 Lambda 함수를 추가하려면
  1. AWS CLI에서 OrderFlowers 의도에 대한 InvokeFunction 권한을 추가합니다.

    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가 다음의 응답을 보냅니다.

    {
        "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. Amazon Lex 에서 의도를 얻으십시오. Amazon Lex는 출력을 OrderFlowers-V3.json라는 파일로 보냅니다.

    aws lex-models get-intent \ --region region \ --name OrderFlowers \ --intent-version "\$LATEST" > OrderFlowers-V3.json
  3. 텍스트 편집기에서 OrderFlowers-V3.json을 엽니다.

    1. createdDate, lastUpdatedDateversion 필드를 찾아 삭제합니다.

    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 \ --name OrderFlowers \ --cli-input-json file://OrderFlowers-V3.json

이제 의도를 업데이트했으므로 봇을 다시 구축합니다.

OrderFlowersBot 봇을 다시 구축하려면
  1. AWS CLI에서 OrderFlowersBot 봇의 정의를 가져와 파일에 저장합니다.

    aws lex-models get-bot \ --region region \ --name OrderFlowersBot \ --version-or-alias "\$LATEST" > OrderFlowersBot-V3.json
  2. 텍스트 편집기에서 OrderFlowersBot-V3.json 파일을 엽니다. createdDate, lastUpdatedDate, statusversion 필드를 제거합니다.

  3. 텍스트 편집기에서 봇 정의에 다음 줄을 추가합니다.

    "processBehavior": "BUILD",
  4. AWS CLI에서 봇의 새 개정을 구축합니다.

    aws lex-models put-bot \ --region region \ --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)