Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Dans le cadre du service PSTN audio, SIP les applications multimédia vous permettent de définir des actions à exécuter lors d'un appel en invoquant des fonctions Lambda définies par l'utilisateur en fonction des événements de l'appel, tels qu'un appel entrant ou des chiffres. DTMF L'interface UpdateSipMediaApplicationCallAPIvous permet de déclencher une fonction Lambda à tout moment pendant qu'un appel est actif, en remplaçant les actions en cours par de nouvelles actions renvoyées par l'invocation.
Flux de travail
Vous utilisez le UpdateSipMediaApplicationCallAPIdans divers cas, tels que l'ajout de participants à une réunion, la désactivation ou la désactivation d'un utilisateur, sa déconnexion, etc. Le cas d'utilisation suivant décrit un flux de travail typique.
Un utilisateur appelle et écoute de la musique pendant qu'Amazon SDK Chime organise la réunion. Une fois la configuration terminée, Amazon Chime SDK arrête le son et admet l'appelant dans la réunion. Supposons ensuite l'utilisation d'un système distinct qui gère les réunions. MyMeetingService
Chaque appel entrant doit être mis en attente. Chime MyMeetingService avertit des appels entrants, MyMeetingService puis crée un participant pour chaque appel, et lorsque celui-ci MyMeetingService est prêt à démarrer la réunion, il avertit l'application SIP multimédia et fournit un jeton pour rejoindre la réunion.
Pour gérer ce cas, la fonction Lambda doit implémenter la logique suivante.
-
Lorsqu'un nouvel appel entrant arrive, le Lambda est invoqué avec un
NEW_INBOUND_CALL
événement. Le Lambda appelle leMyMeetingService
et transmettransactionId
celui qui identifie l'appel en cours et renvoie l'PlayAudio
action. -
Lorsque le service
MyMeetingService
est prêt à ajouter l'appelant à la réunion, il appelle UpdateSipMediaApplicationCallAPIet passe l'appeltransactionId
et dansJoinToken
le cadre de ses arguments. Cet API appel déclenche à nouveau la fonction Lambda, désormais associée à l'CALL_UPDATE_REQUESTED
événement. La MyMeetingService fonction estJoinToken
transmise à la Lambda dans le cadre de l'événement, et le jeton est utilisé pour renvoyer l'JoinChimeMeeting
action à l'application SIP multimédia, qui interrompt l'PlayAudio
action et connecte l'appelant à la réunion.
Note
L'interface UpdateSipMediaApplicationCallAPIrenvoie HTTP 202 (Accepté). L'application SIP multimédia confirme que l'appel est en cours et peut être mis à jour. Elle tente donc d'appeler la fonction Lambda. L'appel étant effectué de manière asynchrone, une réponse réussie de la part de API ne garantit pas le démarrage ou la fin de la fonction Lambda.
L'exemple suivant montre la syntaxe de la demande.
{
"SipMediaApplicationId": "string
",
"TransactionId": "string
",
"Arguments": {
"string": "string
"
}
}
Paramètres de requête
-
SipMediaApplicationId
— L'ID de l'application SIP multimédia qui gère l'appel. -
TransactionId
— L'identifiant de la transaction d'appel. Pour les appels entrants, ilsTransactionId
peuvent être obtenus à partir de l'NEW_INCOMING_CALL
événement transmis à la fonction Lambda lors de son premier appel. Pour les appels sortants,TransactionId
est renvoyé dans la réponse de CreateSipMediaApplicationCall. -
Arguments — Arguments personnalisés mis à la disposition de la fonction Lambda dans le cadre des données d'
CallUpdateRequest
action. Peut contenir de 0 à 20 paires clé-valeur.
L'exemple suivant illustre une demande type.
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
"}'
Syntaxe de réponse
{ "SipMediaApplicationCall": { "TransactionId": "
string
" } }
Éléments de réponse
-
TransactionId— L'identifiant de la transaction d'appel, le même identifiant que celui de la demande.
L'exemple suivant montre un événement d'CALL_UPDATE_REQUESTED
invocation.
{ "SchemaVersion": "1.0", "Sequence":
2
, "InvocationEventType": "CALL_UPDATE_REQUESTED", "ActionData": { "Type": "CallUpdateRequest", "Parameters": { "Arguments": { "string
": "string
" } } }, "CallDetails": { ... } }
Éléments de l'événement
-
SchemaVersion— La version du JSON schéma (1.0)
-
Séquence — Le numéro de séquence de l'événement dans l'appel
-
InvocationEventType— Le type d'événement d'invocation Lambda, dans ce cas,
CALL_UPDATE_REQUESTED
-
ActionData— Les données associées à l'
CallUpdateRequest
action.-
Type — Le type d'action, dans ce cas,
CallUpdateRequest
-
Paramètres — Les paramètres de l'action
-
Arguments — Les arguments transmis dans le cadre de la
UpdateSipMediaApplicationCall
API demande
-
-
-
CallDetails— Les informations sur l'état actuel de l'appel
Comprendre les actions interruptibles et non interruptibles
Lorsqu'une fonction Lambda renvoie une nouvelle liste d'actions alors que des actions existantes sont exécutées, toutes les actions qui suivent l'action en cours sont remplacées par les nouvelles actions. Dans certains cas, la fonction Lambda interrompt les actions en cours afin d'exécuter immédiatement de nouvelles actions.
Le schéma suivant illustre un exemple typique. Le texte situé sous le diagramme explique la logique.
Si l'action 2 est interruptible, nous l'arrêtons et exécutons la nouvelle action 1 à la place.
Si l'action 2 n'est pas interruptible, elle se termine avant le début de la nouvelle action 1.
Dans les deux cas, l'Action 3 n'est pas exécutée.
Si quelque chose interrompt une action, la fonction Lambda est invoquée avec ACTION_INTERRUPTED
un événement. Cet événement est utilisé à titre informatif uniquement. L'application SIP multimédia ignore toutes les actions renvoyées par cet appel.
Types d'actions interruptibles :
-
PlayAudio
-
RecordAudio
-
Pause
Exemple de fonction Lambda
Cet exemple montre une fonction Lambda typique qui lit un fichier audio, transmet un jeton de jointure et met à jour l'appel.
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(); } }