選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

更新進行中的通話

焦點模式
更新進行中的通話 - Amazon Chime SDK

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

作為 PSTN 音訊服務的一部分,SIP 媒體應用程式可讓您根據呼叫事件 (例如來電或 DTMF 位數) 叫用使用者定義的 Lambda 函數,來設定在呼叫上執行的動作。UpdateSipMediaApplicationCallAPI 可讓您在呼叫作用中時隨時觸發 Lambda 函數,並以叫用傳回的新動作取代目前的動作。

工作流程

您可以在各種情況下使用 UpdateSipMediaApplicationCallAPI,例如將參與者新增至會議、將使用者靜音和取消靜音、中斷他們的連線等。下列使用案例說明典型的工作流程。

當 Amazon Chime SDK 設定會議時,使用者會撥打電話和聆聽音樂。安裝完成後,Amazon Chime SDK 會停止音訊,並允許來電者加入會議。接下來,假設使用管理會議的單獨系統。MyMeetingService每個來電都應該被擱置。Chime 會通知有 MyMeetingService 關來電的資訊, MyMeetingService 然後為每個通話建立出席者,並且當準備好開始會議時,它會通知 SIP 媒體應用程式,並提供加入會議的權杖。 MyMeetingService

若要處理這種情況,Lambda 函數必須實作下列邏輯。

  • 當新來電到達時,Lambda 會以NEW_INBOUND_CALL事件叫用。Lambda 會呼叫MyMeetingService並傳遞transactionId識別目前呼叫的,並傳回PlayAudio動作。

  • 當準備好將呼叫者新增至會議時,服務會呼叫 UpdateSipMediaApplicationCallAPI 並傳遞呼叫的 API,transactionIdJoinToken作為其引數的一部分傳遞。MyMeetingService此 API 呼叫會再次觸發 Lambda 函數,現在會隨CALL_UPDATE_REQUESTED事件發生。會將作為事件的一部分 MyMeetingService 傳遞JoinToken至 Lambda 函數,而該權杖會用來將JoinChimeMeeting動作傳回 SIP 媒體應用程式,這會中斷PlayAudio動作並將呼叫者連線至會議。

圖表顯示在 UpdateSipMediaApplicationCall API 中的數據流。
注意

UpdateSipMediaApplicationCallAPI 會傳回 HTTP 202 (已接受)。SIP 媒體應用程式會確認呼叫正在進行中且可以更新,因此它會嘗試叫用 Lambda 函數。呼叫是以非同步方式執行,因此 API 的成功回應並不保證 Lambda 函數已啟動或完成。

下面的例子顯示了請求語法。

{ "SipMediaApplicationId": "string", "TransactionId": "string", "Arguments": { "string": "string" } }

請求參數

  • SipMediaApplicationId— 處理呼叫之 SIP 媒體應用程式的識別碼。

  • TransactionId— 呼叫交易的 ID。對於輸入呼叫,TransactionId可以在第一次叫用時從傳遞至 Lambda 函數的NEW_INCOMING_CALL事件中取得。對於輸出呼TransactionId叫,會在的回應中傳回CreateSipMediaApplicationCall

  • 引數CallUpdateRequest 作為動作資料的一部分,提供給 Lambda 函數的自訂引數。可以包含 0 到 20 個鍵值對。

下面的例子顯示了一個典型的請求。

aws chime update-sip-media-application-call --sip-media-application-id feb37a7e-2b66-49fb-b2dd-30f4780dc36d --transaction-id 1322a4e7-c106-4e70-aaaf-a8fa4c77c0cb --arguments '{"JoinToken": "abc123"}'

回應語法

{ "SipMediaApplicationCall": { "TransactionId": "string" } }

回應元素

  • TransactionId— 呼叫交易的 ID,與要求相同的 ID。

下列範例顯示CALL_UPDATE_REQUESTED呼叫事件。

{ "SchemaVersion": "1.0", "Sequence": 2, "InvocationEventType": "CALL_UPDATE_REQUESTED", "ActionData": { "Type": "CallUpdateRequest", "Parameters": { "Arguments": { "string": "string" } } }, "CallDetails": { ... } }

事件元素

  • SchemaVersion— JSON 結構描述的版本 (1.0)

  • 序列 — 呼叫中事件的序號

  • InvocationEventType-Lambda 調用事件的類型,在這種情況下,CALL_UPDATE_REQUESTED

  • ActionData— 與CallUpdateRequest動作相關聯的資料。

    • 類型-操作的類型,在這種情況下,CallUpdateRequest

    • 參數 — 動作的參數

      • 引數 — 作為 UpdateSipMediaApplicationCall API 請求一部分傳遞的引數

  • CallDetails— 有關當前呼叫狀態的信息

了解可中斷和不可中斷的動作

當 Lambda 函數在現有動作執行時傳回新的動作清單時,執行中動作的所有動作都會取代為新動作。在某些情況下,Lambda 函數會中斷進行中的動作,以便立即執行新動作。

下圖顯示了一個典型的例子。雙向圖下方的文字解釋了邏輯。

顯示如何在進行中的 SIP 媒體應用程式呼叫期間取代動作的圖表。

如果「動作 2」可中斷,我們將其停止並改為執行新的動作 1。

如果「動作 2」未中斷,則會在新「動作 1」開始之前完成。

在這兩種情況下,動作 3 都不會執行。

如果某些事件中斷動作,則會使用ACTION_INTERRUPTED事件叫用 Lambda 函數。此活動僅供參考用途。SIP 媒體應用程式會忽略此叫用傳回的所有動作。

中斷動作的類型:

  • PlayAudio

  • RecordAudio

  • Pause

Lambda 函數範例

此範例顯示典型的 Lambda 函數,該函數會播放音訊檔案、傳遞聯結權杖,以及更新呼叫。

const MMS = require('my-meeting-service'); const myMeetingServiceClient = new MMS.Client(); exports.handler = async (event) => { console.log('Request: ' + JSON.stringify(event)); const playAudio = () => { return { Type: 'PlayAudio', Parameters: { ParticipantTag: 'LEG-A', AudioSource: { Type: 'S3', BucketName: 'chime-meetings-audio-files-bucket-name', Key: 'welcome.wav' } } } } const joinChimeMeeting = (joinToken) => { return { Type: 'JoinChimeMeeting', Parameters: { JoinToken: joinToken } } } const response = (...actions) => { const r = { SchemaVersion: '1.0', Actions: actions }; console.log('Response: ' + JSON.stringify(r)); return r; }; switch (event.InvocationEventType) { case 'NEW_INBOUND_CALL': myMeetingServiceClient.addPendingCall(event.CallDetails.TransactionId); return response(playAudio()); case 'CALL_UPDATE_REQUESTED': const joinToken = event.ActionData.Parameters.Arguments['JoinToken'] return response(joinChimeMeeting(joinToken)); default: return response(); } }
隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。