

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.

# Découvrez les événements de téléphonie qui invoquent des AWS Lambda fonctions pour le service audio PSTN du SDK Amazon Chime
<a name="invoking-Lambda"></a>

Le service audio invoque des AWS Lambda fonctions en réponse à différents événements. Chaque appel spécifie un type d'événement d'invocation et fournit les détails de l'appel, y compris ses participants, le cas échéant. Les rubriques suivantes décrivent les événements du service audio qui appellent des AWS Lambda fonctions. 

# Passer un appel sortant pour utiliser le service audio PSTN du SDK Amazon Chime
<a name="use-create-call-api"></a>

Pour créer un appel sortant, vous devez utiliser l'[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateSipMediaApplicationCall.html)API. L'API invoque le point de terminaison d'un paramètre spécifié`SIP media application ID`. Les clients peuvent contrôler le flux de l'appel en émettant différents signaux et [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_SipMediaApplication.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_SipMediaApplication.html)actions depuis le terminal. 

En cas de réponse positive, l'API renvoie un code d'état http 202 ainsi qu'un ID de transaction, que vous pouvez utiliser avec l'[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html)API pour mettre à jour un appel en cours.

Le schéma suivant montre les appels effectués vers le point de terminaison de la AWS Lambda fonction pour un appel sortant.

![\[Schéma illustrant le flux de programmation pour les appels adressés au point de terminaison AWS Lambda.\]](http://docs.aws.amazon.com/fr_fr/chime-sdk/latest/dg/images/sip-api-1.png)


Le point de terminaison configuré pour l'application multimédia SIP est invoqué pour différents états de l'appel sortant. Lorsqu'un client lance un appel, le SDK Amazon Chime appelle le point de terminaison avec `NEW_OUTBOUND_CALL` un type d'événement d'invocation. 

Cet exemple montre un événement d'invocation typique pour un`NEW_OUTBOUND_CALL`.

```
{
    "SchemaVersion": "1.0",
        "Sequence": 1,
        "InvocationEventType": "NEW_OUTBOUND_CALL",
        "CallDetails": {
            "TransactionId": "transaction-id",
            "AwsAccountId": "aws-account-id",
            "AwsRegion": "us-east-1",
            "SipApplicationId": "sip-application-id",
            "Participants": [
                {
                    "CallId": "call-id-1",
                    "ParticipantTag": "LEG-A",
                    "To": "+1xxxx",
                    "From": "+1xxxxxxx",
                    "Direction": "Outbound",
                    "StartTimeInMilliseconds": "159700958834234"
                }
            ]
    }
}
```

Toute réponse à un appel lié à un AWS Lambda événement est ignorée.

Lorsque nous recevons une `RINGING` notification du destinataire, le SDK Amazon Chime appelle à nouveau le point de terminaison configuré. 

Cet exemple montre un événement d'invocation typique pour`RINGING`.

```
{
    "SchemaVersion": "1.0",
        "Sequence": 1,
        "InvocationEventType": "RINGING",
        "CallDetails": {
            "TransactionId": "transaction-id",
            "AwsAccountId": "aws-account-id",
            "AwsRegion": "us-east-1",
            "SipApplicationId": "sip-application-id",
            "Participants": [
                {
                    "CallId": "call-id-1",
                    "ParticipantTag": "LEG-A",
                    "To": "+1xxxx",
                    "From": "+1xxxxxxx",
                    "Direction": "Outbound",
                    "StartTimeInMilliseconds": "159700958834234"
                }
           ]
    }
}
```

Toute réponse à un appel lié à un AWS Lambda événement est ignorée.

Si le récepteur ne répond pas à l'appel ou si l'appel échoue en raison d'une erreur, Chime déconnecte l'appel et appelle le point de terminaison avec le `Hangup` type d'événement. Pour plus d'informations sur le type d'`Hangup`événement, reportez-vous à[Fin d'un appel à l'aide du service audio PSTN du SDK Amazon Chime](case-5.md). 

Si l'appel est répondu, Chime appelle le point de terminaison avec l'`CALL_ANSWERED`action. Cet exemple montre un événement d'invocation typique.

```
{
  "SchemaVersion": "1.0",
    "Sequence": 1,
    "InvocationEventType": "CALL_ANSWERED",
    "CallDetails": {
        ""TransactionId": "transaction-id",
            "AwsAccountId": "aws-account-id",
            "AwsRegion": "us-east-1",
            "SipApplicationId": "sip-application-id",
            "Participants": [
                {
                    "CallId": "call-id-1",
                    "ParticipantTag": "LEG-A",
                    "To": "+1xxxx",
                    "From": "+1xxxxxxx",
                    "Direction": "Outbound",
                    "StartTimeInMilliseconds": "159700958834234",
                "Status": "Connected"
            }
        ]
    }
}
```

À ce stade, vous pouvez renvoyer des actions en répondant à l'invocation par une liste d'actions. Si vous ne souhaitez exécuter aucune action, répondez par une liste vide. Vous pouvez répondre avec un maximum de 10 actions pour chaque AWS Lambda appel, et vous pouvez invoquer une fonction Lambda 1 000 fois par appel. Pour plus d'informations sur la réponse par des ensembles d'actions, reportez-vous à[Répondre aux appels avec des listes d'actions à l'aide du service audio PSTN du SDK Amazon Chime](invoke-on-call-leg.md).

# Réception d'un appel entrant à l'aide du service audio PSTN du SDK Amazon Chime
<a name="case-1"></a>

Lorsqu'un `NEW_INCOMING_CALL` événement se produit, le service audio crée un message unique `TransactionID` et unique `CallID` qui persiste jusqu'à ce que l'`HANGUP`événement se produise.

Vous pouvez réagir de différentes manières à un `NEW_INCOMING_CALL` événement. Par exemple :
+ Envoyez `PlayAudio` des `RecordAudio` actions et répondez automatiquement à l'appel. 
+ Envoyez une `Pause` action.
+ Envoyez une `Hangup` action, auquel cas l'appel n'est pas répondu et le client n'est pas débité.
+ Envoyez une `CallAndBridge` action et ajoutez un autre utilisateur à l'appel.
+ Ne faites rien, la tentative d'appel expire au bout de 30 secondes.

Lorsqu'un nouvel appel entrant est reçu, l'application multimédia SIP invoque une AWS Lambda fonction avec cette charge utile.

```
{
    "SchemaVersion": "1.0",
    "Sequence": 2,
    "InvocationEventType": "NEW_INBOUND_CALL"
    "CallDetails": {
        "TransactionId": "transaction-id",
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "LEG-A",
                "To": "+12065551212",
                "From": "+15105550101",
                "Direction": "Inbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Connected"
            }
        ]
    }
}
```

# Spécification des actions en réponse aux événements de téléphonie pour le service audio PSTN du SDK Amazon Chime
<a name="use-case-2"></a>

Dans le service audio, les applications multimédia SIP invoquent AWS Lambda des fonctions. *À son tour, une fonction Lambda peut renvoyer une liste d'instructions appelées actions.* Une action est un élément que vous souhaitez exécuter lors d'une partie d'un appel téléphonique, par exemple envoyer ou recevoir des chiffres, rejoindre une réunion, etc. Pour plus d'informations sur les actions invoquées par le service audio PSTN, consultez. [Comprendre les événements de téléphonie pour le service audio PSTN du SDK Amazon Chime](pstn-invocations.md)

Lorsqu'une application multimédia SIP exécute avec succès une liste d'actions, l'application appelle la AWS Lambda fonction avec un événement d'invocation du `ACTION_SUCCESSFUL` type. Si l'une des actions échoue, l'application multimédia SIP appelle la AWS Lambda fonction avec l'`ACTION_FAILED`événement.

L'application multimédia SIP ne revient que `ACTION_SUCCESSFUL` si toutes les actions de la liste aboutissent. Si l'une des actions de la liste échoue, l'application multimédia SIP invoque la AWS Lambda fonction associée à l'`ACTION_FAILED`événement et efface les actions restantes de la liste après l'échec. L'application multimédia SIP exécute ensuite l'action suivante renvoyée par la AWS Lambda fonction. Vous utilisez la `ActionData` touche pour identifier l'appel qui a appelé la fonction.

L'événement suivant montre un exemple de charge utile pour le type d'événement `ACTION_SUCCESSFUL` d'invocation après une `PlayAudioAndGetDigits` action.

```
{
    "SchemaVersion": "1.0",
    "Sequence": 3,
    "InvocationEventType": "ACTION_SUCCESSFUL",
    "ActionData": {
        "Type": "PlayAudioAndGetDigits",
        "Parameters" : {
            "CallId": "call-id-1",
            "AudioSource": {
                "Type": "S3",
                "BucketName": "bucket-name",
                "Key": "failure-audio-file.wav"
            },
            "FailureAudioSource": {
                "Type": "S3",
                "BucketName": "bucket-name",
                "Key": "failure-audio-file.wav"
            },
            "MinNumberOfDigits": 3,
            "MaxNumberOfDigits": 5,
            "TerminatorDigits": ["#"],
            "InBetweenDigitsDurationInMilliseconds": 5000,
            "Repeat": 3,
            "RepeatDurationInMilliseconds": 10000
        },
        "ReceivedDigits": "123"
    }
    "CallDetails": {
        "TransactionId": "transaction-id",
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "LEG-A",
                "To": "+12065551212",
                "From": "+15105550101",
                "Direction": "Inbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Connected"
                }
            ]
        }
    }
}
```

Lorsqu'une action d'une liste échoue, l'application multimédia SIP invoque la AWS Lambda fonction pour vous informer de l'échec et pour obtenir un nouvel ensemble d'actions à exécuter sur cet appel. L'événement suivant montre l'exemple de charge utile pour le type d'événement `ACTION_FAILED` d'invocation après une `PlayAudio` action.

```
{
    "SchemaVersion": "1.0",
    "Sequence": 4,
    "InvocationEventType": "ACTION_FAILED",
    "ActionData": {
        "Type": "PlayAudio",
        "Parameters" : {
            "CallId": "call-id-1",
            "AudioSource": {
                "Type": "S3",
                "BucketName": "bucket-name",
                "Key": "audio-file.wav"            
            }
        },
        "ErrorType": "InvalidAudioSource",
        "ErrorMessage": "Audio Source parameter value is invalid."
    }
    "CallDetails": {
        "TransactionId": "transaction-id",
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "LEG-A",
                "To": "+12065551212",
                "From": "+15105550101",
                "Direction": "Inbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Connected"
            }
        ]
    }
}
}
```

# Réception de l'entrée de l'appelant pour le service audio PSTN du SDK Amazon Chime
<a name="case-4"></a>

Vous utilisez cette `ReceiveDigits` action pour collecter les chiffres DTMF entrants et les comparer à une expression régulière. Lorsque l'application multimédia SIP reçoit des chiffres correspondant à l'expression régulière, elle invoque une AWS Lambda fonction avec un `ACTION_SUCCESSFUL` événement. Les chiffres collectés apparaissent dans la `ReceivedDigits` valeur de l'`ActionData`objet.

Par exemple :

```
{
    "SchemaVersion": "1.0",
    "Sequence": 4,
    "InvocationEventType": "ACTION_SUCCESSFUL",
    "ActionData": {
        "ReceivedDigits": "",
        "Type": "ReceiveDigits",
        "Parameters": {
            "CallId": "call-id-1",
            "InputDigitsRegex": "^\d{2}#$",
            "InBetweenDigitsDurationInMilliseconds": 5000,
            "FlushDigitsDurationInMilliseconds": 10000
        }
    },
    "CallDetails": {
        "TransactionId": "transaction-id",
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "LEG-A",
                "To": "+12065551212",
                "From": "+15105550101",
                "Direction": "Inbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Connected"
            }
        ]
    }
}
```

Une fois que l'appelant a saisi des chiffres correspondant à votre modèle d'expression régulière, l'application multimédia SIP invoque une AWS Lambda fonction qui renvoie le type de charge utile suivant :

```
{
    "SchemaVersion": "1.0",
    "Sequence": 5,
    "InvocationEventType": "DIGITS_RECEIVED",
    "ActionData": {
        "ReceivedDigits": "11#",
        "Type": "ReceiveDigits",
        "Parameters": {
            "CallId": "call-id-1",
            "InputDigitsRegex": "^\d{2}#$",
            "InBetweenDigitsDurationInMilliseconds": 5000,
            "FlushDigitsDurationInMilliseconds": 10000
        }
    },
    "CallDetails": {
        "TransactionId": "transaction-id",
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "LEG-A",
                "To": "+12065551212",
                "From": "+15105550101",
                "Direction": "Inbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Connected"
            }
        ]
    }
}
```

Voir un exemple pratique sur GitHub : [https://github.com/aws-samples/amazon-chime-sma-on-demand-recording](https://github.com/aws-samples/amazon-chime-sma-on-demand-recording)

# Mise à jour des appels en cours pour l'audio PTSN du SDK Amazon Chime
<a name="update-sip-call"></a>

Dans le cadre du service audio PSTN, les applications multimédia SIP 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. La [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html)L'API vous 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 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html)API dans 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 que le SDK Amazon Chime organise la réunion. Une fois la configuration terminée, le SDK Amazon Chime 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 multimédia SIP 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 le `MyMeetingService` et transmet `transactionId` 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 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html)API et transmet l'appel `transactionId` et dans `JoinToken` le cadre de ses arguments. Cet appel d'API déclenche à nouveau la fonction Lambda, désormais associée à l'`CALL_UPDATE_REQUESTED`événement. La fonction est MyMeetingService transmise `JoinToken` à la Lambda dans le cadre de l'événement, et le jeton est utilisé pour renvoyer l'`JoinChimeMeeting`action à l'application multimédia SIP, qui interrompt l'`PlayAudio`action et connecte l'appelant à la réunion.

![\[Schéma illustrant le flux de données dans l'UpdateSipMediaApplicationCallAPI.\]](http://docs.aws.amazon.com/fr_fr/chime-sdk/latest/dg/images/update-sip-call-flow3.png)


**Note**  
La [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html)L'API renvoie HTTP 202 (accepté). L'application multimédia SIP 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 l'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 multimédia SIP qui gère l'appel. 
+ `TransactionId`— L'identifiant de la transaction d'appel. Pour les appels entrants, ils `TransactionId` 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 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateSipMediaApplicationCall.html). 
+ **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 schéma JSON (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 demande `UpdateSipMediaApplicationCall` d'API
+ **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.

![\[Schéma montrant comment les actions peuvent être remplacées lors d'un appel d'application multimédia SIP en cours.\]](http://docs.aws.amazon.com/fr_fr/chime-sdk/latest/dg/images/update-sip-actions.png)


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 multimédia SIP 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();
    }
}
```

# Fin d'un appel à l'aide du service audio PSTN du SDK Amazon Chime
<a name="case-5"></a>

Vous pouvez utiliser l'[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateSipMediaApplicationCall.html)API pour mettre fin à un appel sortant. L'API appelle le point de terminaison d'un **ID d'application multimédia SIP** spécifié. Les clients peuvent contrôler le flux de l'appel en renvoyant des actions à l'application multimédia SIP.

En cas de réponse positive, l'API renvoie un code d'état http 202 avec le`transactionId`, que vous pouvez utiliser avec l'[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_UpdateSipMediaApplicationCall.html)API pour mettre à jour un appel en cours.

Le schéma suivant montre les appels effectués vers le point de terminaison de la AWS Lambda fonction pour un appel sortant.

![\[Le flux de données lorsque vous appelez l'CreateSipMediaApplicationCallAPI. L'API invoque un point de terminaison différent lorsque le statut d'un appel sortant change.\]](http://docs.aws.amazon.com/fr_fr/chime-sdk/latest/dg/images/sip-api-1.png)


Le point de terminaison configuré pour l'application multimédia SIP est invoqué pour différents états de l'appel sortant. Lorsqu'un client reçoit un appel, le SDK Amazon Chime appelle le point de terminaison avec un `HANGUP` type d'événement d'invocation. 

Cet exemple montre un événement d'invocation typique pour un`HANGUP`.

```
{
    "SchemaVersion": "1.0",
    "Sequence": 6,
    "InvocationEventType": "HANGUP",
    "ActionData": {
        "Type": "Hangup",
        "Parameters": {
            "CallId": "call-id-1",
            "ParticipantTag": "LEG-A"
        }
    },
    "CallDetails": {
        "TransactionId": "transaction-id",
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "LEG-A",
                "Direction": "Inbound",
                 "To": "+12065551212",
                "From": "+15105550101",
                "StartTimeInMilliseconds": "1597009588",
                "Status": "Disconnected"
            }
        ]
    }
}

// if LEG-B receives a hangup in a bridged call, such as a meeting ending
{
    "SchemaVersion": "1.0",
    "Sequence": 6,
    "InvocationEventType": "HANGUP",
    "ActionData": {
        "Type": "ReceiveDigits",
        "Parameters": {
            "CallId": "call-id-2",
            "ParticipantTag": "LEG-B"
        }
    },
    "CallDetails": {
        "TransactionId": "transaction-id",
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "Leg-A",
                 "To": "+12065551212",
                "From": "+15105550101",
                "Direction": "Inbound",
                "StartTimeInMilliseconds": "1597009588",
                "Status": "Connected"
            },
            {
                "CallId": "call-id-2",
                "ParticipantTag": "Leg-B",
                "To": "+17035550122",
                "From": "SMA",
                "Direction": "Outbound",
                "StartTimeInMilliseconds": "15010595",
                "Status": "Disconnected"
            }
        ]
    }
}
```

# Comprendre end-to-end les appels pour le service audio PSTN du SDK Amazon Chime
<a name="use-cases"></a>

Ce cas d'utilisation fournit un exemple de code permettant de recevoir un appel téléphonique d'un appelant PSTN, d'accueillir l'appelant avec un message audio, d'obtenir le code PIN de la réunion auprès de l'appelant, de lire du son et de rejoindre l'appelant à la réunion.

**Événements et actions d'invocation**  
Le service audio transmet les événements d'invocation aux AWS Lambda fonctions sous forme d'objets JSON. Les objets incluent le type d'événement d'invocation et toutes les métadonnées pertinentes. La AWS Lambda fonction renvoie également les actions des applications multimédia SIP sous forme d'objets JSON, et ces objets incluent un type d'action et toutes les métadonnées pertinentes.

Le tableau suivant répertorie les événements d'invocation, et les événements possibles`ActionData.Type`, lorsque vous recevez un événement d'invocation.


|  Événement d'invocation  |  ActionData.Type  | 
| --- | --- | 
|  ACTION\$1RÉUSSIE  |  CallAndBridge ReceiveDigits PlayAudio PlayAudioAndGetDigits  JoinChimeMeeting ModifyChimeMeetingAttendees RecordMeeting  | 
|  ACTION\$1ÉCHEC  |  CallAndBridge PlayAudio PlayAudioAndGetDigits ModifyChimeMeetingAttendees RecordMeeting  | 
| RACCROCHER |  HangUp  | 
|  CHIFFRES\$1REÇUS  | ReceiveDigits | 

**Note**  
Pour implémenter le cas d'utilisation suivant, vous avez besoin d'au moins un numéro de téléphone dans votre inventaire du SDK Amazon Chime, d'un objet géré par une application multimédia SIP qui utilise une AWS Lambda fonction avec un nom de ressource Amazon (ARN) et d'une règle SIP qui utilise le numéro de téléphone comme déclencheur.

Lorsque le SDK Amazon Chime reçoit un appel au numéro de téléphone spécifié dans la règle, le service audio PSTN appelle une AWS Lambda fonction avec le type d'événement d'invocation. `NEW_INBOUND_CALL`

```
{
    "SchemaVersion": "1.0",
    "Sequence": 1,
    "InvocationEventType": "NEW_INBOUND_CALL",
    "CallDetails": {
        "TransactionId": "transaction-id",
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "LEG-A",
                "To": "+11234567890",
                "From": "+19876543210",
                "Direction": "Inbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Connected"
            }
        ]
    }
}
```

Vous pouvez programmer la AWS Lambda fonction pour valider les détails de l'appel et les enregistrer pour une utilisation future. Lors d'un `NEW_INBOUND_CALL` événement, la AWS Lambda fonction répond par un ensemble d'actions qui lancent une invite de bienvenue et demandent le code PIN de la réunion.

Les fichiers audio répondent aux exigences suivantes :
+ Vous devez lire des fichiers audio à partir d'un bucket Amazon Simple Storage Service (S3). Le compartiment S3 doit appartenir au même AWS compte que l'application multimédia SIP. En outre, vous devez donner l'`s3:GetObject`autorisation au principal du service Amazon Chime SDK Voice Connector—. `voiceconnector.chime.amazonaws.com` Pour ce faire, vous pouvez utiliser la console S3 ou l'interface de ligne de commande (CLI).
+ Vous devez utiliser des fichiers WAV PCM d'une taille maximale de 50 Mo. Le SDK Amazon Chime recommande 8 monos. KHz 
+ Les métadonnées S3 de chaque fichier WAV doivent contenir`{'ContentType': 'audio/wav'}`.

```
{
    "SchemaVersion": "1.0",
    "Actions": [
        {
            "Type" : "PlayAudio",    
            "Parameters" : {
                "CallId": "call-id-1",
                
                "AudioSource": {
                    "Type": "S3",
                    "BucketName": "chime-meetings-audio-files-bucket-name",
                    "Key": "welcome-to-meetings.wav"
                }
            }
        },
        {
            "Type": "PlayAudioAndGetDigits",
            "Parameters" : {
                "ParticipantTag": "LEG-A",
                
                "AudioSource": {
                    "Type": "S3",
                    "BucketName": "chime-meetings-audio-files-bucket-name",
                    "Key": "enter-meeting-pin.wav"
                },
                "FailureAudioSource": {
                    "Type": "S3",
                    "BucketName": "chime-meetings-audio-files-bucket-name",
                    "Key": "invalid-meeting-pin.wav"
                },
                "MinNumberOfDigits": 3,
                "MaxNumberOfDigits": 5,
                "TerminatorDigits": ["#"],
                "InBetweenDigitsDurationInMilliseconds": 5000,
                "Repeat": 3,
                "RepeatDurationInMilliseconds": 10000
            }
        }
    ]
}
```

L'application multimédia SIP exécute ces actions sur le segment d'appel A. En supposant que l'`PlayAudioAndGetDigits`action reçoit les chiffres, l'application multimédia SIP invoque la AWS Lambda fonction avec le type d'`ACTION_SUCCESSFUL`événement.

```
{
    "SchemaVersion": "1.0",
    "Sequence": 2,
    "InvocationEventType": "ACTION_SUCCESSFUL",
    "ActionData": {
        "Type": "PlayAudioAndGetDigits",
        "Parameters" : {
            "ParticipantTag": "LEG-A",
            "AudioSource": {
                "Type": "S3",
                "BucketName": "chime-meetings-audio-files-bucket-name",
                "Key": "enter-meeting-pin.wav"
            },
            "FailureAudioSource": {
                "Type": "S3",
                "BucketName": "chime-meetings-audio-files-bucket-name",
                "Key": "invalid-meeting-pin.wav"
            },
            "MinNumberOfDigits": 3,
            "MaxNumberOfDigits": 5,
            "TerminatorDigits": ["#"],
            "InBetweenDigitsDurationInMilliseconds": 5000,
            "Repeat": 3,
            "RepeatDurationInMilliseconds": 10000
        },
        "ReceivedDigits": "12345" // meeting PIN
    },
    "CallDetails": {
        ... // same as in previous event
    }
}
}
```

Vous pouvez programmer une AWS Lambda fonction pour identifier l'appelant en fonction des `CallDetails` données. Vous pouvez également valider le code PIN de la réunion reçu plus tôt. En supposant que le code PIN est correct, vous utilisez ensuite le [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateMeeting.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateMeeting.html)et [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateAttendee.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateAttendee.html) APIs pour créer la réunion du SDK Amazon Chime et générer le jeton de participation utilisé par le participant à la réunion. La AWS Lambda fonction répond en demandant de rejoindre la réunion du SDK Amazon Chime.

```
{
    "SchemaVersion": "1.0",
    "Actions": [
        {
            "Type": "JoinChimeMeeting",
            "Parameters": {
                "JoinToken": "meeting-attendee-join-token"
            }
        }
    ]
}
```

En supposant que `JoinToken` c'est valide, l'application multimédia SIP rejoint la réunion du SDK Amazon Chime et invoque une AWS Lambda fonction avec l'`ACTION_SUCCESSFUL`événement, qui `CallDetails` contient les données de l'application multimédia SIP et du service Chime Media () `LEG-B` 

```
{
    "SchemaVersion": "1.0",
    "Sequence": 3,
    "InvocationEventType": "ACTION_SUCCESSFUL",
    "ActionData": {
        "Type" : "JoinChimeMeeting",
        "Parameters" : {
            "JoinToken": "meeting-attendee-join-token"
        }
    },
    "CallDetails": {
        "TransactionId": "transaction-id", 
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "LEG-A",
                "To": "+11234567890",
                "From": "+19876543210",
                "Direction": "Inbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Connected"
            },
            {
                "CallId": "call-id-2",
                "ParticipantTag": "LEG-B",
                "To": "SMA",
                "From": "+17035550122",
                "Direction": "Outbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Connected"
            }
        ]
    }
}
```

Si vous souhaitez arrêter d'exécuter des actions lors de l'appel ou du volet appel à ce stade, vous pouvez répondre par un ensemble d'actions vide.

```
{
    "SchemaVersion": "1.0"
    "Actions": []
}
```

Une fois que l'appelant a raccroché, l'application multimédia SIP invoque la AWS Lambda fonction associée à l'événement. `HANGUP` 

```
{
    "SchemaVersion": "1.0",
    "Sequence": 4,
    "InvocationEventType": "HANGUP",
    "ActionData": {
        "Type": "Hangup",
        "Parameters": {
            "CallId": "call-id-1",
            "ParticipantTag": "LEG-A"
        }
    },
    "CallDetails": {
        "TransactionId": "transaction-id", 
        "AwsAccountId": "aws-account-id",
        "AwsRegion": "us-east-1",
        "SipRuleId": "sip-rule-id",
        "SipApplicationId": "sip-application-id",
        "Participants": [
            {
                "CallId": "call-id-1",
                "ParticipantTag": "LEG-A",
                "To": "+11234567890",
                "From": "+19876543210",
                "Direction": "Inbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Disconnected"
            },
            {
                "CallId": "call-id-2",
                "ParticipantTag": "LEG-B",
                "To": "SMA",
                "From": "+17035550122",
                "Direction": "Outbound",
                "StartTimeInMilliseconds": "159700958834234",
                "Status": "Disconnected"
            }
        ]
    }
}
```

Si vous répondez à un `Hangup` événement par une action, l'application multimédia SIP ignore l'action si aucun autre n'`Participants`affiche un `Status` de`Connected`.