

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Aktualisierung laufender Anrufe für Amazon Chime SDK PTSN-Audio
<a name="update-sip-call"></a>

Als Teil des PSTN-Audiodienstes können Sie mit SIP-Medienanwendungen Aktionen festlegen, die bei einem Anruf ausgeführt werden, indem Sie benutzerdefinierte Lambda-Funktionen aufrufen, die auf den Anrufereignissen basieren, z. B. einem eingehenden Anruf oder DTMF-Ziffern. Die [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 ermöglicht es Ihnen, jederzeit eine Lambda-Funktion auszulösen, während ein Aufruf aktiv ist. Dabei werden die aktuellen Aktionen durch neue Aktionen ersetzt, die vom Aufruf zurückgegeben werden.

**Workflow**  
Sie verwenden die [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 in einer Vielzahl von Fällen, z. B. beim Hinzufügen von Teilnehmern zu einem Meeting, beim Stummschalten und Aufheben der Stummschaltung von Benutzern, beim Trennen der Verbindung usw. Der folgende Anwendungsfall beschreibt einen typischen Arbeitsablauf.

Ein Benutzer ruft an und hört Musik, während das Amazon Chime SDK das Meeting einrichtet. Sobald die Einrichtung abgeschlossen ist, stoppt das Amazon Chime SDK die Audiowiedergabe und lässt den Anrufer zur Besprechung zu. Gehen Sie als Nächstes davon aus, dass Sie ein separates System verwenden`MyMeetingService`, das Besprechungen verwaltet. Jeder eingehende Anruf sollte in die Warteschleife gestellt werden. Chime benachrichtigt MyMeetingService über eingehende Anrufe und erstellt MyMeetingService dann für jeden Anruf einen Teilnehmer. Wenn dieser bereit MyMeetingService ist, das Meeting zu starten, benachrichtigt es die SIP-Medienanwendung und stellt ein Token für die Teilnahme an der Besprechung bereit.

Um diesen Fall zu behandeln, muss die Lambda-Funktion die folgende Logik implementieren. 
+ Wenn ein neuer eingehender Anruf eingeht, wird Lambda mit einem `NEW_INBOUND_CALL` Ereignis aufgerufen. Das Lambda ruft den auf `MyMeetingService` und übergibt den`transactionId`, der den aktuellen Aufruf identifiziert, und gibt die `PlayAudio` Aktion zurück.
+ Wenn der bereit `MyMeetingService` ist, den Anrufer zum Meeting hinzuzufügen, ruft der Dienst die [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 auf und leitet das `transactionId` und des Anrufs `JoinToken` als Teil seiner Argumente weiter. Dieser API-Aufruf löst erneut die Lambda-Funktion aus, jetzt mit dem `CALL_UPDATE_REQUESTED` Ereignis. Der MyMeetingService übergibt die `JoinToken` an die Lambda-Funktion als Teil des Ereignisses, und das Token wird verwendet, um die `JoinChimeMeeting` Aktion an die SIP-Medienanwendung zurückzugeben, die die `PlayAudio` Aktion unterbricht und den Anrufer mit dem Meeting verbindet.

![Diagramm, das den Datenfluss in der API zeigt. UpdateSipMediaApplicationCall](http://docs.aws.amazon.com/de_de/chime-sdk/latest/dg/images/update-sip-call-flow3.png)


**Anmerkung**  
Die [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 gibt HTTP 202 (Accepted) zurück. Die SIP-Medienanwendung bestätigt, dass der Anruf läuft und aktualisiert werden kann, und versucht daher, die Lambda-Funktion aufzurufen. Der Aufruf erfolgt asynchron, sodass eine erfolgreiche Antwort der API nicht garantiert, dass die Lambda-Funktion gestartet oder abgeschlossen wurde.

Das folgende Beispiel zeigt die Anforderungssyntax.

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

**Anfrageparameter**
+ `SipMediaApplicationId`— Die ID der SIP-Medienanwendung, die den Anruf bearbeitet. 
+ `TransactionId`— Die ID der Aufruftransaktion. Bei eingehenden Aufrufen `TransactionId` kann das aus dem `NEW_INCOMING_CALL` Ereignis abgerufen werden, das bei ihrem ersten Aufruf an die Lambda-Funktion übergeben wurde. Bei ausgehenden Aufrufen `TransactionId` wird in der Antwort von zurückgegeben. [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateSipMediaApplicationCall.html) 
+ **Argumente** — Benutzerdefinierte Argumente, die der Lambda-Funktion als Teil der `CallUpdateRequest` Aktionsdaten zur Verfügung gestellt werden. Kann 0 bis 20 Schlüssel-Wert-Paare enthalten.

Das folgende Beispiel zeigt eine typische Anfrage.

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

**Antwortsyntax**

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

**Antwortelemente**
+ **TransactionId**— Die ID der Aufruftransaktion, dieselbe ID wie die Anfrage.

Das folgende Beispiel zeigt ein `CALL_UPDATE_REQUESTED` Aufrufereignis.

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

**Elemente des Ereignisses**
+ **SchemaVersion**— Die Version des JSON-Schemas (1.0)
+ **Sequenz** — Die Sequenznummer des Ereignisses im Aufruf
+ **InvocationEventType**— Der Typ des Lambda-Aufrufereignisses, in diesem Fall `CALL_UPDATE_REQUESTED`
+ **ActionData**— Die mit der Aktion verknüpften Daten. `CallUpdateRequest`
  + **Typ** — Die Art der Aktion, in diesem Fall `CallUpdateRequest`
  + **Parameter** — Die Parameter der Aktion
    + **Argumente** — Die Argumente, die als Teil der `UpdateSipMediaApplicationCall` API-Anfrage übergeben wurden
+ **CallDetails**— Die Informationen über den aktuellen Anrufstatus

**Grundlegendes zu unterbrechenden und unterbrechungsfreien Aktionen**  
Wenn eine Lambda-Funktion eine neue Liste von Aktionen zurückgibt, während bestehende Aktionen ausgeführt werden, werden alle Aktionen, die auf die laufende Aktion folgen, durch die neuen Aktionen ersetzt. In einigen Fällen unterbricht die Lambda-Funktion laufende Aktionen, um sofort neue Aktionen auszuführen.

Das folgende Diagramm zeigt ein typisches Beispiel. Der Text unter dem Diagramm erklärt die Logik.

![Das Diagramm zeigt, wie Aktionen während eines laufenden SIP-Medienanwendungsaufrufs ersetzt werden können.](http://docs.aws.amazon.com/de_de/chime-sdk/latest/dg/images/update-sip-actions.png)


Wenn Aktion 2 unterbrechbar ist, beenden wir sie und führen stattdessen die neue Aktion 1 aus.

Wenn Aktion 2 nicht unterbrechbar ist, wird sie abgeschlossen, bevor die neue Aktion 1 beginnt.

In beiden Fällen wird Aktion 3 nicht ausgeführt.

Wenn etwas eine Aktion unterbricht, wird die Lambda-Funktion mit einem Ereignis aufgerufen. `ACTION_INTERRUPTED` Dieses Ereignis wird nur zu Informationszwecken verwendet. Die SIP-Medienanwendung ignoriert alle Aktionen, die von diesem Aufruf zurückgegeben werden.

Arten von unterbrechbaren Aktionen:
+ `PlayAudio`
+ `RecordAudio`
+ `Pause`

**Beispiel-Lambda-Funktion**  
Dieses Beispiel zeigt eine typische Lambda-Funktion, die eine Audiodatei abspielt, ein Join-Token übergibt und den Aufruf aktualisiert.

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