Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Aktualisieren von laufenden Anrufen
Im Rahmen des PSTN-Audiodienstes ermöglichen SIP-Medienanwendungen das Festlegen von Aktionen, die für einen Aufruf ausgeführt werden, indem benutzerdefinierte Lambda-Funktionen basierend auf den Anrufereignissen wie eingehenden Anruf oder DTMF-Ziffern aufgerufen werden. DieupdateSipMediaApplicationCallMit API können Sie jederzeit eine Lambda-Funktion auslösen, während ein Aufruf aktiv ist, und die aktuellen Aktionen durch neue Aktionen ersetzen, die durch den Aufruf zurückgegeben werden.
Workflow
Sie verwenden dasupdateSipMediaApplicationCallAPI in verschiedenen Fällen, z. B. das Hinzufügen von Teilnehmern zu einem Meeting, das Stummschalten und Aufheben der Stummschaltung des Benutzers, das Trennen der Verbindung usw. Im folgenden Anwendungsfall wird ein typischer Workflow beschrieben.
Ein Benutzer ruft an und hört Musik, während das Amazon Chime SDK das Meeting einrichtet. Sobald die Einrichtung abgeschlossen ist, stoppt das Amazon Chime SDK das Audio und lässt den Anrufer in das Meeting ein. Nehmen Sie als Nächstes die Verwendung eines separaten Systems an,MyMeetingService
, das leitet Meetings. Jeder eingehende Anruf sollte in die Warteschleife gestellt werden. Chime benachrichtigt MyMeetingService über eingehende Anrufe und MyMeetingService erstellt dann einen Teilnehmer für jeden Anruf, und wenn der MyMeetingService ist bereit, das Meeting zu starten, benachrichtigt die SIP-Medienanwendung und stellt ein Token für die Teilnahme am Meeting bereit.
Um diesen Fall zu behandeln, muss die Lambda-Funktion die folgende Logik implementieren.
Wenn ein neuer eingehender Anruf eintrifft, wird der Lambda mit einem
NEW_INBOUND_CALL
event. Der Lambda nennt dasMyMeetingService
Übermitteln Sie dastransactionId
das identifiziert den aktuellen Anruf und gibt denPlayAudio
Aktion-
Wenn der
MyMeetingService
ist bereit, den Anrufer zum Meeting hinzuzufügen, der Dienst ruft dieupdateSipMediaApplicationCallAPI und übergibt die Anruf'stransactionId
undJoinToken
als Teil seiner Argumente. Dieser API-Aufruf löst die Lambda-Funktion erneut aus, jetzt mit demCALL_UPDATE_REQUESTED
event. Die MyMeetingService Übermitteln Sie dasJoinToken
zur Lambda-Funktion als Teil des Ereignisses, und das Token wird verwendet, um dieJoinChimeMeeting
Aktion zur SIP-Medienanwendung, die diePlayAudio
Aktion und verbindet den Anrufer mit dem Meeting.

DieupdateSipMediaApplicationCallAPI gibt HTTP 202 (Accepted) zurück. Die SIP-Medienanwendung bestätigt, dass der Aufruf in Bearbeitung ist und aktualisiert werden kann, sodass versucht sie, die Lambda-Funktion aufzurufen. Der Aufruf wird asynchron ausgeführt, sodass eine erfolgreiche Antwort von der API nicht garantiert, dass die Lambda-Funktion gestartet oder abgeschlossen wurde.
Das folgende Beispiel zeigt die Anforderungssyntax.
{ "SipMediaApplicationId": "
string
", "TransactionId": "string
", "Arguments": { "string": "string
" } }
Anfrageparameter
SipMediaApplicationId— Die ID der SIP-Medienanwendung, die den Anruf abwickelt.
TransactionId— Die ID der Anruftransaktion. Bei eingehenden Anrufen wird der
TransactionId
kann von derNEW_INCOMING_CALL
-Ereignis wurde bei seinem ersten Aufruf an die Lambda-Funktion übergeben. Für ausgehende AnrufeTransactionId
wird in der Antwort vonCreateSipMediaApplicationCallaus.Argumente— Benutzerdefinierte Argumente, die der Lambda-Funktion im Rahmen des
CallUpdateRequest
Aktionsdaten. Kann 0 bis 20 Schlüssel-Wert-Paare enthalten.
Das folgende Beispiel zeigt eine typische Anforderung.
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
"}'
Antwortsyntax
{ "SipMediaApplicationCall": { "TransactionId": "
string
" } }
Antwortelemente
TransactionId— Die ID der Anruftransaktion, dieselbe ID wie die Anforderung.
Das folgende Beispiel zeigt einCALL_UPDATE_REQUESTED
Aufrufereignis.
{ "SchemaVersion": "1.0", "Sequence":
2
, "InvocationEventType": "CALL_UPDATE_REQUESTED", "ActionData": { "Type": "CallUpdateRequest", "Parameters": { "Arguments": { "string
": "string
" } } }, "CallDetails": { ... } }
Elemente der Veranstaltung
SchemaVersion— Die Version des JSON-Schemas (1.0)
Sequence— Die Sequenznummer des Ereignisses im Aufruf
invocationEventType— Die Art des Lambda-Aufruf-Ereignisses, in diesem Fall
CALL_UPDATE_REQUESTED
-
ActionData— Die Daten, die dem
CallUpdateRequest
AktionTyp— Die Art der Aktion, in diesem Fall
CallUpdateRequest
-
Parameter— Die Parameter der Aktion
Argumente— Die Argumente, die als Teil des
UpdateSipMediaApplicationCall
API-Anforderungen
CallDetails— Die Informationen zum aktuellen Anrufstatus
Unterbrechungsfreie und unterbrechungsfreie Aktionen verstehen
Wenn eine Lambda-Funktion eine neue Liste von Aktionen zurückgibt, während vorhandene Aktionen ausgeführt werden, werden alle Aktionen, die der laufenden Aktion folgen, durch die neuen Aktionen ersetzt. In einigen Fällen unterbricht die Lambda-Funktion laufende Aktionen, um sofort neue Aktionen auszuführen.
Das folgende Diagramm zeigt ein typisches Beispiel. Text unter dem Digram erklärt die Logik.

Wenn Aktion 2 unterbrechbar ist, stoppen wir sie und führen stattdessen neue Aktion 1 aus.
Wenn Aktion 2 nicht unterbrechbar ist, wird sie abgeschlossen, bevor die neue Aktion 1 gestartet wird.
In beiden Fällen wird Aktion 3 nicht ausgeführt.
Wenn etwas eine Aktion unterbricht, wird die Lambda-Funktion mit einemACTION_INTERRUPTED
event. Diese Veranstaltung wird nur Informationszwecken verwendet. Die SIP-Medienanwendung ignoriert alle Aktionen, die durch diesen Aufruf zurückgegeben wurden.
Arten von unterbrechungsfähigen Aktionen:
PlayAudio
RecordAudio
Pause
Beispiel-Lambda-Funktion
Dieses Beispiel zeigt eine typische Lambda-Funktion, die eine Audiodatei abspielt, ein Join-Token übergibt und den Aufruf aktualisiert.
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(); } }