통화 이해 end-to-end - Amazon Chime SDK

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

통화 이해 end-to-end

이 사용 사례에서는 PSTN 발신자로부터 전화를 받고, 오디오 메시지로 발신자에게 인사하고, 발신자PIN로부터 회의를 받고, 오디오를 재생하고, 발신자와 회의에 참가하기 위한 예제 코드를 제공합니다.

간접 호출 이벤트 및 작업

오디오 서비스는 호출 이벤트를 JSON 객체로 AWS Lambda 함수에 전달합니다. 객체에는 간접 호출 이벤트 유형과 모든 관련 메타데이터가 포함됩니다. 또한 이 함수는 AWS Lambda SIP 미디어 애플리케이션 작업을 JSON 객체로 반환하며, 이러한 객체에는 작업 유형과 관련 메타데이터가 포함됩니다.

다음 표에는 간접 호출 이벤트와 간접 호출 이벤트 수신 시 가능한 ActionData.Type이 나열되어 있습니다.

간접 호출 이벤트 ActionData.Type

ACTION_SUCCESSFUL

CallAndBridge

ReceiveDigits

PlayAudio

PlayAudioAndGetDigits

JoinChimeMeeting

ModifyChimeMeetingAttendees

RecordMeeting

ACTION_FAILED

CallAndBridge

PlayAudio

PlayAudioAndGetDigits

ModifyChimeMeetingAttendees

RecordMeeting

HANGUP

HangUp

DIGITS_RECEIVED

ReceiveDigits
참고

다음 사용 사례를 구현하려면 Amazon Chime SDK 인벤토리에 하나 이상의 전화번호, Amazon 리소스 이름(ARN)이 있는 AWS Lambda 함수를 사용하는 SIP 미디어 애플리케이션 관리형 객체, 전화번호를 트리거로 사용하는 SIP 규칙이 필요합니다.

Amazon Chime이 규칙에 지정된 전화번호로 전화를 SDK 받으면 PSTN 오디오 서비스는 호출 이벤트 유형으로 AWS Lambda 함수를 NEW_INBOUND_CALL 호출합니다.

{ "SchemaVersion": "1.0", "Sequence": 1, "InvocationEventType": "NEW_INBOUND_CALL", "CallDetails": { "TransactionId": "transaction-id", "AwsAccountId": "aws-account-id", "AwsRegion": "us-east-1", "SipRuleId": "sip-rule-id", "SipApplicationId": "sip-application-id", "Participants": [ { "CallId": "call-id-1", "ParticipantTag": "LEG-A", "To": "+11234567890", "From": "+19876543210", "Direction": "Inbound", "StartTimeInMilliseconds": "159700958834234", "Status": "Connected" } ] } }

AWS Lambda 함수를 프로그래밍하여 통화 세부 정보를 검증하고 나중에 사용할 수 있도록 저장할 수 있습니다. NEW_INBOUND_CALL 이벤트의 경우 AWS Lambda 함수는 환영 프롬프트를 재생하고 회의를 요청하는 일련의 작업으로 응답합니다PIN.

오디오 파일의 요구 사항은 다음과 같습니다.

  • 오디오 파일은 Amazon Simple Storage Service(S3) 버킷에서 재생해야 합니다. S3 버킷은 SIP 미디어 애플리케이션과 동일한 AWS 계정에 속해야 합니다. 또한 Amazon Chime SDK Voice Connector 서비스 보안 주체—에 s3:GetObject 권한을 부여해야 합니다voiceconnector.chime.amazonaws.com. S3 콘솔 또는 명령줄 인터페이스(CLI)를 사용하여 이를 수행할 수 있습니다.

  • 크기가 50MB 이하인 PCM WAV 파일을 사용해야 합니다. Amazon Chime은 8KHz개의 모노를 SDK 권장합니다.

  • 각 WAV 파일의 S3 메타데이터에는 가 포함되어야 합니다{'ContentType': 'audio/wav'}.

{ "SchemaVersion": "1.0", "Actions": [ { "Type" : "PlayAudio", "Parameters" : { "CallId": "call-id-1", "AudioSource": { "Type": "S3", "BucketName": "chime-meetings-audio-files-bucket-name", "Key": "welcome-to-meetings.wav" } } }, { "Type": "PlayAudioAndGetDigits", "Parameters" : { "ParticipantTag": "LEG-A", "AudioSource": { "Type": "S3", "BucketName": "chime-meetings-audio-files-bucket-name", "Key": "enter-meeting-pin.wav" }, "FailureAudioSource": { "Type": "S3", "BucketName": "chime-meetings-audio-files-bucket-name", "Key": "invalid-meeting-pin.wav" }, "MinNumberOfDigits": 3, "MaxNumberOfDigits": 5, "TerminatorDigits": ["#"], "InBetweenDigitsDurationInMilliseconds": 5000, "Repeat": 3, "RepeatDurationInMilliseconds": 10000 } } ] }

SIP 미디어 애플리케이션은 호출 레그 A에서 이러한 작업을 실행합니다. PlayAudioAndGetDigits 작업이 숫자를 수신한다고 가정하면 SIP 미디어 애플리케이션은 ACTION_SUCCESSFUL 이벤트 유형과 함께 AWS Lambda 함수를 호출합니다.

{ "SchemaVersion": "1.0", "Sequence": 2, "InvocationEventType": "ACTION_SUCCESSFUL", "ActionData": { "Type": "PlayAudioAndGetDigits", "Parameters" : { "ParticipantTag": "LEG-A", "AudioSource": { "Type": "S3", "BucketName": "chime-meetings-audio-files-bucket-name", "Key": "enter-meeting-pin.wav" }, "FailureAudioSource": { "Type": "S3", "BucketName": "chime-meetings-audio-files-bucket-name", "Key": "invalid-meeting-pin.wav" }, "MinNumberOfDigits": 3, "MaxNumberOfDigits": 5, "TerminatorDigits": ["#"], "InBetweenDigitsDurationInMilliseconds": 5000, "Repeat": 3, "RepeatDurationInMilliseconds": 10000 }, "ReceivedDigits": "12345" // meeting PIN }, "CallDetails": { ... // same as in previous event } } }

CallDetails 데이터를 기반으로 호출자를 식별하도록 AWS Lambda 함수를 프로그래밍할 수 있습니다. 이전에 PIN 받은 회의를 검증할 수도 있습니다. 올바른 를 가정PIN하면 CreateMeetingCreateAttendee APIs Amazon Chime SDK 회의를 생성하고 회의 참석자가 사용하는 조인 토큰을 생성합니다. AWS Lambda 함수는 Amazon Chime SDK 회의에 참가하기 위한 작업으로 응답합니다.

{ "SchemaVersion": "1.0", "Actions": [ { "Type": "JoinChimeMeeting", "Parameters": { "JoinToken": "meeting-attendee-join-token" } } ] }

이 유효하다고 가정하면 SIP 미디어 애플리케이션JoinToken은 Amazon Chime SDK 회의에 참여하고 ACTION_SUCCESSFUL 이벤트와 함께 AWS Lambda 함수를 호출합니다. 여기서 는 SIP 미디어 애플리케이션 및 Chime Media 서비스의 데이터를 CallDetails 포함합니다(LEG-B).

{ "SchemaVersion": "1.0", "Sequence": 3, "InvocationEventType": "ACTION_SUCCESSFUL", "ActionData": { "Type" : "JoinChimeMeeting", "Parameters" : { "JoinToken": "meeting-attendee-join-token" } }, "CallDetails": { "TransactionId": "transaction-id", "AwsAccountId": "aws-account-id", "AwsRegion": "us-east-1", "SipRuleId": "sip-rule-id", "SipApplicationId": "sip-application-id", "Participants": [ { "CallId": "call-id-1", "ParticipantTag": "LEG-A", "To": "+11234567890", "From": "+19876543210", "Direction": "Inbound", "StartTimeInMilliseconds": "159700958834234", "Status": "Connected" }, { "CallId": "call-id-2", "ParticipantTag": "LEG-B", "To": "SMA", "From": "+17035550122", "Direction": "Outbound", "StartTimeInMilliseconds": "159700958834234", "Status": "Connected" } ] } }

이 시점의 통화 또는 통화 레그에서 작업 실행을 중지하려면 빈 작업 세트로 응답할 수 있습니다.

{ "SchemaVersion": "1.0" "Actions": [] }

호출자가 전화를 끊으면 SIP 미디어 애플리케이션이 HANGUP 이벤트와 함께 AWS Lambda 함수를 호출합니다.

{ "SchemaVersion": "1.0", "Sequence": 4, "InvocationEventType": "HANGUP", "ActionData": { "Type": "Hangup", "Parameters": { "CallId": "call-id-1", "ParticipantTag": "LEG-A" } }, "CallDetails": { "TransactionId": "transaction-id", "AwsAccountId": "aws-account-id", "AwsRegion": "us-east-1", "SipRuleId": "sip-rule-id", "SipApplicationId": "sip-application-id", "Participants": [ { "CallId": "call-id-1", "ParticipantTag": "LEG-A", "To": "+11234567890", "From": "+19876543210", "Direction": "Inbound", "StartTimeInMilliseconds": "159700958834234", "Status": "Disconnected" }, { "CallId": "call-id-2", "ParticipantTag": "LEG-B", "To": "SMA", "From": "+17035550122", "Direction": "Outbound", "StartTimeInMilliseconds": "159700958834234", "Status": "Disconnected" } ] } }

작업으로 Hangup 이벤트에 응답하는 경우 SIP 미디어 애플리케이션은 의 StatusParticipants 표시하지 않으면 작업을 무시합니다Connected.