logoDokumen
Cari

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_id dari 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

  1. Retry Jaringan: Push ulang dengan CID yang sama saat jaringan bermasalah
  2. Jaminan Idempoten: Pastikan pesan yang sama tidak terkirim berulang
  3. 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 } }'
              
              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
    }
  }'

            
Tampilkan blok kode ini di jendela mengambang

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 } } ] }'
              
              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
        }
      }
    ]
  }'

            
Tampilkan blok kode ini di jendela mengambang

Penanganan Respons

Push Pertama Berhasil

{ "msg_id": "2460001" }
              
              {
  "msg_id": "2460001"
}

            
Tampilkan blok kode ini di jendela mengambang

Push Ulang dengan CID Sama

{ "msg_id": "2460001" // Mengembalikan msg_id dari push pertama }
              
              {
  "msg_id": "2460001" // Mengembalikan msg_id dari push pertama
}

            
Tampilkan blok kode ini di jendela mengambang

Format CID Tidak Valid

{ "error": { "code": 23003, "message": "Format CID tidak sesuai ketentuan" } }
              
              {
  "error": {
    "code": 23003,
    "message": "Format CID tidak sesuai ketentuan"
  }
}

            
Tampilkan blok kode ini di jendela mengambang

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

  1. Gunakan CID untuk Pesan Penting: Terapkan CID pada notifikasi pembayaran & alert penting
  2. Buat Identifier Bermakna: Gunakan format jenisBisnis-userID-timestamp (contoh: payment-12345-202307011030)
  3. Retry Jaringan: Lakukan retry dengan CID sama jika terjadi error jaringan
  4. CID Unik pada Batch Push: Gunakan CID unik untuk tiap permintaan batch agar mudah dilacak
  5. 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_id yang 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" } } }'
              
              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"
      }
    }
  }'

            
Tampilkan blok kode ini di jendela mengambang

Penanganan Respons

Pembuatan Pertama Berhasil

{ "schedule_id": "0123456789" }
              
              {
  "schedule_id": "0123456789"
}

            
Tampilkan blok kode ini di jendela mengambang

Pembuatan Ulang dengan CID Sama

{ "schedule_id": "0123456789" // Mengembalikan schedule_id dari pembuatan pertama }
              
              {
  "schedule_id": "0123456789" // Mengembalikan schedule_id dari pembuatan pertama
}

            
Tampilkan blok kode ini di jendela mengambang

Praktik Terbaik

  1. Identifikasi Tugas Berkala: Sertakan info siklus pada CID (misal: weekly-report-2023w27)
  2. Ringkasan Parameter Tugas: Sertakan hash parameter penting (misal: birthday-reminder-md5(params))
  3. Koordinasi Sistem Terdistribusi: Gunakan CID yang sama di beberapa instance layanan untuk mencegah tugas ganda
  4. 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:

  1. ✅ Mencegah pesan ganda akibat retry jaringan
  2. ✅ Menjamin idempoten untuk pesan bisnis penting
  3. ✅ Mempermudah pelacakan pesan di sistem terdistribusi
  4. ✅ 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.

icon
Hubungi Sales