Aggiornamento delle chiamate in corso per l'audio PTSN di Amazon Chime SDK - SDK Amazon Chime

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Aggiornamento delle chiamate in corso per l'audio PTSN di Amazon Chime SDK

Come parte del servizio audio PSTN, le applicazioni multimediali SIP consentono di impostare azioni da eseguire su una chiamata richiamando funzioni Lambda definite dall'utente in base agli eventi della chiamata, ad esempio una chiamata in arrivo o cifre DTMF. Il UpdateSipMediaApplicationCallL'API consente di attivare una funzione Lambda in qualsiasi momento mentre una chiamata è attiva, sostituendo le azioni correnti con nuove azioni restituite dalla chiamata.

Flusso di lavoro

Si utilizza il UpdateSipMediaApplicationCallAPI in diversi casi, ad esempio per aggiungere partecipanti a una riunione, disattivare e riattivare l'audio di un utente, disconnetterlo e così via. Il seguente caso d'uso descrive un tipico flusso di lavoro.

Un utente chiama e ascolta musica mentre l'SDK Amazon Chime configura la riunione. Una volta completata la configurazione, Amazon Chime SDK interrompe l'audio e ammette il chiamante alla riunione. Quindi, supponiamo l'utilizzo di un sistema separato, MyMeetingService che gestisca le riunioni. Ogni chiamata in arrivo deve essere messa in attesa. Chime MyMeetingService notifica le chiamate in arrivo, MyMeetingService quindi crea un partecipante per ogni chiamata e, quando MyMeetingService è pronto per iniziare la riunione, notifica l'applicazione multimediale SIP e fornisce un token per partecipare alla riunione.

Per gestire questo caso, la funzione Lambda deve implementare la seguente logica.

  • Quando arriva una nuova chiamata in arrivo, la Lambda viene richiamata con un evento. NEW_INBOUND_CALL Lambda chiama MyMeetingService e passa il transactionId che identifica la chiamata corrente e restituisce l'azione. PlayAudio

  • Quando MyMeetingService è pronto per aggiungere il chiamante alla riunione, il servizio chiama UpdateSipMediaApplicationCallAPI e passa il comando transactionId e JoinToken come parte degli argomenti della chiamata. Questa chiamata API attiva nuovamente la funzione Lambda, ora con CALL_UPDATE_REQUESTED l'evento. MyMeetingService Passa JoinToken alla funzione Lambda come parte dell'evento e il token viene utilizzato per restituire l'JoinChimeMeetingazione all'applicazione multimediale SIP, che interrompe l'PlayAudioazione e connette il chiamante alla riunione.

Diagramma che mostra il flusso di dati nell'API. UpdateSipMediaApplicationCall
Nota

Il UpdateSipMediaApplicationCallL'API restituisce HTTP 202 (accettato). L'applicazione multimediale SIP conferma che la chiamata è in corso e può essere aggiornata, quindi tenta di richiamare la funzione Lambda. La chiamata viene eseguita in modo asincrono, quindi una risposta corretta dall'API non garantisce l'avvio o il completamento della funzione Lambda.

L'esempio seguente mostra la sintassi della richiesta.

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

Parametri della richiesta

  • SipMediaApplicationId— L'ID dell'applicazione multimediale SIP che gestisce la chiamata.

  • TransactionId— L'ID della transazione di chiamata. Per le chiamate in entrata, TransactionId è possibile ottenere dall'NEW_INCOMING_CALLevento passato alla funzione Lambda alla prima chiamata. Per le chiamate in uscita, TransactionId viene restituito nella risposta di CreateSipMediaApplicationCall.

  • Argomenti: argomenti personalizzati resi disponibili alla funzione Lambda come parte dei dati di CallUpdateRequest azione. Può contenere da 0 a 20 coppie chiave-valore.

L'esempio seguente mostra una richiesta tipica.

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"}'

Sintassi della risposta

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

Elementi di risposta

  • TransactionId— L'ID della transazione di chiamata, lo stesso ID della richiesta.

L'esempio seguente mostra un evento di CALL_UPDATE_REQUESTED invocazione.

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

Elementi dell'evento

  • SchemaVersion— La versione dello schema JSON (1.0)

  • Sequenza: il numero di sequenza dell'evento della chiamata

  • InvocationEventType— Il tipo di evento di invocazione Lambda, in questo caso, CALL_UPDATE_REQUESTED

  • ActionData— I dati associati all'azione. CallUpdateRequest

    • Tipo: il tipo di azione, in questo caso CallUpdateRequest

    • Parametri: i parametri dell'azione

      • Argomenti: gli argomenti passati come parte della richiesta UpdateSipMediaApplicationCall API

  • CallDetails— Le informazioni sullo stato corrente della chiamata

Comprensione delle azioni interrompibili e non interrompibili

Quando una funzione Lambda restituisce un nuovo elenco di azioni durante l'esecuzione di azioni esistenti, tutte le azioni che seguono l'azione in corso vengono sostituite con le nuove azioni. In alcuni casi, la funzione Lambda interrompe le azioni in corso per eseguire immediatamente nuove azioni.

Il diagramma seguente mostra un esempio tipico. Il testo sotto il diagramma spiega la logica.

Diagramma che mostra come è possibile sostituire le azioni durante una chiamata in corso a un'applicazione multimediale SIP.

Se l'Azione 2 è interrompibile, la interrompiamo ed eseguiamo invece una nuova Azione 1.

Se l'Azione 2 non è interrompibile, viene completata prima dell'inizio della nuova Azione 1.

In entrambi i casi, l'Azione 3 non viene eseguita.

Se qualcosa interrompe un'azione, la funzione Lambda viene richiamata con un evento. ACTION_INTERRUPTED Questo evento viene utilizzato solo a scopo informativo. L'applicazione multimediale SIP ignora tutte le azioni restituite da questa chiamata.

Tipi di azioni interrompibili:

  • PlayAudio

  • RecordAudio

  • Pause

Funzione Lambda di esempio

Questo esempio mostra una tipica funzione Lambda che riproduce un file audio, passa un token di join e aggiorna la chiamata.

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