Cara Menghindari Push Notifikasi Ganda: Analisis Mendalam Fitur CID
Dalam sistem push notifikasi, push ganda adalah masalah umum, terutama saat jaringan tidak stabil atau terjadi retry otomatis dari sistem. Artikel ini membahas secara detail fungsi Client ID (CID) yang dapat Anda manfaatkan untuk mencegah pengiriman pesan ganda secara efektif.
Fitur CID pada Push Notifikasi Langsung
Fitur Utama
CID adalah parameter opsional untuk mengidentifikasi permintaan push tertentu. Jika permintaan diulang dengan CID yang sama:
- Sistem akan mengembalikan
msg_iddari push sukses sebelumnya - Mencegah pesan dikirim berulang kali ke pengguna
- Memberikan jaminan idempoten (hasil tetap sama meski permintaan dijalankan berulang)
Karakteristik Utama
| Fitur | Deskripsi |
|---|---|
| Masa Berlaku | 1 jam |
| Format | Alfanumerik, garis bawah, tanda hubung; maksimal 64 karakter |
| Keunikan | Harus unik dalam satu appkey |
| Skenario Didukung | Push tunggal & batch push |
Contoh Penggunaan
- Retry Jaringan: Push ulang dengan CID yang sama saat jaringan bermasalah
- Jaminan Idempoten: Pastikan pesan yang sama tidak terkirim berulang
- Pelacakan Permintaan: Lacak status push tertentu lewat CID
Contoh Permintaan
Push Tunggal dengan CID
curl --insecure -X POST -v https://pushapi-sgp.engagelab.com/v4/push \
-H "Content-Type: application/json" \
-u "AppKey:MasterSecret" \
-d '{
"options": {
"cid": "order-notify-20230701-001",
"time_to_live": 60
}
}'
Batch Push dengan CID
curl --insecure -X POST -v https://pushapi-sgp.engagelab.com/v4/push/batch/regid \
-H "Content-Type: application/json" \
-u "AppKey:MasterSecret" \
-d '{
"requests": [
{
"options": {
"cid": "user-12345-notification",
"time_to_live": 60
}
}
]
}'
Penanganan Respons
Push Pertama Berhasil
{
"msg_id": "2460001"
}
Push Ulang dengan CID Sama
{
"msg_id": "2460001" // Mengembalikan msg_id dari push pertama
}
Format CID Tidak Valid
{
"error": {
"code": 23003,
"message": "Format CID tidak sesuai ketentuan"
}
}
Deskripsi Kode Error
| Kode Error | Deskripsi | Solusi | HTTP Status Code |
|---|---|---|---|
| 21003 | Format CID tidak valid atau terlalu panjang | Pastikan format CID benar; maksimal 64 karakter | 400 |
Praktik Terbaik
- Gunakan CID untuk Pesan Penting: Terapkan CID pada notifikasi pembayaran & alert penting
- Buat Identifier Bermakna: Gunakan format
jenisBisnis-userID-timestamp(contoh:payment-12345-202307011030) - Retry Jaringan: Lakukan retry dengan CID sama jika terjadi error jaringan
- CID Unik pada Batch Push: Gunakan CID unik untuk tiap permintaan batch agar mudah dilacak
- Catat CID di Klien: Simpan CID di sisi klien untuk deduplikasi & query status
Fitur CID pada Tugas Terjadwal
Fitur Utama
CID juga berlaku saat membuat tugas terjadwal, sehingga mencegah pembuatan tugas ganda:
- Penggunaan CID sama akan mengembalikan
schedule_idyang sudah pernah dibuat - Mencegah sistem membuat tugas terjadwal yang sama berulang kali
Karakteristik Utama
| Fitur | Deskripsi |
|---|---|
| Masa Berlaku | 1 jam |
| Format | Alfanumerik, garis bawah, tanda hubung; maksimal 64 karakter |
| Keunikan | Harus unik dalam satu appkey |
Contoh Permintaan
curl --insecure -X POST -v https://pushapi-sgp.engagelab.com/v4/schedules \
-H "Content-Type: application/json" \
-u "AppKey:MasterSecret" \
-d '{
"cid": "daily-reminder-202307",
"trigger": {
"daily": {
"start": "2023-07-01",
"time": "09:00:00"
}
}
}'
Penanganan Respons
Pembuatan Pertama Berhasil
{
"schedule_id": "0123456789"
}
Pembuatan Ulang dengan CID Sama
{
"schedule_id": "0123456789" // Mengembalikan schedule_id dari pembuatan pertama
}
Praktik Terbaik
- Identifikasi Tugas Berkala: Sertakan info siklus pada CID (misal:
weekly-report-2023w27) - Ringkasan Parameter Tugas: Sertakan hash parameter penting (misal:
birthday-reminder-md5(params)) - Koordinasi Sistem Terdistribusi: Gunakan CID yang sama di beberapa instance layanan untuk mencegah tugas ganda
- Update Tugas: Gunakan CID baru saat mengubah tugas
Alur Proses EngageLab
graph TD
A[Terima Permintaan] --> B{Mengandung CID?}
B -->|Ya| C[Query Redis]
B -->|Tidak| D[Proses Normal]
C --> E{CID Ada?}
E -->|Ya| F[Kembalikan msg_id/schedule_id yang tersimpan]
E -->|Tidak| G[Proses Permintaan]
G --> H[Simpan Mapping CID → ID]
H --> I[Kembalikan ID Baru]FAQ
T: Mengapa masa berlaku CID hanya 1 jam?
J: Cukup untuk skenario retry umum & mencegah pertumbuhan storage tanpa batas. Untuk bisnis kritis, Anda bisa memperpanjang deduplikasi dengan log sendiri.
T: Apakah CID sama bisa dipakai di appkey berbeda?
J: Bisa. CID hanya perlu unik di dalam satu appkey.
T: Apakah CID harus unik secara global?
J: Tidak, cukup unik di dalam satu appkey.
T: Bagaimana memvalidasi format CID?
J: Gunakan regex: /^[a-zA-Z0-9_-]{1,64}$/
Ringkasan
Dengan memanfaatkan CID secara tepat, Anda dapat:
- ✅ Mencegah pesan ganda akibat retry jaringan
- ✅ Menjamin idempoten untuk pesan bisnis penting
- ✅ Mempermudah pelacakan pesan di sistem terdistribusi
- ✅ Meningkatkan keandalan sistem push notifikasi
Rekomendasi Utama:
- Tambahkan CID pada pesan bisnis penting
- Terapkan konvensi penamaan
bisnis-entitas-waktu - Implementasikan deduplikasi berbasis CID di sisi klien
- Pantau kode error terkait CID
Dengan panduan ini, Anda dapat memanfaatkan fitur CID secara optimal untuk membangun sistem push notifikasi yang lebih andal dan benar-benar bebas dari masalah push ganda.










