

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

# Pelajari tentang peristiwa telepon yang menjalankan AWS Lambda fungsi untuk layanan audio Amazon Chime SDK PSTN
<a name="invoking-Lambda"></a>

Layanan Audio memanggil AWS Lambda fungsi sebagai respons terhadap berbagai peristiwa. Setiap pemanggilan menentukan jenis acara pemanggilan dan memberikan rincian panggilan, termasuk pesertanya, jika berlaku. Topik berikut menjelaskan peristiwa Layanan Audio yang menjalankan AWS Lambda fungsi. 

# Melakukan panggilan keluar untuk menggunakan layanan audio Amazon Chime SDK PSTN
<a name="use-create-call-api"></a>

Untuk membuat panggilan keluar, Anda menggunakan [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. API memanggil titik akhir dari yang ditentukan. `SIP media application ID` Pelanggan dapat mengontrol aliran panggilan dengan memberikan sinyal dan [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_SipMediaApplication.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_SipMediaApplication.html)tindakan yang berbeda dari titik akhir. 

Jika respons berhasil, API mengembalikan kode status http 202 bersama dengan TransactionId, yang dapat Anda gunakan dengan [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 untuk memperbarui panggilan yang sedang berlangsung.

Diagram berikut menunjukkan pemanggilan yang dibuat ke titik akhir AWS Lambda fungsi untuk panggilan keluar.

![\[Diagram yang menunjukkan alur pemrograman untuk pemanggilan yang dilakukan ke titik akhir AWS Lambda.\]](http://docs.aws.amazon.com/id_id/chime-sdk/latest/dg/images/sip-api-1.png)


Titik akhir yang dikonfigurasi untuk aplikasi media SIP dipanggil untuk status panggilan keluar yang berbeda. Saat pelanggan memulai panggilan, Amazon Chime SDK memanggil titik akhir dengan jenis peristiwa pemanggilan. `NEW_OUTBOUND_CALL` 

Contoh ini menunjukkan acara pemanggilan khas untuk a. `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"
                }
            ]
    }
}
```

Setiap tanggapan untuk AWS Lambda pemanggilan terkait acara diabaikan.

Saat kami menerima `RINGING` pemberitahuan dari penerima, Amazon Chime SDK memanggil titik akhir yang dikonfigurasi lagi. 

Contoh ini menunjukkan acara pemanggilan khas untuk. `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"
                }
           ]
    }
}
```

Setiap tanggapan untuk AWS Lambda pemanggilan terkait acara diabaikan.

Jika penerima tidak menjawab panggilan, atau panggilan gagal karena kesalahan, Chime memutuskan panggilan dan memanggil titik akhir dengan jenis peristiwa. `Hangup` Untuk informasi lebih lanjut tentang jenis `Hangup` acara, lihat[Mengakhiri panggilan menggunakan layanan audio Amazon Chime SDK PSTN](case-5.md). 

Jika panggilan dijawab, Chime memanggil titik akhir dengan tindakan. `CALL_ANSWERED` Contoh ini menunjukkan acara pemanggilan khas.

```
{
  "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"
            }
        ]
    }
}
```

Pada titik ini, Anda dapat mengembalikan tindakan dengan menanggapi pemanggilan dengan daftar tindakan. Jika Anda tidak ingin menjalankan tindakan apa pun, tanggapi dengan daftar kosong. Anda dapat merespons dengan maksimal 10 tindakan untuk setiap AWS Lambda pemanggilan, dan Anda dapat menjalankan fungsi Lambda 1.000 kali per panggilan. Untuk informasi lebih lanjut tentang merespons dengan serangkaian tindakan, lihat. [Menanggapi pemanggilan dengan daftar tindakan menggunakan layanan audio Amazon Chime SDK PSTN](invoke-on-call-leg.md)

# Menerima panggilan masuk menggunakan layanan audio Amazon Chime SDK PSTN
<a name="case-1"></a>

Ketika suatu `NEW_INCOMING_CALL` peristiwa terjadi, Layanan Audio membuat unik `TransactionID` dan unik `CallID` yang bertahan hingga `HANGUP` peristiwa terjadi.

Anda dapat merespons dengan beberapa cara untuk suatu `NEW_INCOMING_CALL` acara. Contoh:
+ Kirim `PlayAudio` atau `RecordAudio` tindakan dan jawab panggilan secara otomatis. 
+ Kirim `Pause` tindakan.
+ Kirim `Hangup` tindakan, dalam hal ini panggilan tidak dijawab dan pelanggan tidak dikenakan biaya.
+ Kirim `CallAndBridge` tindakan dan tambahkan pengguna lain ke panggilan.
+ Jangan lakukan apa pun, upaya panggilan habis setelah 30 detik.

Ketika panggilan masuk baru diterima, aplikasi media SIP memanggil AWS Lambda fungsi dengan payload ini.

```
{
    "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"
            }
        ]
    }
}
```

# Menentukan tindakan dalam menanggapi peristiwa telepon untuk layanan audio Amazon Chime SDK PSTN
<a name="use-case-2"></a>

Di Layanan Audio, aplikasi media SIP memanggil AWS Lambda fungsi. *Pada gilirannya, fungsi Lambda dapat mengembalikan daftar instruksi yang dikenal sebagai tindakan.* Tindakan adalah item yang ingin Anda jalankan di kaki panggilan telepon, seperti mengirim atau menerima digit, bergabung dengan rapat, dan sebagainya. Untuk informasi selengkapnya tentang tindakan yang dipanggil oleh layanan audio PSTN, lihat. [Memahami peristiwa telepon untuk layanan audio Amazon Chime SDK PSTN](pstn-invocations.md)

Ketika aplikasi media SIP berhasil menjalankan daftar tindakan, aplikasi memanggil AWS Lambda fungsi dengan jenis acara pemanggilan. `ACTION_SUCCESSFUL` Jika salah satu tindakan gagal diselesaikan, aplikasi media SIP memanggil AWS Lambda fungsi dengan `ACTION_FAILED` acara tersebut.

Aplikasi media SIP hanya kembali `ACTION_SUCCESSFUL` jika semua tindakan dalam daftar berhasil. Jika salah satu tindakan dalam daftar gagal, aplikasi media SIP memanggil AWS Lambda fungsi dengan `ACTION_FAILED` acara tersebut dan menghapus tindakan yang tersisa dalam daftar setelah yang gagal. Kemudian aplikasi media SIP menjalankan tindakan berikutnya yang dikembalikan oleh AWS Lambda fungsi. Anda menggunakan `ActionData` kunci untuk mengidentifikasi panggilan mana yang memanggil fungsi.

Peristiwa berikut menunjukkan payload sampel untuk jenis acara `ACTION_SUCCESSFUL` pemanggilan setelah tindakan. `PlayAudioAndGetDigits`

```
{
    "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"
                }
            ]
        }
    }
}
```

Ketika tindakan apa pun dalam daftar gagal diselesaikan dengan sukses, aplikasi media SIP memanggil AWS Lambda fungsi untuk memberi tahu Anda tentang kegagalan tersebut, dan untuk mendapatkan serangkaian tindakan baru untuk dijalankan pada panggilan itu. Peristiwa berikut menunjukkan payload sampel untuk jenis acara `ACTION_FAILED` pemanggilan setelah tindakan. `PlayAudio`

```
{
    "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"
            }
        ]
    }
}
}
```

# Menerima input pemanggil untuk layanan audio Amazon Chime SDK PSTN
<a name="case-4"></a>

Anda menggunakan `ReceiveDigits` tindakan untuk mengumpulkan digit DTMF masuk dan mencocokkannya dengan ekspresi reguler. Ketika aplikasi media SIP menerima digit yang cocok dengan ekspresi reguler, ia memanggil AWS Lambda fungsi dengan acara`ACTION_SUCCESSFUL`. Digit yang dikumpulkan muncul dalam `ReceivedDigits` nilai dalam `ActionData` objek.

Contoh:

```
{
    "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"
            }
        ]
    }
}
```

Setelah pemanggil memasukkan digit yang cocok dengan pola ekspresi reguler Anda, aplikasi media SIP memanggil AWS Lambda fungsi yang mengembalikan jenis payload berikut:

```
{
    "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"
            }
        ]
    }
}
```

Lihat contoh kerja di GitHub: [https://github.com/aws-samples/amazon-chime-sma-on-demand-recording](https://github.com/aws-samples/amazon-chime-sma-on-demand-recording)

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

# Mengakhiri panggilan menggunakan layanan audio Amazon Chime SDK PSTN
<a name="case-5"></a>

Anda dapat menggunakan [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 untuk mengakhiri panggilan keluar. API memanggil titik akhir ID **aplikasi media SIP** yang ditentukan. Pelanggan dapat mengontrol aliran panggilan dengan mengembalikan tindakan ke aplikasi media SIP.

Jika respons berhasil, API mengembalikan kode status http 202 bersama dengan kode`transactionId`, yang dapat Anda gunakan dengan [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 untuk memperbarui panggilan yang sedang berlangsung.

Diagram berikut menunjukkan pemanggilan yang dibuat ke titik akhir AWS Lambda fungsi untuk panggilan keluar.

![\[Alur data saat Anda menjalankan CreateSipMediaApplicationCall API. API memanggil titik akhir yang berbeda saat status panggilan keluar berubah.\]](http://docs.aws.amazon.com/id_id/chime-sdk/latest/dg/images/sip-api-1.png)


Titik akhir yang dikonfigurasi untuk aplikasi media SIP dipanggil untuk status panggilan keluar yang berbeda. Saat pelanggan melakukan panggilan, Amazon Chime SDK memanggil titik akhir dengan jenis peristiwa pemanggilan. `HANGUP` 

Contoh ini menunjukkan acara pemanggilan khas untuk a. `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"
            }
        ]
    }
}
```

# Memahami end-to-end panggilan untuk layanan audio Amazon Chime SDK PSTN
<a name="use-cases"></a>

Kasus penggunaan ini memberikan contoh kode untuk menerima panggilan telepon dari pemanggil PSTN, menyapa pemanggil dengan pesan audio, mendapatkan PIN rapat dari pemanggil, memutar audio, dan bergabung dengan pemanggil ke rapat.

**Acara dan tindakan doa**  
Layanan Audio meneruskan peristiwa pemanggilan ke AWS Lambda fungsi sebagai objek JSON. Objek termasuk jenis acara pemanggilan dan metatdata yang relevan. AWS Lambda Fungsi ini juga mengembalikan tindakan aplikasi media SIP sebagai objek JSON, dan objek tersebut menyertakan tipe tindakan dan metadata yang relevan.

Tabel berikut mencantumkan peristiwa pemanggilan, dan kemungkinan`ActionData.Type`, saat Anda menerima acara pemanggilan.


|  Acara doa  |  ActionData.Jenis  | 
| --- | --- | 
|  ACTION\$1SUCCESSFUL  |  CallAndBridge ReceiveDigits PlayAudio PlayAudioAndGetDigits  JoinChimeMeeting ModifyChimeMeetingAttendees RecordMeeting  | 
|  ACTION\$1FAILED  |  CallAndBridge PlayAudio PlayAudioAndGetDigits ModifyChimeMeetingAttendees RecordMeeting  | 
| HANGUP |  HangUp  | 
|  DIGITS\$1RECEIVED  | ReceiveDigits | 

**catatan**  
Untuk menerapkan kasus penggunaan berikut, Anda memerlukan setidaknya satu nomor telepon di inventaris Amazon Chime SDK, objek yang dikelola aplikasi media SIP yang menggunakan AWS Lambda fungsi dengan Nama Sumber Daya Amazon (ARN), dan aturan SIP yang menggunakan nomor telepon sebagai pemicunya.

Saat Amazon Chime SDK menerima panggilan ke nomor telepon yang ditentukan dalam aturan, layanan audio PSTN akan memanggil AWS Lambda fungsi dengan jenis peristiwa pemanggilan. `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"
            }
        ]
    }
}
```

Anda dapat memprogram AWS Lambda fungsi untuk memvalidasi detail panggilan dan menyimpannya untuk digunakan di masa mendatang. Untuk suatu `NEW_INBOUND_CALL` acara, AWS Lambda fungsi merespons dengan serangkaian tindakan yang memainkan prompt selamat datang dan meminta PIN rapat.

File audio memiliki persyaratan sebagai berikut:
+ Anda harus memutar file audio dari bucket Amazon Simple Storage Service (S3). Bucket S3 harus memiliki AWS akun yang sama dengan aplikasi media SIP. Selain itu, Anda harus memberikan `s3:GetObject` izin kepada kepala layanan Amazon Chime SDK Voice Connector—. `voiceconnector.chime.amazonaws.com` Anda dapat menggunakan konsol S3 atau antarmuka baris perintah (CLI) untuk melakukannya.
+ Anda harus menggunakan file WAV PCM dengan ukuran tidak lebih dari 50 MB. Amazon Chime SDK merekomendasikan 8 mono. KHz 
+ Metadata S3 untuk setiap file WAV harus berisi. `{'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
            }
        }
    ]
}
```

Aplikasi media SIP menjalankan tindakan ini pada call leg A. Dengan asumsi `PlayAudioAndGetDigits` tindakan menerima digit, aplikasi media SIP memanggil AWS Lambda fungsi dengan jenis acara. `ACTION_SUCCESSFUL`

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

Anda dapat memprogram AWS Lambda fungsi untuk mengidentifikasi pemanggil berdasarkan `CallDetails` data. Anda juga dapat memvalidasi PIN rapat yang diterima sebelumnya. Dengan asumsi PIN yang benar, Anda kemudian menggunakan [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateMeeting.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_CreateMeeting.html)dan [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 untuk membuat rapat Amazon Chime SDK dan menghasilkan token gabungan yang digunakan oleh peserta rapat. AWS Lambda Fungsi merespons dengan tindakan untuk bergabung dengan rapat Amazon Chime SDK.

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

Dengan `JoinToken` asumsi valid, aplikasi media SIP bergabung dengan rapat Amazon Chime SDK dan memanggil AWS Lambda fungsi dengan `ACTION_SUCCESSFUL` acara, `CallDetails` di mana berisi data dari aplikasi media SIP dan layanan 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"
            }
        ]
    }
}
```

Jika Anda ingin berhenti menjalankan tindakan pada panggilan atau panggilan kaki pada titik ini, Anda dapat merespons dengan serangkaian tindakan kosong.

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

Setelah pemanggil menutup telepon, aplikasi media SIP memanggil AWS Lambda fungsi dengan acara tersebut. `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"
            }
        ]
    }
}
```

Jika Anda menanggapi `Hangup` peristiwa dengan tindakan, aplikasi media SIP mengabaikan tindakan jika tidak ada yang lain `Participants` menunjukkan a`Status`. `Connected`