Actualizar las llamadas en curso - Amazon Chime SDK

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Actualizar las llamadas en curso

Como parte del servicio de audio PSTN, las aplicaciones multimedia SIP permiten configurar las acciones que se ejecutan en una llamada invocando funciones de Lambda definidas por el usuario en función de los eventos de la llamada, como una llamada entrante o dígitos DTMF. La UpdateSipMediaApplicationCallAPI le permite activar una función Lambda en cualquier momento mientras la llamada esté activa, sustituyendo las acciones actuales por las nuevas acciones devueltas por la invocación.

Flujo de trabajo

La UpdateSipMediaApplicationCallAPI se utiliza en varios casos, por ejemplo, para añadir participantes a una reunión, silenciar y volver a silenciar a un usuario, desconectarlo, etc. El siguiente caso de uso describe un flujo de trabajo típico.

Un usuario llama y escucha música mientras Amazon Chime SDK configura la reunión. Una vez completada la configuración, Amazon Chime SDK detiene el audio y admite a la persona que llama a la reunión. A continuación, suponga el uso de un sistema independiente, MyMeetingService, que gestione las reuniones. Todas las llamadas entrantes deben ponerse en espera. Chime notifica las MyMeetingService llamadas entrantes y, a MyMeetingService continuación, crea un asistente para cada llamada y, cuando MyMeetingService está listo para iniciar la reunión, lo notifica a la aplicación multimedia SIP y proporciona un token para unirse a la reunión.

Para gestionar este caso, la función de Lambda debe implementar la siguiente lógica.

  • Cuando llega una nueva llamada entrante, se invoca la Lambda con un evento NEW_INBOUND_CALL. La Lambda llama a MyMeetingService y pasa el transactionId que identifica la llamada actual y devuelve la acción PlayAudio.

  • Cuando MyMeetingService está listo para añadir a la persona que ha convocado a la reunión, el servicio llama a la UpdateSipMediaApplicationCallAPI y pasa la llamada transactionId y JoinToken como parte de sus argumentos. Esta llamada a la API vuelve a activar la función de Lambda, ahora con el evento CALL_UPDATE_REQUESTED. La MyMeetingService pasa JoinToken a la función Lambda como parte del evento y el token se utiliza para devolver la JoinChimeMeeting acción a la aplicación multimedia SIP, que la interrumpe y conecta a la PlayAudio persona que llama a la reunión.

Diagrama que muestra el flujo de datos en la API UpdateSipMediaApplicationCall.
nota

La UpdateSipMediaApplicationCallAPI devuelve el HTTP 202 (aceptado). La aplicación multimedia SIP confirma que la llamada está en curso y que se puede actualizar, por lo que intenta invocar la función de Lambda. La invocación se realiza de forma asíncrona, por lo que una respuesta correcta de la API no garantiza que la función de Lambda se haya iniciado o completado.

En el siguiente ejemplo se muestra la sintaxis de solicitud.

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

Parámetros de solicitud

  • SipMediaApplicationId— El ID de la aplicación multimedia SIP que gestiona la llamada.

  • TransactionId— El ID de la transacción de llamada. En el caso de las llamadas entrantes, el TransactionId se puede obtener del evento NEW_INCOMING_CALL pasado a la función de Lambda en su primera invocación. En el caso de las llamadas salientes, TransactionId se devuelve en la respuesta de CreateSipMediaApplicationCall.

  • Argumentos: argumentos personalizados que se ponen a disposición de la función de Lambda como parte de los datos de la acción CallUpdateRequest. Puede contener de 0 a 20 pares de clave-valor.

A continuación se muestra un ejemplo de solicitud:

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

Sintaxis de la respuesta

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

Elementos de respuesta

  • TransactionId— El identificador de la transacción de llamada, el mismo identificador que el de la solicitud.

En el siguiente ejemplo, se muestra un evento de invocación CALL_UPDATE_REQUESTED.

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

Elementos de evento

  • SchemaVersion— La versión del esquema JSON (1.0)

  • Secuencia: el número de secuencia del evento de la llamada

  • InvocationEventType— El tipo de evento de invocación de Lambda, en este caso, CALL_UPDATE_REQUESTED

  • ActionData— Los datos asociados a la CallUpdateRequest acción.

    • Tipo: el tipo de acción, en este caso, CallUpdateRequest

    • Parámetros: los parámetros de la acción

      • Argumentos: los argumentos que se pasan como parte de la solicitud de API UpdateSipMediaApplicationCall

  • CallDetails— La información sobre el estado actual de la llamada

Comprensión de las acciones interrumpibles y no interrumpibles

Cuando una función de Lambda devuelve una nueva lista de acciones mientras se ejecutan las acciones existentes, todas las acciones que siguen a la acción en curso se sustituyen por las nuevas acciones. En algunos casos, la función de Lambda interrumpe las acciones en curso para ejecutar nuevas acciones de forma inmediata.

El siguiente diagrama muestra un ejemplo típico. El texto que aparece debajo del diagrama explica la lógica.

Diagrama que muestra cómo se pueden reemplazar las acciones durante una llamada en curso a una aplicación multimedia SIP.

Si la acción 2 es interrumpible, la detenemos y ejecutamos la nueva acción 1 en su lugar.

Si la acción 2 no es interrumpible, se completa antes de que comience la nueva acción 1.

En ambos casos, la acción 3 no se ejecuta.

Si algo interrumpe una acción, la función de Lambda se invoca con un evento ACTION_INTERRUPTED. Este evento se utiliza únicamente con fines informativos. La aplicación multimedia SIP ignora todas las acciones devueltas por esta invocación.

Tipos de acciones interrumpibles:

  • PlayAudio

  • RecordAudio

  • Pause

Función de Lambda de ejemplo

En este ejemplo, se muestra una función de Lambda típica que reproduce un archivo de audio, pasa un token de unión y actualiza la llamada.

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