Amazon Lex V2를 사용하는 경우 Amazon Lex V2 가이드를 대신 참조하십시오.
Amazon Lex V1을 사용하는 경우 봇을 Amazon Lex V2로 업그레이드하는하는 것이 좋습니다. 더 이상 V1에 새로운 기능을 추가하지 않으므로 모든 새 봇에 V2를 사용할 것을 강력히 권장합니다.
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
연습 3: Lambda 함수 추가(AWS CLI)
사용자 입력을 검증하고 사용자의 의도를 이행하는 Lambda 함수를 봇에 추가합니다.
Lambda 표현식 추가는 5단계 프로세스입니다.
이 연습에서 명령을 실행하려면 명령이 실행될 리전을 알아야 합니다. 리전 목록은 모델 구축 할당량 을 참조하십시오.
InvokeFunction
권한을 추가하기 전에 의도에 Lambda 함수를 추가하면 다음 오류 메시지가 표시됩니다.
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.
GetIntent
작업의 응답에는 의도의 특정 개정을 식별하는 checksum
이라는 필드가 포함되어 있습니다. PutIntent 작업을 사용하여 의도를 업데이트하는 경우 체크섬 값을 제공해야 합니다. 체크섬 값을 제공하지 않으면 다음 오류 메시지가 표시됩니다.
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.
이 연습에서는 연습 1: 블루프린트를 사용하여 Amazon Lex 봇 생성(콘솔)의 Lambda 함수를 사용합니다. Lambda 함수를 생성하는 방법에 대한 지침은 3단계: Lambda 함수 만들기(콘솔)을 참조하십시오.
참고
다음은 Unix, Linux, macOS용 형식으로 지정된 AWS CLI 예제입니다. Windows의 경우 "\$LATEST"
를 $LATEST
로 변경합니다.
의도에 Lambda 함수를 추가하려면
-
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-accountaccount 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:*\"}}}" } -
Amazon Lex 에서 의도를 얻으십시오. Amazon Lex는 출력을
OrderFlowers-V3.json
라는 파일로 보냅니다.aws lex-models get-intent \ --region
region
\ --name OrderFlowers \ --intent-version "\$LATEST" > OrderFlowers-V3.json -
텍스트 편집기에서
OrderFlowers-V3.json
을 엽니다.-
createdDate
,lastUpdatedDate
및version
필드를 찾아 삭제합니다. -
fulfillmentActivity
필드를 업데이트합니다."fulfillmentActivity": { "type": "CodeHook", "codeHook": { "uri": "arn:aws:lambda:
region
:account ID
:function:OrderFlowersCodeHook", "messageVersion": "1.0" } } -
파일을 저장합니다.
-
-
AWS CLI에서 Amazon Lex에 업데이트된 의도를 보냅니다.
aws lex-models put-intent \ --region
region
\ --name OrderFlowers \ --cli-input-json file://OrderFlowers-V3.json
이제 의도를 업데이트했으므로 봇을 다시 구축합니다.
OrderFlowersBot
봇을 다시 구축하려면
-
AWS CLI에서
OrderFlowersBot
봇의 정의를 가져와 파일에 저장합니다.aws lex-models get-bot \ --region
region
\ --name OrderFlowersBot \ --version-or-alias "\$LATEST" > OrderFlowersBot-V3.json -
텍스트 편집기에서
OrderFlowersBot-V3.json
파일을 엽니다.createdDate
,lastUpdatedDate
,status
및version
필드를 제거합니다. -
텍스트 편집기에서 봇 정의에 다음 줄을 추가합니다.
"processBehavior": "BUILD",
-
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" }