

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Memperbarui panggilan yang sedang berlangsung untuk audio Amazon Chime SDK PTSN
<a name="update-sip-call"></a>

Sebagai bagian dari layanan audio PSTN, aplikasi media SIP memungkinkan Anda untuk mengatur tindakan yang dijalankan pada panggilan dengan memanggil fungsi Lambda yang ditentukan pengguna berdasarkan peristiwa panggilan, seperti panggilan masuk atau digit DTMF. Sebuah [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 memungkinkan Anda untuk memicu fungsi Lambda kapan saja saat panggilan aktif, menggantikan tindakan saat ini dengan tindakan baru yang dikembalikan oleh pemanggilan.

**Alur kerja**  
Anda menggunakan [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 dalam berbagai kasus, seperti menambahkan peserta ke rapat, mematikan dan melepas pengguna, memutuskannya, dan sebagainya. Kasus penggunaan berikut menjelaskan alur kerja yang khas.

Pengguna memanggil dan mendengarkan musik saat Amazon Chime SDK menyiapkan rapat. Setelah penyiapan selesai, Amazon Chime SDK menghentikan audio dan memasukkan pemanggil ke dalam rapat. Selanjutnya, asumsikan penggunaan sistem terpisah`MyMeetingService`, yang mengelola rapat. Setiap panggilan masuk harus ditunda. Chime memberi tahu MyMeetingService tentang panggilan masuk, dan MyMeetingService kemudian membuat peserta untuk setiap panggilan, dan ketika siap untuk memulai rapat, itu memberi tahu aplikasi media SIP dan memberikan token untuk bergabung dengan rapat. MyMeetingService 

Untuk menangani kasus ini, fungsi Lambda harus mengimplementasikan logika berikut. 
+ Ketika panggilan masuk baru tiba, Lambda dipanggil dengan acara. `NEW_INBOUND_CALL` Lambda memanggil `MyMeetingService` dan meneruskan `transactionId` yang mengidentifikasi panggilan saat ini, dan mengembalikan tindakan. `PlayAudio`
+ Ketika `MyMeetingService` siap untuk menambahkan penelepon ke rapat, layanan memanggil [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 dan meneruskan panggilan `transactionId` dan `JoinToken` sebagai bagian dari argumennya. Panggilan API ini memicu fungsi Lambda lagi, sekarang dengan `CALL_UPDATE_REQUESTED` acara tersebut. MyMeetingService Lolos `JoinToken` ke fungsi Lambda sebagai bagian dari acara, dan token digunakan untuk mengembalikan `JoinChimeMeeting` tindakan ke aplikasi media SIP, yang mengganggu `PlayAudio` tindakan dan menghubungkan penelepon ke rapat.

![\[Diagram yang menunjukkan aliran data di UpdateSipMediaApplicationCall API.\]](http://docs.aws.amazon.com/id_id/chime-sdk/latest/dg/images/update-sip-call-flow3.png)


**catatan**  
Sebuah [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 mengembalikan HTTP 202 (Diterima). Aplikasi media SIP mengonfirmasi bahwa panggilan sedang berlangsung dan dapat diperbarui, sehingga mencoba untuk memanggil fungsi Lambda. Pemanggilan dilakukan secara asinkron, sehingga respons yang berhasil dari API tidak menjamin bahwa fungsi Lambda telah dimulai atau diselesaikan.

Contoh berikut menunjukkan sintaks permintaan.

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

**Parameter permintaan**
+ `SipMediaApplicationId`— ID aplikasi media SIP yang menangani panggilan. 
+ `TransactionId`— ID transaksi panggilan. Untuk panggilan masuk, `TransactionId` dapat diperoleh dari `NEW_INCOMING_CALL` acara yang diteruskan ke fungsi Lambda pada pemanggilan pertamanya. Untuk panggilan keluar, `TransactionId` dikembalikan sebagai tanggapan [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateSipMediaApplicationCall.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateSipMediaApplicationCall.html). 
+ **Argumen** — Argumen khusus yang tersedia untuk fungsi Lambda sebagai bagian dari data `CallUpdateRequest` tindakan. Dapat berisi 0 hingga 20 pasangan kunci-nilai.

Contoh berikut menunjukkan permintaan khas.

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

**Sintaks respons**

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

**Elemen respons**
+ **TransactionId**— ID transaksi panggilan, ID yang sama dengan permintaan.

Contoh berikut menunjukkan acara `CALL_UPDATE_REQUESTED` pemanggilan.

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

**Elemen acara**
+ **SchemaVersion**— Versi skema JSON (1.0)
+ **Urutan** - Nomor urut acara dalam panggilan
+ **InvocationEventType**— Jenis acara doa Lambda, dalam hal ini, `CALL_UPDATE_REQUESTED`
+ **ActionData**— Data yang terkait dengan `CallUpdateRequest` tindakan.
  + **Jenis** — Jenis tindakan, dalam hal ini, `CallUpdateRequest`
  + **Parameter** — Parameter tindakan
    + **Argumen** — Argumen diteruskan sebagai bagian dari permintaan `UpdateSipMediaApplicationCall` API
+ **CallDetails**— Informasi tentang status panggilan saat ini

**Memahami tindakan yang dapat diinterupsi dan tidak dapat diinterupsi**  
Saat fungsi Lambda menampilkan daftar tindakan baru saat tindakan yang ada berjalan, semua tindakan yang mengikuti tindakan yang sedang berlangsung akan diganti dengan tindakan baru. Dalam beberapa kasus, fungsi Lambda mengganggu tindakan yang sedang berlangsung untuk segera menjalankan tindakan baru.

Diagram berikut menunjukkan contoh khas. Teks di bawah digram menjelaskan logika.

![\[Diagram yang menunjukkan bagaimana tindakan dapat diganti selama panggilan aplikasi media SIP yang sedang berlangsung.\]](http://docs.aws.amazon.com/id_id/chime-sdk/latest/dg/images/update-sip-actions.png)


Jika Action 2 dapat diinterupsi, kami menghentikannya dan menjalankan Action 1 baru sebagai gantinya.

Jika Action 2 tidak terputus, itu selesai sebelum Action 1 baru dimulai.

Dalam kedua kasus, Action 3 tidak dijalankan.

Jika sesuatu mengganggu suatu tindakan, fungsi Lambda dipanggil dengan suatu peristiwa. `ACTION_INTERRUPTED` Acara ini hanya digunakan untuk tujuan informasi. Aplikasi media SIP mengabaikan semua tindakan yang dikembalikan oleh pemanggilan ini.

Jenis tindakan yang dapat diinterupsi:
+ `PlayAudio`
+ `RecordAudio`
+ `Pause`

**Contoh fungsi Lambda**  
Contoh ini menunjukkan fungsi Lambda khas yang memutar file audio, meneruskan token gabungan, dan memperbarui panggilan.

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