기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon Chime SDK PSTN 오디오의 AWS Lambda 함수로 호출 라우팅(AWS CLI)
이 자습서에서는 Amazon Chime SDK PSTN 오디오 서비스를 사용하여 Lambda 함수에 대한 통화 라우팅을 설정하는 프로세스를 안내합니다. Lambda 함수를 생성하고, SIP 미디어 애플리케이션을 설정하고, 수신 통화를 처리하도록 SIP 규칙을 구성하는 방법을 알아봅니다.
사전 조건
이 자습서를 시작하기 전에 다음을 수행해야 합니다.
를 설치합니다 AWS CLI. 자세한 내용은 AWS CLI 사용 설명서의 AWS CLI최신 버전의 설치 또는 업데이트를 참조하세요.
적절한 자격 증명 AWS CLI 으로를 구성합니다. 자격 증명을 아직 설정하지 않은
aws configure
경우를 실행합니다.AWS Lambda 및 Amazon Chime SDK 개념을 기본적으로 숙지합니다.
AWS 계정에서 Amazon Chime SDK 및 Lambda 리소스를 생성하고 관리할 수 있는 충분한 권한을 설정합니다.
전화번호 기반 라우팅의 경우 Amazon Chime SDK 전화번호 인벤토리에 전화번호가 있어야 합니다.
음성 커넥터 기반 라우팅의 경우 계정에 음성 커넥터가 구성되어 있어야 합니다.
비용 고려 사항
자습서에는 완료 후 지속적인 요금이 발생하지 않도록 정리 지침이 포함되어 있습니다. 자세한 내용은 Amazon Chime SDK 요금을
Amazon Chime SDK PSTN 오디오에 대한 통화 라우팅 설정을 시작해 보겠습니다.
전화번호 검색 및 프로비저닝
전화번호 트리거를 사용하여 SIP 규칙을 생성하기 전에 Amazon Chime SDK 인벤토리에 전화번호가 있어야 합니다. 사용 가능한 전화번호를 검색하고 프로비저닝하는 방법은 다음과 같습니다.
예 : 사용 가능한 전화번호 검색
# Search for available toll-free phone numbers aws chime-sdk-voice search-available-phone-numbers \ --phone-number-type TollFree \ --country US \ --toll-free-prefix 844 \ --max-results 5 \ --region us-east-1
이 명령은 미국에서 접두사가 844인 사용 가능한 수신자 부담 전화번호를 검색합니다. 파라미터를 수정하여 다양한 유형의 숫자를 검색할 수 있습니다.
예 : 전화번호 프로비저닝
사용 가능한 전화번호를 찾은 후 다음 명령을 사용하여 프로비저닝할 수 있습니다.
# Order a phone number aws chime-sdk-voice create-phone-number-order \ --product-type SipMediaApplicationDialIn \ --e164-phone-numbers "
+18445550100
" \ --region us-east-1
를 검색 결과에서 사용 가능한 실제 전화번호+18445550100
로 바꿉니다. 이 명령은 계정에 전화번호를 프로비저닝합니다.
예 : 전화번호 상태 확인
전화번호를 주문한 후 상태를 확인할 수 있습니다.
# Get the phone number order status aws chime-sdk-voice get-phone-number-order \ --phone-number-order-id abcd1234-5678-90ab-cdef-EXAMPLE55555 \ --region us-east-1
주문 ID를 create-phone-number-order
명령에서 반환된 ID로 바꿉니다.
예 : 인벤토리의 전화번호 나열
인벤토리의 모든 전화번호를 보려면:
# List all phone numbers aws chime-sdk-voice list-phone-numbers \ --region us-east-1
SIP 규칙에 사용할 수 있는 할당되지 않은 전화번호를 찾으려면:
# List unassigned phone numbers aws chime-sdk-voice list-phone-numbers \ --region us-east-1 \ --query "PhoneNumbers[?Status=='Unassigned'].E164PhoneNumber"
통화 처리를 위한 Lambda 함수 생성
이제 수신 통화를 처리하는 Lambda 함수를 생성해 보겠습니다. 함수는 PSTN 오디오 서비스로부터 이벤트를 수신하고 호출 처리 방법에 대한 지침으로 응답합니다.
예 : Lambda에 대한 IAM 역할 생성
Lambda 함수를 생성하기 전에 필요한 권한을 부여하는 IAM 역할을 생성해야 합니다.
cat > lambda-trust-policy.json << EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF
aws iam create-role --role-name ChimeSDKLambdaRole \ --assume-role-policy-document file://lambda-trust-policy.json
aws iam attach-role-policy --role-name ChimeSDKLambdaRole \ --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
이러한 명령은 Lambda가 IAM 역할을 수임하고 기본 실행 정책을 연결하도록 허용하는 IAM 역할을 생성합니다.이 정책은 Lambda가 CloudWatch에 로그를 쓸 수 있는 권한을 제공합니다.
예 Lambda 함수 생성:
이제 수신 통화를 처리할 간단한 Lambda 함수를 생성합니다.
mkdir -p lambda cat > lambda/index.js << EOF exports.handler = async (event) => { console.log('Received event:', JSON.stringify(event, null, 2)); // Simple call handling logic const response = { SchemaVersion: '1.0', Actions: [ { Type: 'Speak', Parameters: { Engine: 'neural', Text: 'Hello! This is a test call from Amazon Chime SDK PSTN Audio.', VoiceId: 'Joanna' } }, { Type: 'Hangup', Parameters: { SipResponseCode: '200' } } ] }; return response; }; EOF
cd lambda zip -r function.zip index.js cd ..
# Get your AWS account ID ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) aws lambda create-function \ --function-name ChimeSDKCallHandler \ --runtime nodejs18.x \ --role arn:aws:iam::${ACCOUNT_ID}:role/ChimeSDKLambdaRole \ --handler index.handler \ --zip-file fileb://lambda/function.zip
이 Lambda 함수는 음성 메시지로 수신 통화에 응답한 다음 전화를 끊습니다.
예 : Amazon Chime SDK에 대한 Lambda 권한 추가
Amazon Chime SDK 서비스에 Lambda 함수를 호출할 수 있는 권한을 부여합니다.
# Get your AWS account ID ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) aws lambda add-permission \ --function-name ChimeSDKCallHandler \ --statement-id ChimeSDK \ --action lambda:InvokeFunction \ --principal voiceconnector.chime.amazonaws.com \ --source-account ${ACCOUNT_ID}
이 명령을 사용하면 Amazon Chime SDK Voice Connector 서비스가 Lambda 함수를 호출할 수 있습니다.
SIP 미디어 애플리케이션 생성
SIP 미디어 애플리케이션은 Lambda 함수를 PSTN 오디오 서비스에 연결합니다. 이 섹션에서는 Lambda 함수를 사용하는 SIP 미디어 애플리케이션을 생성합니다.
예 : SIP 미디어 애플리케이션 생성
# Get your Lambda function ARN LAMBDA_ARN=$(aws lambda get-function --function-name ChimeSDKCallHandler --query Configuration.FunctionArn --output text) aws chime-sdk-voice create-sip-media-application \ --aws-region us-east-1 \ --name "MyCallHandlerApp" \ --endpoints "[{\"LambdaArn\":\"${LAMBDA_ARN}\"}]"
SIP 미디어 애플리케이션은 PSTN 오디오 서비스와 Lambda 함수 간의 브리지 역할을 합니다.
예 : SIP 미디어 애플리케이션 ID 가져오기
SIP 미디어 애플리케이션을 생성한 후에는 자습서 뒷부분에서 사용할 ID를 검색해야 합니다.
SIP_MEDIA_APP_ID=$(aws chime-sdk-voice list-sip-media-applications \ --query "SipMediaApplications[?Name=='MyCallHandlerApp'].SipMediaApplicationId" \ --output text) echo "SIP Media Application ID: ${SIP_MEDIA_APP_ID}"
SIP 규칙을 생성할 때 필요하므로이 명령에서 반환한 SIP 미디어 애플리케이션 ID를 기록해 둡니다.
SIP 규칙을 사용하여 통화 라우팅 설정
SIP 규칙은 수신 통화가 SIP 미디어 애플리케이션으로 라우팅되는 방식을 결정합니다. 전화번호 또는 Voice Connector 호스트 이름을 기반으로 규칙을 생성할 수 있습니다.
예 : 전화번호 트리거를 사용하여 SIP 규칙 생성
전화번호를 기반으로 통화를 라우팅하려면 다음 명령을 사용합니다.
# Get an unassigned phone number from your inventory PHONE_NUMBER=$(aws chime-sdk-voice list-phone-numbers \ --query "PhoneNumbers[?Status=='Unassigned'].E164PhoneNumber | [0]" \ --output text) # If no unassigned phone number is found, you'll need to provision one if [ -z "$PHONE_NUMBER" ] || [ "$PHONE_NUMBER" == "None" ]; then echo "No unassigned phone numbers found. Please provision a phone number first." exit 1 fi echo "Using phone number: ${PHONE_NUMBER}" aws chime-sdk-voice create-sip-rule \ --name "IncomingCallRule" \ --trigger-type ToPhoneNumber \ --trigger-value "${PHONE_NUMBER}" \ --target-applications "[{\"SipMediaApplicationId\":\"${SIP_MEDIA_APP_ID}\",\"Priority\":1}]"
이 명령은 통화를 전화번호로 SIP 미디어 애플리케이션으로 라우팅하는 SIP 규칙을 생성합니다.
예 : URI 호스트 이름 요청 트리거를 사용하여 SIP 규칙 생성
또는 수신 음성 커넥터 SIP 통화의 요청 URI를 기반으로 통화를 라우팅할 수 있습니다.
# Replace with your Voice Connector hostname VOICE_CONNECTOR_HOST="
example
.voiceconnector.chime.aws" aws chime-sdk-voice create-sip-rule \ --name "VoiceConnectorRule" \ --trigger-type RequestUriHostname \ --trigger-value "${VOICE_CONNECTOR_HOST}" \ --target-applications "[{\"SipMediaApplicationId\":\"${SIP_MEDIA_APP_ID}\",\"Priority\":1}]"
호스트 이름을 Voice Connector의 아웃바운드 호스트 이름으로 바꿉니다.
여러 SIP 미디어 애플리케이션을 사용하여 중복 설정
중복 및 장애 조치를 위해 동일한 AWS 리전에서 여러 SIP 미디어 애플리케이션을 생성하고 우선 순위 순서를 지정할 수 있습니다.
예 : 백업 Lambda 함수 생성
먼저 동일한 리전에서 백업 Lambda 함수를 생성합니다.
cat > lambda/backup-index.js >< EOF exports.handler = async (event) => { console.log('Received event in backup handler:', JSON.stringify(event, null, 2)); // Simple call handling logic for backup const response = { SchemaVersion: '1.0', Actions: [ { Type: 'Speak', Parameters: { Engine: 'neural', Text: 'Hello! This is the backup handler for Amazon Chime SDK PSTN Audio.', VoiceId: 'Matthew' } }, { Type: 'Hangup', Parameters: { SipResponseCode: '200' } } ] }; return response; }; EOF
cd lambda zip -r backup-function.zip backup-index.js cd ..
# Get your AWS account ID ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) aws lambda create-function \ --function-name ChimeSDKBackupHandler \ --runtime nodejs18.x \ --role arn:aws:iam::${ACCOUNT_ID}:role/ChimeSDKLambdaRole \ --handler backup-index.handler \ --zip-file fileb://lambda/backup-function.zip
예 : Amazon Chime SDK에 대한 Lambda 권한을 백업 함수에 추가
# Get your AWS account ID ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) aws lambda add-permission \ --function-name ChimeSDKBackupHandler \ --statement-id ChimeSDK \ --action lambda:InvokeFunction \ --principal voiceconnector.chime.amazonaws.com \ --source-account ${ACCOUNT_ID}
예 : 백업 SIP 미디어 애플리케이션 생성
# Get your backup Lambda function ARN BACKUP_LAMBDA_ARN=$(aws lambda get-function --function-name ChimeSDKBackupHandler --query Configuration.FunctionArn --output text) aws chime-sdk-voice create-sip-media-application \ --aws-region us-east-1 \ --name "BackupCallHandlerApp" \ --endpoints "[{\"LambdaArn\":\"${BACKUP_LAMBDA_ARN}\"}]" # Get the backup SIP media application ID BACKUP_SIP_MEDIA_APP_ID=$(aws chime-sdk-voice list-sip-media-applications \ --query "SipMediaApplications[?Name=='BackupCallHandlerApp'].SipMediaApplicationId" \ --output text)
예 : SIP 규칙 ID 가져오기
SIP_RULE_ID=$(aws chime-sdk-voice list-sip-rules \ --query "SipRules[?Name=='IncomingCallRule'].SipRuleId" \ --output text)
예 : 우선순위가 있는 두 애플리케이션을 모두 포함하도록 SIP 규칙 업데이트
aws chime-sdk-voice update-sip-rule \ --sip-rule-id ${SIP_RULE_ID} \ --target-applications "[{\"SipMediaApplicationId\":\"${SIP_MEDIA_APP_ID}\",\"Priority\":1},{\"SipMediaApplicationId\":\"${BACKUP_SIP_MEDIA_APP_ID}\",\"Priority\":2}]"
이 명령은 기본 및 백업 SIP 미디어 애플리케이션을 각각 우선 순위와 함께 포함하도록 SIP 규칙을 업데이트합니다.
아웃바운드 통화 생성
CreateSIPMediaApplicationCall
API를 사용하여 Lambda 함수를 호출하는 아웃바운드 호출을 생성할 수도 있습니다.
# Use a phone number from your inventory for outbound calling FROM_PHONE_NUMBER=${PHONE_NUMBER} TO_PHONE_NUMBER="
+12065550102
" # Replace with a valid destination number aws chime-sdk-voice create-sip-media-application-call \ --from-phone-number "${FROM_PHONE_NUMBER}" \ --to-phone-number "${TO_PHONE_NUMBER}" \ --sip-media-application-id ${SIP_MEDIA_APP_ID}
대상 전화번호를 유효한 번호로 바꿉니다. 실제 전화를 걸려면 인벤토리에 전화번호가 있어야 합니다.
활성 통화 중에 Lambda 트리거
UpdateSIPMediaApplicationCall
API를 사용하여 활성 통화 중에 Lambda 함수를 트리거할 수 있습니다.
# Replace with an actual transaction ID from an active call TRANSACTION_ID="
txn-3ac9de3f-6b5a-4be9-9e7e-EXAMPLE33333
" aws chime-sdk-voice update-sip-media-application-call \ --sip-media-application-id ${SIP_MEDIA_APP_ID} \ --transaction-id ${TRANSACTION_ID} \ --arguments '{"action":"custom-action"}'
호출이 활성화되면 Lambda 함수로 전송된 이벤트 데이터에 트랜잭션 ID가 제공됩니다.
리소스 정리
이 자습서를 마치면 추가 요금이 발생하지 않도록 생성한 리소스를 삭제해야 합니다.
예 : SIP 규칙 삭제
# Get the SIP rule ID if you don't have it SIP_RULE_ID=$(aws chime-sdk-voice list-sip-rules \ --query "SipRules[?Name=='IncomingCallRule'].SipRuleId" \ --output text) aws chime-sdk-voice delete-sip-rule --sip-rule-id ${SIP_RULE_ID}
예 : SIP 미디어 애플리케이션 삭제
# Get SIP media application IDs if you don't have them SIP_MEDIA_APP_ID=$(aws chime-sdk-voice list-sip-media-applications \ --query "SipMediaApplications[?Name=='MyCallHandlerApp'].SipMediaApplicationId" \ --output text) BACKUP_SIP_MEDIA_APP_ID=$(aws chime-sdk-voice list-sip-media-applications \ --query "SipMediaApplications[?Name=='BackupCallHandlerApp'].SipMediaApplicationId" \ --output text) aws chime-sdk-voice delete-sip-media-application --sip-media-application-id ${SIP_MEDIA_APP_ID} aws chime-sdk-voice delete-sip-media-application --sip-media-application-id ${BACKUP_SIP_MEDIA_APP_ID}
예 : Lambda 함수 삭제
aws lambda delete-function --function-name ChimeSDKCallHandler aws lambda delete-function --function-name ChimeSDKBackupHandler
예 : IAM 역할 삭제
aws iam detach-role-policy --role-name ChimeSDKLambdaRole \ --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole aws iam delete-role --role-name ChimeSDKLambdaRole
예 : 전화번호 해제
전화번호가 더 이상 필요하지 않은 경우 전화번호를 해제할 수 있습니다.
# List phone numbers aws chime-sdk-voice list-phone-numbers # Delete a specific phone number aws chime-sdk-voice delete-phone-number --phone-number-id ${PHONE_NUMBER}
전화번호는 완전히 릴리스되기 전에 7일 동안 "ReleaseInProgress" 상태가 됩니다. 이 기간 동안 필요한 경우 restore-phone-number
명령을 사용하여 복원할 수 있습니다.
프로덕션으로 이동
이 자습서에서는 Amazon Chime SDK PSTN 오디오를 사용하여 Lambda 함수로 호출을 라우팅하는 기본 기능을 보여줍니다. 그러나 프로덕션 환경의 경우 다음 모범 사례를 고려해야 합니다.
보안 고려 사항
최소 권한 권한을 구현합니다. Lambda 함수에 필요한 특정 권한만 부여하는 사용자 지정 IAM 정책을 생성합니다.
Lambda 권한에 소스 ARN 조건을 추가합니다. Lambda 함수를 호출할 수 있는 SIP 미디어 애플리케이션을 제한합니다.
입력 검증을 구현합니다. 유효한 이벤트만 처리하도록 Lambda 함수에 검증을 추가합니다.
VPC 배포를 고려합니다. 보안을 강화하려면 적절한 보안 그룹을 사용하여 VPC 내에 Lambda 함수를 배포합니다.
민감한 데이터를 암호화합니다. AWS Key Management Service 를 사용하여 애플리케이션에서 사용하는 민감한 데이터를 암호화합니다.
아키텍처 고려 사항
모니터링 및 로깅을 구현합니다. CloudWatch 경보 및 로그를 설정하여 애플리케이션의 상태와 성능을 모니터링합니다.
오류 처리를 추가합니다. Lambda 함수에서 포괄적인 오류 처리를 구현합니다.
조정 제한을 고려합니다. 높은 통화량에 필요한 경우 서비스 할당량을 파악하고 증가를 요청합니다.
코드형 인프라를 구현합니다. AWS CloudFormation 또는 AWS CDK 를 사용하여 인프라를 배포합니다.
CI/CD 파이프라인을 설정합니다. Lambda 함수에 대한 지속적인 통합 및 배포를 구현합니다.
프로덕션 지원 애플리케이션 구축에 대한 자세한 내용은 다음을 참조하세요.
다음 단계
이제 Amazon Chime SDK PSTN 오디오를 사용하여 Lambda 함수로 호출을 라우팅하는 방법을 배웠으므로 고급 기능을 살펴볼 수 있습니다.
Amazon Lex와 통합하여 지능형 에이전트 시나리오의 대화 상호 작용을 관리합니다. 자세한 내용은 Amazon Chime SDK 메시징용 Amazon Lex V2 봇 생성 단원을 참조하십시오.
음성 분석을 설정하여 통화에서 인사이트를 얻습니다. 자세한 내용은 Amazon Chime SDK의 통화 분석을 사용하여 통화에서 인사이트 생성 단원을 참조하십시오.
고급 통화 제어 작업을 탐색하여 정교한 통화 흐름을 구축합니다. 자세한 내용은 Amazon Chime SDK의 통화 분석 구성 사용 단원을 참조하십시오.