

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

# Menggunakan Amazon SNS untuk pengiriman pesan application-to-person
<a name="sns-user-notifications"></a>

Pesan Amazon SNS application-to-person (A2P) memungkinkan Anda mengirimkan notifikasi dan peringatan langsung ke perangkat seluler pelanggan Anda melalui SMS (Layanan Pesan Singkat). Dengan menggunakan fitur ini, Anda dapat mengirim pemberitahuan push ke aplikasi seluler, pesan teks ke nomor ponsel, dan email teks biasa ke alamat email. Selain itu, Anda memiliki fleksibilitas untuk mendistribusikan pesan dengan menggunakan topik untuk menjangkau beberapa penerima, atau mempublikasikan pesan langsung ke titik akhir seluler individual untuk komunikasi yang dipersonalisasi.

Topik ini menjelaskan cara menggunakan Amazon SNS untuk notifikasi pengguna dengan pelanggan seperti aplikasi seluler, nomor ponsel, dan alamat email.

![\[Gambaran umum tentang bagaimana Amazon SNS mendukung pengiriman pesan application-to-person (A2P) dengan memungkinkan penerbit mengirim pemberitahuan langsung ke pelanggan. Ini menunjukkan dua cara utama untuk mendistribusikan pesan: penerbitan langsung ke titik akhir individu (seperti alamat email, nomor telepon, atau aplikasi seluler) dan penerbitan berbasis topik, yang mengirim pesan ke beberapa pelanggan sekaligus. Pelanggan, yang diwakili di sebelah kanan, dapat menerima pemberitahuan melalui pemberitahuan push, pesan teks, atau email, memberikan fleksibilitas untuk berbagai kasus penggunaan.\]](http://docs.aws.amazon.com/id_id/sns/latest/dg/images/sns-a2p-overview.png)


# Pesan teks seluler dengan Amazon SNS
<a name="sns-mobile-phone-number-as-subscriber"></a>

**penting**  
Panduan Pengembang SMS Amazon SNS telah diperbarui. Amazon SNS telah terintegrasi dengan [AWS Olah Pesan Pengguna Akhir SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html)pengiriman pesan SMS. Panduan ini berisi informasi terbaru tentang cara membuat, mengonfigurasi, dan mengelola pesan SMS Amazon SNS Anda.

Pesan teks seluler Amazon SNS (SMS) dirancang untuk memfasilitasi pengiriman pesan ke berbagai platform, seperti web, seluler, dan aplikasi bisnis yang mendukung SMS. Pengguna dapat mengirim pesan ke satu atau beberapa nomor telepon dengan berlangganan topik, menyederhanakan proses distribusi.

Pesan Amazon SNS dikirimkan oleh AWS Olah Pesan Pengguna Akhir SMS, yang memastikan transmisi pesan yang andal. [Di Amazon SNS APIs, Anda dapat mengatur berbagai properti seperti jenis pesan (promosi atau transaksional), [batas pengeluaran bulanan](sms_preferences.md#sms_preferences_console), [daftar opt-out](sms_manage.md#sms_manage_optout), dan pengoptimalan pengiriman pesan.](sms_preferences.md#sms_preferences_console)

AWS Olah Pesan Pengguna Akhir SMS menangani transmisi pesan ke nomor telepon tujuan melalui jaringan pasokan SMS globalnya. Ini mengelola perutean, status pengiriman, dan kepatuhan yang diperlukan dengan peraturan regional. [Untuk mengakses fitur SMS tambahan seperti izin granular, kumpulan telepon, set konfigurasi, simulator SMS, dan aturan negara, lihat Panduan Pengguna.AWS Olah Pesan Pengguna Akhir SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/configurations.html)

![\[Ilustrasi tentang bagaimana Amazon SNS terintegrasi AWS Olah Pesan Pengguna Akhir SMS dengan untuk mengirimkan pesan teks seluler dengan andal. Pesan dapat dikirim langsung ke penerima individu atau didistribusikan ke grup melalui topik Amazon SNS. AWS Olah Pesan Pengguna Akhir SMS menangani perutean pesan, pengiriman, dan kepatuhan di seluruh jaringan globalnya, memastikan skalabilitas dan keandalan. Pengaturan ini juga memungkinkan untuk mengonfigurasi preferensi pesan, mengelola batas pengeluaran, dan melacak status pengiriman untuk mengoptimalkan AWS SMS pesan.\]](http://docs.aws.amazon.com/id_id/sns/latest/dg/images/sns-sms-end-user-messaging.png)


Fitur utama berikut membantu Anda mengirim pesan SMS Amazon SNS yang dapat diskalakan dan mudah diperluas:

**[Sesuaikan preferensi pesan](sms_preferences.md)**  
Sesuaikan pengiriman SMS untuk Anda Akun AWS dengan mengatur preferensi SMS berdasarkan anggaran dan kasus penggunaan Anda. Misalnya, Anda dapat memilih apakah pesan Anda memprioritaskan efisiensi biaya atau pengiriman yang andal.

**[Tetapkan kuota pengeluaran](channels-sms-awssupport-spend-threshold.md)**  
Sesuaikan pengiriman SMS Anda dengan menentukan kuota pengeluaran atau untuk pengiriman pesan individual dan kuota pengeluaran bulanan untuk Anda. Akun AWS Jika diwajibkan oleh undang-undang dan peraturan setempat (seperti AS dan Kanada), penerima SMS [dapat](sms_manage.md#sms_manage_optout) memilih keluar, yang berarti bahwa mereka memilih untuk berhenti menerima pesan SMS dari Anda. Akun AWS Setelah penerima memilih keluar dari menerima pesan, Anda dapat, dengan batasan, memilih kembali nomor telepon sehingga Anda dapat melanjutkan pengiriman pesan.

**[Kirim pesan SMS secara global](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html)**  
Amazon SNS mendukung pesan SMS di beberapa wilayah, memungkinkan Anda mengirim pesan ke lebih dari 240 negara dan wilayah.

## Bagaimana Amazon SNS mengirimkan pesan SMS saya?
<a name="sns-sms-pinpoint-integration"></a>

Saat Anda meminta Amazon SNS untuk mengirim SMS atas nama Anda, pesan dikirim menggunakan. AWS Olah Pesan Pengguna Akhir SMS Integrasi antara Amazon SNS dan AWS Olah Pesan Pengguna Akhir SMS menawarkan manfaat berikut:

**[Kebijakan IAM](sns-mobile-phone-number-getting-started.md#sns-mobile-phone-number-prerequisites)**  
Anda dapat memanfaatkan IAM dan kebijakan sumber daya untuk mengontrol dan mendistribusikan akses ke sumber daya SMS Anda di seluruh AWS layanan dan wilayah lain.

**[AWS Olah Pesan Pengguna Akhir SMS konfigurasi](https://docs.aws.amazon.com/sms-voice/latest/userguide/configurations.html)**  
Semua konfigurasi terkait ID originasi (pembuatan, pembaruan konfigurasi, penyediaan originasi baru IDs, mengubah templat pendaftaran) digunakan. AWS Olah Pesan Pengguna Akhir SMS

**[AWS Olah Pesan Pengguna Akhir SMS penagihan](https://aws.amazon.com/sns/sms-pricing/)**  
Semua penagihan SMS dilakukan. AWS Olah Pesan Pengguna Akhir SMS Anda dapat mengkonsolidasikan AWS pengeluaran Anda untuk beban kerja SMS Anda, sambil membeli dan mengelola sumber daya SMS Anda di satu lokasi pusat.

# Memulai dengan Amazon SNS SMS
<a name="sns-mobile-phone-number-getting-started"></a>

**penting**  
Panduan Pengembang SMS Amazon SNS telah diperbarui. Amazon SNS telah terintegrasi dengan [AWS Olah Pesan Pengguna Akhir SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html)pengiriman pesan SMS. Panduan ini berisi informasi terbaru tentang cara membuat, mengonfigurasi, dan mengelola pesan SMS Amazon SNS Anda.

Topik ini memandu Anda dalam mengelola kotak pasir SMS Anda dan mengonfigurasi IAM dan kebijakan berbasis sumber daya untuk memberikan Amazon SNS izin yang diperlukan untuk mengakses dan memanfaatkan. AWS Olah Pesan Pengguna Akhir SMS APIs 

## Prasyarat
<a name="sns-mobile-phone-number-prerequisites"></a>

Amazon SNS merekomendasikan untuk memperbarui kebijakan IAM Anda untuk menyertakan tindakan berikut untuk memastikan kontrol dan visibilitas komprehensif atas sumber daya Amazon SNS Anda:
+ [`AmazonSNSFullAccess`](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonSNSFullAccess)
+ [`AmazonSNSReadOnly`](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonSNSReadOnlyAccess) 

# Menggunakan kotak pasir SMS Amazon SNS
<a name="sns-sms-sandbox"></a>

Akun SMS Amazon SNS yang baru dibuat secara otomatis ditempatkan ke kotak pasir SMS untuk memastikan keamanan AWS pelanggan dan penerima dengan mengurangi risiko penipuan dan penyalahgunaan. Lingkungan ini berfungsi sebagai ruang yang aman untuk tujuan pengujian dan pengembangan. Saat beroperasi di dalam kotak pasir SMS, Anda memiliki akses ke semua fitur Amazon SNS tetapi tunduk pada batasan tertentu:
+ Anda hanya dapat mengirim pesan SMS ke nomor telepon tujuan terverifikasi.
+ Anda dapat memiliki hingga 10 nomor telepon tujuan terverifikasi.
+ Anda dapat menghapus nomor telepon tujuan hanya setelah minimal 24 jam berlalu sejak verifikasi, atau upaya verifikasi terakhir.

Setelah akun Anda keluar dari kotak pasir, pembatasan ini dihapus, dan Anda dapat mengirim pesan SMS ke penerima mana pun.

## Langkah pertama
<a name="sns-mobile-phone-number-getting-started-steps"></a>

Akun SMS Amazon SNS baru ditempatkan ke kotak pasir SMS. Gunakan langkah-langkah berikut untuk membuat dan mengelola nomor telepon di kotak pasir Anda, membuat nomor originasi dan pengirim IDs, dan mendaftarkan perusahaan Anda.

1. Tambahkan **nomor telepon tujuan** ke kotak pasir SMS. Untuk detail tentang menambahkan, mengelola, dan memindahkan nomor telepon dari kotak pasir SMS Amazon SNS, lihat. [Menambahkan dan memverifikasi nomor telepon di kotak pasir SMS Amazon SNS](sns-sms-sandbox-verifying-phone-numbers.md)

1. Buat **identitas originasi** yang dilihat penerima di perangkat mereka saat Anda mengirimi mereka pesan SMS. Untuk mempelajari lebih lanjut tentang identitas originasi, termasuk berbagai jenis yang dapat Anda gunakan, lihat dokumentasi. [Identitas originasi untuk pesan SMS Amazon SNS](channels-sms-originating-identities.md)

1. **Daftarkan** perusahaan Anda. Beberapa negara mengharuskan Anda untuk mendaftarkan identitas perusahaan Anda untuk dapat membeli nomor telepon atau pengirim IDs dan meninjau pesan yang Anda kirim ke penerima di negara mereka. Untuk informasi tentang negara mana yang memerlukan pendaftaran, lihat [Negara dan wilayah yang didukung untuk pesan SMS AWS Olah Pesan Pengguna Akhir SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html) di *Panduan AWS Olah Pesan Pengguna Akhir SMS Pengguna*.

1. **Kirim** pesan Anda ke topik atau ponsel. Untuk informasi selengkapnya, lihat [Mengirim pesan SMS menggunakan Amazon SNS](sms_sending-overview.md).

# Menambahkan dan memverifikasi nomor telepon di kotak pasir SMS Amazon SNS
<a name="sns-sms-sandbox-verifying-phone-numbers"></a>

Sebelum Anda dapat mulai mengirim pesan SMS dari Akun AWS saat Anda berada di [kotak pasir SMS](sns-sms-sandbox.md), Anda harus menyelesaikan langkah-langkah pengaturan berikut. Ini memastikan bahwa akun Anda siap untuk pesan SMS dan nomor telepon tujuan Anda diverifikasi dengan benar.

1. Buat **[ID originasi](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-number-types.html)**. Mirip dengan akun di luar kotak pasir SMS, ID originasi diperlukan sebelum Anda dapat mengirim pesan SMS ke penerima di beberapa negara atau wilayah.

1. Tambahkan **nomor telepon tujuan** yang ingin Anda kirimi pesan di dalam kotak pasir SMS.

1. Verifikasi **nomor telepon** untuk memastikan bahwa nomor telepon tujuan valid untuk digunakan dalam pesan SMS Anda.

**Menambahkan dan memverifikasi nomor telepon tujuan**

1. Masuk ke [Konsol Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Di menu konsol, pilih [wilayah yang mendukung pesan SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. Di panel navigasi, pilih **Text messaging (SMS)** (Pesan teks).

1. Di bagian **Sandbox tujuan nomor telepon**, pilih **Tambahkan nomor telepon**.

1. Di bawah **Detail tujuan**, berikan informasi berikut, lalu pilih **Tambahkan nomor telepon**:
   + **Kode negara** dan **nomor telepon** tujuan.
   + **Bahasa** yang Anda inginkan untuk mengirim pesan verifikasi.

1. Setelah menambahkan nomor telepon, Amazon SNS akan mengirim OTP ke nomor telepon tujuan yang disediakan. OTP ini diperlukan untuk verifikasi.

1. Anda akan menerima OTP sebagai pesan SMS standar pada **nomor telepon tujuan** yang Anda berikan.
   + Jika Anda tidak menerima OTP dalam waktu 15 menit, pilih **Kirim ulang kode verifikasi** di konsol Amazon SNS.
   + Anda dapat mengirim ulang OTP hingga lima kali dalam periode 24 jam.

1. Setelah Anda menerima OTP, masukkan di kotak **Kode verifikasi** dan pilih **Verifikasi nomor telepon**.

1. Periksa **status verifikasi**.
   + Setelah berhasil memverifikasi nomor telepon, nomor telepon dan status verifikasi akan muncul di bagian **Nomor telepon tujuan Sandbox**.
   + Jika statusnya **Tertunda**, verifikasi tidak berhasil. Ini mungkin terjadi jika, misalnya, Anda tidak memasukkan kode negara dengan benar.
   + Anda hanya dapat menghapus nomor telepon yang tertunda atau terverifikasi setelah 24 jam atau lebih berlalu sejak upaya verifikasi terakhir.

1. Jika Anda ingin menggunakan nomor telepon tujuan yang sama di wilayah lain, **ulangi** langkah sebelumnya untuk setiap wilayah tempat Anda ingin menggunakannya.

## Memecahkan masalah tidak diterimanya teks OTP
<a name="sns-sms-sandbox-troubleshooting-phone-numbers"></a>

Memecahkan masalah umum yang dapat mencegah nomor telepon menerima teks OTP.
+ **Batas pengeluaran SMS Amazon SNS:** Jika Anda Akun AWS telah melampaui batas pengeluaran untuk mengirim pesan SMS, pesan lebih lanjut, termasuk teks OTP, mungkin tidak dikirimkan sampai batas meningkat atau masalah penagihan diselesaikan.
+ **Nomor telepon yang tidak dipilih untuk pemberitahuan SMS:** Di beberapa negara atau wilayah, penerima harus memilih untuk menerima pesan SMS dari kode pendek, yang biasanya digunakan untuk teks OTP. Jika nomor telepon penerima tidak dipilih, mereka tidak akan menerima teks OTP.
+ **Pembatasan atau penyaringan operator:** Beberapa operator seluler mungkin memiliki batasan atau mekanisme penyaringan yang mencegah pengiriman jenis pesan SMS tertentu, termasuk teks OTP. Ini bisa disebabkan oleh kebijakan keamanan atau tindakan anti-spam yang diterapkan oleh operator.
+ Nomor telepon tidak **valid atau salah: Jika nomor telepon** yang diberikan oleh penerima salah atau tidak valid, teks OTP tidak akan dikirimkan.
+ **Masalah jaringan:** Masalah jaringan sementara atau pemadaman dapat mencegah pengiriman pesan SMS, termasuk teks OTP, ke telepon penerima.
+ **Pengiriman tertunda:** Dalam beberapa kasus, pesan SMS mungkin mengalami keterlambatan pengiriman karena kemacetan jaringan atau faktor lainnya. Teks OTP pada akhirnya dapat dikirimkan, tetapi bisa ditunda di luar jangka waktu yang diharapkan.
+ **Penangguhan atau penghentian akun:** Jika ada masalah dengan Anda Akun AWS, seperti non-pembayaran atau pelanggaran AWS persyaratan layanan, kemampuan pengiriman pesan Amazon SNS, termasuk teks OTP, dapat ditangguhkan atau dihentikan.

# Menghapus nomor telepon dari kotak pasir SMS Amazon SNS
<a name="sns-sms-sandbox-deleting-phone-numbers"></a>

Anda dapat menghapus nomor telepon tujuan yang tertunda dan terverifikasi dari [kotak pasir SMS](sns-sms-sandbox.md).

**penting**  
Anda hanya dapat menghapus nomor telepon 24 jam setelah [memverifikasi nomor telepon](sns-sms-sandbox-verifying-phone-numbers.md), atau 24 jam setelah upaya verifikasi terakhir Anda.

**Cara menghapus nomor telepon tujuan dari sandbox SMS**

1. Masuk ke [Konsol Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Di menu konsol, pilih [wilayah yang mendukung pesan SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html) tempat Anda menambahkan nomor telepon tujuan.

1. Di panel navigasi, pilih **Pesan teks (SMS)**.

1. Pada halaman **Pesan teks seluler (SMS)**, navigasikan ke bagian **nomor telepon tujuan Sandbox**.

1. Pilih nomor telepon tertentu yang ingin Anda hapus, lalu pilih **Hapus nomor telepon**.

1. Untuk mengonfirmasi bahwa Anda ingin menghapus nomor telepon, masukkan **delete me**, lalu pilih **Delete** (Hapus).

   Pastikan bahwa 24 jam atau lebih telah berlalu sejak Anda memverifikasi atau mencoba memverifikasi nomor telepon tujuan sebelum melanjutkan dengan penghapusan.

1. Ulangi langkah-langkah ini di setiap Wilayah tempat Anda menambahkan nomor telepon tujuan ini dan tidak akan menggunakannya lagi.

# Pindah dari kotak pasir SMS Amazon SNS
<a name="sns-sms-sandbox-moving-to-production"></a>

Memindahkan Anda Akun AWS keluar dari [kotak pasir SMS](sns-sms-sandbox.md) mengharuskan Anda menambahkan, memverifikasi, dan menguji nomor telepon tujuan terlebih dahulu. Setelah melakukan ini, buat kasus dengan AWS Dukungan.

**Untuk meminta agar AWS akun Anda dipindahkan dari kotak pasir SMS**

1. **Verifikasi nomor telepon**

   1. Saat Anda Akun AWS berada di kotak pasir SMS, buka konsol [Amazon SNS](https://console.aws.amazon.com/sns/home).

   1. Di panel navigasi, di bawah Seluler, pilih **Pesan teks (SMS)**.

   1. Di bagian nomor telepon tujuan Sandbox, [tambahkan dan verifikasi](sns-sms-sandbox-verifying-phone-numbers.md) satu atau beberapa nomor telepon tujuan. Verifikasi ini memastikan Anda berhasil mengirim dan menerima pesan.

1. **Uji penerbitan SMS**

   1. Konfirmasikan bahwa Anda dapat mengirim dan menerima pesan ke setidaknya satu nomor telepon terverifikasi. Untuk petunjuk lebih rinci tentang cara mempublikasikan pesan SMS, lihat[Menerbitkan pesan SMS ke ponsel menggunakan Amazon SNS](sms_sending-overview.md#sms_publish-to-phone).

1. **Memulai suntingan kotak pasir**

   1. Pada halaman **pesan teks seluler (SMS)** konsol Amazon SNS, di bawah **Informasi akun**, pilih **Keluar dari kotak pasir SMS**. Tindakan ini mengarahkan Anda ke [Pusat Dukungan](https://support.console.aws.amazon.com/support/home?#/case/create?issueType=service-limit-increase) Amazon dan secara otomatis membuat kasus dukungan dengan opsi **peningkatan kuota Layanan** yang dipilih.

1. **Isi formulir**

   1. Dalam formulir dukungan di bawah **Peningkatan kuota Layanan**, lakukan hal berikut:

     1. Pilih Pilih **Pesan Teks SNS** sebagai layanan.

     1. Berikan **URL situs web** atau **nama aplikasi** tempat Anda ingin mengirim pesan SMS.

     1. Tentukan jenis pesan yang akan Anda kirim: **One Time Password**, **Promotional**, atau **Transactional**.

     1. Pilih **Wilayah AWS**dari mana Anda akan mengirim pesan SMS.

     1. Buat daftar **negara** atau **wilayah** tempat Anda berencana mengirim pesan SMS.

     1. Jelaskan bagaimana pelanggan Anda **ikut serta untuk menerima pesan**.

     1. Sertakan **template pesan** apa pun yang ingin Anda gunakan.

1. **Tentukan kuota dan Wilayah**

   1. Di **Requests** (Permintaan), lakukan hal-hal berikut:

     1. Pilih **Wilayah AWS**tempat yang ingin Anda pindahkan Akun AWS.

     1. Pilih **Batas Umum** untuk **Jenis Sumber Daya**.

     1. Pilih **Exit SMS Sandbox** untuk **Kuota**.

     1. (Opsional) Untuk meminta kenaikan tambahan atau penyesuaian lainnya, pilih **Tambahkan permintaan lain** dan tentukan detail yang diperlukan.

     1. Untuk **nilai kuota Baru**, masukkan **limit** dalam USD yang Anda minta.

1. **Detail tambahan**

   1. Dalam **deskripsi Kasus**, berikan detail tambahan yang relevan dengan permintaan Anda.

   1. Di bawah **opsi Kontak**, pilih **bahasa kontak pilihan** Anda.

1. **Kirim permintaan**

   1. Pilih **Kirim** untuk mengirim permintaan Anda Dukungan.

 Dukungan Tim memberikan tanggapan awal atas permintaan Anda dalam waktu 24 jam.

Untuk mencegah sistem kami digunakan untuk mengirim konten yang tidak diinginkan atau berbahaya, kami mempertimbangkan setiap permintaan dengan hati-hati. Jika bisa, kami akan mengabulkan permintaan Anda dalam waktu 24 jam ini. Namun, jika kami memerlukan informasi tambahan dari Anda, mungkin perlu waktu lebih lama untuk menyelesaikan permintaan Anda.

Jika kasus penggunaan Anda tidak sesuai dengan kebijakan kami, kami mungkin tidak dapat mengabulkan permintaan Anda.

# Identitas originasi untuk pesan SMS Amazon SNS
<a name="channels-sms-originating-identities"></a>

**penting**  
Panduan Pengembang SMS Amazon SNS telah diperbarui. Amazon SNS telah terintegrasi dengan [AWS Olah Pesan Pengguna Akhir SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html)pengiriman pesan SMS. Panduan ini berisi informasi terbaru tentang cara membuat, mengonfigurasi, dan mengelola pesan SMS Amazon SNS Anda.

Identitas originasi untuk pesan SMS adalah pengidentifikasi yang digunakan untuk mewakili pengirim pesan SMS. Anda dapat mengidentifikasi diri Anda kepada penerima menggunakan jenis identitas asal berikut:

**Nomor Originasi**  
String numerik yang mengidentifikasi nomor telepon pengirim pesan SMS. Ada beberapa jenis nomor originasi, termasuk kode panjang (nomor telepon standar yang biasanya memiliki 10 digit atau lebih), 10 digit kode panjang (10DLC), nomor bebas pulsa (TFN) dan kode pendek (nomor telepon yang berisi antara empat dan tujuh digit).  
Support untuk nomor originasi tidak tersedia di negara-negara di mana undang-undang setempat mewajibkan penggunaan pengirim, IDs bukan nomor originasi. Bila Anda mengirim pesan SMS menggunakan nomor asal, perangkat penerima akan menunjukkan nomor asal sebagai nomor telepon pengirim. Anda dapat menentukan nomor asal yang berbeda berdadsarkan kasus penggunaan.  
Untuk informasi tambahan, lihat [Nomor telepon](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers.html) di *Panduan AWS Olah Pesan Pengguna Akhir SMS Pengguna*.  
**Untuk melihat daftar semua nomor originasi yang ada di AWS akun Anda, di panel navigasi konsol [Amazon SNS](https://console.aws.amazon.com/sns/home), pilih Nomor Originasi.**

**Pengirim IDs**  
Nama alfabet yang mengidentifikasi pengirim pesan SMS. Saat Anda mengirim pesan SMS menggunakan ID pengirim, dan penerima berada di area di mana autentikasi ID pengirim didukung, ID pengirim akan muncul di perangkat penerima, bukan nomor telepon Anda. ID pengirim memberikan lebih banyak informasi tentang pengirim kepada penerima SMS daripada yang diberikan oleh nomor telepon, kode panjang, atau kode pendek.  
Pengirim IDs didukung di beberapa negara dan wilayah di seluruh dunia. Di beberapa tempat, jika Anda adalah bisnis yang mengirim pesan SMS ke pelanggan individual, Anda harus menggunakan ID pengirim yang sudah didaftarkan sebelumnya ke lembaga regulasi atau grup industri. Untuk daftar lengkap negara dan wilayah yang mendukung atau memerlukan pengirim IDs, lihat [Negara dan wilayah yang didukung untuk pesan SMS AWS Olah Pesan Pengguna Akhir SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html) di *Panduan AWS Olah Pesan Pengguna Akhir SMS Pengguna*.  
Tidak ada biaya tambahan untuk menggunakan pengirim IDs. Namun, dukungan dan persyaratan untuk otentikasi ID pengirim bervariasi menurut negara. Beberapa pasar utama (termasuk Kanada, China, dan Amerika Serikat) tidak mendukung penggunaan pengirim. IDs Beberapa area mengharuskan perusahaan yang mengirim pesan SMS ke pelanggan perorangan harus menggunakan ID pengirim yang telah terdaftar sebelumnya dengan badan pengawas atau grup industri.  
Untuk informasi tambahan, lihat [Pengirim IDs](https://docs.aws.amazon.com/sms-voice/latest/userguide/sender-id.html) di *Panduan AWS Olah Pesan Pengguna Akhir SMS Pengguna*.

# Mengkonfigurasi pesan SMS di Amazon SNS
<a name="channels-sms-configurations"></a>

**penting**  
Panduan Pengembang SMS Amazon SNS telah diperbarui. Amazon SNS telah terintegrasi dengan [AWS Olah Pesan Pengguna Akhir SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html)pengiriman pesan SMS. Panduan ini berisi informasi terbaru tentang cara membuat, mengonfigurasi, dan mengelola pesan SMS Amazon SNS Anda.

Anda dapat menggunakan konfigurasi di Amazon SNS SMS untuk mengatur preferensi SMS agar sesuai dengan kebutuhan Anda, seperti menyesuaikan kuota pengeluaran dan mengatur pencatatan status pengiriman. Topik ini juga memberikan detail tentang cara mempublikasikan pesan SMS ke topik menggunakan konsol Amazon SNS dan AWS SDK, menangani kuota secara efisien, dan mengambil statistik terperinci tentang aktivitas SMS.

# Mengirim pesan SMS menggunakan Amazon SNS
<a name="sms_sending-overview"></a>

Bagian ini menjelaskan cara mengirim pesan SMS menggunakan Amazon SNS, termasuk memublikasikan topik, berlangganan nomor telepon ke topik, menyetel atribut pada pesan, dan memublikasikan langsung ke ponsel.

## Menerbitkan pesan SMS ke topik Amazon SNS
<a name="sms_publish-to-topic"></a>

Anda dapat menerbitkan satu pesan SMS ke banyak nomor telepon sekaligus dengan berlangganan nomor telepon tersebut ke topik Amazon SNS. Topik SNS adalah saluran komunikasi di mana Anda dapat menambahkan pelanggan dan kemudian menerbitkan pesan ke semua pelanggan tersebut. Pelanggan menerima semua pesan yang dipublikasikan ke topik sampai Anda membatalkan langganan, atau sampai pelanggan memilih untuk tidak menerima pesan SMS dari akun Anda. AWS 

### Mengirim pesan ke topik menggunakan AWS konsol
<a name="sms_publish-to-topic_console"></a>

**Cara membuat topik**

Lakukan langkah-langkah berikut jika Anda belum memiliki topik untuk dikirimi pesan SMS.

1. Masuk ke [konsol Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Di menu konsol, pilih [wilayah yang mendukung pesan SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. Di panel navigasi, pilih **Topics** (Topik).

1. Di halaman **Topics** (Topik), pilih **Create topic** (Buat topik).

1. Di halaman **Create topic** (Buat topik), pada **Details** (Detail), lakukan hal-hal berikut:

   1. Untuk **Type** (Jenis), pilih **Standard** (Standar).

   1. Untuk **Name** (Nama), masukkan nama topik.

   1. (Opsional) Untuk **Display name** (Nama tampilan), masukkan prefiks kustom untuk pesan SMS Anda. Ketika Anda mengirim pesan ke topik, Amazon SNS menambahkan nama tampilan diikuti tanda kurung siku (>) dan spasi. Nama tampilan tidak peka huruf besar/kecil, dan Amazon SNS mengonversi nama tampilan menjadi karakter huruf besar. Misalnya, jika nama tampilan topiknya adalah `MyTopic` dan pesannya adalah `Hello World!`, pesan tersebut akan muncul sebagai:

      ```
      MYTOPIC> Hello World!
      ```

1. Pilih **Create topic** (Buat topik). Nama topik dan Amazon Resource Name (ARN) muncul di halaman **Topics** (Topik).

**Cara membuat langganan SMS**

Anda dapat menggunakan langganan untuk mengirim pesan SMS ke beberapa penerima hanya dengan menerbitkan pesan ke topik Anda satu kali.
**catatan**  
Saat Anda mulai menggunakan Amazon SNS untuk mengirim pesan SMS, AWS akun Anda ada di kotak pasir *SMS*. Sandbox SMS menyediakan lingkungan yang aman bagi Anda untuk mencoba fitur Amazon SNS tanpa mempertaruhkan reputasi Anda sebagai pengirim SMS. Saat akun Anda berada di sandbox SMS, Anda dapat menggunakan semua fitur Amazon SNS, tetapi Anda hanya dapat mengirim pesan SMS ke nomor telepon tujuan yang terverifikasi. Untuk informasi selengkapnya, lihat [Menggunakan kotak pasir SMS Amazon SNS](sns-sms-sandbox.md).

1. Masuk ke [konsol Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Di panel navigasi, pilih **Subscriptions** (Langganan).

1. Di halaman **Subscriptions** (Langganan), pilih **Create subscription** (Buat langganan).

1. Di halaman **Create subscription** (Buat langganan), pada **Details** (Detail), lakukan hal berikut:

   1. Untuk **Topic ARN** (ARN topik), masukkan atau pilih Amazon Resource Name (ARN) topik yang ingin Anda kirimi pesan SMS.

   1. Untuk **Protocol** (Protokol), pilih **SMS**.

   1. Untuk **Endpoint** (Titik akhir), masukkan nomor telepon yang ingin Anda buat berlangganan ke topik Anda.

1. Pilih **Create subscription** (Buat langganan). Informasi langganan muncul di halaman **Subscriptions** (Langganan).

   Untuk menambahkan nomor telepon lainnya, ulangi langkah-langkah ini. Anda juga dapat menambahkan jenis langganan lainnya, seperti email.

**Cara mengirim pesan**

Ketika Anda menerbitkan pesan ke topik, Amazon SNS mencoba untuk mengirimkan pesan tersebut ke setiap nomor telepon yang berlangganan ke topik.

1. Di [konsol Amazon SNS](https://console.aws.amazon.com/sns/home), di halaman **Topics** (Topik), pilih nama topik yang ingin Anda kirimi pesan SMS.

1. Di halaman detail topik, pilih **Publish message** (Publikasikan pesan).

1. Di halaman **Publish message to topic** (Publikasikan pesan ke topik), di bawah **Message detail** (Detail pesan), lakukan hal berikut:

   1. Untuk **Subject** (Subjek), kosongkan bidang kecuali topik Anda berisi langganan email dan Anda ingin menerbitkannya ke langganan email dan langganan SMS. Amazon SNS menggunakan **Subject** (Subjek) yang Anda masukkan sebagai baris subjek email.

   1. (Opsional) Untuk **Time to Live (TTL)** (waktu untuk tayang), masukkan jumlah detik yang digunakan Amazon SNS untuk mengirim pesan SMS Anda ke setiap pelanggan titik akhir aplikasi seluler.

1. Di bawah **Message body** (Isi pesan), lakukan hal berikut:

   1. Untuk **Message structure** (Struktur pesan), pilih **Identical payload for all delivery protocols** (Muatan yang sama untuk semua protokol pengiriman) untuk mengirim pesan yang sama ke semua jenis protokol yang berlangganan topik Anda. Atau, pilih **Custom payload for each delivery protocol** (Muatan kustom untuk setiap protokol pengiriman) untuk menyesuaikan pesan untuk pelanggan dari jenis protokol yang berbeda. Misalnya, Anda dapat memasukkan pesan default untuk pelanggan nomor telepon dan pesan kustom untuk pelanggan email.

   1. Untuk **Message body to send to the endpoint** (Badan pesan yang akan dikirim ke titik akhir), masukkan pesan Anda, atau pesan kustom Anda per protokol pengiriman.

      Jika topik Anda memiliki nama tampilan, Amazon SNS menambahkannya ke pesan, yang menambah panjang pesan. Panjang nama tampilan adalah jumlah karakter dalam nama tersebut ditambah dua karakter untuk tanda kurung siku (>) dan ruang yang ditambahkan Amazon SNS.

      Untuk informasi tentang kuota ukuran untuk pesan SMS, lihat [Menerbitkan pesan SMS ke ponsel menggunakan Amazon SNS](#sms_publish-to-phone).

1. (Opsional) Untuk **atribut Pesan**, tambahkan metadata pesan seperti stempel waktu, tanda tangan, dan. IDs

1. Pilih **Publish message** (Publikasikan Pesan). Amazon SNS mengirimkan pesan SMS dan menampilkan pesan keberhasilan.

### Mengirim pesan ke topik menggunakan AWS SDKs
<a name="sms_publish-to-topic_sdk"></a>

Untuk menggunakan AWS SDK, Anda harus mengonfigurasinya dengan kredensi Anda. Untuk informasi selengkapnya, lihat [File konfigurasi dan kredensial bersama](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html) di Panduan Referensi *Alat AWS SDKs dan Alat*.

Contoh kode berikut ini menunjukkan cara untuk melakukan:
+ Buat topik Amazon SNS.
+ Berlangganan nomor telepon ke topik.
+ Publikasikan pesan SMS ke topik sehingga semua nomor telepon berlangganan menerima pesan sekaligus.

------
#### [ Java ]

**SDK untuk Java 2.x**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples). 
Buat topik dan kembalikan ARN-nya.  

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.CreateTopicRequest;
import software.amazon.awssdk.services.sns.model.CreateTopicResponse;
import software.amazon.awssdk.services.sns.model.SnsException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class CreateTopic {
    public static void main(String[] args) {
        final String usage = """

                Usage:    <topicName>

                Where:
                   topicName - The name of the topic to create (for example, mytopic).

                """;

        if (args.length != 1) {
            System.out.println(usage);
            System.exit(1);
        }

        String topicName = args[0];
        System.out.println("Creating a topic with name: " + topicName);
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        String arnVal = createSNSTopic(snsClient, topicName);
        System.out.println("The topic ARN is" + arnVal);
        snsClient.close();
    }

    public static String createSNSTopic(SnsClient snsClient, String topicName) {
        CreateTopicResponse result;
        try {
            CreateTopicRequest request = CreateTopicRequest.builder()
                    .name(topicName)
                    .build();

            result = snsClient.createTopic(request);
            return result.topicArn();

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
        return "";
    }
}
```
Berlangganan titik akhir ke suatu topik.  

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SnsException;
import software.amazon.awssdk.services.sns.model.SubscribeRequest;
import software.amazon.awssdk.services.sns.model.SubscribeResponse;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class SubscribeTextSMS {
    public static void main(String[] args) {
        final String usage = """

                Usage:    <topicArn> <phoneNumber>

                Where:
                   topicArn - The ARN of the topic to subscribe.
                   phoneNumber - A mobile phone number that receives notifications (for example, +1XXX5550100).
                """;

        if (args.length < 2) {
            System.out.println(usage);
            System.exit(1);
        }

        String topicArn = args[0];
        String phoneNumber = args[1];
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        subTextSNS(snsClient, topicArn, phoneNumber);
        snsClient.close();
    }

    public static void subTextSNS(SnsClient snsClient, String topicArn, String phoneNumber) {
        try {
            SubscribeRequest request = SubscribeRequest.builder()
                    .protocol("sms")
                    .endpoint(phoneNumber)
                    .returnSubscriptionArn(true)
                    .topicArn(topicArn)
                    .build();

            SubscribeResponse result = snsClient.subscribe(request);
            System.out.println("Subscription ARN: " + result.subscriptionArn() + "\n\n Status is "
                    + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
Tetapkan atribut pada pesan, seperti ID pengirim, harga maksimum, dan jenisnya. Atribut pesan bersifat opsional.  

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SetSmsAttributesRequest;
import software.amazon.awssdk.services.sns.model.SetSmsAttributesResponse;
import software.amazon.awssdk.services.sns.model.SnsException;
import java.util.HashMap;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class SetSMSAttributes {
    public static void main(String[] args) {
        HashMap<String, String> attributes = new HashMap<>(1);
        attributes.put("DefaultSMSType", "Transactional");
        attributes.put("UsageReportS3Bucket", "janbucket");

        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();
        setSNSAttributes(snsClient, attributes);
        snsClient.close();
    }

    public static void setSNSAttributes(SnsClient snsClient, HashMap<String, String> attributes) {
        try {
            SetSmsAttributesRequest request = SetSmsAttributesRequest.builder()
                    .attributes(attributes)
                    .build();

            SetSmsAttributesResponse result = snsClient.setSMSAttributes(request);
            System.out.println("Set default Attributes to " + attributes + ". Status was "
                    + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
Publikasikan pesan ke topik. Pesan dikirim ke setiap pelanggan.  

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.PublishRequest;
import software.amazon.awssdk.services.sns.model.PublishResponse;
import software.amazon.awssdk.services.sns.model.SnsException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class PublishTextSMS {
    public static void main(String[] args) {
        final String usage = """

                Usage:    <message> <phoneNumber>

                Where:
                   message - The message text to send.
                   phoneNumber - The mobile phone number to which a message is sent (for example, +1XXX5550100).\s
                """;

        if (args.length != 2) {
            System.out.println(usage);
            System.exit(1);
        }

        String message = args[0];
        String phoneNumber = args[1];
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();
        pubTextSMS(snsClient, message, phoneNumber);
        snsClient.close();
    }

    public static void pubTextSMS(SnsClient snsClient, String message, String phoneNumber) {
        try {
            PublishRequest request = PublishRequest.builder()
                    .message(message)
                    .phoneNumber(phoneNumber)
                    .build();

            PublishResponse result = snsClient.publish(request);
            System.out
                    .println(result.messageId() + " Message sent. Status was " + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```

------

## Menerbitkan pesan SMS ke ponsel menggunakan Amazon SNS
<a name="sms_publish-to-phone"></a>

Anda dapat menggunakan Amazon SNS untuk mengirim pesan SMS langsung ke ponsel tanpa membuat nomor telepon berlangganan ke topik Amazon SNS.

**catatan**  
Membuat nomor telepon berlangganan ke topik berguna jika Anda ingin mengirim satu pesan ke beberapa nomor telepon sekaligus. Untuk petunjuk penerbitan pesan SMS ke topik, lihat [Menerbitkan pesan SMS ke topik Amazon SNS](#sms_publish-to-topic).

Saat mengirim pesan, Anda dapat mengontrol pesan dioptimalkan atau tidak untuk biayanya atau pengiriman andal. Anda juga dapat menentukan [ID pengirim atau nomor asal](channels-sms-originating-identities.md). Jika Anda mengirim pesan secara terprogram menggunakan Amazon SNS API atau AWS SDKs, Anda dapat menentukan harga maksimum untuk pengiriman pesan.

Setiap pesan SMS dapat berisi hingga 140 byte, dan kuota karakter tergantung pada skema pengkodean. Misalnya, sebuah pesan SMS dapat berisi:
+ 160 karakter GSM
+ 140 karakter ASCII
+ 70 karakter UCS-2

Jika Anda menerbitkan pesan yang melebihi kuota ukuran, Amazon SNS mengirimkannya sebagai beberapa pesan, masing-masing sesuai dalam kuota ukuran. Pesan tidak terputus di tengah kata, melainkan di batas seluruh kata. Kuota ukuran total untuk satu tindakan penerbitan SMS adalah 1.600 byte.

Ketika Anda mengirim pesan SMS, Anda menentukan nomor telepon menggunakan format E.164, struktur penomoran telepon standar yang digunakan untuk telekomunikasi internasional. Nomor telepon yang mengikuti format ini dapat terdiri dari maksimum 15 digit bersama dengan prefiks tanda tambah (\$1) dan kode negara. Misalnya, nomor telepon AS dalam format E.164 muncul sebagai \$11. XXX5550100

### Mengirim pesan (konsol)
<a name="sms_publish_console"></a>

1. Masuk ke [Konsol Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Di menu konsol, pilih [wilayah yang mendukung pesan SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. Di panel navigasi, pilih **Text messaging (SMS)** (Pesan teks).

1. Di halaman **Mobile text messaging (SMS)** (Pesan teks seluler (SMS)), pilih **Publish text message** (Publikasikan pesan teks).

1. Di halaman **Publish text message** (Publikasikan pesan SMS), untuk **Message type** (Jenis pesan), pilih salah satu jenis berikut:
   + **Promotional** (Promosi) – Pesan tidak penting, seperti pesan pemasaran.
   + **Transactional** (Transaksional) – Pesan penting yang mendukung transaksi pelanggan, seperti kode sandi satu kali (OTP) untuk autentikasi multi-faktor.
**catatan**  
Pengaturan tingkat pesan ini menimpa jenis pesan default tingkat akun Anda. Anda dapat menetapkan jenis pesan default tingkat akun dari bagian **Text messaging preferences** (Preferensi olahpesan teks) dari halaman **Mobile text messaging (SMS)** (Olahpesan teks seluler (SMS)).

   Untuk informasi harga untuk pesan promosi dan transaksional, lihat [Harga SMS Global](https://aws.amazon.com/sns/sms-pricing/).

1. Untuk **Destination phone number** (Nomor telepon tujuan), masukkan nomor telepon yang ingin Anda kirimi pesan tersebut.

1. Untuk **Message** (Pesan), masukkan pesan yang akan dikirim.

1. (Opsional) Di bawah **Origination identities** (Identitas asal), tentukan cara mengenalkan diri Anda ke penerima:
   + Untuk menentukan **Sender ID** ID Pengirim, ketik ID kustom yang terdiri dari 3-11 karakter alfanumerik, termasuk setidaknya satu huruf dan tanpa spasi. ID pengirim ditampilkan sebagai pengirim pesan di perangkat penerima. Misalnya, Anda dapat menggunakan merek bisnis Anda untuk membuat sumber pesan lebih mudah dikenali.

     Support untuk pengirim IDs bervariasi menurut and/or wilayah negara. Misalnya, pesan yang dikirim ke nomor telepon US tidak akan menampilkan ID pengirim. Untuk negara dan wilayah yang mendukung pengirim IDs, lihat [Negara dan wilayah yang didukung untuk pesan SMS AWS Olah Pesan Pengguna Akhir SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html) di *Panduan AWS Olah Pesan Pengguna Akhir SMS Pengguna*.

     Jika Anda tidak menentukan ID pengirim, salah satu dari berikut ini akan ditampilkan sebagai identitas asal:
     + Di negara-negara yang mendukung kode panjang, kode panjang akan ditampilkan.
     + Di negara-negara di mana hanya pengirim IDs yang didukung, *PEMBERITAHUAN* ditampilkan.

     ID pengirim tingkat pesan ini menimpa ID pengirim default Anda, yang Anda tetapkan di halaman **Text messaging preferences** (Preferensi olahpesan teks).
   + Untuk menentukan **Nomor asal**, masukkan string yang terdiri dari 5-14 nomor untuk ditampilkan sebagai nomor telepon pengirim di perangkat penerima. String ini harus cocok dengan nomor originasi yang dikonfigurasi di negara Akun AWS tujuan Anda. Nomor originasi dapat berupa nomor 10DLC, nomor bebas pulsa, kode person-to-person panjang, atau kode pendek. Untuk informasi selengkapnya, lihat [Identitas originasi untuk pesan SMS Amazon SNS](channels-sms-originating-identities.md).

     Jika Anda tidak menentukan nomor asal, Amazon SNS memilih nomor asal yang akan digunakan untuk pesan teks SMS, berdasarkan konfigurasi Akun AWS Anda.

1. Jika Anda mengirim pesan SMS ke penerima di India, perluas **Country-specific attributes** (Atribut khusus negara), dan tentukan atribut berikut:
   + **Entity ID** (ID entitas) – ID entitas atau ID entitas utama (principal entity/PE) untuk mengirim pesan SMS ke penerima di India. ID ini adalah string unik dari 1—50 karakter yang disediakan oleh Telecom Regulatory Authority of India (TRAI) untuk mengidentifikasi entitas yang Anda daftarkan di TRAI.
   + **Template ID** (ID templat) – ID templat untuk mengirim pesan SMS ke penerima di India. ID ini adalah string unik yang disediakan TRAI dari 1-50 karakter yang mengidentifikasi template yang Anda daftarkan dengan TRAI. ID templat harus dikaitkan dengan ID pengirim yang Anda tentukan untuk pesan.

   Untuk informasi lebih lanjut tentang pengiriman pesan SMS ke penerima di [India, proses pendaftaran ID pengirim India](https://docs.aws.amazon.com/sms-voice/latest/userguide/registrations-sms-senderid-india.html) di *AWS Olah Pesan Pengguna Akhir SMS Panduan Pengguna*.

1. Pilih **Publish message** (Publikasikan Pesan).

**Tip**  
Untuk mengirim pesan SMS dari nomor asal, Anda juga dapat memilih **Origination numbers** (Nomor asal) di panel navigasi konsol Amazon SNS. Pilih nomor asal yang mencakup **SMS** di kolom **Capabilities** (Kemampuan), dan kemudian pilih **Publish text message** (Publikasikan pesan teks).

### Mengirim pesan (AWS SDKs)
<a name="sms_publish_sdk"></a>

Untuk mengirim pesan SMS menggunakan salah satu AWS SDKs, gunakan operasi API di SDK yang sesuai dengan `Publish` permintaan di Amazon SNS API. Dengan permintaan ini, Anda dapat mengirim pesan SMS langsung ke nomor telepon. Anda juga dapat menggunakan parameter `MessageAttributes` untuk menetapkan nilai untuk nama atribut berikut:

**`AWS.SNS.SMS.SenderID`**  
ID kustom yang berisi 3-11 karakter alfanumerik atau karakter tanda hubung (-), termasuk setidaknya satu huruf dan tidak ada spasi. ID pengirim ditampilkan sebagai pengirim pesan di perangkat penerima. Misalnya, Anda dapat menggunakan merek bisnis Anda untuk membuat sumber pesan lebih mudah dikenali.  
Support untuk pengirim IDs bervariasi menurut negara atau wilayah. Misalnya, pesan yang dikirim ke nomor telepon US tidak akan menampilkan ID pengirim. Untuk daftar negara atau wilayah yang mendukung pengirim IDs, lihat [Negara dan wilayah yang didukung untuk pesan SMS AWS Olah Pesan Pengguna Akhir SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html) di *Panduan AWS Olah Pesan Pengguna Akhir SMS Pengguna*.  
Jika Anda tidak menentukan ID pengirim, [kode panjang](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-request-long-code.html)akan ditampilkan sebagai ID pengirim di negara atau wilayah yang didukung. Untuk negara atau wilayah yang memerlukan ID pengirim abjad,*PEMBERITAHUAN* muncul sebagai ID pengirim.  
Atribut tingkat pesan ini menimpa atribut tingkat akun `DefaultSenderID`, yang dapat Anda atur menggunakan permintaan `SetSMSAttributes`.

**`AWS.MM.SMS.OriginationNumber`**  
Sebuah string kustom yang terdiri dari 5–14 angka, yang dapat mencakup awalan tanda tambah (`+`) opsional. String angka ini muncul sebagai nomor telepon pengirim di perangkat penerima. String harus cocok dengan nomor originasi yang dikonfigurasi di AWS akun Anda untuk negara tujuan. Nomor originasi dapat berupa nomor 10DLC, nomor bebas pulsa, kode panjang person-to-person (P2P), atau kode pendek. Untuk informasi selengkapnya, lihat [Nomor telepon](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers.html) di *Panduan AWS Olah Pesan Pengguna Akhir SMS Pengguna*.  
Jika Anda tidak menentukan nomor originasi, Amazon SNS memilih nomor originasi berdasarkan konfigurasi akun Anda. AWS 

**`AWS.SNS.SMS.MaxPrice`**  
Harga maksimum dalam USD yang akan Anda gunakan untuk mengirim pesan SMS. Jika Amazon SNS menentukan bahwa mengirim pesan akan dikenakan biaya yang melebihi harga maksimum Anda, ia tidak akan mengirim pesan.  
Atribut ini tidak berpengaruh jika biaya month-to-date SMS Anda telah melebihi kuota yang ditetapkan untuk atribut tersebut`MonthlySpendLimit`. Anda dapat mengatur atribut `MonthlySpendLimit` menggunakan permintaan `SetSMSAttributes`.  
Jika Anda mengirim pesan ke topik Amazon SNS, harga maksimum berlaku untuk setiap pengiriman pesan ke setiap nomor telepon yang berlangganan topik.

**`AWS.SNS.SMS.SMSType`**  
Jenis pesan yang Anda kirim:  
+ **`Promotional`** (default) – Pesan tidak penting, seperti pesan pemasaran.
+ **`Transactional`** (Transaksional) – Pesan penting yang mendukung transaksi pelanggan, seperti kode sandi satu kali (OTP) untuk autentikasi multi-faktor.
Atribut tingkat pesan ini menimpa atribut tingkat akun `DefaultSMSType`, yang dapat Anda atur menggunakan permintaan `SetSMSAttributes`.

**`AWS.MM.SMS.EntityId`**  
Atribut ini hanya diperlukan untuk mengirim pesan SMS ke penerima di India.  
Ini merupakan ID entitas atau ID entitas utama (principal entity/PE) Anda untuk mengirim pesan SMS ke penerima di India. ID ini adalah string unik dari 1—50 karakter yang disediakan oleh Telecom Regulatory Authority of India (TRAI) untuk mengidentifikasi entitas yang Anda daftarkan di TRAI.

**`AWS.MM.SMS.TemplateId`**  
Atribut ini hanya diperlukan untuk mengirim pesan SMS ke penerima di India.  
Ini adalah templat Anda untuk mengirim pesan SMS ke penerima di India. ID ini adalah string unik yang disediakan TRAI dari 1-50 karakter yang mengidentifikasi template yang Anda daftarkan dengan TRAI. ID templat harus dikaitkan dengan ID pengirim yang Anda tentukan untuk pesan.

#### Mengirim pesan
<a name="sms_publish_sdks"></a>

Contoh kode berikut menunjukkan cara mempublikasikan pesan SMS menggunakan Amazon SNS.

------
#### [ .NET ]

**SDK untuk .NET**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/dotnetv3/SNS#code-examples). 

```
namespace SNSMessageExample
{
    using System;
    using System.Threading.Tasks;
    using Amazon;
    using Amazon.SimpleNotificationService;
    using Amazon.SimpleNotificationService.Model;

    public class SNSMessage
    {
        private AmazonSimpleNotificationServiceClient snsClient;

        /// <summary>
        /// Initializes a new instance of the <see cref="SNSMessage"/> class.
        /// Constructs a new SNSMessage object initializing the Amazon Simple
        /// Notification Service (Amazon SNS) client using the supplied
        /// Region endpoint.
        /// </summary>
        /// <param name="regionEndpoint">The Amazon Region endpoint to use in
        /// sending test messages with this object.</param>
        public SNSMessage(RegionEndpoint regionEndpoint)
        {
            snsClient = new AmazonSimpleNotificationServiceClient(regionEndpoint);
        }

        /// <summary>
        /// Sends the SMS message passed in the text parameter to the phone number
        /// in phoneNum.
        /// </summary>
        /// <param name="phoneNum">The ten-digit phone number to which the text
        /// message will be sent.</param>
        /// <param name="text">The text of the message to send.</param>
        /// <returns>Async task.</returns>
        public async Task SendTextMessageAsync(string phoneNum, string text)
        {
            if (string.IsNullOrEmpty(phoneNum) || string.IsNullOrEmpty(text))
            {
                return;
            }

            // Now actually send the message.
            var request = new PublishRequest
            {
                Message = text,
                PhoneNumber = phoneNum,
            };

            try
            {
                var response = await snsClient.PublishAsync(request);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error sending message: {ex}");
            }
        }
    }
}
```
+  Untuk detail API, lihat [Publikasikan](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/Publish) di *Referensi AWS SDK untuk .NET API*. 

------
#### [ C\$1\$1 ]

**SDK untuk C\$1\$1**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sns#code-examples). 

```
/**
 * Publish SMS: use Amazon Simple Notification Service (Amazon SNS) to send an SMS text message to a phone number.
 * Note: This requires additional AWS configuration prior to running example. 
 * 
 *  NOTE: When you start using Amazon SNS to send SMS messages, your AWS account is in the SMS sandbox and you can only
 *  use verified destination phone numbers. See https://docs.aws.amazon.com/sns/latest/dg/sns-sms-sandbox.html.
 *  NOTE: If destination is in the US, you also have an additional restriction that you have use a dedicated
 *  origination ID (phone number). You can request an origination number using Amazon Pinpoint for a fee.
 *  See https://aws.amazon.com/blogs/compute/provisioning-and-using-10dlc-origination-numbers-with-amazon-sns/ 
 *  for more information. 
 * 
 *  <phone_number_value> input parameter uses E.164 format. 
 *  For example, in United States, this input value should be of the form: +12223334444
 */

//! Send an SMS text message to a phone number.
/*!
  \param message: The message to publish.
  \param phoneNumber: The phone number of the recipient in E.164 format.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool AwsDoc::SNS::publishSms(const Aws::String &message,
                             const Aws::String &phoneNumber,
                             const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::SNS::SNSClient snsClient(clientConfiguration);

    Aws::SNS::Model::PublishRequest request;
    request.SetMessage(message);
    request.SetPhoneNumber(phoneNumber);

    const Aws::SNS::Model::PublishOutcome outcome = snsClient.Publish(request);

    if (outcome.IsSuccess()) {
        std::cout << "Message published successfully with message id, '"
                  << outcome.GetResult().GetMessageId() << "'."
                  << std::endl;
    }
    else {
        std::cerr << "Error while publishing message "
                  << outcome.GetError().GetMessage()
                  << std::endl;
    }

    return outcome.IsSuccess();
}
```
+  Untuk detail API, lihat [Publikasikan](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/Publish) di *Referensi AWS SDK untuk C\$1\$1 API*. 

------
#### [ Java ]

**SDK untuk Java 2.x**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples). 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.PublishRequest;
import software.amazon.awssdk.services.sns.model.PublishResponse;
import software.amazon.awssdk.services.sns.model.SnsException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class PublishTextSMS {
    public static void main(String[] args) {
        final String usage = """

                Usage:    <message> <phoneNumber>

                Where:
                   message - The message text to send.
                   phoneNumber - The mobile phone number to which a message is sent (for example, +1XXX5550100).\s
                """;

        if (args.length != 2) {
            System.out.println(usage);
            System.exit(1);
        }

        String message = args[0];
        String phoneNumber = args[1];
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();
        pubTextSMS(snsClient, message, phoneNumber);
        snsClient.close();
    }

    public static void pubTextSMS(SnsClient snsClient, String message, String phoneNumber) {
        try {
            PublishRequest request = PublishRequest.builder()
                    .message(message)
                    .phoneNumber(phoneNumber)
                    .build();

            PublishResponse result = snsClient.publish(request);
            System.out
                    .println(result.messageId() + " Message sent. Status was " + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
+  Untuk detail API, lihat [Publikasikan](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/Publish) di *Referensi AWS SDK for Java 2.x API*. 

------
#### [ Kotlin ]

**SDK untuk Kotlin**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/kotlin/services/sns#code-examples). 

```
suspend fun pubTextSMS(
    messageVal: String?,
    phoneNumberVal: String?,
) {
    val request =
        PublishRequest {
            message = messageVal
            phoneNumber = phoneNumberVal
        }

    SnsClient.fromEnvironment { region = "us-east-1" }.use { snsClient ->
        val result = snsClient.publish(request)
        println("${result.messageId} message sent.")
    }
}
```
+  Untuk detail API, lihat [Menerbitkan](https://sdk.amazonaws.com/kotlin/api/latest/index.html) di *AWS SDK untuk referensi API Kotlin*. 

------
#### [ PHP ]

**SDK untuk PHP**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples). 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Sends a text message (SMS message) directly to a phone number using Amazon SNS.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$message = 'This message is sent from a Amazon SNS code sample.';
$phone = '+1XXX5550100';

try {
    $result = $SnSclient->publish([
        'Message' => $message,
        'PhoneNumber' => $phone,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  Untuk informasi selengkapnya, silakan lihat [Panduan Developer AWS SDK untuk PHP](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-sending-sms.html#publish-to-a-text-message-sms-message). 
+  Untuk detail API, lihat [Publikasikan](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/Publish) di *Referensi AWS SDK untuk PHP API*. 

------
#### [ Python ]

**SDK untuk Python (Boto3)**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/python/example_code/sns#code-examples). 

```
class SnsWrapper:
    """Encapsulates Amazon SNS topic and subscription functions."""

    def __init__(self, sns_resource):
        """
        :param sns_resource: A Boto3 Amazon SNS resource.
        """
        self.sns_resource = sns_resource


    def publish_text_message(self, phone_number, message):
        """
        Publishes a text message directly to a phone number without need for a
        subscription.

        :param phone_number: The phone number that receives the message. This must be
                             in E.164 format. For example, a United States phone
                             number might be +12065550101.
        :param message: The message to send.
        :return: The ID of the message.
        """
        try:
            response = self.sns_resource.meta.client.publish(
                PhoneNumber=phone_number, Message=message
            )
            message_id = response["MessageId"]
            logger.info("Published message to %s.", phone_number)
        except ClientError:
            logger.exception("Couldn't publish message to %s.", phone_number)
            raise
        else:
            return message_id
```
+  Untuk detail API, lihat [Menerbitkan](https://docs.aws.amazon.com/goto/boto3/sns-2010-03-31/Publish) di *AWS SDK for Python (Boto3) Referensi* API. 

------
#### [ SAP ABAP ]

**SDK for SAP ABAP**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/sap-abap/services/sns#code-examples). 

```
    " iv_phone_number = '+12065550101' - Phone number in E.164 format
    TRY.
        oo_result = lo_sns->publish(              " oo_result is returned for testing purposes. "
          iv_phonenumber = iv_phone_number
          iv_message = iv_message ).
        MESSAGE 'Message published to phone number.' TYPE 'I'.
      CATCH /aws1/cx_snsnotfoundexception.
        MESSAGE 'Phone number does not exist.' TYPE 'E'.
    ENDTRY.
```
+  Untuk detail API, lihat [Publikasikan](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html) di *AWS SDK untuk referensi API SAP ABAP*. 

------

# Mengatur preferensi pesan SMS di Amazon SNS
<a name="sms_preferences"></a>

Gunakan Amazon SNS untuk menentukan preferensi untuk olahpesan SMS. Misalnya, Anda dapat menentukan jika akan mengoptimalkan pengiriman untuk biaya atau keandalan, batas pengeluaran bulanan Anda, bagaimana pengiriman dicatat, dan jika akan berlangganan laporan penggunaan SMS harian atau tidak.

Preferensi ini berlaku untuk setiap pesan SMS yang Anda kirim dari akun Anda, namun Anda dapat mengganti sebagian pesan tersebut saat mengirim pesan individual. Untuk informasi selengkapnya, lihat [Menerbitkan pesan SMS ke ponsel menggunakan Amazon SNS](sms_sending-overview.md#sms_publish-to-phone).

## Mengatur preferensi pesan SMS menggunakan Konsol Manajemen AWS
<a name="sms_preferences_console"></a>

1. Masuk ke [konsol Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Pilih [wilayah yang mendukung olahpesan SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. Pada panel navigasi, pilih **Seluler** dan kemudian **Pesan teks (SMS)**.

1. Di halaman **Mobile text messaging (SMS)** (Olahpesan teks seluler (SMS)), di bagian **Text messaging preferences**(Preferensi pesan teks), pilih **Edit**.

1. Di halaman **Edit text messaging preferences** (Edit preferensi olahpesan teks), di bagian **Details**, lakukan hal berikut:

   1. Untuk **Default message type** (Jenis pesan bawaan), pilih salah satu jenis berikut:
      + **Promosi** — Pesan non-kritis (misalnya, pemasaran). Amazon SNS mengoptimalkan pengiriman pesan agar dikenakan biaya terendah.
      + **Transaksional** (default) — Pesan penting yang mendukung transaksi pelanggan, seperti kode sandi satu kali untuk otentikasi multi-faktor. Amazon SNS mengoptimalkan pengiriman pesan agar mencapai keandalan tertinggi.

      Untuk informasi harga untuk pesan promosi dan transaksional, lihat [Harga SMS Global](https://aws.amazon.com/sns/sms-pricing/).

   1. (Opsional) Untuk **Account spend limit** (Batas pengeluaran akun), masukkan jumlah (dalam USD) yang ingin Anda gunakan untuk pengeluaran pesan SMS setiap bulannya.
**penting**  
Secara default, kuota pengeluaran diatur sebesar 1,00 USD. Jika Anda ingin meningkatkan kuota layanan, [kirimkan permintaan](https://console.aws.amazon.com/support/home#/case/create?issueType=service-limit-increase&limitType=service-code-sns).
Jika jumlah yang ditetapkan di konsol tersebut melebihi kuota layanan Anda, Amazon SNS berhenti mengirimkan pesan SMS.
Karena Amazon SNS adalah sistem terdistribusi, ia berhenti mengirimkan pesan SMS dalam beberapa menit sejak kuota pengeluaran terlampaui. Selama interval ini, jika Anda terus mengirim pesan SMS, Anda mungkin akan dikenakan biaya yang melebihi kuota Anda.

1. (Opsional) Untuk **Default sender ID** (ID pengirim default), masukkan ID kustom, seperti merek bisnis Anda, yang ditampilkan sebagai pengirim di perangkat penerima.
**catatan**  
Support untuk pengirim IDs bervariasi menurut negara.

1. (Opsional) Masukkan nama **Nama bucket Amazon S3 untuk laporan penggunaan**.
**catatan**  
Kebijakan bucket Amazon S3 harus memberikan akses tulis ke Amazon SNS.

1. Pilih **Simpan perubahan**.

## Pengaturan preferensi (AWS SDKs)
<a name="sms_preferences_sdk"></a>

Untuk mengatur preferensi SMS Anda menggunakan salah satu AWS SDKs, gunakan tindakan dalam SDK yang sesuai dengan `SetSMSAttributes` permintaan di Amazon SNS API. Dengan permintaan ini, Anda menetapkan nilai ke atribut SMS yang berbeda, seperti kuota pengeluaran bulanan dan jenis SMS default Anda (promosi atau transaksional). Untuk semua atribut SMS, lihat [Mengatur SMSAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetSMSAttributes.html) *Referensi API Layanan Pemberitahuan Sederhana Amazon*.

Contoh kode berikut menunjukkan cara menggunakan`SetSMSAttributes`.

------
#### [ C\$1\$1 ]

**SDK untuk C\$1\$1**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sns#code-examples). 
Cara menggunakan Amazon SNS untuk mengatur atribut DefaultSMSType .  

```
//! Set the default settings for sending SMS messages.
/*!
  \param smsType: The type of SMS message that you will send by default.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool AwsDoc::SNS::setSMSType(const Aws::String &smsType,
                             const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::SNS::SNSClient snsClient(clientConfiguration);

    Aws::SNS::Model::SetSMSAttributesRequest request;
    request.AddAttributes("DefaultSMSType", smsType);

    const Aws::SNS::Model::SetSMSAttributesOutcome outcome = snsClient.SetSMSAttributes(
            request);

    if (outcome.IsSuccess()) {
        std::cout << "SMS Type set successfully " << std::endl;
    }
    else {
        std::cerr << "Error while setting SMS Type: '"
                  << outcome.GetError().GetMessage()
                  << "'" << std::endl;
    }

    return outcome.IsSuccess();
}
```
+  Untuk detail API, lihat [Menyetel SMSAttributes](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/SetSMSAttributes) di *Referensi AWS SDK untuk C\$1\$1 API*. 

------
#### [ CLI ]

**AWS CLI**  
**Untuk mengatur atribut pesan SMS**  
`set-sms-attributes`Contoh berikut menetapkan ID pengirim default untuk pesan SMS ke`MyName`.  

```
aws sns set-sms-attributes \
    --attributes DefaultSenderID=MyName
```
Perintah ini tidak menghasilkan output.  
+  Untuk detail API, lihat [Menyetel SMSAttributes](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/set-sms-attributes.html) di *Referensi AWS CLI Perintah*. 

------
#### [ Java ]

**SDK untuk Java 2.x**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples). 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SetSmsAttributesRequest;
import software.amazon.awssdk.services.sns.model.SetSmsAttributesResponse;
import software.amazon.awssdk.services.sns.model.SnsException;
import java.util.HashMap;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class SetSMSAttributes {
    public static void main(String[] args) {
        HashMap<String, String> attributes = new HashMap<>(1);
        attributes.put("DefaultSMSType", "Transactional");
        attributes.put("UsageReportS3Bucket", "janbucket");

        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();
        setSNSAttributes(snsClient, attributes);
        snsClient.close();
    }

    public static void setSNSAttributes(SnsClient snsClient, HashMap<String, String> attributes) {
        try {
            SetSmsAttributesRequest request = SetSmsAttributesRequest.builder()
                    .attributes(attributes)
                    .build();

            SetSmsAttributesResponse result = snsClient.setSMSAttributes(request);
            System.out.println("Set default Attributes to " + attributes + ". Status was "
                    + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
+  Untuk detail API, lihat [Menyetel SMSAttributes](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/SetSMSAttributes) di *Referensi AWS SDK for Java 2.x API*. 

------
#### [ JavaScript ]

**SDK untuk JavaScript (v3)**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sns#code-examples). 
Buat klien dalam modul terpisah dan ekspor klien tersebut.  

```
import { SNSClient } from "@aws-sdk/client-sns";

// The AWS Region can be provided here using the `region` property. If you leave it blank
// the SDK will default to the region set in your AWS config.
export const snsClient = new SNSClient({});
```
Mengimpor modul SDK dan klien dan memanggil API.  

```
import { SetSMSAttributesCommand } from "@aws-sdk/client-sns";
import { snsClient } from "../libs/snsClient.js";

/**
 * @param {"Transactional" | "Promotional"} defaultSmsType
 */
export const setSmsType = async (defaultSmsType = "Transactional") => {
  const response = await snsClient.send(
    new SetSMSAttributesCommand({
      attributes: {
        // Promotional – (Default) Noncritical messages, such as marketing messages.
        // Transactional – Critical messages that support customer transactions,
        // such as one-time passcodes for multi-factor authentication.
        DefaultSMSType: defaultSmsType,
      },
    }),
  );
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: '1885b977-2d7e-535e-8214-e44be727e265',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   }
  // }
  return response;
};
```
+  Untuk informasi selengkapnya, silakan lihat [Panduan Developer AWS SDK untuk JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-sending-sms.html#sending-sms-setattributes). 
+  Untuk detail API, lihat [Menyetel SMSAttributes](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/SetSMSAttributesCommand) di *Referensi AWS SDK untuk JavaScript API*. 

------
#### [ PHP ]

**SDK untuk PHP**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples). 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

try {
    $result = $SnSclient->SetSMSAttributes([
        'attributes' => [
            'DefaultSMSType' => 'Transactional',
        ],
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  Untuk informasi selengkapnya, silakan lihat [Panduan Developer AWS SDK untuk PHP](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-sending-sms.html#set-sms-attributes). 
+  Untuk detail API, lihat [Menyetel SMSAttributes](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/SetSMSAttributes) di *Referensi AWS SDK untuk PHP API*. 

------

## Menyetel preferensi pesan SMS untuk pengiriman khusus negara
<a name="sms_preferences_country_specific"></a>

Anda dapat mengelola dan mengontrol lalu lintas SMS Anda dengan mengirim pesan hanya ke negara tujuan tertentu. Ini memastikan bahwa pesan Anda dikirim hanya ke negara yang disetujui, menghindari biaya SMS yang tidak diinginkan. Petunjuk berikut menggunakan konfigurasi Protect Amazon Pinpoint untuk menentukan negara yang ingin Anda izinkan atau blokir.

1. Buka AWS SMS konsol di [https://console.aws.amazon.com/sms-voice/](https://console.aws.amazon.com/sms-voice/).

1. Di panel navigasi, di bawah **Ikhtisar**, di bagian **Mulai cepat**, pilih **Buat konfigurasi proteksi**.

1. Di bawah **Lindungi detail konfigurasi**, masukkan **nama yang ramah bisnis** untuk konfigurasi proteksi Anda (misalnya, Allow-Only-AU).

1. Di bawah **aturan negara SMS**, pilih kotak centang **Wilayah/Negara** untuk memblokir pengiriman pesan ke semua negara yang didukung.

1. Hapus centang kotak untuk negara tempat Anda ingin mengirim pesan. **Misalnya, untuk mengizinkan pesan hanya ke Australia, batalkan centang kotak untuk Australia.**

1. Di bagian **Lindungi asosiasi konfigurasi**, di bawah **Jenis asosiasi**, pilih **Akun default**. Ini akan memastikan bahwa konfigurasi AWS Olah Pesan Pengguna Akhir SMS Protect memengaruhi semua pesan yang dikirim melalui Amazon SNS, Amazon [Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools.html), dan panggilan Amazon Pinpoint API. [https://docs.aws.amazon.com/pinpoint/latest/developerguide/send-messages-sms.html](https://docs.aws.amazon.com/pinpoint/latest/developerguide/send-messages-sms.html)

1. Pilih **Buat konfigurasi proteksi** untuk menyimpan pengaturan Anda.

   Pesan konfirmasi berikut ditampilkan:

   ```
   Success Protect configuration protect-abc0123456789 has been created.
   ```

1. Masuk ke [Konsol Amazon SNS](https://console.aws.amazon.com/sns/home).

1. [**Publikasikan pesan**](sns-publishing.md) ke salah satu negara yang diblokir, seperti India.

   Pesan tidak akan terkirim. Anda dapat memverifikasi ini di log kegagalan pengiriman menggunakan [CloudWatch](sms_stats_cloudwatch.md). Cari grup log **sns/region/AccountID/DirectPublishToPhoneNumber/Failure**untuk respons yang mirip dengan contoh berikut:

   ```
   {
   "notification": {
   "messageId": "bd59a509-XXXX-XXXX-82f8-fbdb8cb68217",
   "timestamp": "YYYY-MM-DD XX:XX:XX.XXXX“
   },
   "delivery": {
   "destination": "+91XXXXXXXXXX",
   "smsType": "Transactional",
   "providerResponse": "Cannot deliver message to the specified destination country",
   "dwellTimeMs": 85
   },
   "status": "FAILURE"
   }
   ```

# Mengelola nomor telepon dan langganan Amazon SNS
<a name="sms_manage"></a>

Amazon SNS menyediakan beberapa pilihan untuk mengelola siapa yang menerima pesan SMS dari akun Anda. Dengan frekuensi terbatas, Anda dapat memilih nomor telepon yang telah memilih untuk tidak menerima pesan SMS dari akun Anda. Untuk berhenti mengirim pesan ke langganan SMS, Anda dapat menghapus langganan atau topik yang menerbitkan ke mereka.

## Memilih untuk tidak menerima pesan SMS
<a name="sms_manage_optout"></a>

Jika diwajibkan oleh undang-undang dan peraturan setempat (seperti AS dan Kanada), penerima SMS dapat menggunakan perangkat mereka untuk memilih keluar dengan membalas pesan dengan salah satu dari berikut ini: 
+ ARRET (Perancis)
+ CANCEL (BATALKAN)
+ END (AKHIRI)
+ OPT-OUT (memilih tidak menerima SMS)
+ OPTOUT (memilih tidak menerima SMS)
+ QUIT (BERHENTI)
+ REMOVE (HAPUS)
+ STOP (BERHENTI)
+ TD
+ UNSUBSCRIBE (BERHENTI BERLANGGANAN)

Untuk memilih keluar, penerima harus membalas [nomor originasi](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers.html) yang sama dengan yang digunakan Amazon SNS untuk menyampaikan pesan. Setelah memilih keluar, penerima tidak akan lagi menerima pesan SMS yang dikirimkan dari Anda Akun AWS kecuali Anda memilih nomor telepon.

Jika nomor telepon berlangganan topik Amazon SNS, memilih keluar tidak menghapus langganan, tetapi pesan SMS akan gagal dikirimkan ke langganan tersebut kecuali Anda memilih nomor telepon.

## Mengelola nomor telepon dan langganan menggunakan konsol Amazon SNS
<a name="sms_manage_console"></a>

Anda dapat menggunakan konsol Amazon SNS untuk mengontrol nomor telepon mana yang menerima pesan SMS dari akun Anda.

### Memilih nomor telepon yang telah memilih keluar dari konsol Amazon SNS
<a name="sms_manage_optout_console"></a>

Anda dapat melihat nomor telepon mana yang telah dipilih untuk tidak menerima pesan SMS dari akun Anda, dan Anda dapat memilih nomor telepon ini untuk melanjutkan pengiriman pesan kepada mereka.

Anda dapat memilih nomor telepon hanya sekali setiap 30 hari.

1. Masuk ke [konsol Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Di menu konsol tersebut, atur pemilih wilayah ke [wilayah yang mendukung olahpesan SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. Di panel navigasi, pilih **Text messaging (SMS)** (Olahpesan teks (SMS)).

1. Pada halaman **Pesan teks seluler (SMS)**, di bagian **Nomor telepon yang dipilih keluar, nomor telepon** yang dipilih akan ditampilkan.

1. Pilih kotak centang untuk nomor telepon yang ingin Anda pilih, dan pilih **Opt in**. Nomor telepon tidak lagi memilih keluar dan akan menerima pesan SMS yang Anda kirim ke sana.

#### Menghapus langganan SMS konsol Amazon SNS
<a name="sms_manage_subscriptions_console"></a>

Menghapus langganan SMS untuk berhenti mengirim pesan SMS ke nomor telepon tersebut saat Anda menerbitkan ke topik Anda.

1. Di panel navigasi, pilih **Subscriptions** (Langganan).

1. Pilih kotak centang untuk langganan yang ingin Anda hapus. Lalu pilih **Actions** (Tindakan), dan pilih **Delete Subscriptions** (Hapus Langganan).

1. Di jendela **Delete** (Hapus), pilih **Delete** (Hapus). Amazon SNS menghapus langganan dan menampilkan pesan sukses.

#### Menghapus topik konsol Amazon SNS
<a name="sms_manage_topic_console"></a>

Menghapus topik ketika Anda tidak ingin lagi menerbitkan pesan ke titik akhir berlangganan.

1. Di panel navigasi, pilih **Topics** (Topik).

1. Pilih kotak centang untuk topik yang ingin Anda hapus. Lalu pilih **Actions** (Tindakan), dan pilih **Delete Topics** (Hapus Topik).

1. Di jendela **Delete** (Hapus), pilih **Delete** (Hapus). Amazon SNS menghapus topik dan menampilkan pesan sukses.

### Mengelola nomor telepon dan langganan menggunakan SDK AWS
<a name="sms_manage_sdk"></a>

Anda dapat menggunakan AWS SDKs untuk membuat permintaan terprogram ke Amazon SNS dan mengelola nomor telepon mana yang dapat menerima pesan SMS dari akun Anda.

Untuk menggunakan AWS SDK, Anda harus mengonfigurasinya dengan kredensi Anda. Untuk informasi selengkapnya, lihat [File konfigurasi dan kredensial bersama](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html) di Panduan Referensi Alat *AWS SDKs dan Alat*.

#### Melihat semua nomor telepon yang dipilih menggunakan SDK AWS
<a name="sms_view_optout_sdk"></a>

Untuk melihat semua nomor telepon yang dipilih, kirimkan `ListPhoneNumbersOptedOut` permintaan dengan Amazon SNS API.

Contoh kode berikut menunjukkan cara menggunakan`ListPhoneNumbersOptedOut`.

------
#### [ CLI ]

**AWS CLI**  
**Untuk membuat daftar opt-out pesan SMS**  
`list-phone-numbers-opted-out`Contoh berikut mencantumkan nomor telepon yang dipilih untuk tidak menerima pesan SMS.  

```
aws sns list-phone-numbers-opted-out
```
Output:  

```
{
    "phoneNumbers": [
        "+15555550100"
    ]
}
```
+  Untuk detail API, lihat [ListPhoneNumbersOptedOut](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/list-phone-numbers-opted-out.html)di *Referensi AWS CLI Perintah*. 

------
#### [ Java ]

**SDK untuk Java 2.x**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples). 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.ListPhoneNumbersOptedOutRequest;
import software.amazon.awssdk.services.sns.model.ListPhoneNumbersOptedOutResponse;
import software.amazon.awssdk.services.sns.model.SnsException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class ListOptOut {
    public static void main(String[] args) {
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        listOpts(snsClient);
        snsClient.close();
    }

    public static void listOpts(SnsClient snsClient) {
        try {
            ListPhoneNumbersOptedOutRequest request = ListPhoneNumbersOptedOutRequest.builder().build();
            ListPhoneNumbersOptedOutResponse result = snsClient.listPhoneNumbersOptedOut(request);
            System.out.println("Status is " + result.sdkHttpResponse().statusCode() + "\n\nPhone Numbers: \n\n"
                    + result.phoneNumbers());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
+  Untuk detail API, lihat [ListPhoneNumbersOptedOut](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/ListPhoneNumbersOptedOut)di *Referensi AWS SDK for Java 2.x API*. 

------
#### [ PHP ]

**SDK untuk PHP**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples). 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Returns a list of phone numbers that are opted out of receiving SMS messages from your AWS SNS account.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

try {
    $result = $SnSclient->listPhoneNumbersOptedOut();
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  Untuk informasi selengkapnya, silakan lihat [Panduan Developer AWS SDK untuk PHP](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-sending-sms.html#list-opted-out-phone-numbers). 
+  Untuk detail API, lihat [ListPhoneNumbersOptedOut](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/ListPhoneNumbersOptedOut)di *Referensi AWS SDK untuk PHP API*. 

------

#### Memeriksa apakah nomor telepon dipilih keluar menggunakan SDK AWS
<a name="sms_check_optout_sdk"></a>

Untuk memeriksa apakah nomor telepon dipilih keluar, kirimkan `CheckIfPhoneNumberIsOptedOut` permintaan dengan Amazon SNS API.

Contoh kode berikut menunjukkan cara menggunakan`CheckIfPhoneNumberIsOptedOut`.

------
#### [ .NET ]

**SDK untuk .NET**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/dotnetv3/SNS#code-examples). 

```
    using System;
    using System.Threading.Tasks;
    using Amazon.SimpleNotificationService;
    using Amazon.SimpleNotificationService.Model;

    /// <summary>
    /// This example shows how to use the Amazon Simple Notification Service
    /// (Amazon SNS) to check whether a phone number has been opted out.
    /// </summary>
    public class IsPhoneNumOptedOut
    {
        public static async Task Main()
        {
            string phoneNumber = "+15551112222";

            IAmazonSimpleNotificationService client = new AmazonSimpleNotificationServiceClient();

            await CheckIfOptedOutAsync(client, phoneNumber);
        }

        /// <summary>
        /// Checks to see if the supplied phone number has been opted out.
        /// </summary>
        /// <param name="client">The initialized Amazon SNS Client object used
        /// to check if the phone number has been opted out.</param>
        /// <param name="phoneNumber">A string representing the phone number
        /// to check.</param>
        public static async Task CheckIfOptedOutAsync(IAmazonSimpleNotificationService client, string phoneNumber)
        {
            var request = new CheckIfPhoneNumberIsOptedOutRequest
            {
                PhoneNumber = phoneNumber,
            };

            try
            {
                var response = await client.CheckIfPhoneNumberIsOptedOutAsync(request);

                if (response.HttpStatusCode == System.Net.HttpStatusCode.OK)
                {
                    string optOutStatus = response.IsOptedOut ? "opted out" : "not opted out.";
                    Console.WriteLine($"The phone number: {phoneNumber} is {optOutStatus}");
                }
            }
            catch (AuthorizationErrorException ex)
            {
                Console.WriteLine($"{ex.Message}");
            }
        }
    }
```
+  Untuk detail API, lihat [CheckIfPhoneNumberIsOptedOut](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/CheckIfPhoneNumberIsOptedOut)di *Referensi AWS SDK untuk .NET API*. 

------
#### [ CLI ]

**AWS CLI**  
**Untuk memeriksa pesan SMS opt-out untuk nomor telepon**  
`check-if-phone-number-is-opted-out`Contoh berikut memeriksa apakah nomor telepon yang ditentukan dipilih untuk tidak menerima pesan SMS dari AWS akun saat ini.  

```
aws sns check-if-phone-number-is-opted-out \
    --phone-number +1555550100
```
Output:  

```
{
    "isOptedOut": false
}
```
+  Untuk detail API, lihat [CheckIfPhoneNumberIsOptedOut](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/check-if-phone-number-is-opted-out.html)di *Referensi AWS CLI Perintah*. 

------
#### [ Java ]

**SDK untuk Java 2.x**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples). 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.CheckIfPhoneNumberIsOptedOutRequest;
import software.amazon.awssdk.services.sns.model.CheckIfPhoneNumberIsOptedOutResponse;
import software.amazon.awssdk.services.sns.model.SnsException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class CheckOptOut {
    public static void main(String[] args) {

        final String usage = """

                Usage:    <phoneNumber>

                Where:
                   phoneNumber - The mobile phone number to look up (for example, +1XXX5550100).

                """;

        if (args.length != 1) {
            System.out.println(usage);
            System.exit(1);
        }

        String phoneNumber = args[0];
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        checkPhone(snsClient, phoneNumber);
        snsClient.close();
    }

    public static void checkPhone(SnsClient snsClient, String phoneNumber) {
        try {
            CheckIfPhoneNumberIsOptedOutRequest request = CheckIfPhoneNumberIsOptedOutRequest.builder()
                    .phoneNumber(phoneNumber)
                    .build();

            CheckIfPhoneNumberIsOptedOutResponse result = snsClient.checkIfPhoneNumberIsOptedOut(request);
            System.out.println(
                    result.isOptedOut() + "Phone Number " + phoneNumber + " has Opted Out of receiving sns messages." +
                            "\n\nStatus was " + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
+  Untuk detail API, lihat [CheckIfPhoneNumberIsOptedOut](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/CheckIfPhoneNumberIsOptedOut)di *Referensi AWS SDK for Java 2.x API*. 

------
#### [ JavaScript ]

**SDK untuk JavaScript (v3)**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sns#code-examples). 
Buat klien dalam modul terpisah dan ekspor klien tersebut.  

```
import { SNSClient } from "@aws-sdk/client-sns";

// The AWS Region can be provided here using the `region` property. If you leave it blank
// the SDK will default to the region set in your AWS config.
export const snsClient = new SNSClient({});
```
Mengimpor modul SDK dan klien dan memanggil API.  

```
import { CheckIfPhoneNumberIsOptedOutCommand } from "@aws-sdk/client-sns";

import { snsClient } from "../libs/snsClient.js";

export const checkIfPhoneNumberIsOptedOut = async (
  phoneNumber = "5555555555",
) => {
  const command = new CheckIfPhoneNumberIsOptedOutCommand({
    phoneNumber,
  });

  const response = await snsClient.send(command);
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: '3341c28a-cdc8-5b39-a3ee-9fb0ee125732',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   },
  //   isOptedOut: false
  // }
  return response;
};
```
+  Untuk informasi selengkapnya, silakan lihat [Panduan Developer AWS SDK untuk JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-sending-sms.html#sending-sms-checkifphonenumberisoptedout). 
+  Untuk detail API, lihat [CheckIfPhoneNumberIsOptedOut](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/CheckIfPhoneNumberIsOptedOutCommand)di *Referensi AWS SDK untuk JavaScript API*. 

------
#### [ PHP ]

**SDK untuk PHP**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples). 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Indicates whether the phone number owner has opted out of receiving SMS messages from your AWS SNS account.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$phone = '+1XXX5550100';

try {
    $result = $SnSclient->checkIfPhoneNumberIsOptedOut([
        'phoneNumber' => $phone,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  Untuk informasi selengkapnya, silakan lihat [Panduan Developer AWS SDK untuk PHP](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-sending-sms.html#check-if-a-phone-number-has-opted-out). 
+  Untuk detail API, lihat [CheckIfPhoneNumberIsOptedOut](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/CheckIfPhoneNumberIsOptedOut)di *Referensi AWS SDK untuk PHP API*. 

------

#### Memilih nomor telepon yang telah dipilih keluar menggunakan Amazon SNS API
<a name="sms_manage_optin_sdk"></a>

Untuk memilih nomor telepon, kirimkan `OptInPhoneNumber` permintaan dengan Amazon SNS API.

Anda dapat memilih nomor telepon hanya sekali setiap 30 hari.

#### Menghapus langganan SMS menggunakan SDK AWS
<a name="sms_manage_subscriptions_sdk"></a>

Untuk menghapus langganan SMS dari topik Amazon SNS, dapatkan ARN langganan dengan mengirimkan permintaan `ListSubscriptions` dengan API Amazon SNS, lalu teruskan ARN ke permintaan `Unsubscribe`.

Contoh kode berikut menunjukkan cara menggunakan`Unsubscribe`.

------
#### [ .NET ]

**SDK untuk .NET**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/dotnetv3/cross-service/TopicsAndQueues#code-examples). 
Berhenti berlangganan dari topik dengan berlangganan ARN.  

```
    /// <summary>
    /// Unsubscribe from a topic by a subscription ARN.
    /// </summary>
    /// <param name="subscriptionArn">The ARN of the subscription.</param>
    /// <returns>True if successful.</returns>
    public async Task<bool> UnsubscribeByArn(string subscriptionArn)
    {
        var unsubscribeResponse = await _amazonSNSClient.UnsubscribeAsync(
            new UnsubscribeRequest()
            {
                SubscriptionArn = subscriptionArn
            });
        return unsubscribeResponse.HttpStatusCode == HttpStatusCode.OK;
    }
```
+  Untuk detail API, lihat [Berhenti berlangganan](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/Unsubscribe) di *Referensi AWS SDK untuk .NET API*. 

------
#### [ C\$1\$1 ]

**SDK untuk C\$1\$1**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sns#code-examples). 

```
//! Delete a subscription to an Amazon Simple Notification Service (Amazon SNS) topic.
/*!
  \param subscriptionARN: The Amazon Resource Name (ARN) for an Amazon SNS topic subscription.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool AwsDoc::SNS::unsubscribe(const Aws::String &subscriptionARN,
                              const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::SNS::SNSClient snsClient(clientConfiguration);

    Aws::SNS::Model::UnsubscribeRequest request;
    request.SetSubscriptionArn(subscriptionARN);

    const Aws::SNS::Model::UnsubscribeOutcome outcome = snsClient.Unsubscribe(request);

    if (outcome.IsSuccess()) {
        std::cout << "Unsubscribed successfully " << std::endl;
    }
    else {
        std::cerr << "Error while unsubscribing " << outcome.GetError().GetMessage()
                  << std::endl;
    }

    return outcome.IsSuccess();
}
```
+  Untuk detail API, lihat [Berhenti berlangganan](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/Unsubscribe) di *Referensi AWS SDK untuk C\$1\$1 API*. 

------
#### [ CLI ]

**AWS CLI**  
**Untuk berhenti berlangganan dari suatu topik**  
`unsubscribe`Contoh berikut menghapus langganan yang ditentukan dari suatu topik.  

```
aws sns unsubscribe \
    --subscription-arn arn:aws:sns:us-west-2:0123456789012:my-topic:8a21d249-4329-4871-acc6-7be709c6ea7f
```
Perintah ini tidak menghasilkan output.  
+  Untuk detail API, lihat [Berhenti berlangganan](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/unsubscribe.html) di *Referensi AWS CLI Perintah*. 

------
#### [ Java ]

**SDK untuk Java 2.x**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples). 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SnsException;
import software.amazon.awssdk.services.sns.model.UnsubscribeRequest;
import software.amazon.awssdk.services.sns.model.UnsubscribeResponse;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class Unsubscribe {
    public static void main(String[] args) {
        final String usage = """

                Usage:    <subscriptionArn>

                Where:
                   subscriptionArn - The ARN of the subscription to delete.
                """;

        if (args.length < 1) {
            System.out.println(usage);
            System.exit(1);
        }

        String subscriptionArn = args[0];
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        unSub(snsClient, subscriptionArn);
        snsClient.close();
    }

    public static void unSub(SnsClient snsClient, String subscriptionArn) {
        try {
            UnsubscribeRequest request = UnsubscribeRequest.builder()
                    .subscriptionArn(subscriptionArn)
                    .build();

            UnsubscribeResponse result = snsClient.unsubscribe(request);
            System.out.println("\n\nStatus was " + result.sdkHttpResponse().statusCode()
                    + "\n\nSubscription was removed for " + request.subscriptionArn());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
+  Untuk detail API, lihat [Berhenti berlangganan](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/Unsubscribe) di *Referensi AWS SDK for Java 2.x API*. 

------
#### [ JavaScript ]

**SDK untuk JavaScript (v3)**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sns#code-examples). 
Buat klien dalam modul terpisah dan ekspor klien tersebut.  

```
import { SNSClient } from "@aws-sdk/client-sns";

// The AWS Region can be provided here using the `region` property. If you leave it blank
// the SDK will default to the region set in your AWS config.
export const snsClient = new SNSClient({});
```
Mengimpor modul SDK dan klien dan memanggil API.  

```
import { UnsubscribeCommand } from "@aws-sdk/client-sns";
import { snsClient } from "../libs/snsClient.js";

/**
 * @param {string} subscriptionArn - The ARN of the subscription to cancel.
 */
const unsubscribe = async (
  subscriptionArn = "arn:aws:sns:us-east-1:xxxxxxxxxxxx:mytopic:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
) => {
  const response = await snsClient.send(
    new UnsubscribeCommand({
      SubscriptionArn: subscriptionArn,
    }),
  );
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: '0178259a-9204-507c-b620-78a7570a44c6',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   }
  // }
  return response;
};
```
+  Untuk informasi selengkapnya, silakan lihat [Panduan Developer AWS SDK untuk JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-managing-topics.html#sns-examples-unsubscribing). 
+  Untuk detail API, lihat [Berhenti berlangganan](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/UnsubscribeCommand) di *Referensi AWS SDK untuk JavaScript API*. 

------
#### [ Kotlin ]

**SDK untuk Kotlin**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/kotlin/services/sns#code-examples). 

```
suspend fun unSub(subscriptionArnVal: String) {
    val request =
        UnsubscribeRequest {
            subscriptionArn = subscriptionArnVal
        }

    SnsClient.fromEnvironment { region = "us-east-1" }.use { snsClient ->
        snsClient.unsubscribe(request)
        println("Subscription was removed for ${request.subscriptionArn}")
    }
}
```
+  Untuk detail API, lihat [Berhenti berlangganan](https://sdk.amazonaws.com/kotlin/api/latest/index.html) di *AWS SDK untuk referensi API Kotlin*. 

------
#### [ PHP ]

**SDK untuk PHP**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples). 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Deletes a subscription to an Amazon SNS topic.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$subscription = 'arn:aws:sns:us-east-1:111122223333:MySubscription';

try {
    $result = $SnSclient->unsubscribe([
        'SubscriptionArn' => $subscription,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  Untuk informasi selengkapnya, silakan lihat [Panduan Developer AWS SDK untuk PHP](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples-subscribing-unsubscribing-topics.html#unsubscribe-from-a-topic). 
+  Untuk detail API, lihat [Berhenti berlangganan](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/Unsubscribe) di *Referensi AWS SDK untuk PHP API*. 

------
#### [ Python ]

**SDK untuk Python (Boto3)**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/python/example_code/sns#code-examples). 

```
class SnsWrapper:
    """Encapsulates Amazon SNS topic and subscription functions."""

    def __init__(self, sns_resource):
        """
        :param sns_resource: A Boto3 Amazon SNS resource.
        """
        self.sns_resource = sns_resource


    @staticmethod
    def delete_subscription(subscription):
        """
        Unsubscribes and deletes a subscription.
        """
        try:
            subscription.delete()
            logger.info("Deleted subscription %s.", subscription.arn)
        except ClientError:
            logger.exception("Couldn't delete subscription %s.", subscription.arn)
            raise
```

```
class SnsWrapper:
    """Wrapper class for managing Amazon SNS operations."""

    def __init__(self, sns_client: Any) -> None:
        """
        Initialize the SnsWrapper.

        :param sns_client: A Boto3 Amazon SNS client.
        """
        self.sns_client = sns_client

    @classmethod
    def from_client(cls) -> 'SnsWrapper':
        """
        Create an SnsWrapper instance using a default boto3 client.

        :return: An instance of this class.
        """
        sns_client = boto3.client('sns')
        return cls(sns_client)


    def unsubscribe(self, subscription_arn: str) -> bool:
        """
        Unsubscribe from an SNS topic.

        :param subscription_arn: The ARN of the subscription to remove.
        :return: True if successful.
        :raises ClientError: If the unsubscribe operation fails.
        """
        try:
            self.sns_client.unsubscribe(SubscriptionArn=subscription_arn)
            
            logger.info(f"Unsubscribed: {subscription_arn}")
            return True

        except ClientError as e:
            error_code = e.response.get('Error', {}).get('Code', 'Unknown')
            
            if error_code == 'NotFound':
                logger.warning(f"Subscription not found: {subscription_arn}")
                return True  # Already unsubscribed
            else:
                logger.error(f"Error unsubscribing: {error_code} - {e}")
                raise
```
+  Untuk detail API, lihat [Berhenti berlangganan](https://docs.aws.amazon.com/goto/boto3/sns-2010-03-31/Unsubscribe) di *AWS SDK for Python (Boto3) Referensi* API. 

------
#### [ SAP ABAP ]

**SDK for SAP ABAP**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/sap-abap/services/sns#code-examples). 

```
    TRY.
        lo_sns->unsubscribe( iv_subscriptionarn = iv_subscription_arn ).
        MESSAGE 'Subscription deleted.' TYPE 'I'.
      CATCH /aws1/cx_snsnotfoundexception.
        MESSAGE 'Subscription does not exist.' TYPE 'E'.
      CATCH /aws1/cx_snsinvalidparameterex.
        MESSAGE 'Subscription with "PendingConfirmation" status cannot be deleted/unsubscribed. Confirm subscription before performing unsubscribe operation.' TYPE 'E'.
    ENDTRY.
```
+  Untuk detail API, lihat [Berhenti berlangganan](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html) di *AWS SDK untuk referensi SAP ABAP* API. 

------
#### [ Swift ]

**SDK para Swift**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/swift/example_code/sns#code-examples). 

```
import AWSSNS

        let config = try await SNSClient.SNSClientConfiguration(region: region)
        let snsClient = SNSClient(config: config)

        _ = try await snsClient.unsubscribe(
            input: UnsubscribeInput(
                subscriptionArn: arn
            )
        )

        print("Unsubscribed.")
```
+  Untuk detail API, lihat [Berhenti berlangganan](https://sdk.amazonaws.com/swift/api/awssns/latest/documentation/awssns/snsclient/unsubscribe(input:)) di *AWS SDK untuk referensi Swift* API. 

------

#### Menghapus topik menggunakan SDK AWS
<a name="sms_manage_topic_sdk"></a>

Untuk menghapus topik dan semua langganannya, dapatkan ARN topik dengan mengirimkan permintaan `ListTopics` dengan API Amazon SNS, lalu teruskan ARN ke permintaan `DeleteTopic`.

Contoh kode berikut menunjukkan cara menggunakan`DeleteTopic`.

------
#### [ .NET ]

**SDK untuk .NET**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/dotnetv3/cross-service/TopicsAndQueues#code-examples). 
Hapus topik berdasarkan topiknya ARN.  

```
    /// <summary>
    /// Delete a topic by its topic ARN.
    /// </summary>
    /// <param name="topicArn">The ARN of the topic.</param>
    /// <returns>True if successful.</returns>
    public async Task<bool> DeleteTopicByArn(string topicArn)
    {
        var deleteResponse = await _amazonSNSClient.DeleteTopicAsync(
            new DeleteTopicRequest()
            {
                TopicArn = topicArn
            });
        return deleteResponse.HttpStatusCode == HttpStatusCode.OK;
    }
```
+  Untuk detail API, lihat [DeleteTopic](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/DeleteTopic)di *Referensi AWS SDK untuk .NET API*. 

------
#### [ C\$1\$1 ]

**SDK untuk C\$1\$1**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sns#code-examples). 

```
//! Delete an Amazon Simple Notification Service (Amazon SNS) topic.
/*!
  \param topicARN: The Amazon Resource Name (ARN) for an Amazon SNS topic.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool AwsDoc::SNS::deleteTopic(const Aws::String &topicARN,
                              const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::SNS::SNSClient snsClient(clientConfiguration);

    Aws::SNS::Model::DeleteTopicRequest request;
    request.SetTopicArn(topicARN);

    const Aws::SNS::Model::DeleteTopicOutcome outcome = snsClient.DeleteTopic(request);

    if (outcome.IsSuccess()) {
        std::cout << "Successfully deleted the Amazon SNS topic " << topicARN << std::endl;
    }
    else {
        std::cerr << "Error deleting topic " << topicARN << ":" <<
                  outcome.GetError().GetMessage() << std::endl;
    }

    return outcome.IsSuccess();
}
```
+  Untuk detail API, lihat [DeleteTopic](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/DeleteTopic)di *Referensi AWS SDK untuk C\$1\$1 API*. 

------
#### [ CLI ]

**AWS CLI**  
**Untuk menghapus topik SNS**  
`delete-topic`Contoh berikut menghapus topik SNS yang ditentukan.  

```
aws sns delete-topic \
    --topic-arn "arn:aws:sns:us-west-2:123456789012:my-topic"
```
Perintah ini tidak menghasilkan output.  
+  Untuk detail API, lihat [DeleteTopic](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/delete-topic.html)di *Referensi AWS CLI Perintah*. 

------
#### [ Go ]

**SDK untuk Go V2**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/gov2/workflows/topics_and_queues#code-examples). 

```
import (
	"context"
	"encoding/json"
	"log"

	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/service/sns"
	"github.com/aws/aws-sdk-go-v2/service/sns/types"
)

// SnsActions encapsulates the Amazon Simple Notification Service (Amazon SNS) actions
// used in the examples.
type SnsActions struct {
	SnsClient *sns.Client
}



// DeleteTopic delete an Amazon SNS topic.
func (actor SnsActions) DeleteTopic(ctx context.Context, topicArn string) error {
	_, err := actor.SnsClient.DeleteTopic(ctx, &sns.DeleteTopicInput{
		TopicArn: aws.String(topicArn)})
	if err != nil {
		log.Printf("Couldn't delete topic %v. Here's why: %v\n", topicArn, err)
	}
	return err
}
```
+  Untuk detail API, lihat [DeleteTopic](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/sns#Client.DeleteTopic)di *Referensi AWS SDK untuk Go API*. 

------
#### [ Java ]

**SDK untuk Java 2.x**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples). 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.DeleteTopicRequest;
import software.amazon.awssdk.services.sns.model.DeleteTopicResponse;
import software.amazon.awssdk.services.sns.model.SnsException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class DeleteTopic {
    public static void main(String[] args) {
        final String usage = """

                Usage:     <topicArn>

                Where:
                   topicArn - The ARN of the topic to delete.
                """;

        if (args.length != 1) {
            System.out.println(usage);
            System.exit(1);
        }

        String topicArn = args[0];
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        System.out.println("Deleting a topic with name: " + topicArn);
        deleteSNSTopic(snsClient, topicArn);
        snsClient.close();
    }

    public static void deleteSNSTopic(SnsClient snsClient, String topicArn) {
        try {
            DeleteTopicRequest request = DeleteTopicRequest.builder()
                    .topicArn(topicArn)
                    .build();

            DeleteTopicResponse result = snsClient.deleteTopic(request);
            System.out.println("\n\nStatus was " + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
+  Untuk detail API, lihat [DeleteTopic](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/DeleteTopic)di *Referensi AWS SDK for Java 2.x API*. 

------
#### [ JavaScript ]

**SDK untuk JavaScript (v3)**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sns#code-examples). 
Buat klien dalam modul terpisah dan ekspor klien tersebut.  

```
import { SNSClient } from "@aws-sdk/client-sns";

// The AWS Region can be provided here using the `region` property. If you leave it blank
// the SDK will default to the region set in your AWS config.
export const snsClient = new SNSClient({});
```
Mengimpor modul SDK dan klien dan memanggil API.  

```
import { DeleteTopicCommand } from "@aws-sdk/client-sns";
import { snsClient } from "../libs/snsClient.js";

/**
 * @param {string} topicArn - The ARN of the topic to delete.
 */
export const deleteTopic = async (topicArn = "TOPIC_ARN") => {
  const response = await snsClient.send(
    new DeleteTopicCommand({ TopicArn: topicArn }),
  );
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: 'a10e2886-5a8f-5114-af36-75bd39498332',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   }
  // }
};
```
+  Untuk informasi selengkapnya, silakan lihat [Panduan Developer AWS SDK untuk JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-managing-topics.html#sns-examples-managing-topics-deletetopic). 
+  Untuk detail API, lihat [DeleteTopic](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/DeleteTopicCommand)di *Referensi AWS SDK untuk JavaScript API*. 

------
#### [ Kotlin ]

**SDK untuk Kotlin**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/kotlin/services/sns#code-examples). 

```
suspend fun deleteSNSTopic(topicArnVal: String) {
    val request =
        DeleteTopicRequest {
            topicArn = topicArnVal
        }

    SnsClient.fromEnvironment { region = "us-east-1" }.use { snsClient ->
        snsClient.deleteTopic(request)
        println("$topicArnVal was successfully deleted.")
    }
}
```
+  Untuk detail API, lihat [DeleteTopic](https://sdk.amazonaws.com/kotlin/api/latest/index.html)di *AWS SDK untuk referensi API Kotlin*. 

------
#### [ PHP ]

**SDK untuk PHP**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples). 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Deletes an SNS topic and all its subscriptions.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->deleteTopic([
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  Untuk detail API, lihat [DeleteTopic](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/DeleteTopic)di *Referensi AWS SDK untuk PHP API*. 

------
#### [ Python ]

**SDK untuk Python (Boto3)**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/python/example_code/sns#code-examples). 

```
class SnsWrapper:
    """Encapsulates Amazon SNS topic and subscription functions."""

    def __init__(self, sns_resource):
        """
        :param sns_resource: A Boto3 Amazon SNS resource.
        """
        self.sns_resource = sns_resource


    @staticmethod
    def delete_topic(topic):
        """
        Deletes a topic. All subscriptions to the topic are also deleted.
        """
        try:
            topic.delete()
            logger.info("Deleted topic %s.", topic.arn)
        except ClientError:
            logger.exception("Couldn't delete topic %s.", topic.arn)
            raise
```

```
class SnsWrapper:
    """Wrapper class for managing Amazon SNS operations."""

    def __init__(self, sns_client: Any) -> None:
        """
        Initialize the SnsWrapper.

        :param sns_client: A Boto3 Amazon SNS client.
        """
        self.sns_client = sns_client

    @classmethod
    def from_client(cls) -> 'SnsWrapper':
        """
        Create an SnsWrapper instance using a default boto3 client.

        :return: An instance of this class.
        """
        sns_client = boto3.client('sns')
        return cls(sns_client)


    def delete_topic(self, topic_arn: str) -> bool:
        """
        Delete an SNS topic.

        :param topic_arn: The ARN of the topic to delete.
        :return: True if successful.
        :raises ClientError: If the topic deletion fails.
        """
        try:
            self.sns_client.delete_topic(TopicArn=topic_arn)
            
            logger.info(f"Deleted topic: {topic_arn}")
            return True

        except ClientError as e:
            error_code = e.response.get('Error', {}).get('Code', 'Unknown')
            
            if error_code == 'NotFound':
                logger.warning(f"Topic not found: {topic_arn}")
                return True  # Already deleted
            else:
                logger.error(f"Error deleting topic: {error_code} - {e}")
                raise
```
+  Untuk detail API, lihat [DeleteTopic](https://docs.aws.amazon.com/goto/boto3/sns-2010-03-31/DeleteTopic)di *AWS SDK for Python (Boto3) Referensi* API. 

------
#### [ SAP ABAP ]

**SDK for SAP ABAP**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/sap-abap/services/sns#code-examples). 

```
    TRY.
        lo_sns->deletetopic( iv_topicarn = iv_topic_arn ).
        MESSAGE 'SNS topic deleted.' TYPE 'I'.
      CATCH /aws1/cx_snsnotfoundexception.
        MESSAGE 'Topic does not exist.' TYPE 'E'.
    ENDTRY.
```
+  Untuk detail API, lihat [DeleteTopic](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html)di *AWS SDK untuk referensi SAP ABAP* API. 

------
#### [ Swift ]

**SDK para Swift**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/swift/example_code/sns#code-examples). 

```
import AWSSNS

        let config = try await SNSClient.SNSClientConfiguration(region: region)
        let snsClient = SNSClient(config: config)

        _ = try await snsClient.deleteTopic(
            input: DeleteTopicInput(topicArn: arn)
        )
```
+  Untuk detail API, lihat referensi [DeleteTopic AWS](https://sdk.amazonaws.com/swift/api/awssns/latest/documentation/awssns/snsclient/deletetopic(input:))*SDK untuk Swift API*. 

------

# Pemantauan aktivitas SMS Amazon SNS
<a name="sms_stats"></a>

Dengan memantau aktivitas SMS Anda, Anda dapat melacak nomor telepon tujuan, pengiriman yang sukses atau gagal, alasan kegagalan, biaya, dan informasi lainnya. Amazon SNS membantu dengan meringkas statistik di konsol, mengirim informasi ke Amazon CloudWatch, dan mengirim laporan penggunaan SMS harian ke bucket Amazon S3 yang Anda tentukan.

# Melihat statistik pengiriman SMS Amazon SNS
<a name="sms_stats_console"></a>

Anda dapat menggunakan konsol Amazon SNS untuk melihat statistik tentang pengiriman SMS terbaru Anda.

1. Masuk ke [konsol Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Di menu konsol tersebut, atur pemilih wilayah ke [wilayah yang mendukung olahpesan SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html).

1. Di panel navigasi, pilih **Text messaging (SMS)** (Olahpesan teks (SMS)).

1. Di halaman **Text messaging (SMS)** (Olahpesan teks (SMS)), di bagian **Account stats** (Statistik akun), lihat grafik untuk pengiriman pesan SMS transaksional dan promosi Anda. Setiap grafik menunjukkan data berikut selama 15 hari sebelumnya:
   + Tingkat pengiriman (persentase pengiriman yang berhasil)
   + Terkirim (jumlah upaya pengiriman)
   + Gagal (jumlah kegagalan pengiriman)

Di halaman ini, Anda juga dapat memilih tombol **Usage** (Penggunaan) untuk membuka bucket Amazon S3 tempat Anda menyimpan laporan penggunaan harian Anda. Untuk informasi selengkapnya, lihat [Berlangganan laporan penggunaan SMS harian Amazon SNS](sms_stats_usage.md).

# Pemantauan pengiriman SMS Amazon SNS dengan CloudWatch metrik dan log Amazon
<a name="sms_stats_cloudwatch"></a>

Anda dapat menggunakan Amazon CloudWatch dan Amazon CloudWatch Logs untuk memantau pengiriman pesan SMS Anda.

## Melihat CloudWatch metrik Amazon
<a name="sms_stats_cloudwatch_metrics"></a>

Amazon SNS secara otomatis mengumpulkan metrik tentang pengiriman pesan SMS Anda dan mendorongnya ke Amazon. CloudWatch Anda dapat menggunakan CloudWatch untuk memantau metrik ini dan membuat alarm untuk mengingatkan Anda ketika metrik melewati ambang batas. Misalnya, Anda dapat memantau CloudWatch metrik untuk mempelajari tingkat pengiriman SMS dan biaya month-to-date SMS Anda.

Untuk informasi tentang CloudWatch metrik pemantauan, pengaturan CloudWatch alarm, dan jenis metrik yang tersedia, lihat. [Memantau topik Amazon SNS menggunakan CloudWatch](sns-monitoring-using-cloudwatch.md)

## Melihat CloudWatch Log
<a name="sns-viewing-cloudwatch-logs"></a>

Anda dapat mengumpulkan informasi tentang pengiriman pesan SMS yang berhasil dan tidak berhasil dengan mengaktifkan Amazon SNS untuk menulis ke Amazon Logs. CloudWatch Untuk setiap pesan SMS yang Anda kirim, Amazon SNS menulis log yang mencakup harga pesan, status keberhasilan atau kegagalan, alasan kegagalan (jika pesan gagal), waktu tunggu pesan, dan informasi lainnya.

**Untuk mengaktifkan dan melihat CloudWatch Log untuk pesan SMS Anda**

1. Masuk ke [konsol Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Di menu konsol tersebut, atur pemilih wilayah ke [wilayah yang mendukung olahpesan SMS](https://docs.aws.amazon.com/general/latest/gr/end-user-messaging.html).

1. Di panel navigasi, pilih **Text messaging (SMS)** (Olahpesan teks (SMS)).

1. Di halaman **Mobile text messaging (SMS)** (Olahpesan teks seluler (SMS)), di bagian **Text messaging preferences**(Preferensi pesan teks), pilih **Edit**.

1. Di halaman berikutnya, perluas bagian **Delivery status logging** (Pencatatan status pengiriman).

1. Untuk **tingkat sampel Sukses**, tentukan persentase pengiriman SMS yang berhasil di mana Amazon SNS akan menulis log CloudWatch di Log. Contoh:
   + Untuk menulis log hanya untuk pengiriman yang gagal, atur nilai ini ke 0.
   + Untuk menulis log untuk 10% dari pengiriman yang berhasil, atur nilai ke 10.

   Jika Anda tidak menentukan persentase, Amazon SNS menulis log untuk semua pengiriman yang berhasil.

1. Untuk memberikan izin yang diperlukan, lakukan salah satu hal berikut:
   + Untuk membuat peran layanan baru, pilih **Create new service role** (Buat peran layanan baru) dan kemudian **Create new roles** (Buat peran baru). Di halaman berikutnya, pilih **Allow** (Izinkan) untuk memberi Amazon SNS akses tulis ke sumber daya akun Anda.
   + Untuk menggunakan peran layanan yang ada, pilih **Use existing service role** (Gunakan peran layanan yang ada) lalu tempelkan nama ARN di kotak **IAM role for successful and failed deliveries** (Peran IAM untuk pengiriman yang berhasil dan gagal).

     Peran layanan yang Anda tentukan harus mengizinkan akses tulis ke sumber daya akun Anda. Untuk informasi selengkapnya tentang membuat peran IAM, lihat [Membuat peran untuk AWS layanan](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console) di *Panduan Pengguna IAM*. 

1. Pilih **Simpan perubahan**.

1. Kembali ke halaman **Mobile text messaging (SMS)** (Pesan teks seluler (SMS)), masuk ke bagian **Delivery status logs** (Log status pengiriman) untuk melihat log yang tersedia.
**catatan**  
Tergantung pada operator nomor telepon tujuan, perlu waktu hingga 72 jam agar log pengiriman muncul di konsol Amazon SNS. 

## Contoh log untuk pengiriman SMS yang berhasil
<a name="example-log-successful-sms-delivery"></a>

Log status pengiriman untuk pengiriman SMS yang berhasil akan menyerupai contoh berikut:

```
{
    "notification": {
        "messageId": "34d9b400-c6dd-5444-820d-fbeb0f1f54cf",
        "timestamp": "2016-06-28 00:40:34.558"
    },
    "delivery": {
        "phoneCarrier": "My Phone Carrier",
        "mnc": 270,
        "numberOfMessageParts": 1,
        "destination": "+1XXX5550100",
        "priceInUSD": 0.00645,
        "smsType": "Transactional",
        "mcc": 310,
        "providerResponse": "Message has been accepted by phone carrier",
        "dwellTimeMs": 599,
        "dwellTimeMsUntilDeviceAck": 1344
    },
    "status": "SUCCESS"
}
```

## Contoh log untuk pengiriman SMS yang gagal
<a name="example-log-failed-sms-delivery"></a>

Log status pengiriman untuk pengiriman SMS yang gagal akan menyerupai contoh berikut:

```
{
    "notification": {
        "messageId": "1077257a-92f3-5ca3-bc97-6a915b310625",
        "timestamp": "2016-06-28 00:40:34.559"
    },
    "delivery": {
        "mnc": 0,
        "numberOfMessageParts": 1,
        "destination": "+1XXX5550100",
        "priceInUSD": 0.00645,
        "smsType": "Transactional",
        "mcc": 0,
        "providerResponse": "Unknown error attempting to reach phone",
        "dwellTimeMs": 1420,
        "dwellTimeMsUntilDeviceAck": 1692
    },
    "status": "FAILURE"
}
```

## Alasan kegagalan pengiriman SMS
<a name="sms_stats_delivery_fail_reasons"></a>

Alasan kegagalan diberikan dengan atribut `providerResponse`. Pesan SMS mungkin gagal dikirim karena alasan-alasan berikut:
+ Diblokir sebagai spam oleh operator telepon
+ Tujuan ada di daftar yang diblokir
+ Nomor telepon tidak valid
+ Isi pesan tidak valid
+ Operator telepon telah memblokir pesan ini
+ Operator telepon saat ini tidak dapat dihubungi/tidak tersedia
+ Telepon telah memblokir SMS
+ Telepon ada dalam daftar yang diblokir
+ Telepon saat ini tidak dapat dihubungi/tidak tersedia
+ Nomor telepon memilih tidak menerima pesan
+ Pengiriman ini akan melebihi harga maksimum
+ Kesalahan tak diketahui yang mencoba menjangkau telepon

# Berlangganan laporan penggunaan SMS harian Amazon SNS
<a name="sms_stats_usage"></a>

Anda dapat memantau pengiriman SMS Anda dengan berlangganan laporan penggunaan harian dari Amazon SNS. Untuk setiap hari saat Anda mengirim setidaknya satu pesan SMS, Amazon SNS mengirimkan laporan penggunaan dalam file CSV ke bucket Amazon S3 tertentu. Dibutuhkan 24 jam agar laporan penggunaan SMS tersedia di bucket Amazon S3. 

## Informasi laporan penggunaan harian
<a name="daily_usage_info"></a>

Laporan penggunaan mencakup informasi berikut untuk setiap pesan SMS yang Anda kirim dari akun Anda.

 Perhatikan bahwa laporan ini tidak menyertakan pesan yang dikirim ke penerima yang telah memilih untuk tidak menerima pesan.
+ Waktu penerbitan untuk pesan (dalam UTC)
+ ID Pesan
+ Nomor telepon tujuan
+ Jenis pesan
+ Status pengiriman
+ Harga pesan (dalam USD)
+ Jumlah bagian (pesan dibagi menjadi beberapa bagian jika terlalu panjang untuk satu pesan)
+ Jumlah total bagian

**catatan**  
Jika Amazon SNS tidak menerima jumlah bagian, kami mengatur nilainya ke nol.

## Berlangganan laporan penggunaan harian
<a name="subscribe-to-daily-usage-reports"></a>

Untuk berlangganan laporan penggunaan harian, Anda harus membuat bucket Amazon S3 dengan izin yang sesuai.

**Cara membuat bucket Amazon S3 untuk laporan penggunaan harian Anda**

1. Dari Akun AWS yang mengirim pesan SMS, masuk ke konsol [Amazon S3](https://console.aws.amazon.com/s3/).

1. Pilih **Create Bucket** (Buat Bucket).

1. Untuk **Bucket Name** (Nama Bucket), sebaiknya masukkan nama yang unik untuk akun dan organisasi Anda. Misalnya, gunakan pola `<my-bucket-prefix>-<account_id>-<org-id>`. 

   Untuk informasi tentang konvensi dan batasan untuk nama bucket, lihat [Aturan untuk Penamaan Bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html#bucketnamingrules) di *Panduan Pengguna Layanan Penyimpanan Sederhana Amazon*.

1. Pilih **Buat**.

1. Di tabel **All Buckets** (Semua Bucket), pilih nama bucket.

1. Di tab **Permission** (Izin), pilih **Bucket policy** (Kebijakan bucket).

1. Di jendela **Bucket Policy Editor** (Editor Kebijakan Bucket), berikan kebijakan yang mengizinkan perwakilan layanan Amazon SNS untuk menulis ke bucket Anda. Sebagai contoh, lihat [Contoh kebijakan bucket](#example_bucket_policy).

   Jika Anda menggunakan kebijakan contoh, ingatlah untuk mengganti *my-s3-bucket* dengan nama bucket yang Anda pilih di Langkah 3.

1. Pilih **Simpan**.

**Cara berlangganan laporan penggunaan harian**

1. Masuk ke [konsol Amazon SNS](https://console.aws.amazon.com/sns/).

1. Di panel navigasi, pilih **Text messaging (SMS)** (Olahpesan teks (SMS)).

1. Di halaman **Text messaging (SMS)** (Olahpesan teks (SMS)), di bagian **Text messaging preferences** (Preferensi olahpesan teks), pilih **Edit**.  
![\[Bagian preferensi pesan teks di konsol Amazon SNS\]](http://docs.aws.amazon.com/id_id/sns/latest/dg/images/daily-usage-report1.png)

1. Di halaman **Edit text messaging preferences** (Edit preferensi olahpesan teks), di bagian **Details** (Detail), tentukan **Nama bucket Amazon S3 untuk laporan penggunaan**.  
![\[Bagian detail dari halaman Edit preferensi pesan teks di konsol Amazon SNS\]](http://docs.aws.amazon.com/id_id/sns/latest/dg/images/daily-usage-report2.png)

1. Pilih **Simpan perubahan**.

### Contoh kebijakan bucket
<a name="example_bucket_policy"></a>

Kebijakan berikut mengizinkan perwakilan layanan Amazon SNS untuk melakukan tindakan `s3:PutObject`, `s3:GetBucketLocation`, dan `s3:ListBucket`.

AWS menyediakan alat untuk semua layanan dengan prinsip layanan yang telah diberikan akses ke sumber daya di akun Anda. Ketika kepala sekolah dalam pernyataan kebijakan bucket Amazon S3 adalah masalah [wakil yang membingungkan](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html). Untuk membatasi wilayah dan akun tempat bucket dapat menerima laporan penggunaan harian, gunakan `aws:SourceArn` seperti yang ditunjukkan pada contoh di bawah ini. Jika Anda tidak ingin membatasi wilayah mana yang dapat menghasilkan laporan ini, gunakan `aws:SourceAccount` untuk membatasi berdasarkan akun mana yang menghasilkan laporan. Jika Anda tidak tahu ARN sumber daya, gunakan. `aws:SourceAccount`

Gunakan contoh berikut yang menyertakan perlindungan wakil yang membingungkan saat Anda membuat bucket Amazon S3 untuk menerima laporan penggunaan SMS harian dari Amazon SNS.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowPutObject",
            "Effect": "Allow",
            "Principal": {
                "Service": "sns.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "account_id"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:sns:us-west-1:123456789012:*"
                }
            }
        },
        {
            "Sid": "AllowGetBucketLocation",
            "Effect": "Allow",
            "Principal": {
                "Service": "sns.amazonaws.com"
            },
            "Action": "s3:GetBucketLocation",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "account_id"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:sns:us-west-1:123456789012:*"
                }
            }
        },
        {
            "Sid": "AllowListBucket",
            "Effect": "Allow",
            "Principal": {
                "Service": "sns.amazonaws.com"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "account_id"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:sns:us-west-1:123456789012:*"
                }
            }
        }
    ]
}
```

------

**catatan**  
Anda dapat menerbitkan laporan penggunaan ke bucket Amazon S3 yang dimiliki oleh Akun AWS yang ditentukan dalam elemen `Condition` di kebijakan Amazon S3. Untuk mempublikasikan laporan penggunaan ke bucket Amazon S3 yang Akun AWS dimiliki orang lain, [lihat Bagaimana cara menyalin objek Amazon S3](https://aws.amazon.com/premiumsupport/knowledge-center/copy-s3-objects-account/) dari yang lain? Akun AWS. 

### Contoh laporan penggunaan harian
<a name="example_report"></a>

Setelah Anda berlangganan laporan penggunaan harian, setiap hari, Amazon SNS menempatkan file CSV dengan data penggunaan di lokasi berikut:

```
<my-s3-bucket>/SMSUsageReports/<region>/YYYY/MM/DD/00x.csv.gz
```

Setiap file dapat berisi hingga 50.000 catatan. Jika catatan untuk satu hari melebihi kuota ini, Amazon SNS akan menambahkan beberapa file. Berikut adalah contoh laporan:

```
PublishTimeUTC,MessageId,DestinationPhoneNumber,MessageType,DeliveryStatus,PriceInUSD,PartNumber,TotalParts
2016-05-10T03:00:29.476Z,96a298ac-1458-4825-a7eb-7330e0720b72,1XXX5550100,Promotional,Message has been accepted by phone carrier,0.90084,0,1
2016-05-10T03:00:29.561Z,1e29d394-d7f4-4dc9-996e-26412032c344,1XXX5550100,Promotional,Message has been accepted by phone carrier,0.34322,0,1
2016-05-10T03:00:30.769Z,98ba941c-afc7-4c51-ba2c-56c6570a6c08,1XXX5550100,Transactional,Message has been accepted by phone carrier,0.27815,0,1
```

# Meminta dukungan untuk pesan SMS Amazon SNS
<a name="channels-sms-awssupport"></a>

**penting**  
Panduan Pengembang SMS Amazon SNS telah diperbarui. Amazon SNS telah terintegrasi dengan [AWS Olah Pesan Pengguna Akhir SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html)pengiriman pesan SMS. Panduan ini berisi informasi terbaru tentang cara membuat, mengonfigurasi, dan mengelola pesan SMS Amazon SNS Anda.

Opsi SMS tertentu dengan Amazon SNS tidak tersedia untuk AWS akun Anda sampai Anda menghubungi. Dukungan Buat kasus di [Pusat AWS Dukungan](https://console.aws.amazon.com/support/home#/) untuk meminta hal-hal berikut:
+ Peningkatan ambang batas biaya pengeluaran SMS bulanan Anda

  Secara default, ambang batas pengeluaran bulanan adalah sebesar \$11,00 (USD). Ambang batas pengeluaran Anda menentukan volume pesan yang dapat Anda kirim dengan Amazon SNS. Anda dapat meminta ambang batas biaya pengeluaran yang memenuhi volume pesan bulanan yang diharapkan untuk kasus penggunaan SMS Anda.
+ Sebuah langkah dari [sandbox SMS](sns-sms-sandbox.md) agar Anda dapat mengirim pesan SMS tanpa batasan. Untuk informasi selengkapnya, lihat [Pindah dari kotak pasir SMS Amazon SNS](sns-sms-sandbox-moving-to-production.md).
+ [Nomor asal](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers.html) khusus
+ [ID pengirim](https://docs.aws.amazon.com/sms-voice/latest/userguide/sender-id.html) khusus. ID pengirim adalah ID kustom yang ditampilkan sebagai pengirim di perangkat penerima. Misalnya, Anda dapat menggunakan merek bisnis Anda untuk membuat sumber pesan lebih mudah dikenali. Support untuk pengirim IDs bervariasi menurut negara atau wilayah. Untuk informasi selengkapnya, lihat [Negara dan wilayah yang didukung untuk pesan SMS dengan AWS Olah Pesan Pengguna Akhir SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-by-country.html) di *Panduan AWS Olah Pesan Pengguna Akhir SMS Pengguna*.

# Meminta kenaikan kuota belanja SMS Amazon SNS bulanan Anda
<a name="channels-sms-awssupport-spend-threshold"></a>

Amazon SNS menyediakan kuota pengeluaran untuk membantu Anda mengelola biaya maksimum per bulan yang dikeluarkan dengan mengirim SMS menggunakan akun Anda. Kuota pengeluaran membatasi risiko Anda jika terjadi serangan berbahaya, dan mencegah aplikasi hulu Anda mengirim lebih banyak pesan dari yang diharapkan. Anda dapat mengonfigurasi Amazon SNS untuk menghentikan penerbitan pesan SMS ketika menentukan bahwa pengiriman pesan SMS akan dikenakan biaya yang melebihi kuota pengeluaran Anda untuk bulan berjalan. 

Untuk memastikan operasi Anda tidak terpengaruh, kami sarankan untuk meminta kuota pengeluaran yang cukup tinggi untuk mendukung beban kerja produksi Anda. Untuk informasi selengkapnya, lihat [Langkah 1: Buka kasing SMS Amazon SNS](#channels-sms-awssupport-spend-threshold-open). Setelah Anda menerima kuota, Anda dapat mengelola risiko Anda dengan menerapkan kuota penuh, atau nilai yang lebih kecil, seperti yang dijelaskan pada [Langkah 2: Perbarui pengaturan SMS Anda](#channels-sms-awssupport-spend-threshold-settings). Dengan menerapkan nilai yang lebih kecil, Anda dapat mengontrol pengeluaran bulanan Anda dengan opsi untuk meningkatkan jika perlu.

**penting**  
Karena Amazon SNS adalah sistem terdistribusi, ia berhenti mengirim pesan SMS dalam beberapa menit jika kuota pengeluaran terlampaui. Selama periode ini, jika Anda terus mengirim pesan SMS, Anda mungkin akan dikenakan biaya yang melebihi kuota Anda.

Kami menetapkan kuota pengeluaran untuk semua akun baru sebesar \$11,00 (USD) per bulan. Kuota ini dimaksudkan agar Anda dapat mencoba kemampuan pengiriman pesan dari Amazon SNS. Untuk meminta peningkatan kuota belanja SMS untuk akun Anda, buka kasus peningkatan kuota di AWS Support Center.

**Topics**
+ [Langkah 1: Buka kasus SMS Amazon SNS](#channels-sms-awssupport-spend-threshold-open)
+ [Langkah 2: Perbarui pengaturan SMS Anda di konsol Amazon SNS](#channels-sms-awssupport-spend-threshold-settings)

## Langkah 1: Buka kasus SMS Amazon SNS
<a name="channels-sms-awssupport-spend-threshold-open"></a>

Anda dapat meminta kenaikan kuota belanja bulanan Anda dengan membuka kasus peningkatan kuota di AWS Support Center.

**catatan**  
Beberapa bidang pada formulir permintaan ditandai sebagai "opsional." Namun, Dukungan memerlukan semua informasi yang disebutkan dalam langkah-langkah berikut untuk memproses permintaan Anda. Jika Anda tidak memberikan semua informasi yang diperlukan, Anda mungkin mengalami penundaan dalam pemrosesan permintaan Anda.

1. Masuk ke Konsol Manajemen AWS at [https://console.aws.amazon.com/](https://console.aws.amazon.com/).

1. Di menu **Dukungan**, pilih **Pusat Dukungan**.

1. Pada panel **Kasus dukungan Anda**, pilih **Buat kasus**.

1. Pilih **peningkatan batas Mencari layanan?** link, lalu lengkapi yang berikut ini:
   + Untuk **jenis Limit**, pilih **Pesan SNS Teks**.
   + (Opsional) Untuk **Menyediakan tautan ke situs atau aplikasi yang akan mengirim pesan SMS**, memberikan informasi tentang situs web, aplikasi, atau layanan yang akan mengirim pesan SMS.
   + (Opsional) Untuk **jenis pesan apa yang ingin Anda kirim**, pilih jenis pesan yang akan dikirim menggunakan kode panjang Anda:
     + **One Time Password** (Kata Sandi Satu Kali) – Pesan yang menyediakan kata sandi yang digunakan pelanggan Anda untuk melakukan autentikasi dengan situs web atau aplikasi Anda.
     + **Promotional** (Promosi) – Pesan tidak penting yang mempromosikan bisnis atau layanan Anda, seperti penawaran atau pengumuman khusus.
     + **Transactional** (Transaksional) – Pesan informasi penting yang mendukung transaksi pelanggan, seperti konfirmasi pesanan atau pemberitahuan akun. Pesan transaksional tidak boleh berisi konten promosi atau pemasaran.
   + (Opsional) Untuk ** AWS Wilayah mana Anda akan mengirim pesan, pilih** wilayah tempat Anda akan mengirim pesan.
   + (Opsional) Untuk **negara mana Anda berencana untuk mengirim pesan**, masukkan negara atau wilayah tempat Anda ingin membeli kode pendek.
   + (Opsional) Dalam **Bagaimana pelanggan Anda memilih untuk menerima pesan dari Anda**, berikan detail tentang proses keikutsertaan Anda.
   + (Opsional) Di kolom **Harap berikan templat pesan yang Anda rencanakan untuk digunakan untuk mengirim pesan ke pelanggan Anda**, sertakan templat yang akan Anda gunakan.

1. Di bawah **Permintaan**, lengkapi bagian berikut:
   + Untuk **Wilayah**, pilih Wilayah tempat Anda akan mengirim pesan. 
**catatan**  
Wilayah diperlukan di bagian **Permintaan**. Bahkan jika Anda memberikan informasi ini di bagian **Rincian kasus**, Anda juga harus memasukkannya di sini.
   + Untuk **Resource Type** (Jenis Sumber Daya), pilih **General Limits** (Batas Umum).
   + Untuk **Limit**, pilih **Kenaikan Ambang Batas Pengeluaran Akun**.

1. Untuk nilai New limit, masukkan jumlah maksimum (dalam USD) yang dapat Anda belanjakan untuk SMS setiap bulan kalender.

1. Di bawah **deskripsi Kasus**, untuk **deskripsi kasus Penggunaan**, berikan rincian berikut:
   + Situs web atau aplikasi perusahaan atau layanan yang mengirim pesan SMS.
   + Layanan yang disediakan oleh situs web atau aplikasi Anda, dan bagaimana pesan SMS Anda berkontribusi pada layanan itu.
   + Bagaimana pengguna mendaftar untuk secara sukarela menerima pesan SMS Anda di situs web, aplikasi, atau lokasi lain Anda.

   Jika kuota pengeluaran yang Anda minta (nilai yang Anda tentukan untuk **nilai kuota Baru**) melebihi \$110.000 (USD), berikan rincian tambahan berikut untuk setiap negara yang Anda kirimi pesan:
   + Baik Anda menggunakan ID pengirim atau kode pendek. Jika Anda menggunakan ID pengirim, berikan:
     + ID pengirim.
     + Apakah ID pengirim terdaftar dengan operator nirkabel di negara tersebut.
   + Maksimum yang diharapkan transactions-per-second (TPS) untuk pesan Anda.
   + Ukuran pesan rata-rata.
   + Template untuk pesan yang Anda kirim ke negara tersebut.
   + (Opsional) Kebutuhan pengkodean karakter, jika ada.

1. (Opsional) Jika Anda ingin mengirimkan permintaan lebih lanjut, pilih **Tambahkan permintaan lain**. Jika Anda menyertakan beberapa permintaan, berikan informasi yang diperlukan untuk masing-masing permintaan. Untuk informasi yang diperlukan, lihat bagian lain di dalamnya[Meminta dukungan untuk pesan SMS Amazon SNS](channels-sms-awssupport.md).

1. Di bawah **Opsi kontak**, untuk **Bahasa kontak pilihan**, pilih bahasa yang Anda inginkan untuk menerima komunikasi untuk kasus ini.

1. Setelah selesai, spilih **Kirim**.

 Dukungan Tim memberikan tanggapan awal atas permintaan Anda dalam waktu 24 jam.

Untuk mencegah sistem kami digunakan untuk mengirim konten yang tidak diinginkan atau berbahaya, kami mempertimbangkan setiap permintaan dengan hati-hati. Jika bisa, kami akan mengabulkan permintaan Anda dalam waktu 24 jam ini. Namun, jika kami memerlukan informasi tambahan dari Anda, mungkin perlu waktu lebih lama untuk menyelesaikan permintaan Anda.

Jika kasus penggunaan Anda tidak sesuai dengan kebijakan kami, kami mungkin tidak dapat mengabulkan permintaan Anda.

## Langkah 2: Perbarui pengaturan SMS Anda di konsol Amazon SNS
<a name="channels-sms-awssupport-spend-threshold-settings"></a>

Setelah kami memberi tahu Anda bahwa kuota pengeluaran bulanan Anda telah meningkat, Anda harus menyesuaikan kuota pengeluaran untuk akun Anda di konsol Amazon SNS.

**penting**  
Anda harus menyelesaikan langkah-langkah berikut atau batas pengeluaran SMS Anda tidak akan meningkat.

**Cara menyesuaikan kuota pengeluaran Anda di konsol tersebut**

1. Masuk ke [Konsol Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Buka menu navigasi kiri, perluas **Seluler**, lalu pilih **Pesan teks (SMS)**.

1. Di halaman **Mobile text messaging (SMS)** (Olahpesan teks seluler (SMS)), di bagian **Text messaging preferences**(Preferensi pesan teks), pilih **Edit**.

1. Pada halaman **Edit preferensi pesan teks**, di bagian **Detail**, masukkan batas pengeluaran SMS baru Anda di bidang **Batas pengeluaran akun**.
**catatan**  
Anda mungkin akan menerima peringatan bahwa nilai yang dimasukkan lebih besar dari batas pengeluaran default. Anda dapat mengabaikan peringatan ini. 

1. Pilih **Simpan perubahan**.
**catatan**  
Jika Anda mendapatkan kesalahan "Parameter Invalid" (Parameter Tidak Valid), periksa kontak dari Support AWS dan konfirmasikan bahwa Anda memasukkan batas pengeluaran SMS baru yang benar. Jika Anda masih mengalami masalah, buka kasing di AWS Support Center. 

Saat Anda membuat kasus Anda di Dukungan Pusat, pastikan untuk menyertakan semua informasi yang diperlukan untuk jenis permintaan yang Anda kirimkan. Jika tidak, Dukungan harus menghubungi Anda untuk mendapatkan informasi ini sebelum melanjutkan. Dengan mengirimkan kasus yang detail, Anda membantu memastikan bahwa kasus Anda terpenuhi tanpa penundaan. Untuk detail yang diperlukan untuk jenis permintaan SMS tertentu, lihat topik berikut.

 Untuk informasi selengkapnya tentang pengirim IDs, lihat dokumentasi berikut di *Panduan AWS Olah Pesan Pengguna Akhir SMS Pengguna*:


| AWS Olah Pesan Pengguna Akhir SMS Topik | Deskripsi | 
| --- | --- | 
|  [Meminta peningkatan kuota pengeluaran](https://docs.aws.amazon.com/sms-voice/latest/userguide/awssupport-spend-threshold.html)  |  Kuota pengeluaran Anda menentukan berapa banyak uang yang dapat Anda keluarkan untuk mengirim pesan SMS AWS Olah Pesan Pengguna Akhir SMS setiap bulannya.  | 
|  [Buka kasus di pusat dukungan untuk ID pengirim](https://docs.aws.amazon.com/sms-voice/latest/userguide/awssupport-sender-id.html)  |  Jika Anda berencana untuk mengirim pesan ke penerima negara di mana pengirim IDs diperlukan, Anda dapat meminta ID pengirim dengan membuat kasus baru di Pusat. Dukungan   | 

# Praktik terbaik untuk pesan SMS Amazon SNS
<a name="channels-sms-best-practices"></a>

**penting**  
Panduan Pengembang SMS Amazon SNS telah diperbarui. Amazon SNS telah terintegrasi dengan [AWS Olah Pesan Pengguna Akhir SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/what-is-service.html)pengiriman pesan SMS. Panduan ini berisi informasi terbaru tentang cara membuat, mengonfigurasi, dan mengelola pesan SMS Amazon SNS Anda.

Pengguna ponsel cenderung memiliki toleransi yang sangat rendah untuk pesan SMS yang tidak diminta. Tingkat respons untuk kampanye SMS yang tidak diminta hampir selalu rendah, dan oleh karena itu laba atas investasi Anda juga akan rendah.

Selain itu, operator ponsel terus mengaudit pengirim SMS massal. Mereka mencegah atau memblokir pesan dari nomor yang mereka tentukan untuk mengirim pesan yang tidak diminta. 

Mengirim konten yang tidak diminta juga merupakan pelanggaran [Kebijakan penggunaan AWS yang dapat diterima](https://aws.amazon.com/aup/#No_E-Mail_or_Other_Message_Abuse). Tim Amazon SNS secara rutin mengaudit kampanye SMS, dan mungkin mencegah atau memblokir kemampuan Anda untuk mengirim pesan jika tampaknya Anda mengirim pesan yang tidak diinginkan.

Akhirnya, di banyak negara, wilayah, dan yurisdiksi, ada hukuman berat untuk mengirim pesan SMS yang tidak diminta. Misalnya, di Amerika Serikat, Telephone Consumer Protection Act (TCPA) menyatakan bahwa konsumen berhak atas kerugian sebesar \$1500–\$11.500 (dibayar oleh pengirim) untuk setiap pesan yang tidak diminta yang mereka terima.

Bagian ini menjelaskan beberapa praktik terbaik yang dapat membantu Anda meningkatkan keterlibatan pelanggan dan menghindari hukuman yang mahal. Namun, perhatikan bahwa bagian ini tidak berisi nasihat hukum. Selalu konsultasikan dengan pengacara untuk mendapatkan nasihat hukum.

## Mematuhi hukum, peraturan, dan persyaratan operator
<a name="channels-sms-best-practices-understand-laws"></a>

Anda dapat menghadapi denda dan hukuman yang cukup berat jika Anda melanggar hukum dan peraturan tempat tinggal pelanggan Anda. Untuk alasan ini, sangat penting untuk memahami hukum yang terkait dengan olahpesan SMS di setiap negara atau wilayah tempat Anda berbisnis.

Daftar berikut mencakup tautan ke undang-undang utama yang berlaku untuk komunikasi SMS di pasar utama di seluruh dunia.
+ **Amerika Serikat**: Undang-Undang Perlindungan Konsumen Telepon tahun 1991, juga dikenal sebagai TCPA, berlaku untuk jenis pesan SMS tertentu. Untuk informasi selengkapnya, lihat [aturan dan regulasi](https://www.fcc.gov/document/telephone-consumer-protection-act-1991) di situs Federal Communications Commission.
+ **Britania Raya**: Peraturan Privasi dan Komunikasi Elektronik (EC Directive) 2003, juga dikenal sebagai PECR, berlaku untuk jenis pesan SMS tertentu. Untuk informasi selengkapnya, lihat [Apa itu PECR?](https://ico.org.uk/for-organisations/direct-marketing-and-privacy-and-electronic-communications/guide-to-pecr/what-are-pecr/) di situs UK Information Commissioner's Office.
+ **Uni Eropa**: Privacy and Electronic Communications Directive 2002, kadang-kadang dikenal sebagai EPrivacy Directive, berlaku untuk beberapa jenis pesan SMS. Untuk informasi selengkapnya, lihat [dokumen hukum lengkap](http://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32002L0058) di situs Europa.eu.
+ **Kanada**: Fighting Internet and Wireless Spam Act, yang lebih dikenal sebagai Hukum Anti-Spam Kanada atau CASL (Canada's Anti-Spam Law), berlaku untuk jenis pesan SMS tertentu. Untuk informasi selengkapnya, lihat [dokumen hukum lengkap](http://www.parl.ca/DocumentViewer/en/40-3/bill/C-28/first-reading) di situs Parliament of Canada.
+ **Jepang**: Act on Regulation of Transmission of Specific Electronic Mail berlaku untuk beberapa jenis pesan SMS. Untuk informasi lebih lanjut, lihat [penanggulangan Jepang terhadap spam](https://www.japaneselawtranslation.go.jp/en/laws/view/3767/en) di situs web Kementerian Dalam Negeri dan Komunikasi Jepang.

Sebagai pengirim, undang-undang ini mungkin berlaku untuk Anda bahkan jika perusahaan atau organisasi Anda tidak berbasis di salah satu negara ini. Beberapa undang-undang dalam daftar ini awalnya dibuat untuk mengatasi email atau panggilan telepon yang tidak diminta, tetapi telah ditafsirkan atau diperluas untuk diterapkan ke pesan SMS juga. Negara dan wilayah lain mungkin memiliki undang-undang sendiri terkait dengan transmisi pesan SMS. Konsultasikan dengan pengacara di setiap negara atau wilayah tempat pelanggan Anda berada untuk mendapatkan nasihat hukum.

Di banyak negara, operator lokal pada akhirnya memiliki wewenang untuk menentukan jenis arus lalu lintas melalui jaringan mereka. Ini berarti bahwa operator dapat memberlakukan pembatasan pada konten SMS yang melebihi persyaratan minimum undang-undang setempat.

## Mendapatkan izin
<a name="channels-sms-best-practices-obtain-permission"></a>

Jangan pernah mengirim pesan ke penerima yang belum secara eksplisit meminta untuk menerima jenis pesan tertentu yang ingin Anda kirim. Jangan berbagi daftar opt-in, bahkan di antara organisasi dalam perusahaan yang sama. 

Jika penerima dapat mendaftar untuk menerima pesan Anda dengan menggunakan formulir online, tambahkan sistem yang mencegah skrip otomatis berlangganan orang tanpa sepengetahuan mereka. Anda juga harus membatasi berapa kali pengguna dapat mengirimkan nomor telepon dalam satu sesi.

Saat Anda menerima permintaan keikutsertaan SMS, kirimkan pesan kepada penerima yang meminta mereka untuk mengonfirmasi bahwa mereka ingin menerima pesan dari Anda. Jangan mengirim pesan tambahan kepada penerima itu sampai mereka mengonfirmasi langganan mereka. Pesan konfirmasi langganan mungkin menyerupai contoh berikut:

`Text YES to join ExampleCorp alerts. 2 msgs/month. Msg & data rates may apply. Reply HELP for help, STOP to cancel.`

Pertahankan catatan yang mencakup tanggal, waktu, dan sumber setiap permintaan dan konfirmasi keikutsertaan menerima pesan. Hal ini mungkin berguna jika operator atau badan pengawas memintanya, dan juga dapat membantu Anda melakukan audit rutin terhadap daftar pelanggan Anda.

### Alur kerja opt-in
<a name="channels-sms-best-practices-obtain-permission-optin"></a>

Dalam beberapa kasus (seperti pendaftaran Bebas Pulsa atau Kode Singkat AS) operator seluler mengharuskan Anda untuk memberikan maket atau tangkapan layar dari seluruh alur kerja keikutsertaan Anda. Maket atau tangkapan layar harus sangat mirip dengan alur kerja opt-in yang akan diselesaikan penerima Anda. 

Maket atau tangkapan layar Anda harus mencakup semua pengungkapan yang diperlukan yang tercantum di bawah ini untuk mempertahankan tingkat kepatuhan tertinggi. 

**Pengungkapan yang diperlukan**
+ Deskripsi kasus penggunaan pesan yang akan Anda kirim melalui program Anda.
+ Ungkapan “Pesan dan tarif data mungkin berlaku.”
+ Indikasi seberapa sering penerima akan menerima pesan dari Anda. Misalnya, program pesan berulang mungkin mengatakan “satu pesan per minggu.” Kata sandi satu kali atau kasus penggunaan otentikasi multi-faktor mungkin mengatakan “frekuensi pesan bervariasi” atau “satu pesan per upaya login.”
+ Tautan ke Syarat dan Ketentuan serta dokumen Kebijakan Privasi Anda. 

**Alasan penolakan umum untuk opt-in yang tidak sesuai**
+ Jika nama perusahaan yang diberikan tidak sesuai dengan apa yang disediakan dalam mockup atau screen shot. Setiap hubungan yang tidak jelas harus dijelaskan dalam deskripsi alur kerja opt-in.
+ Jika tampaknya pesan akan dikirim ke penerima, tetapi tidak ada persetujuan yang dikumpulkan secara eksplisit sebelum melakukannya. Persetujuan eksplisit adalah persyaratan dari semua pesan.
+ Jika tampaknya menerima pesan teks diperlukan untuk mendaftar ke layanan. Ini tidak sesuai jika alur kerja tidak memberikan alternatif apa pun selain menerima pesan keikutsertaan dalam bentuk lain seperti email atau panggilan suara. 
+ Jika bahasa opt-in disajikan sepenuhnya dalam Ketentuan Layanan. Pengungkapan harus selalu disajikan kepada penerima pada saat keikutsertaan daripada disimpan di dalam dokumen kebijakan yang ditautkan. 
+ Jika pelanggan memberikan persetujuan untuk menerima satu jenis pesan dari Anda dan Anda mengirimi mereka jenis pesan teks lainnya. Misalnya mereka setuju untuk menerima kata sandi satu kali tetapi juga dikirim polling dan pesan survei.
+ Jika pengungkapan yang diperlukan (tercantum di atas) tidak disajikan kepada penerima.

Contoh berikut sesuai dengan persyaratan operator seluler untuk kasus penggunaan otentikasi multi-faktor.

![\[Sebuah step-by-step mockup dari alur kerja opt-in untuk mengaktifkan otentikasi multi-faktor (MFA) pada akun pengguna dengan. ExampleCorp Prosesnya dimulai dengan pengguna memberikan informasi akun dasar seperti nama dan email. Selanjutnya, pengguna memutuskan apakah akan mengaktifkan MFA untuk keamanan tambahan. Jika MFA diaktifkan, pengguna memilih bagaimana mereka ingin menerima token MFA, dengan opsi seperti pesan teks atau panggilan telepon. Jika pengguna memilih pesan teks, mereka menerima SMS dengan kode verifikasi. Langkah terakhir mengharuskan pengguna untuk memasukkan kode yang diterima untuk mengonfirmasi nomor telepon mereka, menyelesaikan proses keikutsertaan. Maket ini memastikan semua pengungkapan yang diperlukan disediakan untuk kepatuhan SMS.\]](http://docs.aws.amazon.com/id_id/sns/latest/dg/images/best-practices-usecase.png)


Ini berisi teks dan gambar yang telah diselesaikan, dan ini menunjukkan seluruh alur keikutsertaan, lengkap dengan anotasi. Dalam alur keikutsertaan, pelanggan harus mengambil tindakan yang berbeda dan disengaja untuk memberikan persetujuan mereka untuk menerima pesan teks dan berisi semua pengungkapan yang diperlukan.

### Jenis alur kerja opt-in lainnya
<a name="channels-sms-best-practices-obtain-permission-other"></a>

Operator seluler juga akan menerima alur kerja opt-in di luar aplikasi dan situs web seperti opt-in verbal atau tertulis jika sesuai dengan apa yang diuraikan di atas. Alur kerja opt-in yang sesuai dan skrip verbal atau tertulis akan mengumpulkan persetujuan eksplisit dari penerima untuk menerima jenis pesan tertentu. Contohnya termasuk skrip verbal yang digunakan agen dukungan untuk mengumpulkan persetujuan sebelum merekam ke dalam database layanan atau nomor telepon yang tercantum pada selebaran promosi. Untuk memberikan mockup dari jenis alur kerja opt-in ini, Anda dapat memberikan cuplikan layar skrip opt-in, materi pemasaran, atau database tempat nomor dikumpulkan. Operator seluler mungkin memiliki pertanyaan tambahan seputar kasus penggunaan ini jika keikutsertaan tidak jelas atau kasus penggunaan melebihi volume tertentu.

## Jangan kirim ke daftar lama
<a name="channels-sms-best-practices-old-lists"></a>

Orang sering mengganti nomor telepon. Nomor telepon yang Anda kumpulkan persetujuan untuk dihubungi dua tahun lalu mungkin milik orang lain hari ini. Jangan gunakan daftar nomor telepon lama untuk program perpesanan baru; jika Anda melakukannya, Anda mungkin memiliki beberapa pesan yang gagal karena nomor tersebut tidak lagi dalam layanan, dan beberapa orang yang memilih keluar karena mereka tidak ingat memberi Anda persetujuan mereka sejak awal.

## Audit daftar pelanggan Anda
<a name="channels-sms-best-practices-audit-lists"></a>

Jika Anda mengirim kampanye SMS berulang, audit daftar pelanggan Anda secara berkala. Mengaudit daftar pelanggan Anda memastikan bahwa pelanggan yang menerima pesan Anda hanyalah mereka yang tertarik untuk menerimanya. 

Saat Anda mengaudit daftar, kirim pesan kepada setiap pelanggan yang mengingatkan mereka bahwa mereka berlangganan, dan memberi mereka informasi tentang bagaimana cara berhenti berlangganan. Pesan pengingat mungkin menyerupai contoh berikut ini:

`You're subscribed to ExampleCorp alerts. Msg & data rates may apply. Reply HELP for help, STOP to unsubscribe.`

## Simpan catatan
<a name="channels-sms-best-practices-keep-records"></a>

Simpan catatan yang menunjukkan kapan setiap pelanggan diminta untuk menerima pesan SMS dari Anda, dan pesan mana yang Anda kirim ke setiap pelanggan. Banyak negara dan wilayah di seluruh dunia mewajibkan pengirim SMS untuk menyimpan catatan ini dengan cara yang dapat dengan mudah diambil. Operator seluler juga dapat meminta informasi ini dari Anda kapan saja. Informasi yang harus Anda berikan bervariasi berdasarkan negara atau wilayah. Untuk informasi selengkapnya tentang persyaratan penyimpanan catatan, tinjau peraturan tentang olahpesan SMS komersial di setiap negara atau wilayah tempat pelanggan Anda berada.

Kadang-kadang, operator atau badan pengawas meminta kita untuk memberikan bukti bahwa pelanggan memilih untuk menerima pesan dari Anda. Dalam situasi ini, Dukungan hubungi Anda dengan daftar informasi yang dibutuhkan operator atau agensi. Jika Anda tidak dapat memberikan informasi yang diperlukan, kami dapat menghentikan sementara kemampuan Anda untuk mengirim pesan SMS tambahan.

## Buat pesan Anda jelas, jujur, dan ringkas
<a name="channels-sms-best-practices-appropriate-content"></a>

SMS adalah media yang unik. character-per-message Batas 160 berarti pesan Anda harus ringkas. Teknik yang mungkin Anda gunakan di saluran komunikasi lain, seperti email, mungkin tidak berlaku untuk saluran SMS, dan bahkan mungkin tampak tidak jujur atau menipu ketika digunakan dengan pesan SMS. Jika konten dalam pesan Anda tidak selaras dengan praktik terbaik, penerima mungkin mengabaikan pesan Anda; dalam kasus terburuk, operator seluler mungkin mengidentifikasi pesan Anda sebagai spam dan memblokir pesan future dari nomor telepon Anda.

Bagian ini memberikan beberapa tips dan ide untuk membuat badan pesan SMS yang efektif.

### Identifikasi diri Anda sebagai pengirim
<a name="channels-sms-best-practices-appropriate-content-identify"></a>

Penerima Anda harus dapat segera memberi tahu bahwa pesan berasal dari Anda. Pengirim yang mengikuti praktik terbaik ini menyertakan nama pengenal (“nama program”) di awal setiap pesan.

**Jangan lakukan ini:**  
`Your account has been accessed from a new device. Reply Y to confirm.`

**Coba ini sebagai gantinya:**  
`ExampleCorp Financial Alerts: You have logged in to your account from a new device. Reply Y to confirm, or STOP to opt-out.`

### Jangan mencoba membuat pesan Anda terlihat seperti person-to-person pesan
<a name="channels-sms-best-practices-appropriate-content-p2p"></a>

Beberapa pemasar tergoda untuk menambahkan sentuhan pribadi ke pesan SMS mereka dengan membuat pesan mereka tampak berasal dari seseorang. Namun, teknik ini mungkin membuat pesan Anda tampak seperti upaya phishing.

**Jangan lakukan ini:**  
`Hi, this is Jane. Did you know that you can save up to 50% at Example.com? Click here for more info: https://www.example.com.`

**Coba ini sebagai gantinya:**  
`ExampleCorp Offers: Save 25-50% on sale items at Example.com. Click here to browse the sale: https://www.example.com. Text STOP to opt-out.`

### Hati-hati ketika berbicara tentang uang
<a name="channels-sms-best-practices-appropriate-content-money"></a>

Scammers sering memangsa keinginan orang untuk menabung dan menerima uang. Jangan membuat penawaran tampak terlalu bagus untuk menjadi kenyataan. Jangan gunakan iming-iming uang untuk menipu orang. Jangan gunakan simbol mata uang untuk menunjukkan uang.

**Jangan lakukan ini:**  
`Save big $$$ on your next car repair by going to https://www.example.com.`

**Coba ini sebagai gantinya:**  
`ExampleCorp Offers: Your ExampleCorp insurance policy gets you discounts at 2300+ repair shops nationwide. More info at https://www.example.com. Text STOP to opt-out.`

### Gunakan hanya karakter yang diperlukan
<a name="channels-sms-best-practices-appropriate-content-characters"></a>

Merek sering cenderung melindungi merek dagang mereka dengan memasukkan simbol merek dagang seperti™ atau® dalam pesan mereka. Namun, simbol-simbol ini bukan bagian dari set standar karakter (dikenal sebagai alfabet GSM) yang dapat dimasukkan dalam pesan SMS 160 karakter. Ketika Anda mengirim pesan yang berisi salah satu karakter ini, pesan Anda secara otomatis dikirim menggunakan sistem pengkodean karakter yang berbeda, yang hanya mendukung 70 karakter per bagian pesan. Akibatnya, pesan Anda dapat dipecah menjadi beberapa bagian. Karena Anda ditagih untuk setiap bagian pesan yang Anda kirim, itu bisa dikenakan biaya lebih dari yang Anda harapkan untuk mengirim seluruh pesan. Selain itu, penerima Anda mungkin menerima beberapa pesan berurutan dari Anda, bukan satu pesan tunggal. Untuk informasi selengkapnya tentang pengkodean karakter SMS, lihat[Batas karakter SMS di Amazon SNS](#channels-sms-limitations-characters).

**Jangan lakukan ini:**  
`ExampleCorp Alerts: Save 20% when you buy a new ExampleCorp Widget® at example.com and use the promo code WIDGET.`

**Coba ini sebagai gantinya:**  
`ExampleCorp Alerts: Save 20% when you buy a new ExampleCorp Widget(R) at example.com and use the promo code WIDGET.`

**catatan**  
Dua contoh sebelumnya hampir identik, tetapi contoh pertama berisi simbol Merek Dagang Terdaftar (®), yang bukan bagian dari alfabet GSM. Akibatnya, contoh pertama dikirim sebagai dua bagian pesan, sedangkan contoh kedua dikirim sebagai satu bagian pesan.

### Gunakan tautan yang valid dan aman
<a name="channels-sms-best-practices-appropriate-content-links"></a>

Jika pesan Anda menyertakan tautan, periksa kembali tautan untuk memastikannya berfungsi. Uji tautan Anda di perangkat di luar jaringan perusahaan Anda untuk memastikan bahwa tautan teratasi dengan benar. Karena batas 160 karakter pesan SMS, sangat panjang URLs dapat dibagi menjadi beberapa pesan. Anda harus menggunakan domain pengalihan untuk memberikan yang dipersingkat. URLs Namun, Anda tidak boleh menggunakan layanan pemendekan tautan gratis seperti tinyurl.com atau bitly.com, karena operator cenderung memfilter pesan yang menyertakan tautan pada domain ini. Namun, Anda dapat menggunakan layanan pemendekan tautan berbayar selama tautan Anda mengarah ke domain yang didedikasikan untuk penggunaan eksklusif perusahaan atau organisasi Anda. 

**Jangan lakukan ini:**  
`Go to https://tinyurl.com/4585y8mr today for a special offer!`

**Coba ini sebagai gantinya:**  
`ExampleCorp Offers: Today only, get an exclusive deal on an ExampleCorp Widget. See https://a.co/cFKmaRG for more info. Text STOP to opt-out.`

### Batasi jumlah singkatan yang Anda gunakan
<a name="channels-sms-best-practices-appropriate-content-abbrev"></a>

Keterbatasan 160 karakter dari saluran SMS membuat beberapa pengirim percaya bahwa mereka perlu menggunakan singkatan secara ekstensif dalam pesan mereka. Namun, penggunaan singkatan yang berlebihan dapat tampak tidak profesional bagi banyak pembaca, dan dapat menyebabkan beberapa pengguna melaporkan pesan Anda sebagai spam. Sangat mungkin untuk menulis pesan yang koheren tanpa menggunakan jumlah singkatan yang berlebihan.

**Jangan lakukan ini:**  
`Get a gr8 deal on ExampleCorp widgets when u buy a 4-pack 2day.`

**Coba ini sebagai gantinya:**  
`ExampleCorp Alerts: Today only—an exclusive deal on ExampleCorp Widgets at example.com. Text STOP to opt-out.`

## Merespons dengan tepat
<a name="channels-sms-best-practices-respond-appropriately"></a>

Saat penerima membalas pesan Anda, pastikan Anda merespons dengan informasi yang berguna. Misalnya, ketika pelanggan merespons salah satu pesan Anda dengan kata kunci "HELP" (BANTUAN), kirimkan informasi tentang program langganan mereka, jumlah pesan yang akan Anda kirim setiap bulan, dan cara mereka dapat menghubungi Anda untuk informasi lebih lanjut. Respons HELP (BANTUAN) mungkin menyerupai contoh berikut:

`HELP: ExampleCorp alerts: email help@example.com or call 425-555-0199. 2 msgs/month. Msg & data rates may apply. Reply STOP to cancel.`

Ketika pelanggan membalas dengan kata kunci "STOP" (BERHENTI), beri tahu mereka bahwa mereka tidak akan menerima pesan lebih lanjut. Respons STOP (BERHENTI) mungkin menyerupai contoh berikut:

`You're unsubscribed from ExampleCorp alerts. No more messages will be sent. Reply HELP, email help@example.com, or call 425-555-0199 for more info.`

## Sesuaikan pengiriman Anda berdasarkan keterlibatan
<a name="channels-sms-best-practices-adjust-engagement"></a>

Prioritas pelanggan Anda dapat berubah seiring waktu. Jika pelanggan tidak lagi menganggap pesan Anda berguna, mereka mungkin memilih untuk tidak menerima pesan Anda sama sekali, atau bahkan melaporkan pesan Anda sebagai tidak diminta. Untuk alasan ini, penting untuk menyesuaikan praktik pengiriman berdasarkan keterlibatan pelanggan.

Untuk pelanggan yang jarang terlibat dengan pesan Anda, Anda harus menyesuaikan frekuensi pesan Anda. Misalnya, jika Anda mengirim pesan mingguan ke pelanggan yang terlibat, Anda dapat membuat rencana pengiriman bulanan terpisah untuk pelanggan yang kurang terlibat. 

Lalu, hapus pelanggan yang benar-benar tidak terlibat dari daftar pelanggan Anda. Langkah ini mencegah pelanggan frustrasi terhadap pesan Anda. Ini juga menghemat pengeluaran Anda dan membantu melindungi reputasi Anda sebagai pengirim.

## Kirim pada waktu yang tepat
<a name="channels-sms-best-practices-appropriate-times"></a>

Hanya kirim pesan selama jam kerja normal siang hari. Jika Anda mengirim pesan di waktu makan malam atau di tengah malam, ada kemungkinan bahwa pelanggan Anda akan berhenti berlangganan dari daftar Anda agar tidak terganggu. Selain itu, tidak masuk akal untuk mengirim pesan SMS ketika pelanggan Anda tidak dapat segera merespons pesan tersebut. 

Jika Anda mengirim kampanye atau perjalanan ke audiens yang sangat besar, periksa ulang tingkat throughput untuk nomor originasi Anda. Bagilah jumlah penerima dengan tingkat throughput Anda untuk menentukan berapa lama waktu yang dibutuhkan untuk mengirim pesan ke semua penerima Anda.

## Hindari keletihan lintas-saluran
<a name="channels-sms-best-practices-cross-channel-fatigue"></a>

Dalam kampanye, jika Anda menggunakan beberapa saluran komunikasi (seperti email, SMS, dan pesan push), jangan mengirim pesan yang sama di setiap saluran. Ketika Anda mengirim pesan yang sama pada saat yang sama di lebih dari satu saluran, pelanggan Anda mungkin akan menganggap perilaku pengiriman Anda mengganggu, bukan membantu.

## Gunakan kode pendek khusus
<a name="channels-sms-best-practices-dedicated-short-codes"></a>

Jika Anda menggunakan kode pendek, gunakan kode pendek terpisah untuk setiap merek dan setiap jenis pesan. Misalnya, jika perusahaan Anda memiliki dua merek, gunakan kode pendek terpisah untuk masing-masing merek. Demikian pula, jika Anda mengirim pesan transaksional dan promosi, gunakan kode pendek terpisah untuk setiap jenis pesan. Untuk mempelajari lebih lanjut tentang meminta kode pendek, lihat [Meminta kode singkat untuk pesan SMS dengan AWS Olah Pesan Pengguna Akhir SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-request-short-code.html) di *AWS Olah Pesan Pengguna Akhir SMS Panduan Pengguna*.

## Verifikasi nomor telepon tujuan Anda
<a name="channels-sms-best-practices-verify-destination-numbers"></a>

Saat Anda mengirim pesan SMS melalui Amazon SNS, Anda ditagih untuk setiap bagian pesan yang Anda kirim. Harga yang Anda bayar per bagian pesan bervariasi di negara atau wilayah penerima. Untuk informasi selengkapnya tentang harga SMS, lihat [Harga SMS AWS Seluruh Dunia](https://aws.amazon.com/sns/sms-pricing).

Saat Amazon SNS menerima permintaan untuk mengirim pesan SMS (sebagai hasil dari panggilan ke [SendMessages](https://docs.aws.amazon.com/pinpoint/latest/apireference/apps-application-id-messages.html#SendMessages)API, atau sebagai hasil dari kampanye atau perjalanan yang diluncurkan), Anda dikenakan biaya untuk mengirim pesan tersebut. Pernyataan ini benar bahkan jika penerima yang dituju tidak benar-benar menerima pesan. Misalnya, jika nomor telepon penerima tidak lagi dalam layanan, atau jika nomor yang Anda kirimi pesan bukan nomor ponsel yang valid, Anda masih ditagih untuk mengirim pesan.

Amazon SNS menerima permintaan yang valid untuk mengirim pesan SMS dan mencoba mengirimkannya. Untuk alasan ini, Anda harus memvalidasi bahwa nomor telepon yang Anda kirimi pesan adalah nomor ponsel yang valid. Anda dapat menggunakan AWS Olah Pesan Pengguna Akhir SMS untuk mengirim pesan pengujian untuk menentukan apakah nomor telepon valid dan jenis nomornya (seperti ponsel, telepon rumah, atau VoIP). Untuk informasi selengkapnya, lihat [Mengirim pesan pengujian dengan simulator SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/getting-started-tutorial.html#getting-started-tutorial-step3) di *Panduan AWS Olah Pesan Pengguna Akhir SMS Pengguna*.

## Desain dengan mempertimbangkan redundansi
<a name="channels-sms-best-practices-redundancy"></a>

Untuk program pesan penting misi, kami menyarankan Anda mengonfigurasi Amazon SNS di lebih dari satu. Wilayah AWS Amazon SNS tersedia dalam beberapa. Wilayah AWS Untuk daftar lengkap Wilayah tempat Amazon SNS tersedia, lihat. [Referensi Umum AWS](https://docs.aws.amazon.com/general/latest/gr/sns.html) 

Nomor telepon yang Anda gunakan untuk pesan SMS — termasuk kode pendek, kode panjang, nomor bebas pulsa, dan nomor 10DLC — tidak dapat direplikasi. Wilayah AWS Akibatnya, untuk menggunakan Amazon SNS di beberapa Wilayah, Anda harus meminta nomor telepon terpisah di setiap Wilayah tempat Anda ingin menggunakan Amazon SNS. Misalnya, jika Anda menggunakan kode singkat untuk mengirim pesan teks ke penerima di Amerika Serikat, Anda perlu meminta kode pendek terpisah di setiap kode Wilayah AWS yang Anda rencanakan untuk digunakan.

Di beberapa negara, Anda juga dapat menggunakan beberapa jenis nomor telepon untuk menambah redundansi. Misalnya, di Amerika Serikat, Anda dapat meminta kode pendek, nomor 10DLC, dan nomor bebas pulsa. Masing-masing jenis nomor telepon ini mengambil rute yang berbeda ke penerima. Memiliki beberapa jenis nomor telepon yang tersedia—baik dalam hal yang sama Wilayah AWS atau tersebar di beberapa Wilayah AWS lain—memberikan lapisan redundansi tambahan, yang dapat membantu meningkatkan ketahanan.

## Batas dan batasan SMS
<a name="channels-sms-best-practices-limits"></a>

Untuk batasan dan batasan [SMS, lihat batasan dan batasan SMS dan MMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/sms-limitations.html) di *Panduan AWS Olah Pesan Pengguna Akhir SMS Pengguna*.

## Mengelola kata kunci keluar
<a name="channels-sms-best-practices-optout-keywords"></a>

Penerima SMS dapat menggunakan perangkat mereka untuk memilih keluar dari pesan dengan membalas dengan kata kunci. Untuk informasi selengkapnya, lihat [Memilih untuk tidak menerima pesan SMS](sms_manage.md#sms_manage_optout).

## CreatePool
<a name="channels-sms-best-practices-createpool"></a>

Gunakan aksi `CreatePool` API untuk membuat kumpulan baru dan mengaitkan identitas originasi tertentu ke pool. Untuk informasi selengkapnya, lihat [CreatePool](https://docs.aws.amazon.com/pinpoint/latest/apireference_smsvoicev2/API_CreatePool.html)di *Referensi AWS Olah Pesan Pengguna Akhir SMS API*.

## PutKeyword
<a name="channels-sms-best-practices-putkeyword"></a>

Gunakan tindakan `PutKeyword` API untuk membuat atau memperbarui konfigurasi kata kunci pada nomor telepon atau kumpulan originasi. Untuk informasi selengkapnya, lihat [PutKeyword](https://docs.aws.amazon.com/pinpoint/latest/apireference_smsvoicev2/API_PutKeyword.html)di *Referensi AWS Olah Pesan Pengguna Akhir SMS API*.

## Mengelola pengaturan nomor
<a name="channels-sms-best-practices-number-settings"></a>

Untuk mengelola setelan kode pendek khusus dan kode panjang yang Anda minta dari AWS Support dan ditetapkan ke akun Anda, lihat [Mengubah kemampuan nomor telepon dengan AWS CLI](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-change-capabilitiy.html) masuk *AWS Olah Pesan Pengguna Akhir SMS*.

## Batas karakter SMS di Amazon SNS
<a name="channels-sms-limitations-characters"></a>

Satu pesan SMS dapat berisi hingga 140 byte informasi. Jumlah karakter yang dapat Anda sertakan dalam satu pesan SMS tergantung pada jenis karakter yang terkandung dalam pesan tersebut.

Jika pesan Anda hanya menggunakan [karakter dalam set karakter GSM 03.38](#channels-sms-limitations-characters-gsm-alphabet), juga dikenal sebagai alfabet GSM 7-bit, dapat berisi hingga 160 karakter. Jika pesan Anda berisi karakter apa pun yang berada di luar set karakter GSM 03.38, pesan tersebut dapat memiliki hingga 70 karakter. Saat Anda mengirim pesan SMS, Amazon SNS secara otomatis menentukan pengkodean yang paling efisien untuk digunakan.

Ketika pesan berisi lebih dari jumlah maksimum karakter, pesan dibagi menjadi beberapa bagian. Ketika pesan dibagi menjadi beberapa bagian, setiap bagian berisi informasi tambahan tentang bagian pesan yang mendahuluinya. Ketika perangkat penerima menerima bagian pesan yang dipisahkan dengan cara ini, ia menggunakan informasi tambahan ini untuk memastikan bahwa semua bagian pesan ditampilkan dalam urutan yang benar. Bergantung pada operator seluler dan perangkat penerima, beberapa pesan mungkin ditampilkan sebagai satu pesan, atau sebagai urutan pesan terpisah. Akibatnya jumlah karakter di setiap bagian pesan dikurangi menjadi 153 (untuk pesan yang hanya berisi karakter GSM 03.38) atau 67 (untuk pesan yang berisi karakter lain). Anda dapat memperkirakan berapa banyak bagian pesan yang berisi pesan Anda sebelum Anda mengirimnya dengan menggunakan alat kalkulator panjang SMS, beberapa di antaranya tersedia secara online. Ukuran maksimum yang didukung dari pesan apa pun adalah 1600 karakter GSM atau 630 karakter non-GSM. Untuk informasi selengkapnya tentang throughput dan ukuran pesan, lihat [batas karakter SMS di Amazon](https://docs.aws.amazon.com/pinpoint/latest/userguide/channels-sms-limitations-mps.html) Pinpoint di Panduan Pengguna *Amazon Pinpoint*.

Untuk melihat jumlah bagian pesan untuk setiap pesan yang Anda kirim, Anda harus mengaktifkan [pengaturan aliran Acara](https://docs.aws.amazon.com/pinpoint/latest/userguide/settings-event-streams.html) terlebih dahulu. Ketika Anda melakukannya, Amazon SNS menghasilkan `_SMS.SUCCESS` peristiwa ketika pesan dikirimkan ke penyedia seluler penerima. Catatan `_SMS.SUCCESS` acara berisi atribut yang disebut`attributes.number_of_message_parts`. Atribut ini menentukan jumlah bagian pesan yang berisi pesan.

**penting**  
Saat mengirim pesan yang berisi lebih dari satu bagian pesan, Anda akan dikenakan biaya untuk jumlah bagian pesan yang terdapat dalam pesan.

### GSM 03.38 set karakter
<a name="channels-sms-limitations-characters-gsm-alphabet"></a>

Tabel berikut mencantumkan semua karakter yang hadir dalam set karakter GSM 03.38. Jika Anda mengirim pesan yang hanya menyertakan karakter yang ditampilkan dalam tabel berikut, maka pesan tersebut dapat berisi hingga 160 karakter. 


| GSM 03.38 karakter standar | 
| --- | 
| A | B | C | D | E | F | G | H | I | J | K | L | M | 
| T | O | P | Q | R | D | T | U | V | W | X | Y | Z | 
| a | b | c | d | e | f | g | -h | saya | j | k | l | m | 
| n | o | p | q | r | detik | t | u | v | w | x | y | z | 
| à | Å | å | Ä | ä | Ç | É | é | è | ì | Ñ | ñ | ò | 
| Ø | ø | Ö | ö | ù | Ü | ü | Æ | æ | ß | 0 | 1 | 2 | 
| 3 | 4 | 5 | 6 | 7 | 8 | 9 | & | \$1 | @ | : | , | ¤ | 
| \$1 | = | \$1 | > | \$1 | - | ¡ | ¿ | ( | < | % | . | \$1 | 
| £ | ? | " | ) | § | ; | ' | / | \$1 | ¥ | Δ | Φ | Γ | 
| Λ | Ω | Π | Ψ | Σ | Θ | Ξ |  |  |  |  |  |  | 

Set karakter GSM 03.38 mencakup beberapa simbol selain yang ditunjukkan pada tabel sebelumnya. Namun, masing-masing karakter ini dihitung sebagai dua karakter karena juga mencakup karakter pelarian yang tidak terlihat:
+ ^
+ \$1
+ \$1
+ \$1
+ [
+ ]
+ \$1
+ \$1
+ €

Akhirnya, set karakter GSM 03.38 juga mencakup karakter non-cetak berikut:
+ Karakter luar angkasa.
+ Kontrol umpan baris, yang menandakan akhir dari satu baris teks dan awal baris lainnya.
+ Sebuah carriage return control, yang bergerak ke awal baris teks (biasanya mengikuti karakter line feed).
+ Kontrol pelarian, yang secara otomatis ditambahkan ke karakter dalam daftar sebelumnya.

### Contoh pesan
<a name="channels-sms-limitations-characters-example-messages"></a>

Bagian ini berisi beberapa contoh pesan SMS. Untuk setiap contoh, bagian ini menunjukkan jumlah total karakter, serta jumlah bagian pesan untuk pesan.

**Contoh 1: Pesan panjang yang hanya berisi karakter dalam alfabet GSM 03.38**  
Pesan berikut hanya berisi karakter yang ada di alfabet GSM 03.38.

`Hello Carlos. Your Example Corp. bill of $100 is now available. Autopay is scheduled for next Thursday, April 9. To view the details of your bill, go to https://example.com/bill1.`

Pesan sebelumnya berisi 180 karakter, sehingga harus dibagi menjadi beberapa bagian pesan. Ketika pesan dibagi menjadi beberapa bagian pesan, setiap bagian dapat berisi 153 karakter GSM 03.38. Akibatnya, pesan ini dikirim sebagai 2 bagian pesan.

**Contoh 2: Pesan yang berisi karakter multi-byte**  
Pesan berikut berisi beberapa karakter Mandarin, yang semuanya berada di luar alfabet GSM 03.38. 

`亚马逊公司是一家总部位于美国西雅图的跨国电子商务企业，业务起始于线上书店，不久之后商品走向多元化。杰夫·贝佐斯于1994年7月创建了这家公司。`

Pesan sebelumnya berisi 71 karakter. Namun, karena hampir semua karakter dalam pesan berada di luar alfabet GSM 03.38, itu dikirim sebagai dua bagian pesan. Masing-masing bagian pesan ini dapat berisi maksimal 67 karakter.

**Contoh 3: Pesan yang berisi satu karakter non-GSM**  
Pesan berikut berisi satu karakter yang bukan bagian dari alfabet GSM 03.38. Dalam contoh ini, karakter adalah kutipan tunggal penutup ('), yang merupakan karakter yang berbeda dari apostrof biasa ('). Aplikasi pengolah kata seperti Microsoft Word sering secara otomatis mengganti apostrof dengan menutup tanda kutip tunggal. Jika Anda menyusun pesan SMS Anda di Microsoft Word dan menempelkannya ke Amazon SNS, Anda harus menghapus karakter khusus ini dan menggantinya dengan apostrof.

`John: Your appointment with Dr. Salazar’s office is scheduled for next Thursday at 4:30pm. Reply YES to confirm, NO to reschedule.`

Pesan sebelumnya berisi 130 karakter. Namun, karena berisi karakter kutipan tunggal penutup, yang bukan bagian dari alfabet GSM 03.38, itu dikirim sebagai dua bagian pesan.

Jika Anda mengganti karakter kutipan tunggal penutup dalam pesan ini dengan tanda kutip (yang merupakan bagian dari alfabet GSM 03.38), maka pesan dikirim sebagai bagian pesan tunggal.

# Mengirim notifikasi push seluler dengan Amazon SNS
<a name="sns-mobile-application-as-subscriber"></a>

Anda dapat menggunakan Amazon SNS untuk mengirim pesan pemberitahuan push langsung ke aplikasi di perangkat seluler. Pesan pemberitahuan push yang dikirim ke titik akhir seluler dapat muncul di aplikasi seluler sebagai peringatan pesan, pembaruan lencana, atau peringatan suara. 

![\[Ikhtisar notifikasi push seluler Amazon SNS\]](http://docs.aws.amazon.com/id_id/sns/latest/dg/images/sns-mobile-push-notifications.png)


**Topics**
+ [Cara kerja notifikasi pengguna Amazon SNS](#sns-how-user-notifications-work)
+ [Menyiapkan pemberitahuan push dengan Amazon SNS](#sns-user-notifications-process-overview)
+ [Menyiapkan aplikasi seluler di Amazon SNS](mobile-push-send.md)
+ [Menggunakan Amazon SNS untuk pemberitahuan push seluler](mobile-push-notifications.md)
+ [Atribut aplikasi seluler Amazon SNS](sns-msg-status.md)
+ [Pemberitahuan acara aplikasi Amazon SNS untuk aplikasi seluler](application-event-notifications.md)
+ [Tindakan API push seluler](mobile-push-api.md)
+ [Kesalahan API push seluler Amazon SNS yang umum](mobile-push-api-error.md)
+ [Menggunakan waktu Amazon SNS untuk atribut pesan langsung untuk notifikasi push seluler](sns-ttl.md)
+ [Aplikasi seluler Amazon SNS yang didukung Wilayah](sns-mobile-push-supported-regions.md)
+ [Praktik terbaik untuk mengelola notifikasi push seluler Amazon SNS](mobile-push-notifications-best-practices.md)

## Cara kerja notifikasi pengguna Amazon SNS
<a name="sns-how-user-notifications-work"></a>

Anda mengirim pesan notifikasi push ke kedua perangkat seluler dan desktop menggunakan salah satu layanan notifikasi push yang didukung berikut: 
+ Olahpesan Perangkat Amazon (ADM)
+ Layanan Pemberitahuan Push Apple (APNs) untuk iOS dan Mac OS X
+ Baidu Cloud Push (Baidu)
+ Firebase Cloud Messaging (FCM)
+ Layanan Notifikasi Push Microsoft untuk Ponsel Windows (MPNS)
+ Layanan Notifikasi Push Windows (WNS)

Layanan pemberitahuan push, seperti APNs dan FCM, menjaga koneksi dengan setiap aplikasi dan perangkat seluler terkait yang terdaftar untuk menggunakan layanan mereka. Ketika aplikasi dan perangkat seluler terdaftar, layanan notifikasi push mengembalikan token perangkat. Amazon SNS menggunakan token perangkat untuk membuat endpoint seluler, yang dapat mengirim pesan notifikasi push langsung. Agar Amazon SNS dapat berkomunikasi dengan layanan notifikasi push yang berbeda, Anda mengirimkan kredensial layanan notifikasi push Anda ke Amazon SNS untuk digunakan atas nama Anda. Untuk informasi selengkapnya, lihat [Menyiapkan pemberitahuan push dengan Amazon SNS](#sns-user-notifications-process-overview). 

 Selain mengirim pesan notifikasi push langsung, Anda juga dapat menggunakan Amazon SNS untuk mengirim pesan ke endpoint seluler yang berlangganan suatu topik. Konsepnya sama dengan berlangganan jenis endpoint lainnya, seperti Amazon SQS, HTTP/S, email, dan SMS, ke suatu topik, seperti yang dijelaskan dalam [Apa itu Amazon SNS?](welcome.md). Perbedaannya adalah bahwa Amazon SNS berkomunikasi menggunakan layanan notifikasi push agar endpoint seluler berlangganan menerima pesan notifikasi push yang dikirim ke topik.

## Menyiapkan pemberitahuan push dengan Amazon SNS
<a name="sns-user-notifications-process-overview"></a>

1. [Dapatkan kredensial dan token perangkat](sns-prerequisites-for-mobile-push-notifications.md) untuk platform seluler yang ingin Anda dukung.

1. Gunakan kredensial untuk membuat objek aplikasi platform (`PlatformApplicationArn`) menggunakan Amazon SNS. Untuk informasi selengkapnya, lihat [Membuat aplikasi platform Amazon SNS](mobile-push-send-register.md).

1. Gunakan kredenal yang dikembalikan untuk meminta token perangkat untuk aplikasi seluler dan perangkat Anda dari layanan pemberitahuan push. Token yang Anda terima mewakili aplikasi dan perangkat seluler Anda.

1. Gunakan token perangkat dan `PlatformApplicationArn` untuk membuat objek endpoint platform (`EndpointArn`) menggunakan Amazon SNS. Untuk informasi selengkapnya, lihat [Menyiapkan titik akhir platform Amazon SNS untuk notifikasi seluler](mobile-platform-endpoint.md).

1. Gunakan `EndpointArn` untuk [memublikasikan pesan ke aplikasi di perangkat seluler](mobile-push-send.md). Untuk informasi selengkapnya, lihat [Pesan perangkat seluler Amazon SNS langsung](mobile-push-notifications.md#mobile-push-send-directmobile) dan Referensi API [Publikasikan](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html) API di Amazon Simple Notification Service.

# Menyiapkan aplikasi seluler di Amazon SNS
<a name="mobile-push-send"></a>

Topik ini menjelaskan cara mengatur aplikasi seluler dalam Konsol Manajemen AWS menggunakan informasi yang dijelaskan di[Prasyarat untuk notifikasi pengguna Amazon SNS](sns-prerequisites-for-mobile-push-notifications.md).

# Prasyarat untuk notifikasi pengguna Amazon SNS
<a name="sns-prerequisites-for-mobile-push-notifications"></a>

Untuk mulai menggunakan notifikasi push seluler Amazon SNS, Anda memerlukan yang berikut ini:
+ Satu set kredensi untuk menghubungkan ke salah satu layanan pemberitahuan push yang didukung: ADM,, Baidu, FCM APNs, MPNS, atau WNS.
+ Token perangkat atau ID registrasi untuk aplikasi dan perangkat seluler.
+ Amazon SNS dikonfigurasi untuk mengirim pesan notifikasi push ke endpoint seluler.
+ Aplikasi seluler yang terdaftar dan dikonfigurasi untuk menggunakan salah satu layanan notifikasi push yang didukung.

Mendaftarkan aplikasi Anda dengan layanan notifikasi push memerlukan beberapa langkah. Amazon SNS memerlukan beberapa informasi yang Anda berikan ke layanan notifikasi push untuk mengirim pesan notifikasi push langsung ke endpoint seluler. Secara umum, Anda memerlukan kredensial yang diperlukan untuk menghubungkan ke layanan notifikasi push, token perangkat atau ID pendaftaran (mewakili perangkat seluler dan aplikasi seluler Anda) yang diterima dari layanan notifikasi push, dan aplikasi seluler yang terdaftar dengan layanan notifikasi push. 

Bentuk yang tepat dari kredensial berbeda antara platform seluler, tetapi dalam setiap kasus, kredensial ini harus diserahkan saat membuat koneksi ke platform. Satu set kredensial dikeluarkan untuk setiap aplikasi seluler, dan itu harus digunakan untuk mengirim pesan ke setiap instans dari aplikasi itu. 

Nama spesifik akan bervariasi tergantung pada layanan notifikasi push yang digunakan. Misalnya, saat menggunakan APNs sebagai layanan pemberitahuan push, Anda memerlukan *token perangkat*. Atau, saat menggunakan FCM, token perangkat yang setara disebut *ID pendaftaran*. *Token perangkat* atau *ID pendaftaran* adalah string yang dikirim ke aplikasi oleh sistem operasi perangkat seluler. Ini secara unik mengidentifikasi instans aplikasi seluler yang berjalan pada perangkat seluler tertentu dan dapat dianggap sebagai pengidentifikasi unik dari pasangan aplikasi-perangkat ini. 

Amazon SNS menyimpan kredensial (ditambah beberapa pengaturan lainnya) sebagai sumber daya aplikasi platform. Token perangkat (sekali lagi dengan beberapa pengaturan tambahan) direpresentasikan sebagai objek yang disebut *titik akhir platform*. Setiap endpoint platform milik satu aplikasi platform tertentu, dan setiap endpoint platform dapat dikomunikasikan dengan menggunakan kredensial yang disimpan dalam aplikasi platform yang sesuai.

Bagian berikut mencakup prasyarat untuk setiap layanan notifikasi push yang didukung. Setelah Anda memperoleh informasi prasyarat, Anda dapat mengirim pesan pemberitahuan push menggunakan Konsol Manajemen AWS atau push seluler Amazon SNS. APIs Lihat informasi yang lebih lengkap di [Menyiapkan pemberitahuan push dengan Amazon SNS](sns-mobile-application-as-subscriber.md#sns-user-notifications-process-overview). 

# Membuat aplikasi platform Amazon SNS
<a name="mobile-push-send-register"></a>

Untuk mengirim notifikasi dari Amazon SNS ke titik akhir seluler—baik secara langsung maupun melalui langganan topik—Anda harus terlebih dahulu membuat aplikasi platform. Setelah mendaftarkan aplikasi AWS, Anda perlu membuat titik akhir untuk aplikasi dan perangkat seluler. Titik akhir ini memungkinkan Amazon SNS untuk mengirim pesan ke perangkat.

**Untuk membuat aplikasi platform**

1. Masuk ke [konsol Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Di panel navigasi, pilih **Pemberitahuan push**.

1. Di bagian **Aplikasi platform**, pilih **Buat aplikasi platform**.

1. Pilih **Wilayah AWS** Anda. Untuk daftar AWS Wilayah tempat Anda dapat membuat aplikasi seluler, lihat[Aplikasi seluler Amazon SNS yang didukung Wilayah](sns-mobile-push-supported-regions.md).

1. Masukkan **detail aplikasi** berikut:
   + **Nama aplikasi** — Berikan **nama** untuk aplikasi platform Anda. Nama harus antara 1 dan 256 karakter dan dapat berisi huruf besar dan kecil, angka, garis bawah, tanda hubung, dan titik.
   + **Platform pemberitahuan push** — Pilih **layanan notifikasi** yang sesuai tempat aplikasi terdaftar (Misalnya, Layanan Pemberitahuan Push Apple (APNs), Firebase Cloud Messaging (FCM)).

1. Bergantung pada platform yang Anda pilih, Anda harus memberikan kredensi tertentu:
   + Untuk **APNs**(Layanan Pemberitahuan Push Apple) — Pilih antara otentikasi **berbasis token atau berbasis** **sertifikat**.
     + Untuk otentikasi berbasis token, unggah **file.p8 (dihasilkan melalui Akses Rantai** Kunci).
     + Untuk otentikasi berbasis sertifikat, unggah **file.p12 (juga diekspor dari Keychain Access**).
   + Untuk **FCM** (Firebase Cloud Messaging) — Masukkan **kunci Server** dari Firebase Console.
   + **Untuk **platform lain** (seperti ADM atau GCM) — Masukkan **kunci API atau kredensialnya** masing-masing.**

1. Setelah memasukkan detail yang diperlukan, pilih **Buat aplikasi platform**. Tindakan ini mendaftarkan aplikasi dengan Amazon SNS dan membuat objek aplikasi platform yang sesuai.

1. Setelah dibuat, Amazon SNS menghasilkan dan mengembalikan (Nama Sumber Daya [https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html)Amazon). ARN ini secara unik mengidentifikasi aplikasi platform Anda dan digunakan saat membuat titik akhir untuk perangkat seluler.

# Menyiapkan titik akhir platform Amazon SNS untuk notifikasi seluler
<a name="mobile-platform-endpoint"></a>

Saat aplikasi dan perangkat seluler mendaftar dengan layanan pemberitahuan push (seperti APNs atau Firebase Cloud Messaging), layanan pemberitahuan push akan mengembalikan token perangkat. Amazon SNS menggunakan token perangkat ini untuk membuat titik akhir platform, yang bertindak sebagai target untuk mengirim pesan notifikasi push langsung ke aplikasi di perangkat. Titik akhir platform berfungsi sebagai jembatan, merutekan pesan yang dikirim oleh Amazon SNS ke layanan pemberitahuan push untuk pengiriman ke perangkat seluler yang sesuai. Untuk informasi selengkapnya, lihat [Prasyarat untuk notifikasi pengguna Amazon SNS](sns-prerequisites-for-mobile-push-notifications.md) dan [Menyiapkan pemberitahuan push dengan Amazon SNS](sns-mobile-application-as-subscriber.md#sns-user-notifications-process-overview).

## Memahami token perangkat dan titik akhir platform
<a name="device-token-platform-endpoint"></a>

Token perangkat secara unik mengidentifikasi perangkat seluler yang terdaftar dengan layanan pemberitahuan push (misalnya APNs, Firebase Cloud Messaging). Saat aplikasi mendaftar dengan layanan notifikasi push, aplikasi akan menghasilkan token perangkat khusus untuk aplikasi dan perangkat tersebut. Amazon SNS menggunakan token perangkat ini untuk membuat titik akhir platform dalam aplikasi platform yang sesuai.

Titik akhir platform memungkinkan Amazon SNS mengirim pesan pemberitahuan push ke perangkat melalui layanan pemberitahuan push, menjaga koneksi antara aplikasi Anda dan perangkat pengguna.

## Membuat endpoint platform
<a name="mobile-platform-endpoint-create"></a>

Untuk mendorong notifikasi ke aplikasi dengan Amazon SNS, token perangkat aplikasi tersebut harus terlebih dahulu terdaftar ke Amazon SNS dengan memanggil tindakan buat endpoint platform. Tindakan ini mengambil Amazon Resource Name (ARN) dari aplikasi platform dan token perangkat sebagai parameter dan mengembalikan ARN dari endpoint platform yang dibuat.

[https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html)Tindakan tersebut melakukan hal berikut:
+ Jika endpoint platform sudah ada, jangan membuatnya lagi. Kembali ke pemanggil ARN dari endpoint platform yang ada.
+ Jika titik akhir platform dengan token perangkat yang sama tetapi pengaturan yang berbeda sudah ada, jangan membuatnya lagi. Lempar pengecualian ke pemanggil.
+ Jika titik akhir platform tidak ada, buatlah. Kembali ke pemanggil ARN dari endpoint platform yang baru dibuat.

Anda tidak boleh langsung memanggil tindakan buat endpoint platform setiap kali aplikasi dimulai, karena pendekatan ini tidak selalu menyediakan endpoint yang berfungsi. Hal ini dapat terjadi, misalnya, saat aplikasi dihapus dan diinstal ulang pada perangkat yang sama dan endpoint untuk itu sudah ada tetapi dinonaktifkan. Proses pendaftaran yang berhasil harus memenuhi hal-hal berikut:

1. Pastikan endpoint platform ada untuk kombinasi aplikasi-perangkat ini.

1. Pastikan token perangkat di endpoint platform adalah token perangkat valid terbaru.

1. Pastikan endpoint platform diaktifkan dan siap digunakan.

## Kode semu
<a name="mobile-platform-endpoint-pseudo-code"></a>

Kode semu berikut menjelaskan praktik yang disarankan untuk membuat endpoint platform yang berfungsi, saat ini, dan diaktifkan dalam berbagai kondisi awal. Pendekatan ini berfungsi baik ini pertama kali aplikasi terdaftar atau tidak, apakah endpoint platform untuk aplikasi ini sudah ada, dan apakah endpoint platform diaktifkan, memiliki token perangkat yang benar, dan seterusnya. Aman untuk memanggilnya beberapa kali berturut-turut, karena tidak akan membuat endpoint platform duplikat atau mengubah endpoint platform yang ada jika sudah diperbarui dan diaktifkan.

```
retrieve the latest device token from the mobile operating system
if (the platform endpoint ARN is not stored)
  # this is a first-time registration
  call create platform endpoint
  store the returned platform endpoint ARN
endif

call get endpoint attributes on the platform endpoint ARN 

if (while getting the attributes a not-found exception is thrown)
  # the platform endpoint was deleted 
  call create platform endpoint with the latest device token
  store the returned platform endpoint ARN
else 
  if (the device token in the endpoint does not match the latest one) or 
      (GetEndpointAttributes shows the endpoint as disabled)
    call set endpoint attributes to set the latest device token and then enable the platform endpoint
  endif
endif
```

Pendekatan ini dapat digunakan kapan saja aplikasi ingin mendaftar atau mendaftar ulang sendiri. Ini juga dapat digunakan saat memberi tahu Amazon SNS tentang perubahan token perangkat. Dalam hal ini, Anda cukup memanggil tindakan dengan nilai token perangkat terbaru. Beberapa hal yang perlu diperhatikan tentang pendekatan ini adalah:
+ Ada dua kasus di mana ia dapat memanggil tindakan buat endpoint platform. Ini dapat disebut di awal, di mana aplikasi tidak mengetahui ARN endpoint platformnya sendiri, seperti yang terjadi selama pendaftaran pertama kali. Ini juga disebut jika panggilan `GetEndpointAttributes` tindakan awal gagal dengan pengecualian yang tidak ditemukan, seperti yang akan terjadi jika aplikasi mengetahui ARN endpoint tetapi telah dihapus.
+ `GetEndpointAttributes`Tindakan ini dipanggil untuk memverifikasi status titik akhir platform bahkan jika titik akhir platform baru saja dibuat. Ini terjadi ketika endpoint platform sudah ada tetapi dinonaktifkan. Dalam hal ini, tindakan buat endpoint platform berhasil tetapi tidak mengaktifkan endpoint platform, jadi Anda harus memeriksa ulang status endpoint platform sebelum mengembalikan kesuksesan.

## AWS Contoh SDK
<a name="mobile-platform-endpoint-sdk-examples"></a>

Kode berikut menunjukkan cara menerapkan kode semu sebelumnya menggunakan klien Amazon SNS yang disediakan oleh. AWS SDKs

Untuk menggunakan AWS SDK, Anda harus mengonfigurasinya dengan kredensi Anda. Untuk informasi selengkapnya, lihat [File konfigurasi dan kredensial bersama](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html) di Panduan Referensi *Alat AWS SDKs dan Alat*.

------
#### [ CLI ]

**AWS CLI**  
**Untuk membuat endpoint aplikasi platform**  
`create-platform-endpoint`Contoh berikut membuat titik akhir untuk aplikasi platform tertentu menggunakan token yang ditentukan.  

```
aws sns create-platform-endpoint \
    --platform-application-arn arn:aws:sns:us-west-2:123456789012:app/GCM/MyApplication \
    --token EXAMPLE12345...
```
Output:  

```
{
      "EndpointArn": "arn:aws:sns:us-west-2:1234567890:endpoint/GCM/MyApplication/12345678-abcd-9012-efgh-345678901234"
}
```

------
#### [ Java ]

**SDK untuk Java 2.x**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples). 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.CreatePlatformEndpointRequest;
import software.amazon.awssdk.services.sns.model.CreatePlatformEndpointResponse;
import software.amazon.awssdk.services.sns.model.SnsException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 *
 * In addition, create a platform application using the AWS Management Console.
 * See this doc topic:
 *
 * https://docs.aws.amazon.com/sns/latest/dg/mobile-push-send-register.html
 *
 * Without the values created by following the previous link, this code examples
 * does not work.
 */

public class RegistrationExample {
    public static void main(String[] args) {
        final String usage = """

            Usage:     <token> <platformApplicationArn>

            Where:
               token - The device token or registration ID of the mobile device. This is a unique 
               identifier provided by the device platform (e.g., Apple Push Notification Service (APNS) for iOS devices, Firebase Cloud Messaging (FCM) 
               for Android devices) when the mobile app is registered to receive push notifications.

               platformApplicationArn - The ARN value of platform application. You can get this value from the AWS Management Console.\s

            """;

        if (args.length != 2) {
            System.out.println(usage);
            return;
        }

        String token = args[0];
        String platformApplicationArn = args[1];
        SnsClient snsClient = SnsClient.builder()
            .region(Region.US_EAST_1)
            .build();

        createEndpoint(snsClient, token, platformApplicationArn);
    }
    public static void createEndpoint(SnsClient snsClient, String token, String platformApplicationArn) {
        System.out.println("Creating platform endpoint with token " + token);
        try {
            CreatePlatformEndpointRequest endpointRequest = CreatePlatformEndpointRequest.builder()
                .token(token)
                .platformApplicationArn(platformApplicationArn)
                .build();

            CreatePlatformEndpointResponse response = snsClient.createPlatformEndpoint(endpointRequest);
            System.out.println("The ARN of the endpoint is " + response.endpointArn());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
        }
    }
}
```

------

 Untuk informasi selengkapnya, lihat [Tindakan API push seluler](mobile-push-api.md).

## Pemecahan masalah
<a name="mobile-platform-endpoint-problems"></a>

### Panggilan berulang kali membuat endpoint platform dengan token perangkat yang sudah usang
<a name="mobile-platform-endpoint-problems-outdated"></a>

Khusus untuk titik akhir FCM, Anda mungkin berpikir yang terbaik adalah menyimpan token perangkat pertama yang dikeluarkan aplikasi dan kemudian memanggil titik akhir platform buat dengan token perangkat itu setiap kali saat aplikasi start-up. Ini mungkin tampak benar karena membebaskan aplikasi dari keharusan mengelola status token perangkat dan Amazon SNS akan secara otomatis memperbarui token perangkat ke nilai terbarunya. Namun, solusi ini memiliki sejumlah masalah serius:
+ Amazon SNS mengandalkan umpan balik dari FCM untuk memperbarui token perangkat yang kedaluwarsa ke token perangkat baru. FCM menyimpan informasi tentang token perangkat lama untuk beberapa waktu, tetapi tidak selamanya. Setelah FCM melupakan koneksi antara token perangkat lama dan token perangkat baru, Amazon SNS tidak akan lagi dapat memperbarui token perangkat yang disimpan di endpoint platform ke nilai yang benar; itu hanya akan menonaktifkan endpoint platform saja.
+ Aplikasi platform akan berisi beberapa endpoint platform yang sesuai dengan token perangkat yang sama.
+ Amazon SNS memberlakukan kuota pada jumlah endpoint platform yang dapat dibuat mulai dengan token perangkat yang sama. Pada akhirnya, pembuatan endpoint baru akan gagal dengan pengecualian parameter yang tidak valid dan pesan kesalahan berikut: "Endpoint ini sudah terdaftar dengan token yang berbeda."

Untuk informasi selengkapnya tentang mengelola titik akhir FCM, lihat. [Manajemen Amazon SNS untuk titik akhir Firebase Cloud Messaging](sns-fcm-endpoint-management.md)

### Mengaktifkan kembali endpoint platform yang terkait dengan token perangkat yang tidak valid
<a name="mobile-platform-endpoint-problems-invalid"></a>

Ketika platform seluler (seperti APNs atau FCM) memberi tahu Amazon SNS bahwa token perangkat yang digunakan dalam permintaan publikasi tidak valid, Amazon SNS menonaktifkan titik akhir platform yang terkait dengan token perangkat tersebut. Amazon SNS kemudian akan menolak publikasi berikutnya untuk token perangkat tersebut. Meskipun Anda mungkin berpikir bahwa yang terbaik adalah mengaktifkan kembali endpoint platform dan terus memublikasikan, dalam sebagian besar situasi, hal ini tidak akan berhasil: pesan yang diterbitkan tidak terkirim dan endpoint platform menjadi dinonaktifkan lagi segera setelahnya.

Ini karena token perangkat yang terkait dengan endpoint platform benar-benar tidak valid. Pengiriman tidak dapat berhasil karena tidak lagi sesuai dengan aplikasi yang diinstal. Saat berikutnya dipublikasikan, platform seluler akan kembali menginformasikan Amazon SNS bahwa token perangkat tidak valid, dan Amazon SNS akan menonaktifkan lagi endpoint platform.

Untuk mengaktifkan kembali endpoint platform yang dinonaktifkan, endpoint tersebut harus dikaitkan dengan token perangkat yang valid (dengan panggilan tindakan atribut endpoint yang ditetapkan) lalu diaktifkan. Hanya dengan demikian pengiriman ke endpoint platform tersebut akan berhasil. Satu-satunya waktu mengaktifkan kembali endpoint platform tanpa memperbarui token perangkatnya akan berfungsi adalah ketika token perangkat yang terkait dengan endpoint itu dulu tidak valid tetapi kemudian menjadi valid lagi. Hal ini dapat terjadi, misalnya, saat aplikasi dihapus penginstalannya lalu diinstal kembali di perangkat seluler yang sama dan menerima token perangkat yang sama. Pendekatan yang disajikan di atas melakukan ini, memastikan untuk hanya mengaktifkan kembali endpoint platform setelah memverifikasi bahwa token perangkat yang terkait dengannya adalah yang terbaru yang tersedia.

# Mengintegrasikan token perangkat dengan Amazon SNS untuk notifikasi seluler
<a name="mobile-push-send-devicetoken"></a>

Saat pertama kali mendaftarkan aplikasi dan perangkat seluler dengan layanan notifikasi, seperti Apple Push Notification Service (APNs) dan Firebase Cloud Messaging (FCM), token perangkat atau registrasi IDs akan dikembalikan oleh layanan. Ini tokens/IDs ditambahkan ke Amazon SNS untuk membuat titik akhir untuk aplikasi dan perangkat, menggunakan API. [https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html) Setelah titik akhir dibuat, sebuah dikembalikan, yang [https://docs.aws.amazon.com/sns/latest/api/API_Endpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_Endpoint.html)digunakan Amazon SNS untuk mengarahkan notifikasi ke aplikasi/perangkat yang benar.

Anda dapat menambahkan token perangkat atau pendaftaran IDs ke Amazon SNS dengan cara berikut:
+ Tambahkan satu token secara manual melalui Konsol Manajemen AWS
+ Unggah beberapa token menggunakan API [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html)
+ Daftarkan token untuk perangkat masa depan

****Untuk menambahkan token perangkat atau ID pendaftaran secara manual****

1. Masuk ke [konsol Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Di panel navigasi, pilih **Pemberitahuan Push**.

1. Di bagian **Aplikasi Platform**, pilih aplikasi Anda, lalu pilih **Edit**. Jika Anda belum membuat aplikasi platform, ikuti [Membuat aplikasi platform Amazon SNS](mobile-push-send-register.md) panduan untuk melakukannya sekarang.

1. Pilih **Buat Titik Akhir**.

1. Di kotak **Token Titik Akhir**, masukkan **token** atau **ID pendaftaran**, tergantung pada layanan notifikasi yang Anda gunakan (misalnya, ID pendaftaran FCM).

1. (Opsional) Masukkan data tambahan di bidang **Data Pengguna**. Data ini harus dikodekan UTF-8 dan kurang dari 2 KB.

1. Pilih **Buat Titik Akhir**.

Setelah titik akhir dibuat, Anda dapat mengirim pesan langsung ke perangkat seluler atau ke perangkat seluler yang berlangganan topik Amazon SNS.

****Untuk mengunggah beberapa token menggunakan `CreatePlatformEndpoint` API****

Langkah-langkah berikut menunjukkan cara menggunakan contoh aplikasi Java (`bulkupload`paket) yang disediakan oleh AWS untuk mengunggah beberapa token (token perangkat atau pendaftaran IDs) ke Amazon SNS. Anda dapat menggunakan aplikasi contoh ini untuk membantu Anda memulai mengunggah token yang ada. 
**catatan**  
Langkah-langkah berikut menggunakan Eclipse Java IDE. Langkah-langkah mengasumsikan Anda telah menginstal AWS SDK untuk Java dan Anda memiliki kredensi AWS keamanan untuk Anda. Akun AWS Untuk informasi selengkapnya, lihat [AWS SDK untuk Java](https://aws.amazon.com/sdkforjava/). *Untuk informasi selengkapnya tentang kredensional, lihat [AWS kredensional keamanan di Panduan Pengguna](https://docs.aws.amazon.com/general/latest/gr/getting-aws-sec-creds.html) IAM.* 

1. Unduh dan unzip file [snsmobilepush.zip](samples/snsmobilepush.zip). 

1. Buat **proyek Java** baru di Eclipse dan impor `SNSSamples` folder ke proyek. 

1. Unduh pustaka [OpenCSV](http://sourceforge.net/projects/opencsv/) dan tambahkan ke jalur build.

1. Dalam `BulkUpload.properties` file, tentukan yang berikut ini: 
   + Anda `ApplicationArn` (aplikasi platform ARN).
   + Jalur absolut ke file CSV Anda yang berisi token.
   + Mencatat nama file untuk token yang berhasil dan gagal. Misalnya, `goodTokens.csv` dan `badTokens.csv`.
   + (Opsional) Konfigurasi untuk pembatas, karakter kutipan, dan jumlah utas yang akan digunakan.

   `BulkUpload.properties` Anda yang selesai akan terlihat seperti berikut:

   ```
   applicationarn: arn:aws:sns:us-west-2:111122223333:app/FCM/fcmpushapp
   csvfilename: C:\\mytokendirectory\\mytokens.csv
   goodfilename: C:\\mylogfiles\\goodtokens.csv
   badfilename: C:\\mylogfiles\\badtokens.csv
   delimiterchar: ','
   quotechar: '"'
   numofthreads: 5
   ```

1.  Jalankan **BatchCreatePlatformEndpointSampleaplikasi.java** untuk mengunggah token ke Amazon SNS. Token yang berhasil diunggah akan masuk`goodTokens.csv`, sementara token yang salah bentuk akan masuk. `badTokens.csv`

**Untuk mendaftarkan token dari perangkat untuk instalasi aplikasi masa depan**

Anda memiliki dua opsi untuk proses ini:

**Gunakan layanan Amazon Cognito**  
Aplikasi seluler Anda dapat menggunakan kredensi keamanan sementara untuk membuat titik akhir. Amazon Cognito direkomendasikan untuk menghasilkan kredensi sementara. Untuk informasi selengkapnya, lihat Panduan Pengembang *[Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/)*   
Untuk melacak [pendaftaran](application-event-notifications.md) aplikasi, gunakan peristiwa Amazon SNS untuk menerima notifikasi saat titik ARNs akhir baru dibuat.  
Atau, Anda dapat menggunakan [https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html)API untuk mengambil daftar endpoint terdaftar.

**Gunakan server proxy**  
Jika infrastruktur aplikasi Anda sudah mendukung pendaftaran perangkat saat penginstalan, Anda dapat menggunakan server sebagai proxy. Ini akan meneruskan token perangkat ke Amazon SNS melalui API. [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html)  
Endpoint ARN yang dibuat oleh Amazon SNS akan dikembalikan dan dapat disimpan oleh server Anda untuk penerbitan pesan future.

# Metode otentikasi notifikasi push Amazon SNS Apple
<a name="sns-apple-authentication-methods"></a>

Anda dapat mengotorisasi Amazon SNS untuk mengirim pemberitahuan push ke aplikasi iOS atau macOS Anda dengan memberikan informasi yang mengidentifikasi Anda sebagai pengembang aplikasi. Untuk mengautentikasi, berikan *kunci* atau *sertifikat* [saat membuat aplikasi platform](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html), yang keduanya bisa Anda dapatkan dari akun Pengembang Apple Anda.

**Kunci penandatanganan token**  
Kunci penandatanganan pribadi yang digunakan Amazon SNS untuk menandatangani token otentikasi Layanan Pemberitahuan Push (APNs) Apple.  
Jika Anda memberikan kunci penandatanganan, Amazon SNS menggunakan token untuk mengautentikasi setiap pemberitahuan push yang Anda kirim. APNs Dengan kunci penandatanganan, Anda dapat mengirim pemberitahuan push ke lingkungan APNs produksi dan kotak pasir.  
Kunci penandatanganan tidak kedaluwarsa, dan Anda dapat menggunakan kunci penandatanganan yang sama untuk beberapa aplikasi. Untuk informasi selengkapnya, lihat [Berkomunikasi dengan APNs menggunakan token autentikasi](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_token-based_connection_to_apns) di bagian **Bantuan Akun Pengembang** di situs web Apple.

**Sertifikat**  
Sertifikat TLS yang digunakan Amazon SNS untuk mengautentikasi saat Anda APNs mengirim pemberitahuan push. Anda mendapatkan sertifikat dari akun Pengembang Apple Anda.  
Sertifikat kedaluwarsa setelah satu tahun. Ketika ini terjadi, Anda harus membuat sertifikat baru dan memberikannya ke Amazon SNS. Untuk informasi selengkapnya, lihat [Membuat Koneksi Berbasis Sertifikat ke APNs situs web](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_certificate-based_connection_to_apns) Pengembang Apple.

**Untuk mengelola APNs setelan menggunakan AWS Management Console**

1. Masuk ke [Konsol Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Di panel navigasi, pilih **Pemberitahuan push**.

1. Di bagian **Aplikasi platform**, pilih **aplikasi** yang APNs pengaturannya ingin Anda edit, lalu pilih **Edit**. Jika Anda belum membuat aplikasi platform, ikuti [Membuat aplikasi platform Amazon SNS](mobile-push-send-register.md) panduan untuk melakukannya sekarang.

1. Pilih **Edit** untuk mengubah pengaturan untuk aplikasi platform Anda.

1. Di bagian **Jenis otentikasi**, pilih salah satu opsi berikut:
   + **Otentikasi berbasis token** (direkomendasikan untuk integrasi modern) APNs 
   + **Otentikasi berbasis sertifikat** (metode lama)

1. Konfigurasikan **kredensyal** Anda berdasarkan jenis otentikasi:
   + **Untuk otentikasi berbasis token:**
     + Unggah **file.p8**, yang merupakan kunci penandatanganan token otentikasi yang Anda unduh dari akun Pengembang Apple Anda.
     + Masukkan **ID Kunci Penandatanganan** yang Anda temukan di akun Pengembang Apple Anda. Arahkan ke **Sertifikat**, **IDs& Profil**, **Kunci**, dan pilih **kunci** yang ingin Anda gunakan.
     + Berikan **Pengenal Tim** dari akun Pengembang Apple Anda. Anda dapat menemukannya di halaman Keanggotaan.
     + Masukkan **Bundle Identifier** yang ditetapkan ke aplikasi Anda. Anda dapat menemukannya di bawah Sertifikat, IDs dan Profil, Aplikasi IDs.
   + **Untuk otentikasi berbasis sertifikat:**
     + Unggah **file.p12 untuk sertifikat** TLS Anda. File ini dapat diekspor dari Keychain Access di macOS setelah mengunduh sertifikat dari akun Pengembang Apple Anda.
     + Jika Anda menetapkan **kata sandi ke sertifikat.p12** Anda, masukkan di sini.

1. Setelah memasukkan kredensyal yang diperlukan, pilih **Simpan perubahan** untuk memperbarui pengaturan.

# Integrasi Amazon SNS dengan penyiapan autentikasi Firebase Cloud Messaging
<a name="sns-fcm-authentication-methods"></a>

Topik ini menjelaskan cara mendapatkan kredenal FCM API (HTTP v1) yang diperlukan dari Google untuk digunakan dengan AWS API, dan file. AWS CLI Konsol Manajemen AWS

**penting**  
26 Maret 2024 - Amazon SNS mendukung FCM HTTP v1 API untuk perangkat Apple dan tujuan Webpush. Kami menyarankan Anda memigrasikan aplikasi push seluler yang ada ke FCM HTTP v1 API terbaru pada atau sebelum 1 Juni 2024 untuk menghindari gangguan aplikasi.  
18 Januari 2024 — Amazon SNS memperkenalkan dukungan untuk FCM HTTP v1 API untuk pengiriman notifikasi push seluler ke perangkat Android.  
20 Juni 2023 — Google menghentikan API HTTP lama Firebase Cloud Messaging (FCM) mereka. Amazon SNS sekarang mendukung pengiriman ke semua jenis perangkat menggunakan FCM HTTP v1 API. Kami menyarankan Anda memigrasikan aplikasi push seluler yang ada ke FCM HTTP v1 API terbaru pada atau sebelum 1 Juni 2024 untuk menghindari gangguan.

Anda dapat mengotorisasi Amazon SNS untuk mengirim pemberitahuan push ke aplikasi Anda dengan memberikan informasi yang mengidentifikasi Anda sebagai pengembang aplikasi. Untuk mengautentikasi, berikan **kunci API** atau **token** [saat membuat aplikasi platform](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html). Anda bisa mendapatkan informasi berikut dari [konsol aplikasi Firebase](https://firebase.google.com/?gad=1&gclid=CjwKCAiA0syqBhBxEiwAeNx9N27M7zxHjlS74_gp4mAS4QTMQH5J35sTO29od-yauuq259zzX_I2DRoCrbsQAvD_BwE&gclsrc=aw.ds):

**Kunci API**  
Kunci API adalah kredensi yang digunakan saat memanggil API Legacy Firebase. FCM Legacy APIs akan dihapus oleh Google pada 20 Juni 2024. Jika saat ini Anda menggunakan kunci API sebagai kredensi platform, Anda dapat memperbarui kredensi platform dengan memilih **Token** sebagai opsi, dan mengunggah file JSON terkait untuk aplikasi Firebase Anda.

**Token**  
Token akses berumur pendek digunakan saat memanggil HTTP v1 API. Ini adalah API yang disarankan Firebase untuk mengirim pemberitahuan push. Untuk menghasilkan token akses, Firebase menyediakan satu set kredensional kepada developer dalam bentuk file kunci pribadi (juga disebut sebagai file service.json).

## Prasyarat
<a name="sns-fcm-authentication-prerequisite"></a>

Anda harus mendapatkan kredensi service.json FCM Anda sebelum Anda dapat mulai mengelola pengaturan FCM di Amazon SNS. Untuk mendapatkan kredensial service.json, lihat [Memigrasi dari FCM lama APIs ke](https://firebase.google.com/docs/cloud-messaging/migrate-v1) HTTP v1 di dokumentasi Google Firebase.

## Mengelola pengaturan FCM menggunakan CLI
<a name="sns-fcm-authentication-api"></a>

Anda dapat membuat notifikasi push FCM menggunakan AWS API. Jumlah dan ukuran sumber daya Amazon SNS dalam AWS akun terbatas. *Untuk informasi selengkapnya, lihat [titik akhir dan kuota Amazon Simple Notification Service](https://docs.aws.amazon.com/general/latest/gr/sns.html) di Panduan.Referensi Umum AWS *

**Untuk membuat notifikasi push FCM bersama dengan topik AWS Amazon SNS (API)**  
Saat menggunakan kredensil **kunci**, adalah. `PlatformCredential` `API key` Saat menggunakan kredensil **token**, file kunci `PlatformCredential` pribadi berformat JSON:
+ [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)

**Untuk mengambil jenis kredensi FCM untuk topik Amazon SNS (API) yang ada AWS**  
Mengambil jenis kredensi`"AuthenticationMethod": "Token"`, atau: ` "AuthenticationMethod": "Key"`
+ [GetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetPlatformApplicationAttributes.html)

**Untuk menyetel atribut FCM untuk topik AWS Amazon SNS (API) yang ada**  
Menetapkan atribut FCM:
+ [SetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html)

## Mengelola pengaturan FCM menggunakan konsol
<a name="sns-fcm-authentication-cli"></a>

Anda dapat membuat notifikasi push FCM menggunakan AWS Command Line Interface (CLI). Jumlah dan ukuran sumber daya Amazon SNS dalam AWS akun terbatas. Untuk informasi selengkapnya, lihat [titik akhir dan kuota Amazon Simple Notification Service](https://docs.aws.amazon.com/general/latest/gr/sns.html). 

**Untuk membuat notifikasi push FCM bersama dengan topik Amazon SNS ()AWS CLI**  
Saat menggunakan kredensil **kunci**, adalah. `PlatformCredential` `API key` Saat menggunakan kredensil **token**, file kunci `PlatformCredential` pribadi berformat JSON. Saat menggunakan AWS CLI, file harus dalam format string dan karakter khusus harus diabaikan. Untuk memformat file dengan benar, Amazon SNS merekomendasikan penggunaan perintah berikut: `SERVICE_JSON=`jq @json <<< cat service.json``
+ [create-platform-application](https://docs.aws.amazon.com/cli/latest/reference/sns/create-platform-application.html)

**Untuk mengambil jenis kredensi FCM untuk topik Amazon SNS yang ada ()AWS CLI**  
Mengambil jenis kredensi`"AuthenticationMethod": "Token"`, atau: ` "AuthenticationMethod": "Key"`
+ [get-platform-application-attributes](https://docs.aws.amazon.com/cli/latest/reference/sns/get-platform-application-attributes.html)

**Untuk menetapkan atribut FCM untuk topik Amazon SNS yang ada ()AWS CLI**  
Menetapkan atribut FCM:
+ [set-platform-application-attributes](https://docs.aws.amazon.com/cli/latest/reference/sns/set-platform-application-attributes.html)

## Mengelola pengaturan FCM (konsol)
<a name="sns-fcm-authentication-console"></a>

Gunakan langkah-langkah berikut untuk memasukkan dan mengelola kredenal Firebase Cloud Messaging (FCM) Anda di Amazon SNS.

1. Masuk ke [Konsol Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Di panel navigasi, pilih **Pemberitahuan Push**.

1. **Di bagian **Aplikasi platform**, pilih **aplikasi platform FCM** yang kredensialnya ingin Anda edit, lalu pilih Edit.**

1. Di bagian **Firebase Cloud Messaging Credentials**, pilih salah satu opsi berikut:
   + **Autentikasi berbasis token** (metode yang disarankan) — Unggah **file kunci pribadi** (JSON) yang Anda unduh dari Firebase Console. File ini berisi kredensil yang diperlukan untuk menghasilkan token akses berumur pendek untuk notifikasi FCM. Untuk mendapatkan file ini:

     1. Buka [konsol aplikasi Firebase](https://firebase.google.com/?gad=1&gclid=CjwKCAiA0syqBhBxEiwAeNx9N27M7zxHjlS74_gp4mAS4QTMQH5J35sTO29od-yauuq259zzX_I2DRoCrbsQAvD_BwE&gclsrc=aw.ds) Anda.

     1. Di **Pengaturan Proyek**, pilih **Cloud Messaging**.

     1. Unduh file JSON **kunci pribadi** (untuk digunakan dalam metode otentikasi berbasis token).
   + **Autentikasi kunci API** - Jika Anda lebih suka menggunakan metode autentikasi kunci API yang lebih lama, masukkan **kunci Google API** di bidang yang disediakan. Untuk mendapatkan file ini:

     1. Buka [konsol aplikasi Firebase](https://firebase.google.com/?gad=1&gclid=CjwKCAiA0syqBhBxEiwAeNx9N27M7zxHjlS74_gp4mAS4QTMQH5J35sTO29od-yauuq259zzX_I2DRoCrbsQAvD_BwE&gclsrc=aw.ds) Anda.

     1. Di **Pengaturan Proyek**, pilih **Cloud Messaging**.

     1. Salin **kunci Server (kunci** API) yang akan digunakan untuk mengirim notifikasi.

1. Setelah selesai, pilih **Simpan perubahan**.

**Topik terkait**
+ [Menggunakan payload Google Firebase Cloud Messaging v1 di Amazon SNS](sns-fcm-v1-payloads.md)

# Manajemen Amazon SNS untuk titik akhir Firebase Cloud Messaging
<a name="sns-fcm-endpoint-management"></a>

## Mengelola dan memelihara token perangkat
<a name="sns-managing-device-tokens"></a>

Anda dapat memastikan pengiriman pemberitahuan push aplikasi seluler Anda dengan mengikuti langkah-langkah berikut:

1. Simpan semua token perangkat, titik akhir Amazon SNS yang sesuai ARNs, dan stempel waktu di server aplikasi Anda.

1. Hapus semua token basi dan hapus titik akhir Amazon SNS ARNs yang sesuai.

Setelah start-up awal aplikasi Anda, Anda akan menerima token perangkat (juga disebut sebagai token pendaftaran) untuk perangkat. Token perangkat ini dicetak oleh sistem operasi perangkat, dan terkait dengan aplikasi FCM Anda. Setelah Anda menerima token perangkat ini, Anda dapat mendaftarkannya dengan Amazon SNS sebagai titik akhir platform. Kami menyarankan Anda menyimpan token perangkat, ARN endpoint platform Amazon SNS, dan stempel waktu dengan menyimpannya ke server aplikasi Anda, atau toko persisten lainnya. *Untuk menyiapkan aplikasi FCM untuk mengambil dan menyimpan token perangkat, lihat [Mengambil dan menyimpan token pendaftaran](https://firebase.google.com/docs/cloud-messaging/manage-tokens#retrieve-and-store-registration-tokens) di dokumentasi Firebase Google.*

Penting bagi Anda untuk mempertahankan up-to-date token. Token perangkat pengguna Anda dapat berubah dalam kondisi berikut:

1. Aplikasi seluler dipulihkan pada perangkat baru.

1. Pengguna menghapus atau memperbarui aplikasi.

1. Pengguna menghapus data aplikasi.

Saat token perangkat Anda berubah, kami sarankan Anda memperbarui titik akhir Amazon SNS yang sesuai dengan token baru. Ini memungkinkan Amazon SNS untuk melanjutkan komunikasi ke perangkat terdaftar. Anda dapat melakukan ini dengan menerapkan kode semu berikut dalam aplikasi seluler Anda. Ini menjelaskan praktik yang direkomendasikan untuk membuat dan memelihara titik akhir platform yang diaktifkan. Pendekatan ini dapat dijalankan setiap kali aplikasi seluler dimulai, atau sebagai pekerjaan terjadwal di latar belakang.

### Kode semu
<a name="sns-device-token-pseudo-code"></a>

Gunakan kode semu FCM berikut untuk mengelola dan memelihara token perangkat.

```
retrieve the latest token from the mobile OS
if (endpoint arn not stored)
    # first time registration
    call CreatePlatformEndpoint
    store returned endpoint arn
endif

call GetEndpointAttributes on the endpoint arn 

if (getting attributes encountered NotFound exception)
    #endpoint was deleted 
    call CreatePlatformEndpoint
    store returned endpoint arn
else 
    if (token in endpoint does not match latest) or 
        (GetEndpointAttributes shows endpoint as disabled)
        call SetEndpointAttributes to set the 
                     latest token and enable the endpoint
    endif
endif
```

Untuk mempelajari lebih lanjut tentang persyaratan pembaruan [token, lihat Memperbarui Token secara Reguler](https://firebase.google.com/docs/cloud-messaging/manage-tokens#update-tokens-on-a-regular-basis) di dokumentasi *Firebase* Google.

## Mendeteksi token yang tidak valid
<a name="sns-detecting-invalid-tokens"></a>

Saat pesan dikirim ke titik akhir FCM v1 dengan token perangkat yang tidak valid, Amazon SNS akan menerima salah satu pengecualian berikut:
+ `UNREGISTERED`(HTTP 404) — Saat Amazon SNS menerima pengecualian ini, Anda akan menerima peristiwa kegagalan pengiriman dengan `FailureType` `InvalidPlatformToken` of, dan *token Platform `FailureMessage` yang terkait dengan titik akhir* tidak valid. Amazon SNS akan menonaktifkan titik akhir platform Anda saat pengiriman gagal dengan pengecualian ini.
+ `INVALID_ARGUMENT`(HTTP 400) — Ketika Amazon SNS menerima pengecualian ini, itu berarti token perangkat atau muatan pesan tidak valid. Untuk informasi selengkapnya, lihat [ErrorCode](https://firebase.google.com/docs/reference/fcm/rest/v1/ErrorCode)di dokumentasi *Firebase* Google.

Karena `INVALID_ARGUMENT` dapat dikembalikan dalam salah satu kasus ini, Amazon SNS akan mengembalikan a `FailureType``InvalidNotification`, dan *badan Pemberitahuan tidak valid*. `FailureMessage` Ketika Anda menerima kesalahan ini, verifikasi bahwa payload Anda sudah benar. Jika benar, verifikasi bahwa token perangkat tersebut up-to-date. Amazon SNS tidak akan menonaktifkan titik akhir platform Anda saat pengiriman gagal dengan pengecualian ini.

Kasus lain di mana Anda akan mengalami peristiwa kegagalan `InvalidPlatformToken` pengiriman adalah ketika token perangkat terdaftar bukan milik aplikasi yang mencoba mengirim pesan itu. Dalam hal ini, Google akan mengembalikan kesalahan *SENDER\$1ID\$1MISMATCH*. Amazon SNS akan menonaktifkan titik akhir platform Anda saat pengiriman gagal dengan pengecualian ini.

Semua kode kesalahan yang diamati yang diterima dari FCM v1 API tersedia untuk Anda CloudWatch saat Anda menyiapkan [pencatatan status pengiriman untuk aplikasi](topics-attrib.md) Anda. 

Untuk menerima acara pengiriman untuk aplikasi Anda, lihat[Peristiwa aplikasi yang tersedia](application-event-notifications.md#application-event-notifications-events).

## Menghapus token basi
<a name="sns-removing-stale-tokens"></a>

Token dianggap basi setelah pengiriman pesan ke perangkat titik akhir mulai gagal. Amazon SNS menetapkan token basi ini sebagai titik akhir yang dinonaktifkan untuk aplikasi platform Anda. Saat Anda memublikasikan ke titik akhir yang dinonaktifkan, Amazon SNS akan menampilkan peristiwa `EventDeliveryFailure` dengan `FailureType` `EndpointDisabled` dari, dan `FailureMessage` *Endpoint* dinonaktifkan. Untuk menerima acara pengiriman untuk aplikasi Anda, lihat[Peristiwa aplikasi yang tersedia](application-event-notifications.md#application-event-notifications-events).

Saat Anda menerima kesalahan ini dari Amazon SNS, Anda perlu menghapus atau memperbarui token basi di aplikasi platform Anda.

# Menggunakan Amazon SNS untuk pemberitahuan push seluler
<a name="mobile-push-notifications"></a>

 Bagian ini menjelaskan cara mengirim notifikasi push seluler.

## Menerbitkan ke topik
<a name="mobile-push-send-topicmobile"></a>

Anda juga dapat menggunakan Amazon SNS untuk mengirim pesan ke endpoint seluler yang berlangganan suatu topik. Konsepnya sama dengan berlangganan jenis endpoint lainnya, seperti Amazon SQS, HTTP/S, email, dan SMS, ke suatu topik, seperti yang dijelaskan dalam [Apa itu Amazon SNS?](welcome.md). Perbedaannya adalah Amazon SNS berkomunikasi melalui layanan notifikasi seperti Apple Push Notification Service (APNS) dan Google Firebase Cloud Messaging (FCM). Melalui layanan notifikasi, endpoint seluler yang berlangganan menerima notifikasi yang dikirim ke topik. 

## Pesan perangkat seluler Amazon SNS langsung
<a name="mobile-push-send-directmobile"></a>

Anda dapat mengirim pesan notifikasi push Amazon SNS langsung ke endpoint yang mewakili aplikasi pada perangkat seluler. 

**Untuk mengirim pesan langsung**

1. Masuk ke [konsol Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Pada panel navigasi, pilih **Pemberitahuan push**.

1. Pada halaman **Pemberitahuan push seluler**, di bagian **Aplikasi platform**, pilih nama aplikasi, misalnya***MyApp***.

1. Pada ***MyApp*** halaman, di bagian **Endpoints**, pilih endpoint lalu pilih **Publish** message.

1. Pada halaman **Publikasikan pesan ke endpoint**, masukkan pesan yang akan muncul di aplikasi pada perangkat seluler, lalu pilih **Publikasikan pesan**.

   Amazon SNS mengirimkan pesan notifikasi ke layanan notifikasi platform yang, pada gilirannya, mengirimkan pesan ke aplikasi.

# Menerbitkan notifikasi Amazon SNS dengan muatan khusus platform
<a name="sns-send-custom-platform-specific-payloads-mobile-devices"></a>

Anda dapat menggunakan Amazon SNS Konsol Manajemen AWS atau APIs untuk mengirim pesan khusus dengan muatan khusus platform ke perangkat seluler. Untuk informasi tentang menggunakan Amazon SNS APIs, lihat [Tindakan API push seluler](mobile-push-api.md) dan `SNSMobilePush.java` file di. `[snsmobilepush.zip](samples/snsmobilepush.zip)` 

## Mengirim pesan berformat JSON
<a name="mobile-push-send-json"></a>

Saat Anda mengirim muatan khusus platform, data harus diformat sebagai string pasangan nilai kunci JSON, dengan tanda kutip diloloskan.

Contoh berikut menunjukkan pesan khusus untuk platform FCM.

```
{
"GCM": "{\"fcmV1Message\": {\"message\": {\"notification\": {\"title\": \"Hello\", \"body\": \"This is a test.\"}, \"data\": {\"dataKey\": \"example\"}}}}"
}
```

## Mengirim pesan khusus platform
<a name="mobile-push-send-platform"></a>

Selain mengirim data khusus sebagai pasangan nilai kunci, Anda dapat mengirim pasangan nilai kunci khusus platform.

Contoh berikut menunjukkan penyertaan parameter FCM `time_to_live` dan `collapse_key` setelah pasangan nilai kunci data kustom dalam parameter `data` FCM.

```
{
"GCM": "{\"fcmV1Message\": {\"message\": {\"notification\": {\"title\": \"TitleTest\", \"body\": \"Sample message for Android or iOS endpoints.\"}, \"data\":{\"time_to_live\": 3600,\"collapse_key\":\"deals\"}}}}"
}
```

Untuk daftar pasangan kunci-nilai yang didukung oleh masing-masing layanan notifikasi push yang didukung di Amazon SNS, lihat berikut ini: 

**penting**  
Amazon SNS sekarang mendukung Firebase Cloud Messaging (FCM) HTTP v1 API untuk mengirimkan notifikasi push seluler ke perangkat Android.  
26 Maret 2024 - Amazon SNS mendukung FCM HTTP v1 API untuk perangkat Apple dan tujuan Webpush. Kami menyarankan Anda memigrasikan aplikasi push seluler yang ada ke FCM HTTP v1 API terbaru pada atau sebelum 1 Juni 2024 untuk menghindari gangguan aplikasi.
+ [Referensi Kunci Payload](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/PayloadKeyReference.html#/apple_ref/doc/uid/TP40008194-CH17-SW1) dalam dokumentasi APNs 
+ [Protokol HTTP Firebase Cloud Messaging](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages) dalam dokumentasi FCM
+ [Kirim Pesan](https://developer.amazon.com/sdk/adm/sending-message.html) di dokumentasi ADM

## Mengirim pesan ke aplikasi di berbagai platform
<a name="mobile-push-send-multiplatform"></a>

Untuk mengirim pesan ke aplikasi yang diinstal pada perangkat untuk beberapa platform, seperti FCM dan APNs, Anda harus terlebih dahulu berlangganan titik akhir seluler ke topik di Amazon SNS dan kemudian mempublikasikan pesan ke topik tersebut.

Contoh berikut menunjukkan pesan untuk dikirim ke endpoint seluler berlangganan pada APNs, FCM, dan ADM: 

```
{ 
  "default": "This is the default message which must be present when publishing a message to a topic. The default message will only be used if a message is not present for 
one of the notification platforms.",     
  "APNS": "{\"aps\":{\"alert\": \"Check out these awesome deals!\",\"url\":\"www.amazon.com\"} }",
  "GCM": "{\"data\":{\"message\":\"Check out these awesome deals!\",\"url\":\"www.amazon.com\"}}",
  "ADM": "{\"data\":{\"message\":\"Check out these awesome deals!\",\"url\":\"www.amazon.com\"}}" 
}
```

## Mengirim pesan ke APNs sebagai peringatan atau pemberitahuan latar belakang
<a name="mobile-push-send-message-apns-background-notification"></a>

Amazon SNS dapat mengirim pesan ke APNs as `alert` atau `background` notifikasi (untuk informasi selengkapnya, lihat [Mendorong Pembaruan Latar Belakang ke Aplikasi Anda](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/pushing_background_updates_to_your_app) dalam APNs dokumentasi).
+ `alert` APNs Pemberitahuan menginformasikan pengguna dengan menampilkan pesan peringatan, memutar suara, atau menambahkan lencana ke ikon aplikasi Anda.
+ `background` APNs Pemberitahuan bangun atau menginstruksikan aplikasi Anda untuk bertindak atas konten pemberitahuan, tanpa memberi tahu pengguna.

### Menentukan nilai APNs header kustom
<a name="specify-custom-header-value"></a>

Sebaiknya tentukan nilai kustom untuk [atribut pesan yang `AWS.SNS.MOBILE.APNS.PUSH_TYPE` dicadangkan](sns-message-attributes.md#sns-attrib-mobile-reserved) menggunakan tindakan Amazon `Publish` SNS API AWS SDKs, atau. AWS CLI Contoh CLI berikut menyetel `content-available` ke `1` dan `apns-push-type` ke `background` untuk topik yang ditentukan. 

```
aws sns publish \
--endpoint-url https://sns.us-east-1.amazonaws.com \
--target-arn arn:aws:sns:us-east-1:123456789012:endpoint/APNS_PLATFORM/MYAPP/1234a567-bc89-012d-3e45-6fg7h890123i \
--message '{"APNS_PLATFORM":"{\"aps\":{\"content-available\":1}}"}' \
--message-attributes '{ \
  "AWS.SNS.MOBILE.APNS.TOPIC":{"DataType":"String","StringValue":"com.amazon.mobile.messaging.myapp"}, \
  "AWS.SNS.MOBILE.APNS.PUSH_TYPE":{"DataType":"String","StringValue":"background"}, \
  "AWS.SNS.MOBILE.APNS.PRIORITY":{"DataType":"String","StringValue":"5"}}' \
--message-structure json
```

**catatan**  
Pastikan bahwa struktur JSON valid. Tambahkan koma setelah setiap pasangan kunci-nilai, kecuali yang terakhir.

### Menyimpulkan header tipe APNs push dari payload
<a name="inferring-push-type-header-from-payload"></a>

Jika Anda tidak menyetel `apns-push-type` APNs header, Amazon SNS menetapkan header ke `alert` atau `background` bergantung pada `content-available` kunci dalam `aps` kamus konfigurasi payload berformat APNs JSON Anda.

**catatan**  
Amazon SNS hanya dapat menyimpulkan header `alert` atau `background`, meskipun header `apns-push-type` dapat diatur ke nilai lain.
+ `apns-push-type` diatur ke `alert`
  + Jika kamus `aps` berisi `content-available` yang diatur ke `1` dan *satu atau beberapa kunci* yang memicu interaksi pengguna.
  + Jika kamus `aps` berisi `content-available` yang diatur ke `0` *atau* jika kunci `content-available` tidak ada.
  + Jika nilai kunci `content-available` bukan bilangan bulat atau Boolean.
+ `apns-push-type` diatur ke `background`
  + Jika kamus `aps` *hanya* berisi `content-available` yang diatur ke `1` dan *tidak ada kunci lain* yang memicu interaksi pengguna.
**penting**  
Jika Amazon SNS mengirimkan objek konfigurasi mentah APNs sebagai notifikasi khusus latar belakang, Anda harus menyertakan `content-available` set ke dalam kamus. `1` `aps` Meskipun Anda dapat menyertakan kunci kustom, kamus `aps` tidak boleh berisi kunci apa pun yang memicu interaksi pengguna (misalnya, peringatan, lencana, atau suara).

Berikut ini adalah contoh objek konfigurasi mentah.

```
{
  "APNS": "{\"aps\":{\"content-available\":1},\"Foo1\":\"Bar\",\"Foo2\":123}"
}
```

Dalam contoh ini, Amazon SNS menyetel `apns-push-type` APNs header untuk pesan tersebut. `background` Saat Amazon SNS mendeteksi bahwa kamus `apn` berisi kunci `content-available` yang diatur ke `1`—dan tidak berisi kunci lain yang dapat memicu interaksi pengguna—itu menyetel header ke `background`.

# Menggunakan payload Google Firebase Cloud Messaging v1 di Amazon SNS
<a name="sns-fcm-v1-payloads"></a>

Amazon SNS mendukung penggunaan FCM HTTP v1 API untuk mengirim notifikasi ke tujuan Android, iOS, dan Webpush. Topik ini memberikan contoh struktur payload saat menerbitkan notifikasi push seluler menggunakan CLI, atau Amazon SNS API.

Anda dapat menyertakan jenis pesan berikut di payload saat mengirim notifikasi FCM:
+ **Pesan data** — Pesan data ditangani oleh aplikasi klien Anda dan berisi pasangan nilai kunci khusus. Saat membuat pesan data, Anda harus menyertakan `data` kunci dengan objek JSON sebagai nilainya, lalu masukkan pasangan nilai kunci kustom Anda.
+ **Pesan pemberitahuan atau pesan** **tampilan — Pesan** notifikasi berisi sekumpulan kunci yang telah ditentukan sebelumnya yang ditangani oleh FCM SDK. Tombol-tombol ini bervariasi tergantung pada jenis perangkat yang Anda kirimkan. Untuk informasi selengkapnya tentang kunci notifikasi khusus platform, lihat berikut ini:
  + [Tombol notifikasi Android](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages)
  + [Kunci pemberitahuan APNS](https://developer.apple.com/documentation/usernotifications/generating-a-remote-notification)
  + [Tombol pemberitahuan Webpush](https://developer.mozilla.org/en-US/docs/Web/API/Notification)

Untuk informasi selengkapnya tentang jenis pesan FCM, lihat [Jenis pesan](https://firebase.google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages) di dokumentasi *Firebase* Google.

## Menggunakan struktur payload FCM v1 untuk mengirim pesan
<a name="sending-messages-using-v1-payload"></a>

Jika Anda membuat aplikasi FCM untuk pertama kalinya, atau ingin memanfaatkan fitur FCM v1, Anda dapat memilih untuk mengirim muatan berformat FCM v1. Untuk melakukan ini, Anda harus menyertakan kunci `fcmV1Message` tingkat atas. *Untuk informasi selengkapnya tentang membuat payload FCM v1, lihat [Memigrasi dari FCM lama APIs ke HTTP v1](https://firebase.google.com/docs/cloud-messaging/migrate-v1) dan [Menyesuaikan](https://firebase.google.com/docs/cloud-messaging/concept-options#customizing-a-message-across-platforms) pesan di seluruh platform dalam dokumentasi Firebase Google.*

**Contoh payload FCM v1 dikirim ke Amazon SNS:**

**catatan**  
Nilai `GCM` kunci yang digunakan dalam contoh berikut harus dikodekan sebagai String saat menerbitkan notifikasi menggunakan Amazon SNS. 

```
{
  "GCM": "{ 
    \"fcmV1Message\": { 
      \"validate_only\": false,
      \"message\": {
        \"notification\": {
          \"title\": \"string\",
          \"body\": \"string\"
        },
        \"data\": {
          \"dataGen\": \"priority message\"
        },
        \"android\": {
          \"priority\": \"high\",
          \"notification\": {
            \"body_loc_args\": [\"string\"],
            \"title_loc_args\": [\"string\"],
            \"sound\": \"string\",
            \"title_loc_key\": \"string\",
            \"title\": \"string\",
            \"body\": \"string\",
            \"click_action\": \"clicky_clacky\",
            \"body_loc_key\": \"string\"
          },
          \"data\": {
            \"dataAndroid\": \"priority message\"
          },
          \"ttl\": \"10023.32s\"
        },
        \"apns\": {
          \"payload\": {
            \"aps\": {
              \"alert\": {
                \"subtitle\": \"string\",
                \"title-loc-args\": [\"string\"],
                \"title-loc-key\": \"string\",
                \"loc-args\": [\"string\"],
                \"loc-key\": \"string\",
                \"title\": \"string\",
                \"body\": \"string\"
              },
              \"category\": \"Click\",
              \"content-available\": 0,
              \"sound\": \"string\",
              \"badge\": 5
            }
          }
        },
        \"webpush\": {
          \"notification\": {
            \"badge\": \"5\",
            \"title\": \"string\",
            \"body\": \"string\"
          },
          \"data\": {
            \"dataWeb\": \"priority message\"
          }
        }
      }
    }
  }"
}
```

Saat mengirim payload JSON, pastikan untuk menyertakan `message-structure` atribut dalam permintaan Anda, dan atur ke. `json`

**Contoh CLI:**

```
aws sns publish --topic $TOPIC_ARN --message '{"GCM": "{\"fcmV1Message\": {\"message\":{\"notification\":{\"title\":\"string\",\"body\":\"string\"},\"android\":{\"priority\":\"high\",\"notification\":{\"title\":\"string\",\"body\":\"string\"},\"data\":{\"customAndroidDataKey\":\"custom key value\"},\"ttl\":\"0s\"},\"apns\":{\"payload\":{\"aps\":{\"alert\":{\"title\":\"string\", \"body\":\"string\"},\"content-available\":1,\"badge\":5}}},\"webpush\":{\"notification\":{\"badge\":\"URL\",\"body\":\"Test\"},\"data\":{\"customWebpushDataKey\":\"priority message\"}},\"data\":{\"customGeneralDataKey\":\"priority message\"}}}}", "default": "{\"notification\": {\"title\": \"test\"}"}' --region $REGION --message-structure json
```

*Untuk informasi selengkapnya tentang pengiriman payload berformat FCM v1, lihat hal berikut di dokumentasi Firebase Google:*
+ [Migrasi dari FCM APIs lama ke HTTP v1](https://firebase.google.com/docs/cloud-messaging/migrate-v1)
+ [Tentang pesan FCM](https://firebase.google.com/docs/cloud-messaging/concept-options#customizing_a_message_across_platforms)
+ [Sumber Daya REST: projects.messages](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages)

## Menggunakan struktur payload lama untuk mengirim pesan ke FCM v1 API
<a name="sns-fcm-v1-legacy-payload-structure"></a>

Saat bermigrasi ke FCM v1, Anda tidak perlu mengubah struktur payload yang Anda gunakan untuk kredensi lama Anda. Amazon SNS mengubah payload Anda menjadi struktur payload FCM v1 baru, dan mengirimkannya ke Google.

Format payload pesan masukan:

```
{
  "GCM": "{\"notification\": {\"title\": \"string\", \"body\": \"string\", \"android_channel_id\": \"string\", \"body_loc_args\": [\"string\"], \"body_loc_key\": \"string\", \"click_action\": \"string\", \"color\": \"string\", \"icon\": \"string\", \"sound\": \"string\", \"tag\": \"string\", \"title_loc_args\": [\"string\"], \"title_loc_key\": \"string\"}, \"data\": {\"message\": \"priority message\"}}"
}
```

Pesan yang dikirim ke Google:

```
{
  "message": {
    "token": "***",
    "notification": {
      "title": "string",
      "body": "string"
    },
    "android": {
      "priority": "high",
      "notification": {
        "body_loc_args": [
          "string"
        ],
        "title_loc_args": [
          "string"
        ],
        "color": "string",
        "sound": "string",
        "icon": "string",
        "tag": "string",
        "title_loc_key": "string",
        "title": "string",
        "body": "string",
        "click_action": "string",
        "channel_id": "string",
        "body_loc_key": "string"
      },
      "data": {
        "message": "priority message"
      }
    },
    "apns": {
      "payload": {
        "aps": {
          "alert": {
            "title-loc-args": [
              "string"
            ],
            "title-loc-key": "string",
            "loc-args": [
              "string"
            ],
            "loc-key": "string",
            "title": "string",
            "body": "string"
          },
          "category": "string",
          "sound": "string"
        }
      }
    },
    "webpush": {
      "notification": {
        "icon": "string",
        "tag": "string",
        "body": "string",
        "title": "string"
      },
      "data": {
        "message": "priority message"
      }
    },
    "data": {
      "message": "priority message"
    }
  }
}
```

**Potensi risiko**
+ Pemetaan lama ke v1 tidak mendukung Layanan Pemberitahuan Push Apple (APNS) `headers` atau tombol. `fcm_options` Jika Anda ingin menggunakan bidang ini, kirim payload FCM v1.
+ Dalam beberapa kasus, header pesan diperlukan oleh FCM v1 untuk mengirim notifikasi senyap ke perangkat Anda. APNs Jika saat ini Anda mengirim notifikasi senyap ke APNs perangkat Anda, mereka tidak akan berfungsi dengan pendekatan lama. Sebagai gantinya, sebaiknya gunakan payload FCM v1 untuk menghindari masalah yang tidak terduga. Untuk menemukan daftar APNs header dan tujuan penggunaannya, lihat [Berkomunikasi dengan APNs](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html) di Panduan *Pengembang Apple*.
+ Jika Anda menggunakan atribut `TTL` Amazon SNS saat mengirim notifikasi, itu hanya akan diperbarui di `android` lapangan. Jika Anda ingin menyetel atribut `TTL` APNS, gunakan payload FCM v1.
+ `webpush`Kunci`android`,`apns`, dan akan dipetakan dan diisi dengan semua kunci yang relevan yang disediakan. Misalnya, jika Anda menyediakan`title`, yang merupakan kunci yang dibagikan di antara ketiga platform, pemetaan FCM v1 akan mengisi ketiga platform dengan judul yang Anda berikan.
+ Beberapa kunci bersama di antara platform mengharapkan jenis nilai yang berbeda. Misalnya, `badge` kunci yang diteruskan untuk `apns` mengharapkan nilai integer, sedangkan `badge` kunci dilewatkan untuk `webpush` mengharapkan nilai String. Dalam kasus di mana Anda memberikan `badge` kunci, pemetaan FCM v1 hanya akan mengisi kunci yang Anda berikan nilai valid.

## Peristiwa kegagalan pengiriman FCM
<a name="sns-fcm-delivery-failure-events"></a>

Tabel berikut menyediakan jenis kegagalan Amazon SNS yang sesuai dengan kode kesalahan/status yang diterima dari Google untuk permintaan notifikasi FCM v1. Semua kode kesalahan yang diamati yang diterima dari FCM v1 API tersedia untuk Anda CloudWatch saat Anda mengatur [pencatatan status pengiriman](topics-attrib.md) untuk aplikasi Anda.


| Kode FCM error/status  | Jenis kegagalan Amazon SNS | Pesan kegagalan | Penyebab dan mitigasi | 
| --- | --- | --- | --- | 
|  `UNREGISTERED`  |  `InvalidPlatformToken`  |  Token platform yang terkait dengan titik akhir tidak valid.  |  Token perangkat yang dilampirkan ke titik akhir Anda sudah basi atau tidak valid. Amazon SNS menonaktifkan titik akhir Anda. Perbarui titik akhir Amazon SNS ke token perangkat terbaru.  | 
|  `INVALID_ARGUMENT`  |  `InvalidNotification`  |  Badan notifikasi tidak valid.  |  Token perangkat atau payload pesan mungkin tidak valid. Verifikasi bahwa payload pesan Anda valid. Jika payload pesan valid, perbarui titik akhir Amazon SNS ke token perangkat terbaru.  | 
|  `SENDER_ID_MISMATCH`  |  `InvalidPlatformToken`  |  Token platform yang terkait dengan titik akhir tidak valid.  |  Aplikasi platform yang terkait dengan token perangkat tidak memiliki izin untuk mengirim ke token perangkat. Verifikasi bahwa Anda menggunakan kredensi FCM yang benar di aplikasi platform Amazon SNS Anda.  | 
|  `UNAVAILABLE`  |  `DependencyUnavailable`  |  Ketergantungan tidak tersedia.  |  FCM tidak dapat memproses permintaan tepat waktu. Semua percobaan ulang yang dijalankan oleh Amazon SNS telah gagal. Anda dapat menyimpan pesan-pesan ini dalam antrian huruf mati (DLQ) dan mengaktifkannya kembali nanti.  | 
|  `INTERNAL`  |  `UnexpectedFailure`  |  Kegagalan tak terduga; silakan hubungi Amazon. Frasa kegagalan [Kesalahan Internal].  |  Server FCM mengalami kesalahan saat mencoba memproses permintaan Anda. Semua percobaan ulang yang dijalankan oleh Amazon SNS telah gagal. Anda dapat menyimpan pesan-pesan ini dalam antrian huruf mati (DLQ) dan mengaktifkannya kembali nanti.  | 
|  `THIRD_PARTY_AUTH_ERROR`  |  `InvalidCredentials`  |  Kredensi aplikasi platform tidak valid.  |  Pesan yang ditargetkan ke perangkat iOS atau perangkat Webpush tidak dapat dikirim. Verifikasi bahwa kredenal pengembangan dan produksi Anda valid.  | 
|  `QUOTA_EXCEEDED`  |  `Throttled`  |  Permintaan dibatasi oleh [gcm].  |  Kuota rasio pesan, kuota tarif pesan perangkat, atau kuota tarif pesan topik telah terlampaui. Untuk informasi tentang cara mengatasi masalah ini, lihat [ErrorCode](https://firebase.google.com/docs/reference/fcm/rest/v1/ErrorCode)di dokumentasi *Firebase* Google.  | 
|  `PERMISSION_DENIED`  |  `InvalidNotification`  |  Badan notifikasi tidak valid.  |  Dalam kasus `PERMISSION_DENIED` pengecualian, pemanggil (aplikasi FCM Anda) tidak memiliki izin untuk menjalankan operasi yang ditentukan dalam payload. Arahkan ke konsol FCM Anda, dan verifikasi bahwa tindakan API yang diperlukan telah diaktifkan.  | 

# Atribut aplikasi seluler Amazon SNS
<a name="sns-msg-status"></a>

Amazon Simple Notification Service (Amazon SNS) menyediakan dukungan untuk mencatat status pengiriman pesan notifikasi push. Setelah Anda mengonfigurasi atribut aplikasi, entri log akan dikirim ke CloudWatch Log untuk pesan yang dikirim dari Amazon SNS ke titik akhir seluler. Mencatat status pengiriman pesan membantu memberikan wawasan operasional yang lebih baik, seperti berikut ini: 
+ Mengetahui apakah pesan notifikasi push dikirim dari Amazon SNS ke layanan notifikasi push.
+ Mengidentifikasi respons yang dikirim dari layanan notifikasi push ke Amazon SNS.
+ Tentukan waktu tunggu pesan (waktu antara stempel waktu publikasi dan sesaat sebelum diserahkan ke layanan notifikasi push).

 Untuk mengonfigurasi atribut aplikasi untuk status pengiriman pesan, Anda dapat menggunakan Konsol Manajemen AWS, kit pengembangan AWS perangkat lunak (SDKs), atau API kueri. 

## Mengkonfigurasi atribut status pengiriman pesan menggunakan Konsol Manajemen AWS
<a name="sns-msg-console"></a>

1. Masuk ke [konsol Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Pada panel navigasi, arahkan ke **Seluler**, lalu pilih **Notifikasi push**.

1. Dari bagian **Aplikasi Platform**, pilih aplikasi yang berisi titik akhir yang Anda inginkan menerima CloudWatch Log.

1. Pilih **Tindakan Aplikasi** lalu pilih **Status Pengiriman**.

1. Pada kotak dialog **Status Pengiriman**, pilih **Buat Peran IAM**.

   Anda kemudian akan diarahkan ke konsol IAM.

1. Pilih **Izinkan** untuk memberikan akses tulis Amazon SNS untuk menggunakan CloudWatch Log atas nama Anda.

1. Sekarang, kembali ke kotak dialog **Status Pengiriman**, masukkan nomor di bidang **Persentase Sukses ke Sampel (0-100)** untuk persentase pesan yang berhasil dikirim yang ingin Anda terima CloudWatch Log.
**catatan**  
Setelah Anda mengonfigurasi atribut aplikasi untuk status pengiriman pesan, semua pengiriman pesan yang gagal menghasilkan CloudWatch Log.

1. Terakhir, pilih **Simpan Konfigurasi**. Anda sekarang akan dapat melihat dan mengurai CloudWatch Log yang berisi status pengiriman pesan. Untuk informasi selengkapnya tentang penggunaan CloudWatch, lihat [CloudWatchDokumentasi](https://aws.amazon.com/documentation/cloudwatch).

## Contoh log status CloudWatch pengiriman pesan Amazon SNS
<a name="sns-msg-examples"></a>

Setelah Anda mengonfigurasi atribut status pengiriman pesan untuk titik akhir aplikasi, CloudWatch Log akan dihasilkan. Contoh log, dalam format JSON, ditampilkan sebagai berikut:

**SUKSES**

```
{
  "status": "SUCCESS",
  "notification": {
    "timestamp": "2015-01-26 23:07:39.54",
    "messageId": "9655abe4-6ed6-5734-89f7-e6a6a42de02a"
  },
  "delivery": {
    "statusCode": 200,
    "dwellTimeMs": 65,
    "token": "Examplei7fFachkJ1xjlqT64RaBkcGHochmf1VQAr9k-IBJtKjp7fedYPzEwT_Pq3Tu0lroqro1cwWJUvgkcPPYcaXCpPWmG3Bqn-wiqIEzp5zZ7y_jsM0PKPxKhddCzx6paEsyay9Zn3D4wNUJb8m6HXrBf9dqaEw",
    "attempts": 1,
    "providerResponse": "{\"multicast_id\":5138139752481671853,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1422313659698010%d6ba8edff9fd7ecd\"}]}",
    "destination": "arn:aws:sns:us-east-2:111122223333:endpoint/FCM/FCMPushApp/c23e42de-3699-3639-84dd-65f84474629d"
  }
}
```

**KEGAGALAN**

```
{
  "status": "FAILURE",
  "notification": {
    "timestamp": "2015-01-26 23:29:35.678",
    "messageId": "c3ad79b0-8996-550a-8bfa-24f05989898f"
  },
  "delivery": {
    "statusCode": 8,
    "dwellTimeMs": 1451,
    "token": "examp1e29z6j5c4df46f80189c4c83fjcgf7f6257e98542d2jt3395kj73",
    "attempts": 1,
    "providerResponse": "NotificationErrorResponse(command=8, status=InvalidToken, id=1, cause=null)",
    "destination": "arn:aws:sns:us-east-2:111122223333:endpoint/APNS_SANDBOX/APNSPushApp/986cb8a1-4f6b-34b1-9a1b-d9e9cb553944"
  }
}
```

Untuk daftar kode respons layanan notifikasi push, lihat [Kode respons platform](#platform-returncodes).

## Mengkonfigurasi atribut status pengiriman pesan dengan AWS SDKs
<a name="sns-msg-sdk"></a>

[AWS SDKs](https://aws.amazon.com/tools/)Menyediakan APIs dalam beberapa bahasa untuk menggunakan atribut status pengiriman pesan dengan Amazon SNS. 

Contoh Java berikut menunjukkan cara menggunakan API `SetPlatformApplicationAttributes` untuk mengonfigurasi atribut aplikasi untuk status pengiriman pesan dari pesan notifikasi push. Anda dapat menggunakan atribut berikut untuk status pengiriman pesan: `SuccessFeedbackRoleArn`, `FailureFeedbackRoleArn`, dan `SuccessFeedbackSampleRate`. `FailureFeedbackRoleArn`Atribut `SuccessFeedbackRoleArn` dan digunakan untuk memberikan akses tulis Amazon SNS untuk menggunakan CloudWatch Log atas nama Anda. Atribut `SuccessFeedbackSampleRate` adalah untuk menentukan persentase tingkat sampel (0-100) dari pesan yang berhasil terkirim. Setelah Anda mengonfigurasi `FailureFeedbackRoleArn` atribut, maka semua pengiriman pesan yang gagal menghasilkan CloudWatch Log. 

```
SetPlatformApplicationAttributesRequest setPlatformApplicationAttributesRequest = new SetPlatformApplicationAttributesRequest();
Map<String, String> attributes = new HashMap<>();
attributes.put("SuccessFeedbackRoleArn", "arn:aws:iam::111122223333:role/SNS_CWlogs");
attributes.put("FailureFeedbackRoleArn", "arn:aws:iam::111122223333:role/SNS_CWlogs");
attributes.put("SuccessFeedbackSampleRate", "5");
setPlatformApplicationAttributesRequest.withAttributes(attributes);
setPlatformApplicationAttributesRequest.setPlatformApplicationArn("arn:aws:sns:us-west-2:111122223333:app/FCM/FCMPushApp");
sns.setPlatformApplicationAttributes(setPlatformApplicationAttributesRequest);
```

Untuk informasi selengkapnya tentang SDK for Java, lihat [Memulai dengan AWS SDK untuk Java](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html).

## Kode respons platform
<a name="platform-returncodes"></a>

Berikut ini adalah daftar tautan untuk kode respons layanan notifikasi push:


****  

| Layanan notifikasi push | Kode respons | 
| --- | --- | 
| Olahpesan Perangkat Amazon (ADM) | Lihat [Format Respons](https://developer.amazon.com/docs/adm/send-message.html#response-format) dalam dokumentasi ADM. | 
| Layanan Pemberitahuan Push Apple (APNs) | Lihat Respons HTTP/2 dari APNs dalam [Berkomunikasi dengan APNs](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html#/apple_ref/doc/uid/TP40008194-CH11-SW1) di Panduan Pemrograman Pemberitahuan Lokal dan Jarak Jauh. | 
| Pesan Cloud Firebase (FCM) | Lihat [Kode Respons Kesalahan Pesan Hilir](https://firebase.google.com/docs/cloud-messaging/http-server-ref#error-codes) di dokumentasi Firebase Cloud Messaging. | 
| Layanan Notifikasi Push Microsoft untuk Ponsel Windows (MPNS) | Lihat [Kode Respons Layanan Notifikasi Push untuk Ponsel Windows 8](https://msdn.microsoft.com/en-us/library/windows/apps/ff941100%28v=vs.105%29.aspx#BKMK_PushNotificationServiceResponseCodes) dalam dokumentasi Pengembangan Windows 8. | 
| Layanan Notifikasi Push Windows (WNS) | Lihat "Kode respons" di [Permintaan Layanan Notifikasi Push dan Header Respons (Aplikasi Windows Runtime)](https://msdn.microsoft.com/en-us/library/windows/apps/hh465435.aspx) di dokumentasi Pengembangan Windows 8. | 

# Pemberitahuan acara aplikasi Amazon SNS untuk aplikasi seluler
<a name="application-event-notifications"></a>

Amazon SNS menyediakan dukungan untuk memicu notifikasi saat peristiwa aplikasi tertentu terjadi. Anda kemudian dapat mengambil beberapa tindakan terprogram pada peristiwa itu. Aplikasi Anda harus menyertakan dukungan untuk layanan pemberitahuan push seperti Apple Push Notification Service (APNs), Firebase Cloud Messaging (FCM), dan Windows Push Notification Services (WNS). Anda mengatur notifikasi acara aplikasi menggunakan konsol Amazon SNS, AWS CLI, atau. AWS SDKs

## Peristiwa aplikasi yang tersedia
<a name="application-event-notifications-events"></a>

Notifikasi peristiwa aplikasi melacak kapan endpoint platform individual dibuat, dihapus, dan diperbarui, serta kegagalan pengiriman. Berikut ini adalah nama atribut untuk peristiwa aplikasi.


| Nama atribut | Pemicu notifikasi | 
| --- | --- | 
| EventEndpointCreated | Endpoint platform baru ditambahkan ke aplikasi Anda. | 
| EventEndpointDeleted | Endpoint platform apa pun yang terkait dengan aplikasi Anda akan dihapus. | 
| EventEndpointUpdated | Atribut endpoint platform apa pun yang terkait dengan aplikasi Anda diubah. | 
| EventDeliveryFailure | Pengiriman ke salah satu endpoint platform yang terkait dengan aplikasi Anda mengalami kegagalan permanen.  Untuk melacak kegagalan pengiriman di sisi aplikasi platform, berlangganan peristiwa status pengiriman pesan untuk aplikasi. Untuk informasi selengkapnya, lihat [Menggunakan Atribut Aplikasi Amazon SNS untuk Status Pengiriman Pesan](https://docs.aws.amazon.com/sns/latest/dg/sns-msg-status.html).  | 

Anda dapat mengaitkan atribut apa pun dengan aplikasi yang kemudian dapat menerima notifikasi peristiwa ini. 

## Mengirim notifikasi push seluler
<a name="application-event-notifications-howto-set"></a>

Untuk mengirim notifikasi peristiwa aplikasi, Anda menentukan topik untuk menerima notifikasi untuk setiap jenis peristiwa. Saat Amazon SNS mengirimkan notifikasi, topik dapat mengarahkannya ke endpoint yang akan mengambil tindakan terprogram.

**penting**  
Aplikasi volume tinggi akan membuat sejumlah besar notifikasi peristiwa aplikasi (misalnya, puluhan ribu), yang akan membanjiri endpoint yang dimaksudkan untuk digunakan manusia, seperti alamat email, nomor telepon, dan aplikasi seluler. Pertimbangkan panduan berikut saat Anda mengirim notifikasi peristiwa aplikasi ke suatu topik:  
Setiap topik yang menerima notifikasi hanya boleh berisi langganan untuk titik akhir terprogram, seperti titik akhir HTTP atau HTTPS, antrian Amazon SQS, atau fungsi. AWS Lambda 
Untuk mengurangi jumlah pemrosesan yang dipicu oleh notifikasi, batasi langganan setiap topik ke sejumlah kecil (misalnya, lima atau lebih sedikit).

Anda dapat mengirim pemberitahuan acara aplikasi menggunakan konsol Amazon SNS, AWS Command Line Interface (AWS CLI), atau. AWS SDKs 

### Konsol Manajemen AWS
<a name="application-event-notifications-howto-set-console"></a>

1. Masuk ke [konsol Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Pada panel navigasi, pilih **Seluler**, **Notifikasi push**.

1. Pada halaman **pemberitahuan push seluler**, di bagian **Aplikasi Platform**, pilih aplikasi lalu pilih **Edit**.

1. Perluas bagian **Notifikasi peristiwa**.

1. Pilih **Tindakan**, **Konfigurasikan peristiwa**.

1. Masukkan topik ARNs for yang akan digunakan untuk acara berikut:
   + Endpoint Dibuat
   + Endpoint Dihapus
   + Endpoint Diperbarui
   + Kegagalan Pengiriman

1. Pilih **Simpan perubahan**.

### AWS CLI
<a name="awscli"></a>

Jalankan perintah [set-platform-application-attributes](https://docs.aws.amazon.com/cli/latest/reference/sns/set-platform-application-attributes.html).

Contoh berikut menetapkan topik Amazon SNS yang sama untuk keempat peristiwa aplikasi:

```
aws sns set-platform-application-attributes
--platform-application-arn arn:aws:sns:us-east-1:12345EXAMPLE:app/FCM/MyFCMPlatformApplication
--attributes EventEndpointCreated="arn:aws:sns:us-east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents",
EventEndpointDeleted="arn:aws:sns:us-east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents",
EventEndpointUpdated="arn:aws:sns:us-east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents",
EventDeliveryFailure="arn:aws:sns:us-east-1:12345EXAMPLE:MyFCMPlatformApplicationEvents"
```

### AWS SDKs
<a name="application-event-notifications-sdk"></a>

Tetapkan notifikasi peristiwa aplikasi dengan mengirimkan `SetPlatformApplicationAttributes` permintaan dengan Amazon SNS API menggunakan SDK. AWS 

Untuk daftar lengkap panduan pengembang AWS SDK dan contoh kode, termasuk bantuan memulai dan informasi tentang versi sebelumnya, lihat[Menggunakan Amazon SNS dengan SDK AWS](sdk-general-information-section.md).

# Tindakan API push seluler
<a name="mobile-push-api"></a>

Untuk menggunakan push seluler Amazon SNS APIs, Anda harus terlebih dahulu memenuhi prasyarat untuk layanan pemberitahuan push, seperti Apple Push Notification Service (APNs) dan Firebase Cloud Messaging (FCM). Untuk informasi selengkapnya tentang prasyarat, lihat [Prasyarat untuk notifikasi pengguna Amazon SNS](sns-prerequisites-for-mobile-push-notifications.md). 

 Untuk mengirim pesan pemberitahuan push ke aplikasi seluler dan perangkat menggunakan APIs, Anda harus terlebih dahulu menggunakan `CreatePlatformApplication` tindakan, yang mengembalikan `PlatformApplicationArn` atribut. Atribut `PlatformApplicationArn` kemudian digunakan oleh `CreatePlatformEndpoint`, yang mengembalikan atribut `EndpointArn`. Anda kemudian dapat menggunakan atribut `EndpointArn` dengan tindakan `Publish` untuk mengirim pesan notifikasi ke aplikasi dan perangkat seluler, atau Anda dapat menggunakan atribut `EndpointArn` dengan tindakan `Subscribe` untuk berlangganan suatu topik. Untuk informasi selengkapnya, lihat [Menyiapkan pemberitahuan push dengan Amazon SNS](sns-mobile-application-as-subscriber.md#sns-user-notifications-process-overview).

Dorongan seluler Amazon SNS APIs adalah sebagai berikut: 

`[CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)`  
Membuat objek aplikasi platform untuk salah satu layanan pemberitahuan push yang didukung, seperti APNs dan FCM, tempat perangkat dan aplikasi seluler dapat mendaftar. Mengembalikan atribut `PlatformApplicationArn`, yang digunakan oleh tindakan `CreatePlatformEndpoint`.

`[CreatePlatformEndpoint](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html)`  
Membuat endpoint untuk perangkat dan aplikasi seluler di salah satu layanan notifikasi push yang didukung. `CreatePlatformEndpoint` menggunakan atribut `PlatformApplicationArn` yang dikembalikan dari tindakan `CreatePlatformApplication`. Atribut `EndpointArn`, yang dikembalikan saat menggunakan `CreatePlatformEndpoint`, kemudian digunakan dengan tindakan `Publish` untuk mengirim pesan notifikasi ke aplikasi dan perangkat seluler. 

`[CreateTopic](https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html)`  
Membuat topik yang pesannya dapat dipublikasikan. 

`[DeleteEndpoint](https://docs.aws.amazon.com/sns/latest/api/API_DeleteEndpoint.html)`  
Menghapus endpoint untuk perangkat dan aplikasi seluler di salah satu layanan notifikasi push yang didukung.

`[DeletePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_DeletePlatformApplication.html)`  
Menghapus objek aplikasi platform.

`[DeleteTopic](https://docs.aws.amazon.com/sns/latest/api/API_DeleteTopic.html)`  
Menghapus topik dan semua langganannya.

`[GetEndpointAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetEndpointAttributes.html)`  
Mengambil atribut endpoint untuk perangkat dan aplikasi seluler.

`[GetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_GetPlatformApplicationAttributes.html)`  
Mengambil atribut objek aplikasi platform.

`[ListEndpointsByPlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html)`  
Mencantumkan endpoint dan atribut endpoint untuk perangkat dan aplikasi seluler dalam layanan notifikasi push yang didukung.

`[ListPlatformApplications](https://docs.aws.amazon.com/sns/latest/api/API_ListPlatformApplications.html)`  
Mencantumkan objek aplikasi platform untuk layanan notifikasi push yang didukung.

`[Publish](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html)`  
Mengirim pesan notifikasi ke semua endpoint langganan topik.

`[SetEndpointAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetEndpointAttributes.html)`  
Menetapkan atribut untuk endpoint untuk perangkat dan aplikasi seluler.

`[SetPlatformApplicationAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetPlatformApplicationAttributes.html)`  
Menetapkan atribut objek aplikasi platform.

`[Subscribe](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html)`  
Bersiap untuk berlangganan endpoint dengan mengirimkan endpoint pesan konfirmasi. Untuk benar-benar membuat langganan, pemilik endpoint harus memanggil ConfirmSubscription tindakan dengan token dari pesan konfirmasi. 

`[Unsubscribe](https://docs.aws.amazon.com/sns/latest/api/API_Unsubscribe.html)`  
Menghapus langganan.

# Kesalahan API push seluler Amazon SNS yang umum
<a name="mobile-push-api-error"></a>

Kesalahan yang dikembalikan oleh Amazon SNS APIs untuk push seluler tercantum dalam tabel berikut. Untuk informasi selengkapnya tentang Amazon SNS APIs untuk push seluler, lihat. [Tindakan API push seluler](mobile-push-api.md)


| Kesalahan | Deskripsi | Kode status HTTPS | Tindakan API | 
| --- | --- | --- | --- | 
| Nama Aplikasi adalah string null | Nama aplikasi yang diperlukan diatur ke null. | 400 | `CreatePlatformApplication` | 
| Nama Platform adalah string null | Nama platform yang diperlukan diatur ke null. | 400 | `CreatePlatformApplication` | 
| Nama Platform tidak valid |  out-of-rangeNilai atau tidak valid diberikan untuk nama platform. | 400 | `CreatePlatformApplication` | 
| APNs — Principal bukan sertifikat yang valid | Sertifikat yang tidak valid diberikan untuk APNs kepala sekolah, yang merupakan sertifikat SSL. Untuk informasi selengkapnya, lihat [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)di Referensi API Layanan Pemberitahuan Sederhana Amazon. | 400 | `CreatePlatformApplication` | 
| APNs — Principal adalah sertifikat yang valid tetapi tidak dalam format.pem | Sertifikat valid yang tidak dalam format.pem disediakan untuk APNs prinsipal, yaitu sertifikat SSL. | 400 | `CreatePlatformApplication` | 
| APNs — Principal adalah sertifikat yang kedaluwarsa | Sertifikat kedaluwarsa diberikan untuk kepala APNs sekolah, yang merupakan sertifikat SSL. | 400 | `CreatePlatformApplication` | 
| APNs — Principal bukan sertifikat yang dikeluarkan Apple | Sertifikat yang dikeluarkan non-Apple diberikan untuk APNs kepala sekolah, yang merupakan sertifikat SSL. | 400 | `CreatePlatformApplication` | 
| APNs — Prinsipal tidak disediakan |  APNs Prinsipal, yang merupakan sertifikat SSL, tidak disediakan. | 400 | `CreatePlatformApplication` | 
| APNs — Kredensi tidak disediakan |  APNs Kredensi, yang merupakan kunci pribadi, tidak disediakan. Untuk informasi selengkapnya, lihat [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)di Referensi API Layanan Pemberitahuan Sederhana Amazon. | 400 | `CreatePlatformApplication` | 
| APNs — Kredensi tidak dalam format.pem yang valid |  APNs Kredensialnya, yang merupakan kunci pribadi, tidak dalam format.pem yang valid. | 400 | `CreatePlatformApplication` | 
| FCM — server APIKey tidak disediakan | Kredensial FCM, yang merupakan kunci API, tidak disediakan. Untuk informasi selengkapnya, lihat [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)di Referensi API Layanan Pemberitahuan Sederhana Amazon. | 400 | `CreatePlatformApplication` | 
| FCM — server APIKey kosong | Kredensial FCM, yang merupakan kunci API, kosong. | 400 | `CreatePlatformApplication` | 
| FCM — server APIKey adalah string null | Kredensial FCM, yang merupakan kunci API, adalah null. | 400 | `CreatePlatformApplication` | 
| FCM — server APIKey tidak valid | Kredensial FCM, yang merupakan kunci API, tidak valid. | 400 | `CreatePlatformApplication` | 
| ADM — clientsecret tidak disediakan | Rahasia klien yang diperlukan tidak disediakan. | 400 | `CreatePlatformApplication` | 
| ADM — clientsecret adalah string null | String yang diperlukan untuk rahasia klien adalah null. | 400 | `CreatePlatformApplication` | 
| ADM — client\$1secret adalah string kosong | String yang diperlukan untuk rahasia klien kosong. | 400 | `CreatePlatformApplication` | 
| ADM — client\$1secret tidak valid | String yang diperlukan untuk rahasia klien tidak valid. | 400 | `CreatePlatformApplication` | 
| ADM — client\$1id adalah string kosong | String yang diperlukan untuk ID klien kosong. | 400 | `CreatePlatformApplication` | 
| ADM — clientId tidak disediakan | String yang diperlukan untuk ID klien tidak disediakan. | 400 | `CreatePlatformApplication` | 
| ADM — clientid adalah string null | String yang diperlukan untuk ID klien adalah null. | 400 | `CreatePlatformApplication` | 
| ADM — client\$1id tidak valid | String yang diperlukan untuk ID klien tidak valid. | 400 | `CreatePlatformApplication` | 
| EventEndpointCreated memiliki format ARN yang tidak valid | EventEndpointCreated memiliki format ARN yang tidak valid. | 400 | `CreatePlatformApplication` | 
| EventEndpointDeleted memiliki format ARN yang tidak valid | EventEndpointDeleted memiliki format ARN yang tidak valid. | 400 | `CreatePlatformApplication` | 
| EventEndpointUpdated memiliki format ARN yang tidak valid | EventEndpointUpdated memiliki format ARN yang tidak valid. | 400 | `CreatePlatformApplication` | 
| EventDeliveryAttemptFailure memiliki format ARN yang tidak valid | EventDeliveryAttemptFailure memiliki format ARN yang tidak valid. | 400 | `CreatePlatformApplication` | 
| EventDeliveryFailure memiliki format ARN yang tidak valid | EventDeliveryFailure memiliki format ARN yang tidak valid. | 400 | `CreatePlatformApplication` | 
| EventEndpointCreated bukan Topik yang ada | EventEndpointCreated bukan topik yang ada. | 400 | `CreatePlatformApplication` | 
| EventEndpointDeleted bukan Topik yang ada | EventEndpointDeleted bukan topik yang ada. | 400 | `CreatePlatformApplication` | 
| EventEndpointUpdated bukan Topik yang ada | EventEndpointUpdated bukan topik yang ada. | 400 | `CreatePlatformApplication` | 
| EventDeliveryAttemptFailure bukan Topik yang ada | EventDeliveryAttemptFailure bukan topik yang ada. | 400 | `CreatePlatformApplication` | 
| EventDeliveryFailure bukan Topik yang ada | EventDeliveryFailure bukan topik yang ada. | 400 | `CreatePlatformApplication` | 
| ARN platform tidak valid | ARN platform tidak valid. | 400 | `SetPlatformAttributes` | 
| ARN platform valid tetapi bukan milik pengguna | ARN platform valid tetapi bukan milik pengguna. | 400 | `SetPlatformAttributes` | 
| APNs — Principal bukan sertifikat yang valid | Sertifikat yang tidak valid diberikan untuk APNs kepala sekolah, yang merupakan sertifikat SSL. Untuk informasi selengkapnya, lihat [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)di Referensi API Layanan Pemberitahuan Sederhana Amazon. | 400 | `SetPlatformAttributes` | 
| APNs — Principal adalah sertifikat yang valid tetapi tidak dalam format.pem | Sertifikat valid yang tidak dalam format.pem disediakan untuk APNs prinsipal, yaitu sertifikat SSL. | 400 | `SetPlatformAttributes` | 
| APNs — Principal adalah sertifikat yang kedaluwarsa | Sertifikat kedaluwarsa diberikan untuk kepala APNs sekolah, yang merupakan sertifikat SSL. | 400 | `SetPlatformAttributes` | 
| APNs — Principal bukan sertifikat yang dikeluarkan Apple | Sertifikat yang dikeluarkan non-Apple diberikan untuk APNs kepala sekolah, yang merupakan sertifikat SSL. | 400 | `SetPlatformAttributes` | 
| APNs — Prinsipal tidak disediakan |  APNs Prinsipal, yang merupakan sertifikat SSL, tidak disediakan. | 400 | `SetPlatformAttributes` | 
| APNs — Kredensi tidak disediakan |  APNs Kredensi, yang merupakan kunci pribadi, tidak disediakan. Untuk informasi selengkapnya, lihat [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)di Referensi API Layanan Pemberitahuan Sederhana Amazon. | 400 | `SetPlatformAttributes` | 
| APNs — Kredensi tidak dalam format.pem yang valid |  APNs Kredensialnya, yang merupakan kunci pribadi, tidak dalam format.pem yang valid. | 400 | `SetPlatformAttributes` | 
| FCM — server APIKey tidak disediakan | Kredensial FCM, yang merupakan kunci API, tidak disediakan. Untuk informasi selengkapnya, lihat [CreatePlatformApplication](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformApplication.html)di Referensi API Layanan Pemberitahuan Sederhana Amazon. | 400 | `SetPlatformAttributes` | 
| FCM — server APIKey adalah string null | Kredensial FCM, yang merupakan kunci API, adalah null. | 400 | `SetPlatformAttributes` | 
| ADM — clientId tidak disediakan | String yang diperlukan untuk ID klien tidak disediakan. | 400 | `SetPlatformAttributes` | 
| ADM — clientid adalah string null | String yang diperlukan untuk ID klien adalah null. | 400 | `SetPlatformAttributes` | 
| ADM — clientsecret tidak disediakan | Rahasia klien yang diperlukan tidak disediakan. | 400 | `SetPlatformAttributes` | 
| ADM — clientsecret adalah string null | String yang diperlukan untuk rahasia klien adalah null. | 400 | `SetPlatformAttributes` | 
| EventEndpointUpdated memiliki format ARN yang tidak valid | EventEndpointUpdated memiliki format ARN yang tidak valid. | 400 | `SetPlatformAttributes` | 
| EventEndpointDeleted memiliki format ARN yang tidak valid | EventEndpointDeleted memiliki format ARN yang tidak valid. | 400 | `SetPlatformAttributes` | 
| EventEndpointUpdated memiliki format ARN yang tidak valid | EventEndpointUpdated memiliki format ARN yang tidak valid. | 400 | `SetPlatformAttributes` | 
| EventDeliveryAttemptFailure memiliki format ARN yang tidak valid | EventDeliveryAttemptFailure memiliki format ARN yang tidak valid. | 400 | `SetPlatformAttributes` | 
| EventDeliveryFailure memiliki format ARN yang tidak valid | EventDeliveryFailure memiliki format ARN yang tidak valid. | 400 | `SetPlatformAttributes` | 
| EventEndpointCreated bukan Topik yang ada | EventEndpointCreated bukan topik yang ada. | 400 | `SetPlatformAttributes` | 
| EventEndpointDeleted bukan Topik yang ada | EventEndpointDeleted bukan topik yang ada. | 400 | `SetPlatformAttributes` | 
| EventEndpointUpdated bukan Topik yang ada | EventEndpointUpdated bukan topik yang ada. | 400 | `SetPlatformAttributes` | 
| EventDeliveryAttemptFailure bukan Topik yang ada | EventDeliveryAttemptFailure bukan topik yang ada. | 400 | `SetPlatformAttributes` | 
| EventDeliveryFailure bukan Topik yang ada | EventDeliveryFailure bukan topik yang ada. | 400 | `SetPlatformAttributes` | 
| ARN platform tidak valid | ARN platform tidak valid. | 400 | `GetPlatformApplicationAttributes` | 
| ARN platform valid tetapi bukan milik pengguna | ARN platform valid tetapi bukan milik pengguna. | 403 | `GetPlatformApplicationAttributes` | 
| Token yang ditentukan tidak valid | Token yang ditentukan tidak valid. | 400 | `ListPlatformApplications` | 
| ARN platform tidak valid | ARN platform tidak valid. | 400 | `ListEndpointsByPlatformApplication` | 
| ARN platform valid tetapi bukan milik pengguna | ARN platform valid tetapi bukan milik pengguna. | 404 | `ListEndpointsByPlatformApplication` | 
| Token yang ditentukan tidak valid | Token yang ditentukan tidak valid. | 400 | `ListEndpointsByPlatformApplication` | 
| ARN platform tidak valid | ARN platform tidak valid. | 400 | `DeletePlatformApplication` | 
| ARN platform valid tetapi bukan milik pengguna | ARN platform valid tetapi bukan milik pengguna. | 403 | `DeletePlatformApplication` | 
| ARN platform tidak valid | ARN platform tidak valid. | 400 | `CreatePlatformEndpoint` | 
| ARN platform valid tetapi bukan milik pengguna | ARN platform valid tetapi bukan milik pengguna. | 404 | `CreatePlatformEndpoint` | 
| Token tidak ditentukan | Token tidak ditentukan. | 400 | `CreatePlatformEndpoint` | 
| Token tidak memiliki panjang yang benar | Token tidak memiliki panjang yang benar. | 400 | `CreatePlatformEndpoint` | 
| Data Pengguna Pelanggan terlalu besar | Panjang data pengguna pelanggan tidak boleh lebih dari 2048 byte dalam pengkodean UTF-8. | 400 | `CreatePlatformEndpoint` | 
| ARN endpoint tidak valid | ARN endpoint tidak valid. | 400 | `DeleteEndpoint` | 
| ARN endpoint valid tetapi bukan milik pengguna | ARN endpoint valid tetapi bukan milik pengguna. | 403 | `DeleteEndpoint` | 
| ARN endpoint tidak valid | ARN endpoint tidak valid. | 400 | `SetEndpointAttributes` | 
| ARN endpoint valid tetapi bukan milik pengguna | ARN endpoint valid tetapi bukan milik pengguna. | 403 | `SetEndpointAttributes` | 
| Token tidak ditentukan | Token tidak ditentukan. | 400 | `SetEndpointAttributes` | 
| Token tidak memiliki panjang yang benar | Token tidak memiliki panjang yang benar. | 400 | `SetEndpointAttributes` | 
| Data Pengguna Pelanggan terlalu besar | Panjang data pengguna pelanggan tidak boleh lebih dari 2048 byte dalam pengkodean UTF-8. | 400 | `SetEndpointAttributes` | 
| ARN endpoint tidak valid | ARN endpoint tidak valid. | 400 | `GetEndpointAttributes` | 
| ARN endpoint valid tetapi bukan milik pengguna | ARN endpoint valid tetapi bukan milik pengguna. | 403 | `GetEndpointAttributes` | 
| ARN target tidak valid | ARN target tidak valid. | 400 | `Publish` | 
| ARN target valid tetapi bukan milik pengguna | ARN target valid tetapi bukan milik pengguna. | 403 | `Publish` | 
| Format pesan tidak valid | Format pesan tidak valid. | 400 | `Publish` | 
| Ukuran pesan lebih besar daripada yang didukung oleh protokol/layanan akhir | Ukuran pesan lebih besar daripada yang didukung oleh protokol/layanan akhir. | 400 | `Publish` | 

# Menggunakan waktu Amazon SNS untuk atribut pesan langsung untuk notifikasi push seluler
<a name="sns-ttl"></a>

Amazon Simple Notification Service (Amazon SNS) menyediakan dukungan untuk menyetel atribut pesan *Time To Live (TTL)* untuk pesan notifikasi push seluler. Ini merupakan tambahan dari kemampuan yang ada untuk menyetel TTL dalam badan pesan Amazon SNS untuk layanan notifikasi push seluler yang mendukung hal ini, seperti Amazon Device Messaging (ADM) dan Firebase Cloud Messaging (FCM) saat mengirim ke Android.

Atribut pesan TTL digunakan untuk menentukan metadata kedaluwarsa tentang pesan. Ini memungkinkan Anda menentukan jumlah waktu yang dimiliki layanan pemberitahuan push, seperti Apple Push Notification Service (APNs) atau FCM, untuk mengirimkan pesan ke titik akhir. Jika karena alasan tertentu (seperti perangkat seluler telah dimatikan) pesan tidak terkirim dalam TTL yang ditentukan, maka pesan akan dihapus dan tidak ada upaya pengiriman lebih lanjut yang akan dilakukan. Untuk menentukan TTL dalam atribut pesan, Anda dapat menggunakan Konsol Manajemen AWS, kit pengembangan AWS perangkat lunak (SDKs), atau API kueri. 

## Atribut pesan TTL untuk layanan notifikasi push
<a name="sns-ttl-msg-attrib"></a>

Berikut ini adalah daftar atribut pesan TTL untuk layanan pemberitahuan push yang dapat Anda gunakan untuk mengatur saat menggunakan API AWS SDKs atau kueri:


****  

| Layanan notifikasi push | Atribut pesan TTL | 
| --- | --- | 
| Olahpesan Perangkat Amazon (ADM) | AWS.SNS.MOBILE.ADM.TTL | 
| Layanan Pemberitahuan Push Apple (APNs) | AWS.SNS.MOBILE.APNS.TTL | 
| Kotak Pasir Layanan Pemberitahuan Push Apple (APNs\$1SANDBOX) | AWS.SNS.MOBILE.APNS\$1SANDBOX.TTL | 
| Baidu Cloud Push (Baidu) | AWS.SNS.MOBILE.BAIDU.TTL | 
| Firebase Cloud Messaging (FCM saat mengirim ke Android) | AWS.SNS.MOBILE.FCM.TTL | 
| Layanan Notifikasi Push Windows (WNS) | AWS.SNS.MOBILE.WNS.TTL | 

Setiap layanan notifikasi push menangani TTL secara berbeda. Amazon SNS memberikan tampilan abstrak TTL di semua layanan notifikasi push, yang memudahkan untuk menentukan TTL. Saat Anda menggunakan Konsol Manajemen AWS untuk menentukan TTL (dalam detik), Anda hanya perlu memasukkan nilai TTL sekali dan Amazon SNS kemudian akan menghitung TTL untuk setiap layanan pemberitahuan push yang dipilih saat menerbitkan pesan. 

 TTL relatif terhadap waktu publikasi. Sebelum menyerahkan pesan notifikasi push ke layanan notifikasi push tertentu, Amazon SNS menghitung waktu diam (waktu antara stempel waktu publikasi dan sesaat sebelum menyerahkan ke layanan notifikasi push) untuk notifikasi push dan meneruskan TTL yang tersisa ke spesifik layanan notifikasi push. Jika TTL lebih pendek dari waktu diam, Amazon SNS tidak akan mencoba untuk memublikasikan. 

Jika Anda menentukan TTL untuk pesan notifikasi push, maka nilai TTL harus berupa bilangan bulat positif, kecuali nilai `0` memiliki arti khusus untuk layanan notifikasi push—seperti with APNs dan FCM (saat mengirim ke Android). Jika nilai TTL diatur ke `0` dan layanan notifikasi push tidak memiliki arti khusus untuk `0`, maka Amazon SNS akan menghapus pesan tersebut. Untuk informasi selengkapnya tentang parameter TTL yang disetel ke `0` saat menggunakan APNs, lihat *Tabel A-3 Pengidentifikasi item untuk pemberitahuan jarak jauh dalam dokumentasi API* [Penyedia Biner](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/BinaryProviderAPI.html).

## Urutan prioritas untuk menentukan TTL
<a name="sns-ttl-precedence"></a>

Prioritas yang digunakan Amazon SNS untuk menentukan TTL untuk pesan notifikasi push didasarkan pada urutan berikut, di mana angka terendah memiliki prioritas tertinggi: 

1. TTL atribut pesan

1. TTL isi pesan

1. TTL default layanan notifikasi push (bervariasi per layanan)

1. TTL default Amazon SNS (4 minggu)

Jika Anda menetapkan nilai TTL yang berbeda (satu di atribut pesan dan lainnya di isi pesan) untuk pesan yang sama, maka Amazon SNS akan memodifikasi TTL di isi pesan agar sesuai dengan TTL yang ditentukan dalam atribut pesan.

## Menentukan TTL menggunakan Konsol Manajemen AWS
<a name="sns-ttl-console"></a>

1. Masuk ke [konsol Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Pada panel navigasi, pilih **Seluler**, **Notifikasi push**.

1. Pada halaman **Notifikasi push seluler**, di bagian **Aplikasi platform**, pilih aplikasi.

1. Pada ***MyApplication*** halaman, di bagian **Endpoints, pilih endpoint** aplikasi dan kemudian pilih **Publish** message.

1. Di bagian **Detail pesan**, masukkan TTL (jumlah detik yang dimiliki layanan notifikasi push untuk mengirimkan pesan ke endpoint).

1. Pilih **Publish message** (Publikasikan pesan).

# Aplikasi seluler Amazon SNS yang didukung Wilayah
<a name="sns-mobile-push-supported-regions"></a>

Saat ini, Anda dapat membuat aplikasi seluler di Wilayah berikut:
+ AS Timur (Ohio)
+ AS Timur (Virginia Utara)
+ AS Barat (California Utara)
+ AS Barat (Oregon)
+ Afrika (Cape Town)
+ Asia Pasifik (Hong Kong)
+ Asia Pasifik (Jakarta)
+ Asia Pasifik (Mumbai)
+ Asia Pasifik (Osaka)
+ Asia Pasifik (Seoul)
+ Asia Pasifik (Singapura)
+ Asia Pasifik (Sydney)
+ Asia Pasifik (Tokyo)
+ Kanada (Pusat)
+ Eropa (Frankfurt)
+ Eropa (Irlandia)
+ Eropa (London)
+ Europe (Milan)
+ Eropa (Spanyol)
+ Eropa (Paris)
+ Eropa (Stockholm)
+ Timur Tengah (Bahrain)
+ Timur Tengah (UEA)
+ Amerika Selatan (Sao Paulo)
+ AWS GovCloud (AS-Barat)

# Praktik terbaik untuk mengelola notifikasi push seluler Amazon SNS
<a name="mobile-push-notifications-best-practices"></a>

Bagian ini menjelaskan praktik terbaik yang dapat membantu Anda meningkatkan keterlibatan pelanggan Anda.

## Manajemen titik akhir
<a name="channels-sms-best-practices-endpoint-management"></a>

Masalah pengiriman mungkin terjadi jika token perangkat berubah karena tindakan pengguna pada perangkat (misalnya, aplikasi diinstal ulang pada perangkat), atau [pembaruan sertifikat](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_certificate-based_connection_to_apns) yang memengaruhi perangkat yang berjalan pada versi iOS tertentu. Ini adalah praktik terbaik yang disarankan oleh Apple untuk [mendaftar](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/HandlingRemoteNotifications.html#:~:text=Registering%20to%20Receive%20Remote%20Notifications) APNs setiap kali aplikasi Anda diluncurkan.

Karena token perangkat tidak akan berubah setiap kali aplikasi dibuka oleh pengguna, [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html)API idempoten dapat digunakan. Namun, ini dapat memperkenalkan duplikat untuk perangkat yang sama dalam kasus di mana token itu sendiri tidak valid, atau jika titik akhir valid tetapi dinonaktifkan (misalnya, ketidakcocokan lingkungan produksi dan kotak pasir).

Mekanisme manajemen token perangkat seperti yang ada di [kode semu](mobile-platform-endpoint.md#mobile-platform-endpoint-pseudo-code) dapat digunakan.

Untuk informasi tentang mengelola dan memelihara token perangkat FCM v1, lihat. [Manajemen Amazon SNS untuk titik akhir Firebase Cloud Messaging](sns-fcm-endpoint-management.md)

## Pencatatan status pengiriman
<a name="channels-sms-best-practices-delivery-logging"></a>

Untuk memantau status pengiriman pemberitahuan push, kami sarankan Anda mengaktifkan pencatatan status pengiriman untuk aplikasi platform Amazon SNS Anda. Ini membantu Anda memecahkan masalah kegagalan pengiriman karena log berisi [kode respons](sns-msg-status.md#platform-returncodes) penyedia yang dikembalikan dari layanan platform push. Untuk detail tentang mengaktifkan pencatatan status pengiriman, lihat [Bagaimana cara mengakses log pengiriman topik Amazon SNS untuk](https://aws.amazon.com/premiumsupport/knowledge-center/troubleshoot-failed-sns-deliveries/) pemberitahuan push? .

## Notifikasi peristiwa
<a name="channels-sms-best-practices-event-notifications"></a>

Untuk mengelola titik akhir dengan cara yang didorong oleh acara, Anda dapat menggunakan fungsionalitas [pemberitahuan acara](application-event-notifications.md#application-event-notifications-sdk). Hal ini memungkinkan topik Amazon SNS yang dikonfigurasi untuk mengobarkan peristiwa ke pelanggan seperti fungsi Lambda, untuk peristiwa aplikasi platform pembuatan titik akhir, penghapusan, pembaruan, dan kegagalan pengiriman.

# Penyiapan dan pengelolaan langganan email Amazon SNS
<a name="sns-email-notifications"></a>

Anda dapat berlangganan [alamat email](#sns-email-notifications) ke topik Amazon SNS menggunakan Konsol Manajemen AWS, AWS SDK untuk Java, atau. AWS SDK untuk .NET

**Catatan**  
Kustomisasi badan pesan email tidak didukung. Fitur pengiriman email ditujukan untuk memberikan pemberitahuan sistem internal, bukan pesan pemasaran.
Titik akhir email berlangganan langsung hanya didukung untuk topik standar.
Throughput pengiriman email dibatasi. Untuk informasi selengkapnya, lihat [kuota Amazon SNS](https://docs.aws.amazon.com/general/latest/gr/sns.html#limits_sns).

**penting**  
Untuk mencegah penerima milis berhenti berlangganan semua penerima dari email topik Amazon SNS, [lihat Menyiapkan langganan email yang memerlukan autentikasi untuk berhenti berlangganan dari Support](https://aws.amazon.com/premiumsupport/knowledge-center/prevent-unsubscribe-all-sns-topic/). AWS 
Melebihi batas 10 pesan per detik (TPS) untuk email atau titik akhir email-json akan memicu penangguhan langganan secara otomatis, menempatkannya dalam status konfirmasi yang tertunda. Langganan tetap dalam PendingConfirmation status selama 30 hari, setelah itu akan dihapus secara otomatis kecuali tindakan diambil.
Jika alamat email berlangganan menghasilkan pantulan, alamat tersebut ditekan dari pengiriman lebih lanjut selama 7 hari. Pantulan dapat terjadi karena berbagai alasan, termasuk alamat yang tidak valid atau masalah dengan server email penerima. Untuk menghapus alamat dari daftar penindasan sebelum periode 7 hari berakhir, selesaikan masalah mendasar dengan alamat email, lalu hubungi menggunakan Pusat AWS Dukungan.

## Berlangganan alamat email ke topik Amazon SNS menggunakan Konsol Manajemen AWS
<a name="create-subscribe-endpoint-to-topic-console"></a>

1. Masuk ke [konsol Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Di panel navigasi kiri, pilih **Subscriptions (Langganan)**.

1. Di halaman **Subscriptions (Langganan)**, pilih **Create subscription (Buat langganan)**.

1. Di halaman **Create subscription (Buat langganan)**, di bagian **Details (Detail)**, lakukan:

   1. Untuk **Topik ARN**, pilih Amazon Resource Name (ARN) dari sebuah topik.

   1. Untuk **Protokol**, pilih **Email**.

   1. Untuk **Titik Akhir**, masukkan email address (alamat email).

   1. (Opsional) Untuk mengkonfigurasi kebijakan filter, perluas bagian **Subscription filter policy (Kebijakan filter berlangganan)**. Untuk informasi selengkapnya, lihat [Kebijakan filter langganan Amazon SNS](sns-subscription-filter-policies.md).

   1. (Opsional) Untuk mengaktifkan pemfilteran berbasis muatan, konfigurasikan ke. `Filter Policy Scope` `MessageBody` Untuk informasi selengkapnya, lihat [Cakupan kebijakan filter langganan Amazon SNS](sns-message-filtering-scope.md).

   1. (Opsional) Untuk mengonfigurasi antrean surat mati untuk berlanggana, perluas bagian **Redrive policy (dead-letter queue) (Kebijakan redrive (antrean surat mati))**. Untuk informasi selengkapnya, lihat [Antrian surat mati Amazon SNS](sns-dead-letter-queues.md).

   1. Pilih **Create subscription (Buat langganan)**.

      Konsol membuat langganan dan membuka halaman **Rincian**.

Anda harus mengonfirmasi berlangganan sebelum alamat email dapat mulai menerima pesan.

**Untuk mengkonfirmasi berlangganan**

1. Periksa kotak masuk email Anda dan pilih **Confirm subscription (Konfirmasi berlangganan)** di email dari Amazon SNS.

1. Amazon SNS membuka browser web Anda dan menampilkan konfirmasi berlangganan beserta ID langganan Anda.

## Berlangganan alamat email ke topik Amazon SNS menggunakan SDK AWS
<a name="subscribe-email-to-topic-aws-sdks"></a>

Untuk menggunakan AWS SDK, Anda harus mengonfigurasinya dengan kredensi Anda. Untuk informasi selengkapnya, lihat [File konfigurasi dan kredensial bersama](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html) di Panduan Referensi *Alat AWS SDKs dan Alat*.

Contoh kode berikut menunjukkan cara menggunakan`Subscribe`.

------
#### [ .NET ]

**SDK untuk .NET**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/dotnetv3/SNS#code-examples). 
Berlangganan alamat email ke suatu topik.  

```
        /// <summary>
        /// Creates a new subscription to a topic.
        /// </summary>
        /// <param name="client">The initialized Amazon SNS client object, used
        /// to create an Amazon SNS subscription.</param>
        /// <param name="topicArn">The ARN of the topic to subscribe to.</param>
        /// <returns>A SubscribeResponse object which includes the subscription
        /// ARN for the new subscription.</returns>
        public static async Task<SubscribeResponse> TopicSubscribeAsync(
            IAmazonSimpleNotificationService client,
            string topicArn)
        {
            SubscribeRequest request = new SubscribeRequest()
            {
                TopicArn = topicArn,
                ReturnSubscriptionArn = true,
                Protocol = "email",
                Endpoint = "recipient@example.com",
            };

            var response = await client.SubscribeAsync(request);

            return response;
        }
```
Berlangganan antrian ke topik dengan filter opsional.  

```
    /// <summary>
    /// Subscribe a queue to a topic with optional filters.
    /// </summary>
    /// <param name="topicArn">The ARN of the topic.</param>
    /// <param name="useFifoTopic">The optional filtering policy for the subscription.</param>
    /// <param name="queueArn">The ARN of the queue.</param>
    /// <returns>The ARN of the new subscription.</returns>
    public async Task<string> SubscribeTopicWithFilter(string topicArn, string? filterPolicy, string queueArn)
    {
        var subscribeRequest = new SubscribeRequest()
        {
            TopicArn = topicArn,
            Protocol = "sqs",
            Endpoint = queueArn
        };

        if (!string.IsNullOrEmpty(filterPolicy))
        {
            subscribeRequest.Attributes = new Dictionary<string, string> { { "FilterPolicy", filterPolicy } };
        }

        var subscribeResponse = await _amazonSNSClient.SubscribeAsync(subscribeRequest);
        return subscribeResponse.SubscriptionArn;
    }
```
+  Untuk detail API, lihat [Berlangganan](https://docs.aws.amazon.com/goto/DotNetSDKV3/sns-2010-03-31/Subscribe) di *Referensi AWS SDK untuk .NET API*. 

------
#### [ C\$1\$1 ]

**SDK untuk C\$1\$1**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sns#code-examples). 
Berlangganan alamat email ke suatu topik.  

```
//! Subscribe to an Amazon Simple Notification Service (Amazon SNS) topic with delivery to an email address.
/*!
  \param topicARN: An SNS topic Amazon Resource Name (ARN).
  \param emailAddress: An email address.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool AwsDoc::SNS::subscribeEmail(const Aws::String &topicARN,
                                 const Aws::String &emailAddress,
                                 const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::SNS::SNSClient snsClient(clientConfiguration);

    Aws::SNS::Model::SubscribeRequest request;
    request.SetTopicArn(topicARN);
    request.SetProtocol("email");
    request.SetEndpoint(emailAddress);

    const Aws::SNS::Model::SubscribeOutcome outcome = snsClient.Subscribe(request);

    if (outcome.IsSuccess()) {
        std::cout << "Subscribed successfully." << std::endl;
        std::cout << "Subscription ARN '" << outcome.GetResult().GetSubscriptionArn()
                  << "'." << std::endl;
    }
    else {
        std::cerr << "Error while subscribing " << outcome.GetError().GetMessage()
                  << std::endl;
    }

    return outcome.IsSuccess();
}
```
Berlangganan aplikasi seluler ke suatu topik.  

```
//! Subscribe to an Amazon Simple Notification Service (Amazon SNS) topic with delivery to a mobile app.
/*!
  \param topicARN: The Amazon Resource Name (ARN) for an Amazon SNS topic.
  \param endpointARN: The ARN for a mobile app or device endpoint.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool
AwsDoc::SNS::subscribeApp(const Aws::String &topicARN,
                          const Aws::String &endpointARN,
                          const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::SNS::SNSClient snsClient(clientConfiguration);

    Aws::SNS::Model::SubscribeRequest request;
    request.SetTopicArn(topicARN);
    request.SetProtocol("application");
    request.SetEndpoint(endpointARN);

    const Aws::SNS::Model::SubscribeOutcome outcome = snsClient.Subscribe(request);

    if (outcome.IsSuccess()) {
        std::cout << "Subscribed successfully." << std::endl;
        std::cout << "Subscription ARN '" << outcome.GetResult().GetSubscriptionArn()
                  << "'." << std::endl;
    }
    else {
        std::cerr << "Error while subscribing " << outcome.GetError().GetMessage()
                  << std::endl;
    }

    return outcome.IsSuccess();
}
```
Berlangganan fungsi Lambda ke suatu topik.  

```
//! Subscribe to an Amazon Simple Notification Service (Amazon SNS) topic with delivery to an AWS Lambda function.
/*!
  \param topicARN: The Amazon Resource Name (ARN) for an Amazon SNS topic.
  \param lambdaFunctionARN: The ARN for an AWS Lambda function.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool AwsDoc::SNS::subscribeLambda(const Aws::String &topicARN,
                                  const Aws::String &lambdaFunctionARN,
                                  const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::SNS::SNSClient snsClient(clientConfiguration);

    Aws::SNS::Model::SubscribeRequest request;
    request.SetTopicArn(topicARN);
    request.SetProtocol("lambda");
    request.SetEndpoint(lambdaFunctionARN);

    const Aws::SNS::Model::SubscribeOutcome outcome = snsClient.Subscribe(request);

    if (outcome.IsSuccess()) {
        std::cout << "Subscribed successfully." << std::endl;
        std::cout << "Subscription ARN '" << outcome.GetResult().GetSubscriptionArn()
                  << "'." << std::endl;
    }
    else {
        std::cerr << "Error while subscribing " << outcome.GetError().GetMessage()
                  << std::endl;
    }

    return outcome.IsSuccess();
}
```
Berlangganan antrian SQS ke suatu topik.  

```
        Aws::Client::ClientConfiguration clientConfig;
        // Optional: Set to the AWS Region (overrides config file).
        // clientConfig.region = "us-east-1";

    Aws::SNS::SNSClient snsClient(clientConfiguration);

            Aws::SNS::Model::SubscribeRequest request;
            request.SetTopicArn(topicARN);
            request.SetProtocol("sqs");
            request.SetEndpoint(queueARN);

            Aws::SNS::Model::SubscribeOutcome outcome = snsClient.Subscribe(request);

            if (outcome.IsSuccess()) {
                Aws::String subscriptionARN = outcome.GetResult().GetSubscriptionArn();
                std::cout << "The queue '" << queueName
                          << "' has been subscribed to the topic '"
                          << "'" << topicName << "'" << std::endl;
                std::cout << "with the subscription ARN '" << subscriptionARN << "."
                          << std::endl;
                subscriptionARNS.push_back(subscriptionARN);
            }
            else {
                std::cerr << "Error with TopicsAndQueues::Subscribe. "
                          << outcome.GetError().GetMessage()
                          << std::endl;

                cleanUp(topicARN,
                        queueURLS,
                        subscriptionARNS,
                        snsClient,
                        sqsClient);

                return false;
            }
```
Berlangganan dengan filter ke topik.  

```
        static const Aws::String TONE_ATTRIBUTE("tone");
        static const Aws::Vector<Aws::String> TONES = {"cheerful", "funny", "serious",
                                                       "sincere"};

        Aws::Client::ClientConfiguration clientConfig;
        // Optional: Set to the AWS Region (overrides config file).
        // clientConfig.region = "us-east-1";

    Aws::SNS::SNSClient snsClient(clientConfiguration);

            Aws::SNS::Model::SubscribeRequest request;
            request.SetTopicArn(topicARN);
            request.SetProtocol("sqs");
            request.SetEndpoint(queueARN);
            if (isFifoTopic) {
                if (first) {
                    std::cout << "Subscriptions to a FIFO topic can have filters."
                              << std::endl;
                    std::cout
                            << "If you add a filter to this subscription, then only the filtered messages "
                            << "will be received in the queue." << std::endl;
                    std::cout << "For information about message filtering, "
                              << "see https://docs.aws.amazon.com/sns/latest/dg/sns-message-filtering.html"
                              << std::endl;
                    std::cout << "For this example, you can filter messages by a \""
                              << TONE_ATTRIBUTE << "\" attribute." << std::endl;
                }

                std::ostringstream ostringstream;
                ostringstream << "Filter messages for \"" << queueName
                              << "\"'s subscription to the topic \""
                              << topicName << "\"?  (y/n)";

                // Add filter if user answers yes.
                if (askYesNoQuestion(ostringstream.str())) {
                    Aws::String jsonPolicy = getFilterPolicyFromUser();
                    if (!jsonPolicy.empty()) {
                        filteringMessages = true;

                        std::cout << "This is the filter policy for this subscription."
                                  << std::endl;
                        std::cout << jsonPolicy << std::endl;

                        request.AddAttributes("FilterPolicy", jsonPolicy);
                    }
                    else {
                        std::cout
                                << "Because you did not select any attributes, no filter "
                                << "will be added to this subscription." << std::endl;
                    }
                }
            }  // if (isFifoTopic)
            Aws::SNS::Model::SubscribeOutcome outcome = snsClient.Subscribe(request);

            if (outcome.IsSuccess()) {
                Aws::String subscriptionARN = outcome.GetResult().GetSubscriptionArn();
                std::cout << "The queue '" << queueName
                          << "' has been subscribed to the topic '"
                          << "'" << topicName << "'" << std::endl;
                std::cout << "with the subscription ARN '" << subscriptionARN << "."
                          << std::endl;
                subscriptionARNS.push_back(subscriptionARN);
            }
            else {
                std::cerr << "Error with TopicsAndQueues::Subscribe. "
                          << outcome.GetError().GetMessage()
                          << std::endl;

                cleanUp(topicARN,
                        queueURLS,
                        subscriptionARNS,
                        snsClient,
                        sqsClient);

                return false;
            }

//! Routine that lets the user select attributes for a subscription filter policy.
/*!
 \sa getFilterPolicyFromUser()
 \return Aws::String: The filter policy as JSON.
 */
Aws::String AwsDoc::TopicsAndQueues::getFilterPolicyFromUser() {
    std::cout
            << "You can filter messages by one or more of the following \""
            << TONE_ATTRIBUTE << "\" attributes." << std::endl;

    std::vector<Aws::String> filterSelections;
    int selection;
    do {
        for (size_t j = 0; j < TONES.size(); ++j) {
            std::cout << "  " << (j + 1) << ". " << TONES[j]
                      << std::endl;
        }
        selection = askQuestionForIntRange(
                "Enter a number (or enter zero to stop adding more). ",
                0, static_cast<int>(TONES.size()));

        if (selection != 0) {
            const Aws::String &selectedTone(TONES[selection - 1]);
            // Add the tone to the selection if it is not already added.
            if (std::find(filterSelections.begin(),
                          filterSelections.end(),
                          selectedTone)
                == filterSelections.end()) {
                filterSelections.push_back(selectedTone);
            }
        }
    } while (selection != 0);

    Aws::String result;
    if (!filterSelections.empty()) {
        std::ostringstream jsonPolicyStream;
        jsonPolicyStream << "{ \"" << TONE_ATTRIBUTE << "\": [";


        for (size_t j = 0; j < filterSelections.size(); ++j) {
            jsonPolicyStream << "\"" << filterSelections[j] << "\"";
            if (j < filterSelections.size() - 1) {
                jsonPolicyStream << ",";
            }
        }
        jsonPolicyStream << "] }";

        result = jsonPolicyStream.str();
    }

    return result;
}
```
+  Untuk detail API, lihat [Berlangganan](https://docs.aws.amazon.com/goto/SdkForCpp/sns-2010-03-31/Subscribe) di *Referensi AWS SDK untuk C\$1\$1 API*. 

------
#### [ CLI ]

**AWS CLI**  
**Untuk berlangganan topik**  
`subscribe`Perintah berikut berlangganan alamat email ke topik yang ditentukan.  

```
aws sns subscribe \
    --topic-arn arn:aws:sns:us-west-2:123456789012:my-topic \
    --protocol email \
    --notification-endpoint my-email@example.com
```
Output:  

```
{
    "SubscriptionArn": "pending confirmation"
}
```
+  Untuk detail API, lihat [Berlangganan](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/subscribe.html) di *Referensi AWS CLI Perintah*. 

------
#### [ Go ]

**SDK untuk Go V2**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/gov2/workflows/topics_and_queues#code-examples). 
Berlangganan antrian ke topik dengan filter opsional.  

```
import (
	"context"
	"encoding/json"
	"log"

	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/service/sns"
	"github.com/aws/aws-sdk-go-v2/service/sns/types"
)

// SnsActions encapsulates the Amazon Simple Notification Service (Amazon SNS) actions
// used in the examples.
type SnsActions struct {
	SnsClient *sns.Client
}



// SubscribeQueue subscribes an Amazon Simple Queue Service (Amazon SQS) queue to an
// Amazon SNS topic. When filterMap is not nil, it is used to specify a filter policy
// so that messages are only sent to the queue when the message has the specified attributes.
func (actor SnsActions) SubscribeQueue(ctx context.Context, topicArn string, queueArn string, filterMap map[string][]string) (string, error) {
	var subscriptionArn string
	var attributes map[string]string
	if filterMap != nil {
		filterBytes, err := json.Marshal(filterMap)
		if err != nil {
			log.Printf("Couldn't create filter policy, here's why: %v\n", err)
			return "", err
		}
		attributes = map[string]string{"FilterPolicy": string(filterBytes)}
	}
	output, err := actor.SnsClient.Subscribe(ctx, &sns.SubscribeInput{
		Protocol:              aws.String("sqs"),
		TopicArn:              aws.String(topicArn),
		Attributes:            attributes,
		Endpoint:              aws.String(queueArn),
		ReturnSubscriptionArn: true,
	})
	if err != nil {
		log.Printf("Couldn't susbscribe queue %v to topic %v. Here's why: %v\n",
			queueArn, topicArn, err)
	} else {
		subscriptionArn = *output.SubscriptionArn
	}

	return subscriptionArn, err
}
```
+  Untuk detail API, lihat [Berlangganan](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/sns#Client.Subscribe) di *Referensi AWS SDK untuk Go API*. 

------
#### [ Java ]

**SDK untuk Java 2.x**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples). 
Berlangganan alamat email ke suatu topik.  

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SnsException;
import software.amazon.awssdk.services.sns.model.SubscribeRequest;
import software.amazon.awssdk.services.sns.model.SubscribeResponse;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class SubscribeEmail {
    public static void main(String[] args) {
        final String usage = """
                Usage:     <topicArn> <email>

                Where:
                   topicArn - The ARN of the topic to subscribe.
                   email - The email address to use.
                """;

        if (args.length != 2) {
            System.out.println(usage);
            System.exit(1);
        }

        String topicArn = args[0];
        String email = args[1];
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        subEmail(snsClient, topicArn, email);
        snsClient.close();
    }

    public static void subEmail(SnsClient snsClient, String topicArn, String email) {
        try {
            SubscribeRequest request = SubscribeRequest.builder()
                    .protocol("email")
                    .endpoint(email)
                    .returnSubscriptionArn(true)
                    .topicArn(topicArn)
                    .build();

            SubscribeResponse result = snsClient.subscribe(request);
            System.out.println("Subscription ARN: " + result.subscriptionArn() + "\n\n Status is "
                    + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
Berlangganan titik akhir HTTP ke suatu topik.  

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SnsException;
import software.amazon.awssdk.services.sns.model.SubscribeRequest;
import software.amazon.awssdk.services.sns.model.SubscribeResponse;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class SubscribeHTTPS {
    public static void main(String[] args) {
        final String usage = """

                Usage:    <topicArn> <url>

                Where:
                   topicArn - The ARN of the topic to subscribe.
                   url - The HTTPS endpoint that you want to receive notifications.
                """;

        if (args.length < 2) {
            System.out.println(usage);
            System.exit(1);
        }

        String topicArn = args[0];
        String url = args[1];
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        subHTTPS(snsClient, topicArn, url);
        snsClient.close();
    }

    public static void subHTTPS(SnsClient snsClient, String topicArn, String url) {
        try {
            SubscribeRequest request = SubscribeRequest.builder()
                    .protocol("https")
                    .endpoint(url)
                    .returnSubscriptionArn(true)
                    .topicArn(topicArn)
                    .build();

            SubscribeResponse result = snsClient.subscribe(request);
            System.out.println("Subscription ARN is " + result.subscriptionArn() + "\n\n Status is "
                    + result.sdkHttpResponse().statusCode());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
Berlangganan fungsi Lambda ke suatu topik.  

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SnsException;
import software.amazon.awssdk.services.sns.model.SubscribeRequest;
import software.amazon.awssdk.services.sns.model.SubscribeResponse;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class SubscribeLambda {

    public static void main(String[] args) {

        final String usage = """

                Usage:    <topicArn> <lambdaArn>

                Where:
                   topicArn - The ARN of the topic to subscribe.
                   lambdaArn - The ARN of an AWS Lambda function.
                """;

        if (args.length != 2) {
            System.out.println(usage);
            System.exit(1);
        }

        String topicArn = args[0];
        String lambdaArn = args[1];
        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        String arnValue = subLambda(snsClient, topicArn, lambdaArn);
        System.out.println("Subscription ARN: " + arnValue);
        snsClient.close();
    }

    public static String subLambda(SnsClient snsClient, String topicArn, String lambdaArn) {
        try {
            SubscribeRequest request = SubscribeRequest.builder()
                    .protocol("lambda")
                    .endpoint(lambdaArn)
                    .returnSubscriptionArn(true)
                    .topicArn(topicArn)
                    .build();

            SubscribeResponse result = snsClient.subscribe(request);
            return result.subscriptionArn();

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
        return "";
    }
}
```
+  Untuk detail API, lihat [Berlangganan](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/Subscribe) di *Referensi AWS SDK for Java 2.x API*. 

------
#### [ JavaScript ]

**SDK untuk JavaScript (v3)**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sns#code-examples). 
Buat klien dalam modul terpisah dan ekspor klien tersebut.  

```
import { SNSClient } from "@aws-sdk/client-sns";

// The AWS Region can be provided here using the `region` property. If you leave it blank
// the SDK will default to the region set in your AWS config.
export const snsClient = new SNSClient({});
```
Mengimpor modul SDK dan klien dan memanggil API.  

```
import { SubscribeCommand } from "@aws-sdk/client-sns";
import { snsClient } from "../libs/snsClient.js";

/**
 * @param {string} topicArn - The ARN of the topic for which you wish to confirm a subscription.
 * @param {string} emailAddress - The email address that is subscribed to the topic.
 */
export const subscribeEmail = async (
  topicArn = "TOPIC_ARN",
  emailAddress = "usern@me.com",
) => {
  const response = await snsClient.send(
    new SubscribeCommand({
      Protocol: "email",
      TopicArn: topicArn,
      Endpoint: emailAddress,
    }),
  );
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: 'c8e35bcd-b3c0-5940-9f66-06f6fcc108f0',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   },
  //   SubscriptionArn: 'pending confirmation'
  // }
};
```
Berlangganan aplikasi seluler ke suatu topik.  

```
import { SubscribeCommand } from "@aws-sdk/client-sns";
import { snsClient } from "../libs/snsClient.js";

/**
 * @param {string} topicArn - The ARN of the topic the subscriber is subscribing to.
 * @param {string} endpoint - The Endpoint ARN of an application. This endpoint is created
 *                            when an application registers for notifications.
 */
export const subscribeApp = async (
  topicArn = "TOPIC_ARN",
  endpoint = "ENDPOINT",
) => {
  const response = await snsClient.send(
    new SubscribeCommand({
      Protocol: "application",
      TopicArn: topicArn,
      Endpoint: endpoint,
    }),
  );
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: 'c8e35bcd-b3c0-5940-9f66-06f6fcc108f0',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   },
  //   SubscriptionArn: 'pending confirmation'
  // }
  return response;
};
```
Berlangganan fungsi Lambda ke suatu topik.  

```
import { SubscribeCommand } from "@aws-sdk/client-sns";
import { snsClient } from "../libs/snsClient.js";

/**
 * @param {string} topicArn - The ARN of the topic the subscriber is subscribing to.
 * @param {string} endpoint - The Endpoint ARN of and AWS Lambda function.
 */
export const subscribeLambda = async (
  topicArn = "TOPIC_ARN",
  endpoint = "ENDPOINT",
) => {
  const response = await snsClient.send(
    new SubscribeCommand({
      Protocol: "lambda",
      TopicArn: topicArn,
      Endpoint: endpoint,
    }),
  );
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: 'c8e35bcd-b3c0-5940-9f66-06f6fcc108f0',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   },
  //   SubscriptionArn: 'pending confirmation'
  // }
  return response;
};
```
Berlangganan antrian SQS ke suatu topik.  

```
import { SubscribeCommand, SNSClient } from "@aws-sdk/client-sns";

const client = new SNSClient({});

export const subscribeQueue = async (
  topicArn = "TOPIC_ARN",
  queueArn = "QUEUE_ARN",
) => {
  const command = new SubscribeCommand({
    TopicArn: topicArn,
    Protocol: "sqs",
    Endpoint: queueArn,
  });

  const response = await client.send(command);
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: '931e13d9-5e2b-543f-8781-4e9e494c5ff2',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   },
  //   SubscriptionArn: 'arn:aws:sns:us-east-1:xxxxxxxxxxxx:subscribe-queue-test-430895:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
  // }
  return response;
};
```
Berlangganan dengan filter ke topik.  

```
import { SubscribeCommand, SNSClient } from "@aws-sdk/client-sns";

const client = new SNSClient({});

export const subscribeQueueFiltered = async (
  topicArn = "TOPIC_ARN",
  queueArn = "QUEUE_ARN",
) => {
  const command = new SubscribeCommand({
    TopicArn: topicArn,
    Protocol: "sqs",
    Endpoint: queueArn,
    Attributes: {
      // This subscription will only receive messages with the 'event' attribute set to 'order_placed'.
      FilterPolicyScope: "MessageAttributes",
      FilterPolicy: JSON.stringify({
        event: ["order_placed"],
      }),
    },
  });

  const response = await client.send(command);
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: '931e13d9-5e2b-543f-8781-4e9e494c5ff2',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   },
  //   SubscriptionArn: 'arn:aws:sns:us-east-1:xxxxxxxxxxxx:subscribe-queue-test-430895:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
  // }
  return response;
};
```
+  Untuk informasi selengkapnya, silakan lihat [Panduan Developer AWS SDK untuk JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-managing-topics.html#sns-examples-subscribing-email). 
+  Untuk detail API, lihat [Berlangganan](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/SubscribeCommand) di *Referensi AWS SDK untuk JavaScript API*. 

------
#### [ Kotlin ]

**SDK untuk Kotlin**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/kotlin/services/sns#code-examples). 
Berlangganan alamat email ke suatu topik.  

```
suspend fun subEmail(
    topicArnVal: String,
    email: String,
): String {
    val request =
        SubscribeRequest {
            protocol = "email"
            endpoint = email
            returnSubscriptionArn = true
            topicArn = topicArnVal
        }

    SnsClient.fromEnvironment { region = "us-east-1" }.use { snsClient ->
        val result = snsClient.subscribe(request)
        return result.subscriptionArn.toString()
    }
}
```
Berlangganan fungsi Lambda ke suatu topik.  

```
suspend fun subLambda(
    topicArnVal: String?,
    lambdaArn: String?,
) {
    val request =
        SubscribeRequest {
            protocol = "lambda"
            endpoint = lambdaArn
            returnSubscriptionArn = true
            topicArn = topicArnVal
        }

    SnsClient.fromEnvironment { region = "us-east-1" }.use { snsClient ->
        val result = snsClient.subscribe(request)
        println(" The subscription Arn is ${result.subscriptionArn}")
    }
}
```
+  Untuk detail API, lihat [Berlangganan](https://sdk.amazonaws.com/kotlin/api/latest/index.html) di *AWS SDK untuk referensi API Kotlin*. 

------
#### [ PHP ]

**SDK untuk PHP**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples). 
Berlangganan alamat email ke suatu topik.  

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Prepares to subscribe an endpoint by sending the endpoint a confirmation message.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$protocol = 'email';
$endpoint = 'sample@example.com';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->subscribe([
        'Protocol' => $protocol,
        'Endpoint' => $endpoint,
        'ReturnSubscriptionArn' => true,
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
Berlangganan titik akhir HTTP ke suatu topik.  

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Prepares to subscribe an endpoint by sending the endpoint a confirmation message.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$protocol = 'https';
$endpoint = 'https://';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->subscribe([
        'Protocol' => $protocol,
        'Endpoint' => $endpoint,
        'ReturnSubscriptionArn' => true,
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  Untuk detail API, lihat [Berlangganan](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/Subscribe) di *Referensi AWS SDK untuk PHP API*. 

------
#### [ Python ]

**SDK untuk Python (Boto3)**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/python/example_code/sns#code-examples). 
Berlangganan alamat email ke suatu topik.  

```
class SnsWrapper:
    """Encapsulates Amazon SNS topic and subscription functions."""

    def __init__(self, sns_resource):
        """
        :param sns_resource: A Boto3 Amazon SNS resource.
        """
        self.sns_resource = sns_resource


    @staticmethod
    def subscribe(topic, protocol, endpoint):
        """
        Subscribes an endpoint to the topic. Some endpoint types, such as email,
        must be confirmed before their subscriptions are active. When a subscription
        is not confirmed, its Amazon Resource Number (ARN) is set to
        'PendingConfirmation'.

        :param topic: The topic to subscribe to.
        :param protocol: The protocol of the endpoint, such as 'sms' or 'email'.
        :param endpoint: The endpoint that receives messages, such as a phone number
                         (in E.164 format) for SMS messages, or an email address for
                         email messages.
        :return: The newly added subscription.
        """
        try:
            subscription = topic.subscribe(
                Protocol=protocol, Endpoint=endpoint, ReturnSubscriptionArn=True
            )
            logger.info("Subscribed %s %s to topic %s.", protocol, endpoint, topic.arn)
        except ClientError:
            logger.exception(
                "Couldn't subscribe %s %s to topic %s.", protocol, endpoint, topic.arn
            )
            raise
        else:
            return subscription
```
Berlangganan antrian ke topik dengan filter opsional.  

```
class SnsWrapper:
    """Wrapper class for managing Amazon SNS operations."""

    def __init__(self, sns_client: Any) -> None:
        """
        Initialize the SnsWrapper.

        :param sns_client: A Boto3 Amazon SNS client.
        """
        self.sns_client = sns_client

    @classmethod
    def from_client(cls) -> 'SnsWrapper':
        """
        Create an SnsWrapper instance using a default boto3 client.

        :return: An instance of this class.
        """
        sns_client = boto3.client('sns')
        return cls(sns_client)


    def subscribe_queue_to_topic(
        self, 
        topic_arn: str, 
        queue_arn: str, 
        filter_policy: Optional[str] = None
    ) -> str:
        """
        Subscribe an SQS queue to an SNS topic.

        :param topic_arn: The ARN of the SNS topic.
        :param queue_arn: The ARN of the SQS queue.
        :param filter_policy: Optional JSON filter policy for message filtering.
        :return: The ARN of the subscription.
        :raises ClientError: If the subscription fails.
        """
        try:
            attributes = {}
            if filter_policy:
                attributes['FilterPolicy'] = filter_policy

            response = self.sns_client.subscribe(
                TopicArn=topic_arn,
                Protocol='sqs',
                Endpoint=queue_arn,
                Attributes=attributes
            )

            subscription_arn = response['SubscriptionArn']
            logger.info(f"Subscribed queue {queue_arn} to topic {topic_arn}")
            return subscription_arn

        except ClientError as e:
            error_code = e.response.get('Error', {}).get('Code', 'Unknown')
            logger.error(f"Error subscribing queue to topic: {error_code} - {e}")
            raise
```
+  Untuk detail API, lihat [Berlangganan](https://docs.aws.amazon.com/goto/boto3/sns-2010-03-31/Subscribe) di *AWS SDK for Python (Boto3) Referensi* API. 

------
#### [ Ruby ]

**SDK untuk Ruby**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/ruby/example_code/sns#code-examples). 
Berlangganan alamat email ke suatu topik.  

```
require 'aws-sdk-sns'
require 'logger'

# Represents a service for creating subscriptions in Amazon Simple Notification Service (SNS)
class SubscriptionService
  # Initializes the SubscriptionService with an SNS client
  #
  # @param sns_client [Aws::SNS::Client] The SNS client
  def initialize(sns_client)
    @sns_client = sns_client
    @logger = Logger.new($stdout)
  end

  # Attempts to create a subscription to a topic
  #
  # @param topic_arn [String] The ARN of the SNS topic
  # @param protocol [String] The subscription protocol (e.g., email)
  # @param endpoint [String] The endpoint that receives the notifications (email address)
  # @return [Boolean] true if subscription was successfully created, false otherwise
  def create_subscription(topic_arn, protocol, endpoint)
    @sns_client.subscribe(topic_arn: topic_arn, protocol: protocol, endpoint: endpoint)
    @logger.info('Subscription created successfully.')
    true
  rescue Aws::SNS::Errors::ServiceError => e
    @logger.error("Error while creating the subscription: #{e.message}")
    false
  end
end

# Main execution if the script is run directly
if $PROGRAM_NAME == __FILE__
  protocol = 'email'
  endpoint = 'EMAIL_ADDRESS' # Should be replaced with a real email address
  topic_arn = 'TOPIC_ARN'    # Should be replaced with a real topic ARN

  sns_client = Aws::SNS::Client.new
  subscription_service = SubscriptionService.new(sns_client)

  @logger.info('Creating the subscription.')
  unless subscription_service.create_subscription(topic_arn, protocol, endpoint)
    @logger.error('Subscription creation failed. Stopping program.')
    exit 1
  end
end
```
+  Untuk informasi selengkapnya, silakan lihat [Panduan Developer AWS SDK untuk Ruby](https://docs.aws.amazon.com/sdk-for-ruby/v3/developer-guide/sns-example-create-subscription.html). 
+  Untuk detail API, lihat [Berlangganan](https://docs.aws.amazon.com/goto/SdkForRubyV3/sns-2010-03-31/Subscribe) di *Referensi AWS SDK untuk Ruby API*. 

------
#### [ Rust ]

**SDK for Rust**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/rustv1/examples/sns#code-examples). 
Berlangganan alamat email ke suatu topik.  

```
async fn subscribe_and_publish(
    client: &Client,
    topic_arn: &str,
    email_address: &str,
) -> Result<(), Error> {
    println!("Receiving on topic with ARN: `{}`", topic_arn);

    let rsp = client
        .subscribe()
        .topic_arn(topic_arn)
        .protocol("email")
        .endpoint(email_address)
        .send()
        .await?;

    println!("Added a subscription: {:?}", rsp);

    let rsp = client
        .publish()
        .topic_arn(topic_arn)
        .message("hello sns!")
        .send()
        .await?;

    println!("Published message: {:?}", rsp);

    Ok(())
}
```
+  Untuk detail API, lihat [Berlangganan](https://docs.rs/aws-sdk-sns/latest/aws_sdk_sns/client/struct.Client.html#method.subscribe) di *AWS SDK untuk referensi Rust API*. 

------
#### [ SAP ABAP ]

**SDK for SAP ABAP**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/sap-abap/services/sns#code-examples). 
Berlangganan alamat email ke suatu topik.  

```
    TRY.
        oo_result = lo_sns->subscribe(                      "oo_result is returned for testing purposes."
                iv_topicarn = iv_topic_arn
                iv_protocol = 'email'
                iv_endpoint = iv_email_address
                iv_returnsubscriptionarn = abap_true ).
        MESSAGE 'Email address subscribed to SNS topic.' TYPE 'I'.
      CATCH /aws1/cx_snsnotfoundexception.
        MESSAGE 'Topic does not exist.' TYPE 'E'.
      CATCH /aws1/cx_snssubscriptionlmte00.
        MESSAGE 'Unable to create subscriptions. You have reached the maximum number of subscriptions allowed.' TYPE 'E'.
    ENDTRY.
```
+  Untuk detail API, lihat [Berlangganan](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html) di *AWS SDK untuk referensi API SAP ABAP*. 

------
#### [ Swift ]

**SDK para Swift**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/swift/example_code/sns#code-examples). 
Berlangganan alamat email ke suatu topik.  

```
import AWSSNS

        let config = try await SNSClient.SNSClientConfiguration(region: region)
        let snsClient = SNSClient(config: config)

        let output = try await snsClient.subscribe(
            input: SubscribeInput(
                endpoint: email,
                protocol: "email",
                returnSubscriptionArn: true,
                topicArn: arn
            )
        )

        guard let subscriptionArn = output.subscriptionArn else {
            print("No subscription ARN received from Amazon SNS.")
            return
        }
        
        print("Subscription \(subscriptionArn) created.")
```
Berlangganan nomor telepon ke topik untuk menerima pemberitahuan melalui SMS.  

```
import AWSSNS

        let config = try await SNSClient.SNSClientConfiguration(region: region)
        let snsClient = SNSClient(config: config)

        let output = try await snsClient.subscribe(
            input: SubscribeInput(
                endpoint: phone,
                protocol: "sms",
                returnSubscriptionArn: true,
                topicArn: arn
            )
        )

        guard let subscriptionArn = output.subscriptionArn else {
            print("No subscription ARN received from Amazon SNS.")
            return
        }
        
        print("Subscription \(subscriptionArn) created.")
```
+  Untuk detail API, lihat [Berlangganan](https://sdk.amazonaws.com/swift/api/awssns/latest/documentation/awssns/snsclient/subscribe(input:)) di *AWS SDK untuk referensi Swift API*. 

------