Aktualisieren von laufenden Anrufen - Amazon Chime SDK

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 einemNEW_INBOUND_CALLevent. Der Lambda nennt dasMyMeetingServiceÜbermitteln Sie dastransactionIddas identifiziert den aktuellen Anruf und gibt denPlayAudioAktion

  • Wenn derMyMeetingServiceist bereit, den Anrufer zum Meeting hinzuzufügen, der Dienst ruft dieupdateSipMediaApplicationCallAPI und übergibt die Anruf'stransactionIdundJoinTokenals Teil seiner Argumente. Dieser API-Aufruf löst die Lambda-Funktion erneut aus, jetzt mit demCALL_UPDATE_REQUESTEDevent. Die MyMeetingService Übermitteln Sie dasJoinTokenzur Lambda-Funktion als Teil des Ereignisses, und das Token wird verwendet, um dieJoinChimeMeetingAktion zur SIP-Medienanwendung, die diePlayAudioAktion und verbindet den Anrufer mit dem Meeting.


   Diagramm, das den Datenfluss imUpdateSipMediaApplicationCallAPI.
Anmerkung

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 derTransactionIdkann von derNEW_INCOMING_CALL-Ereignis wurde bei seinem ersten Aufruf an die Lambda-Funktion übergeben. Für ausgehende AnrufeTransactionIdwird in der Antwort vonCreateSipMediaApplicationCallaus.

  • Argumente— Benutzerdefinierte Argumente, die der Lambda-Funktion im Rahmen desCallUpdateRequestAktionsdaten. 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_REQUESTEDAufrufereignis.

{ "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 FallCALL_UPDATE_REQUESTED

  • ActionData— Die Daten, die demCallUpdateRequestAktion

    • Typ— Die Art der Aktion, in diesem FallCallUpdateRequest

    • Parameter— Die Parameter der Aktion

      • Argumente— Die Argumente, die als Teil desUpdateSipMediaApplicationCallAPI-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.


   Diagramm, das zeigt, wie Aktionen während eines laufenden SIP-Medienanwendungsaufrufs ersetzt werden können.

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_INTERRUPTEDevent. 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(); } }