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 aMyMeetingService
y pasa eltransactionId
que identifica la llamada actual y devuelve la acciónPlayAudio
.-
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 llamadatransactionId
yJoinToken
como parte de sus argumentos. Esta llamada a la API vuelve a activar la función de Lambda, ahora con el eventoCALL_UPDATE_REQUESTED
. La MyMeetingService pasaJoinToken
a la función Lambda como parte del evento y el token se utiliza para devolver laJoinChimeMeeting
acción a la aplicación multimedia SIP, que la interrumpe y conecta a laPlayAudio
persona que llama a la reunión.
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, elTransactionId
se puede obtener del eventoNEW_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.
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(); } }