기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
함수에 AWS Lambda 대한 Amazon Connect 액세스 권한 부여
Amazon Connect는 사용자의 자체 시스템과 상호 작용할 수 있으며 흐름에서 여러 경로를 동적으로 사용할 수 있습니다. 이를 위해 흐름에서 AWS Lambda 함수를 호출하고, 결과를 가져오고, 자체 서비스를 호출하거나 다른 AWS 데이터 스토어 또는 서비스와 상호 작용합니다. 자세한 내용은 개발자 안내서AWS Lambda를 참조하세요.
흐름에서 Lambda 함수를 간접적으로 호출하려면 다음 작업을 완료합니다.
Tasks
Lambda 함수 생성
런타임을 사용해 Lambda 함수를 생성하고 이 함수를 구성합니다. 자세한 내용은 AWS Lambda 개발자 안내서에서 Lambda 시작하기를 참조하세요.
고객 센터와 동일한 리전에 Lambda 함수를 생성하는 경우 그다음 작업인 Amazon Connect 인스턴스에 Lambda 함수 추가에 설명된 대로 Amazon Connect 콘솔을 사용해 Lambda 함수를 인스턴스에 추가합니다. 이렇게 하면 Amazon Connect가 Lambda 함수를 간접적으로 호출하도록 허용하는 리소스 권한이 자동으로 추가됩니다. 그렇지 않으면 Lambda 함수가 다른 리전에 있는 경우 흐름 디자이너를 사용하여 흐름에 추가하고 Amazon Connect 인스턴스의 보안 주체 connect.amazonaws.com
및 를 사용하여 추가 권한 명령을 사용하여 리소스 권한을 추가할 수 ARN 있습니다. 자세한 내용은 AWS Lambda 개발자 안내서에서 AWS Lambda에 대한 리소스 기반 정책 사용을 참조하세요.
Amazon Connect 인스턴스에 Lambda 함수 추가
흐름에서 Lambda 함수를 사용하려면 먼저 Amazon Connect 인스턴스에 추가해야 합니다.
인스턴스에 Lambda 함수 추가
-
에서 Amazon Connect 콘솔을 엽니다https://console.aws.amazon.com/connect/
. -
인스턴스 페이지의 인스턴스 별칭 열에서 인스턴스 이름을 선택합니다. 이 인스턴스 이름은 Amazon Connect 에 액세스하는 데 URL 사용하는 에 나타납니다. Amazon Connect
-
탐색 창에서 흐름을 선택합니다.
-
AWS Lambda 섹션에서 함수 드롭다운 상자를 사용하여 인스턴스에 추가할 함수를 선택합니다.
작은 정보
드롭다운에는 인스턴스와 동일한 리전에 있는 함수만 나열됩니다. 나열된 함수가 없는 경우 AWS Lambda 콘솔을 여는 새 Lambda 함수 생성을 선택합니다.
다른 리전 또는 계정에서 Lambda를 사용하려면 AWS Lambda 함수 호출의 함수 선택에서 LambdaARN의 를 입력할 수 있습니다. 그런 다음 Lambda에서 해당하는 리소스 기반 정책을 설정하여 흐름이 이를 직접적으로 호출할 수 있도록 합니다.
lambda:AddPermission
을 직접적으로 호출하려면 다음을 수행해야 합니다.-
보안 주체를 connect.amazonaws.com으로 설정합니다.
-
소스 계정을 인스턴스가 속해 있는 계정으로 설정합니다.
-
소스를 인스턴스ARN의 ARN로 설정합니다.
자세한 내용은 함수에 다른 계정에 대한 액세스 권한 부여를 참조합니다.
-
-
Lambda 함수 추가를 선택합니다. Lambda 함수 아래에 함수ARN의 이 추가되었는지 확인합니다.
이제 흐름에서 해당 Lambda 함수를 참조할 수 있습니다.
흐름에서 Lambda 함수 간접 호출
-
흐름을 열거나 생성합니다.
-
AWS Lambda 함수 호출 블록(Integrate 그룹 내)을 그리드에 추가합니다. 블록과 브랜치를 연결합니다.
-
AWS Lambda 함수 호출 블록 제목을 선택하여 해당 속성 페이지를 엽니다.
-
함수 선택 아래에서 인스턴스에 추가한 함수 목록 중에 선택합니다.
-
(선택 사항) 함수 입력 파라미터 아래에서 파라미터 추가를 선택합니다. 간접적으로 호출되었을 때 Lambda 함수에 전송되는 키-값 페어를 지정할 수 있습니다. 또한 함수의 제한 시간 값을 지정할 수 있습니다.
-
제한 시간(최대 8초)에서 Lambda가 시간 초과될 때까지 기다리는 시간을 지정합니다. 이 시간이 지나면 고객 응대는 오류 분기로 라우팅됩니다.
흐름에서 Lambda 함수를 간접적으로 호출할 때마다 진행 중인 고객 응대와 관련된 기본 정보 세트와 추가된 AWS Lambda 함수 간접 호출 블록에 대한 함수 입력 파라미터 섹션에 정의된 추가 속성이 전달됩니다.
다음은 Lambda 함수에 대한 JSON 요청의 예입니다.
{ "Details": { "ContactData": { "Attributes": { "exampleAttributeKey1": "exampleAttributeValue1" }, "Channel": "VOICE", "ContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX", "CustomerEndpoint": { "Address": "+1234567890", "Type": "TELEPHONE_NUMBER" }, "CustomerId": "someCustomerId", "Description": "someDescription", "InitialContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX", "InitiationMethod": "INBOUND | OUTBOUND | TRANSFER | CALLBACK", "InstanceARN": "arn:aws:connect:aws-region:1234567890:instance/c8c0e68d-2200-4265-82c0-XXXXXXXXXX", "LanguageCode": "en-US", "MediaStreams": { "Customer": { "Audio": { "StreamARN": "arn:aws:kinesisvideo::eu-west-2:111111111111:stream/instance-alias-contact-ddddddd-bbbb-dddd-eeee-ffffffffffff/9999999999999", "StartTimestamp": "1571360125131", // Epoch time value "StopTimestamp": "1571360126131", "StartFragmentNumber": "100" // Numberic value for fragment number } } }, "Name": "ContactFlowEvent", "PreviousContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX", "Queue": { "ARN": "arn:aws:connect:eu-west-2:111111111111:instance/cccccccc-bbbb-dddd-eeee-ffffffffffff/queue/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "Name": "PasswordReset" "OutboundCallerId": { "Address": "+12345678903", "Type": "TELEPHONE_NUMBER" } }, "References": { "key1": { "Type": "url", "Value": "urlvalue" } }, "SystemEndpoint": { "Address": "+1234567890", "Type": "TELEPHONE_NUMBER" } }, "Parameters": {"exampleParameterKey1": "exampleParameterValue1", "exampleParameterKey2": "exampleParameterValue2" } }, "Name": "ContactFlowEvent" }
요청은 다음의 두 부분으로 구분됩니다.
-
고객 응대 데이터 - 모든 고객 응대에 대해 Amazon Connect에 의해 항상 전달됩니다. 일부 파라미터는 선택 사항입니다.
이 섹션에는 흐름에서 고객 응대 속성 설정 블록을 사용할 때와 같이 이전에 고객 응대와 연결되었던 속성이 포함될 수 있습니다. 이 맵은 저장된 속성이 없으면 비어 있을 수 있습니다.
다음 이미지는 고객 응대 속성 설정의 속성 페이지에서 이러한 속성이 나타나는 위치를 보여 줍니다.
-
파라미터 - 이 통화에만 적용되는 파라미터로, Lambda 함수를 만들 때 정의되었습니다. 다음 이미지는 AWS Lambda 함수 간접 호출 블록의 속성 페이지에서 이러한 매개변수가 나타나는 위치를 보여 줍니다.
Lambda 호출 블록은 형식의 입력 파라미터를 수신하여 기본 데이터 유형과 중첩된 를 모두 JSON 수용할 수 있습니다JSON. 다음은 Lambda 호출 블록에 사용할 수 있는 JSON 입력의 예입니다.
{ "Name": "Jane", "Age":10, "isEnrolledInSchool": true, "hobbies": { "books":["book1", "book2"], "art":["art1", "art2"] } }
호출 재시도 정책
흐름 중 Lambda 간접 호출이 제한되면 해당 요청을 재시도합니다. 일반 서비스 장애(500 오류)가 발생하는 경우에도 재시도합니다.
동기식 호출이 오류를 반환하면 Amazon Connect에서는 최대 8초간 최대 3회 재시도합니다. 이 때 흐름은 오류 분기로 이동합니다.
Lambda가 재시도하는 방법에 대한 자세한 내용은 AWS Lambda의 오류 처리 및 자동 재시도를 참조하세요.
여러 Lambda 함수를 호출하는 모범 사례
Amazon Connect에서는 Lambda 함수 시퀀스의 기간이 20초로 제한됩니다. 총 실행 시간이 이 임계값을 초과하면 오류 메시지와 함께 시간 초과됩니다. 고객은 Lambda 함수가 실행되는 동안 무음을 듣게 되므로, 긴 상호 작용 중에 고객이 참여를 유지하도록 함수 사이에 재생 프롬프트 블록을 추가하는 것이 좋습니다.
Lambda 함수 체인을 재생 프롬프트 블록으로 분리하면 20초 임계값보다 오래 지속되는 여러 함수를 호출할 수 있습니다.
이벤트 구문 분석을 위해 Lambda 함수 구성
Lambda 함수와 Amazon Connect 간에 속성과 파라미터를 성공적으로 전달하려면 함수 호출 블록 또는 연락 속성 설정 에서 전송된 JSON 요청을 올바르게 구문 분석하도록 함수를 구성하고 적용해야 하는 비즈니스 로직을 정의합니다. AWS Lambda JSON 구문 분석 방법은 함수에 사용하는 런타임에 따라 달라집니다.
예를 들어 다음 코드는 Node.JS를 사용하여 AWS Lambda 함수 호출 블록 및 연락 속성 설정 블록exampleAttributeKey1
에서 exampleParameterKey1
에 액세스하는 방법을 보여줍니다.
exports.handler = function(event, context, callback) { // Example: access value from parameter (Invoke AWS Lambda function) let parameter1 = event['Details']['Parameters']['exampleParameterKey1']; // Example: access value from attribute (Set contact attributes block) let attribute1 = event['Details']['ContactData']['Attributes']['exampleAttributeKey1']; // Example: access customer's phone number from default data let phone = event['Details']['ContactData']['CustomerEndpoint']['Address']; // Apply your business logic with the values // ... }
함수 응답 확인
작은 정보
흐름에서는 배열 참조가 지원되지 않습니다. 배열은 다른 Lambda 함수에서만 사용할 수 있습니다.
Lambda 함수 응답은 STRING_MAP 또는 _일 수 JSON 있으며 흐름에서 AWS Lambda 함수 호출 블록을 구성하는 동안 설정해야 합니다. 응답 검증이 STRING_로 설정된 경우 MAPLambda 함수는 문자열 유형의 키/값 페어의 플랫 객체를 반환해야 합니다. 그렇지 않으면 응답 검증이 로 설정된 경우 Lambda 함수는 중첩된 JSON를 JSON 포함하여 유효한 를 반환할 수 있습니다JSON.
Lambda 응답은 최대 32KB까지 가능합니다. Lambda에 연결할 수 없거나, 함수 예외가 발생하거나, 응답을 이해하지 못하거나, Lambda 함수가 제한 시간보다 오래 걸리면 흐름이 Error
레이블로 이동합니다.
Lambda 함수에서 반환된 출력을 테스트하여 Amazon Connect로 반환될 때 올바르게 사용되는지 확인합니다. 다음 예제에서는 Node.JS를 사용한 샘플 응답을 보여줍니다.
exports.handler = function(event, context, callback) { // Extract data from the event object let phone = event['Details']['ContactData']['CustomerEndpoint']['Address']; // Get information from your APIs let customerAccountId = getAccountIdByPhone(phone); let customerBalance = getBalanceByAccountId(customerAccountId); let resultMap = { AccountId: customerAccountId, Balance: '$' + customerBalance, } callback(null, resultMap); }
또한 이 예제에서는 Python을 사용한 예제 응답을 보여줍니다.
def lambda_handler(event, context): // Extract data from the event object phone = event['Details']['ContactData']['CustomerEndpoint']['Address'] // Get information from your APIs customerAccountId = getAccountIdByPhone(phone) customerBalance = getBalanceByAccountId(customerAccountId) resultMap = { "AccountId": customerAccountId, "Balance": '$%s' % customerBalance } return resultMap
함수에서 반환된 출력은 영숫자, 대시 및 밑줄 문자만 포함하는 키/값 페어의 플랫 객체여야 합니다. 반환된 데이터의 크기는 UTF-8 데이터의 32KB 미만이어야 합니다.
다음 예제는 이러한 Lambda 함수의 JSON 출력을 보여줍니다.
{ "AccountId": "a12345689", "Balance": "$1000" }
응답 검증이 로 설정된 경우 JSONLambda 함수는 중첩된 도 반환할 수 JSON있습니다. 예를 들면 다음과 같습니다.
{ "Name": { "First": "John", "Last": "Doe" }, "AccountId": "a12345689", "OrderIds": ["x123", "y123"] }
간단한 키-값 페어라면 어떤 결과라도 반환할 수 있습니다.
Lambda 함수 응답 사용
흐름에서 함수 응답을 사용하는 방법에는 두 가지가 있습니다. Lambda에서 반환된 변수를 직접 참조하거나 함수에서 반환된 값을 고객 응대 속성으로 저장한 후 저장된 속성을 참조할 수 있습니다. Lambda 함수의 응답에 외부 참조를 사용하면 참조는 항상 가장 최근에 간접 호출된 함수로부터 응답을 받습니다. 후속 함수가 호출되기 전에 함수의 응답을 사용하려면 응답을 연락처 속성으로 저장하거나 다음 함수에 파라미터로 전달해야 합니다.
1. 변수에 직접 액세스
변수에 직접 액세스하면 흐름 블록에서 변수를 사용할 수 있지만 고객 응대 레코드에는 포함되지 않습니다. 흐름 블록에서 이러한 변수에 직접 액세스하려면 호출 AWS Lambda 함수 블록 뒤에 블록을 추가한 다음 다음 예제와 같이 속성을 참조합니다.
Name - $.External.Name
Address - $.External.Address
CallerType - $.External.CallerType
다음 이미지는 재생 프롬프트 블록의 속성 페이지를 보여 줍니다. 변수는 블록에 text-to-speech 지정됩니다.
소스 속성에 지정된 이름이 Lambda에서 반환된 키 이름과 일치하는지 확인합니다.
2. 변수를 연락처 속성으로 저장
변수를 고객 응대 속성으로 저장하면 흐름 전체에서 사용할 수 있으며 고객 응대 레코드에 포함됩니다.
반환된 값을 연락처 속성으로 저장한 다음 참조하려면 호출 AWS Lambda 함수 블록 후 흐름에서 연락처 속성 설정 블록을 사용합니다. 속성 사용을 선택하고 유형으로는 외부를 선택합니다. 사용하는 예제에 따라 대상 속성을 MyAccountId
로 설정하고 속성을 AccountId
로 설정한 다음 MyBalance
및 잔액 또한 동일하게 설정합니다. 이 구성은 다음 이미지에 표시되어 있습니다.
Address를 소스 속성으로 추가하고 returnedContactAddress
를 대상 키로 사용합니다. 그런 다음 그림에 표시된 것처럼 CallerType
을 소스 속성으로 추가하고 returnedContactType
을 대상 키에 사용합니다.
소스 외부 속성에 지정된 이름이 Lambda에서 반환된 키 이름과 일치하는지 확인합니다.
자습서: Lambda 함수 생성 및 흐름 간접 호출
1단계: Lambda 예제 생성
에 로그인 AWS Management Console 하고 에서 AWS Lambda 콘솔을 엽니다https://console.aws.amazon.com/lambda/
. -
에서 함수 생성 을 AWS Lambda선택합니다.
-
이미 선택되어 있지 않은 경우 처음부터 새로 작성을 선택합니다. 기본 정보 에서 함수 이름 에 를 입력합니다MyFirstConnectLambda. 다른 모든 옵션의 경우 기본값을 그대로 둡니다. 이러한 옵션은 AWS Lambda 콘솔의 다음 이미지에 나와 있습니다.
-
함수 생성(Create function)을 선택합니다.
-
코드 소스 상자의 index.js 탭에서 코드 편집기의 템플릿 코드를 삭제합니다.
-
다음 이미지에 표시된 것처럼 다음 코드를 복사하여 코드 편집기에 붙여넣습니다.
exports.handler = async (event, context, callback) => { // Extract information const customerNumber = event.Details.ContactData.CustomerEndpoint.Address; const companyName = event.Details.Parameters.companyName; // Fetch data const balance = await fetchBalance(customerNumber, companyName); const support = await fetchSupportUrl(companyName); // Prepare result const resultMap = { customerBalance: balance, websiteUrl: support } callback(null, resultMap); } async function fetchBalance(customerPhoneNumber, companyName) { // Get data from your API Gateway or Database like DynamoDB return Math.floor(Math.random() * 1000); } async function fetchSupportUrl(companyName) { // Get data from your API Gateway or Database like DynamoDB return 'www.GGG.com/support'; }
이 코드는 에 대한 무작위 결과를 생성합니다customerBalance.
-
배포(Deploy)를 선택합니다.
-
배포를 선택한 후 테스트를 선택하여 테스트 편집기를 실행합니다.
-
테스트 이벤트 구성 대화 상자에서 새 이벤트 생성을 선택합니다. 이벤트 이름 에 테스트 이름으로 ConnectMock를 입력합니다.
-
이벤트 JSON 상자에서 샘플 코드를 삭제하고 대신 다음 코드를 입력합니다.
{ "Details": { "ContactData": { "Attributes": {}, "Channel": "VOICE", "ContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX", "CustomerEndpoint": { "Address": "+1234567890", "Type": "TELEPHONE_NUMBER" }, "InitialContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX", "InitiationMethod": "INBOUND | OUTBOUND | TRANSFER | CALLBACK", "InstanceARN": "arn:aws:connect:aws-region:1234567890:instance/c8c0e68d-2200-4265-82c0-XXXXXXXXXX", "PreviousContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX", "Queue": { "ARN": "arn:aws:connect:eu-west-2:111111111111:instance/cccccccc-bbbb-dddd-eeee-ffffffffffff/queue/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "Name": "PasswordReset" }, "SystemEndpoint": { "Address": "+1234567890", "Type": "TELEPHONE_NUMBER" } }, "Parameters": { "companyName": "GGG" } }, "Name": "ContactFlowEvent" }
-
저장(Save)을 선택합니다.
-
테스트를 선택합니다. 다음 이미지와 유사한 결과가 출력되어야 합니다.
표시되는 잔액은 다를 수도 있습니다. 이 코드는 무작위 수를 생성합니다.
2단계: Amazon Connect에 Lambda 추가
-
의 Amazon Connect 콘솔로 이동합니다https://console.aws.amazon.com/connect/
. -
Amazon Connect 인스턴스 별칭을 선택합니다.
-
탐색 메뉴에서 흐름을 선택합니다.
-
AWS Lambda 섹션에서 Lambda 함수 드롭다운 상자를 사용하여 를 선택합니다MyFirstConnectLambda.
-
Lambda 함수 추가를 선택합니다.
3단계: 고객 응대 흐름 생성
다음 이미지는 이 절차의 단계를 사용하여 구축할 흐름의 예입니다. 여기에는 고객 응대 속성 설정, 재생 프롬프트, AWS Lambda 함수 간접 호출, 또 다른 고객 응대 속성 설정 블록, 또 다른 재생 프롬프트 블록, 마지막으로 연결 끊기 블록이 포함됩니다.
-
Amazon Connect 관리자 웹 사이트 https://에 로그인합니다.
instance name
.my.connect.aws/. -
탐색 메뉴에서 라우팅, 흐름, 고객 응대 흐름 생성으로 이동합니다.
-
연락처 속성 설정 블록을 그리드로 끌고 다음 이미지에 표시된 속성 페이지를 구성합니다.
-
네임스페이스 = 사용자 정의.
-
속성 = companyName.
-
수동으로 설정을 선택합니다. 값 = GGG.
-
저장(Save)을 선택합니다.
-
-
프롬프트 재생 블록을 그리드로 끌고 다음 이미지에 표시된 것처럼 속성 페이지를 구성합니다.
-
Text-to-speech 텍스트 를 선택하거나 채팅하고, 수동으로 설정하고, 해석을 로 설정합니다SSML. 말할 텍스트 입력 상자에 다음 텍스트를 입력합니다.
Hello, thank you for calling $.Attributes.companyName inc.
-
저장(Save)을 선택합니다.
-
-
다른 프롬프트 재생 블록을 그리드로 끌고 다음 이미지에 표시된 것처럼 속성 페이지를 구성합니다.
-
Text-to-speech 텍스트 를 선택하거나 채팅하고, 수동으로 설정하고, 해석을 텍스트 로 설정합니다. 말할 텍스트 입력 상자에 다음 텍스트를 입력합니다.
Please try again later.
-
저장(Save)을 선택합니다.
-
-
AWS Lambda 함수 호출 블록을 그리드로 끌고 다음 이미지에 표시된 것처럼 속성 페이지를 구성합니다.
-
수동으로 선택을 선택한 다음 드롭다운MyFirstConnectLambda에서 를 선택합니다.
-
대상 키 상자에 를 입력합니다companyName. (이는 Lambda로 전송됩니다.)
-
동적으로 설정 상자를 선택합니다.
-
네임스페이스에 사용자 정의를 선택합니다.
-
속성 에 를 입력합니다companyName.
-
저장(Save)을 선택합니다.
-
-
연락처 속성 설정 블록을 그리드로 끌고 다른 속성 추가를 선택한 후 다음 이미지에 표시된 것처럼 속성 페이지를 구성합니다.
-
네임스페이스 = 사용자 정의. 속성 = MyBalance.
-
동적으로 설정을 선택합니다.
-
네임스페이스 = 외부.
-
속성 = customerBalance. 이는 Lambda에서 나온 결과입니다.
-
다른 속성 추가를 선택합니다.
-
네임스페이스 = 사용자 정의.
-
속성 = 내 URL.
-
동적으로 설정을 선택합니다. 네임스페이스 = 외부.
-
속성 = websiteUrl. 이는 Lambda에서 나온 결과입니다.
-
저장(Save)을 선택합니다.
-
-
프롬프트 재생 블록을 그리드로 끌고 다음 이미지에 표시된 것처럼 속성 페이지를 구성합니다.
-
Text-to-speech 또는 채팅 텍스트 를 선택하고 해석을 로 설정합니다SSML. 다음 텍스트를 텍스트 상자에 입력합니다.
Your remaining balance is <say-as interpret-as="characters">$.Attributes.MyBalance</say-as>.
Thank you for calling $.Attributes.companyName.
Visit $.Attributes.MyURL for more information.
-
저장(Save)을 선택합니다.
-
-
연결 해제/중단 블록을 그리드로 끕니다.
-
모든 블록을 연결하여 흐름이 이 절차의 상단에 표시된 이미지와 같이 보이도록 합니다.
-
이름으로 MyFirstConnectFlow를 입력한 다음 게시를 선택합니다.
-
탐색 메뉴에서 채널, 전화번호로 이동합니다.
-
전화번호를 선택합니다.
-
MyFirstConnectFlow 를 선택하고 저장을 선택합니다.
이제 시도해 봅니다. 번호로 전화를 겁니다. 인사말 메시지, 잔액, 방문할 웹 사이트를 들을 수 있습니다.