本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
End-to-end 通話範例
此使用案例提供範例程式碼,用於接收來自 PSTN 來電者的電話、使用音訊訊息問候呼叫者、從呼叫者取得會議 PIN 碼、播放音訊以及將來電者加入會議。
叫用事件和動作
音頻服務將調用事件作為 JSON 對象傳遞給AWS Lambda函數。這些對象包括調用事件類型和任何相關的元數據。此AWS Lambda函式也會以 JSON 物件的形式傳回 SIP 媒體應用程式動作,而這些物件包含動作類型和任何相關的中繼資料。
下表列出呼叫事件,以及當您收到叫用事件時的可能ActionData.Type
事件。
叫用事件 | ActionData類型。 |
---|---|
動作 (_ 成功) |
CallAndBridge ReceiveDigits PlayAudio PlayAudioAndGetDigits JoinChimeMeeting ModifyChimeMeetingAttendees RecordMeeting |
動作失敗 (_) |
CallAndBridge PlayAudio PlayAudioAndGetDigits ModifyChimeMeetingAttendees RecordMeeting |
掛斷 |
HangUp |
數字接收 |
ReceiveDigits |
注意
若要實作下列使用案例,Amazon Chime SDK 詳細目錄中至少需要一個電話號碼、使用具有 Amazon 資源名稱 (ARN)AWS Lambda 函數的 SIP 媒體應用程式受管物件,以及使用電話號碼做為觸發器的 SIP 媒體應用程式受管物件。
當 Amazon Chime SDK 接收到規則中指定電話號碼的呼叫時,PSTN 音訊服務會叫用具有NEW_INBOUND_CALL
叫用事件類型的AWS Lambda函數。
{ "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函數進行編程以驗證呼叫詳細信息並將其存儲以備 future 使用。對於NEW_INBOUND_CALL
事件,此AWS Lambda功能會以一組動作進行回應,這些動作會播放歡迎提示,並要求輸入會議 PIN 碼。
音訊檔案具有下列需求:
您必須播放 Amazon Storage (S3) 儲存貯體。S3 儲存貯體必須屬於與 SIP 媒體應用程式相同的AWS帳戶。此外,您必須
s3:GetObject
授予 Amazon Chime SDK 語音連接器服務主體的權限 —voiceconnector.chime.amazonaws.com
。您可以使用 S3 主控台或命令列界面 (CLI) 來執行此操作。您必須使用大小不超過 50 MB 的 PCM WAV 檔案。Amazon Chime 聲 SDK 建議使用 8 kHz mono。
每個 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 } } }
您可以編程一個AWS Lambda函CallDetails
數以根據數據識別呼叫者。您也可以驗證之前收到的會議 PIN 碼。假設 PIN 碼正確,您可以使用CreateMeeting和 CreateAttendeeAPI 建立 Amazon Chime SDK 會議,並產生會議出席者使用的加入權杖。此AWS Lambda函數會回應加入 Amazon Chime SDK 會議的動作。
{ "SchemaVersion": "1.0", "Actions": [ { "Type": "JoinChimeMeeting", "Parameters": { "JoinToken": "
meeting-attendee-join-token
" } } ] }
假設JoinToken
有效,SIP 媒體應用程式會加入 Amazon Chime SDK 會議,並叫用具有ACTION_SUCCESSFUL
事件的AWS Lambda函數,其中CallDetails
包含來自 SIP 媒體應用程式和 Chime 媒體服務的資料 (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 媒體應用程式會忽略動作,如果沒有其他Participants
顯示Status
的動作Connected
。