Skip to content

Kontak & Opt-in ​

Broadcast ke segmen bekerja di atas daftar kontakmu. Halaman ini menjelaskan cara memasukkan kontak, memberinya tag, dan menandai izin menerima broadcast (opt-in).

Opt-in aktif secara bawaan, keluar otomatis ​

Kontak baru (impor CSV, impor grup, tambah manual) langsung opt-in. WAQ mengeluarkannya otomatis dari broadcast segmen kalau ada tanda ia menolak atau tak terjangkau — alasannya tersimpan di kontak (optOutReason):

AlasanKapan
stop_keywordPenerima membalas STOP / BERHENTI / UNREG di chat pribadi
not_on_whatsappHasil cek nomor: tidak terdaftar di WhatsApp
undelivered≥3 pesan tak pernah sampai (>72 jam) di ≥2 hari berbeda, tanpa satu pun yang sampai dalam 60 hari (dicek tiap hari 03.30 WITA)
manualDimatikan pemilik akun

Kontak yang dikeluarkan bisa dimasukkan kembali kapan saja (dashboard atau PATCH). Pesan transaksional satu-per-satu (/v1/messages/send) tidak terpengaruh aturan ini.

Kontak yang opt-out selalu dilewati broadcast, bahkan ketika filter opt-in dimatikan.

Impor CSV ​

Format per baris: nama,nomor (baris header opsional). Nomor dinormalkan otomatis ke format 62….

bash
curl -X POST https://waq.karyawah.id/v1/contacts/import-csv \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "csv": "Budi,081234567890\nAni,6285242411466",
    "tags": ["pelanggan-juli"],
    "broadcast_opt_in": false
  }'
FieldWajibKeterangan
csvyaIsi CSV mentah
tagstidakDipasang ke semua kontak hasil impor ini — dipakai sebagai segmen broadcast
broadcast_opt_intidakBawaan true. Kirim false kalau kontak ini belum boleh menerima broadcast
consent_acknowledgedjika broadcast_opt_in: true dikirim eksplisittrue — pernyataan bahwa kontak sudah memberi persetujuan

Balasan memuat jumlah yang masuk, duplikat, dan nomor tak valid:

json
{ "imported": 2, "dedup": 0, "invalid": 0, "tags": ["pelanggan-juli"], "broadcast_opt_in": false }

Beri tag sejak impor

Tanpa tag, satu-satunya cara menyasar kontak itu adalah "semua kontak". Tag membuat kamu bisa mengirim ke kelompok tertentu saja, mis. pelanggan-juli.

Mencari & memfilter kontak ​

bash
# cari nama / nomor / tag
curl -G https://waq.karyawah.id/v1/contacts \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode 'q=62812' \
  --data-urlencode 'optIn=true' \
  --data-urlencode 'source=csv' \
  --data-urlencode 'page=1'
ParameterNilai
qKata kunci — dicocokkan ke nama, nomor, dan tag
optIntrue / false
sourcemanual, csv, group (alias group_sync)
pageHalaman, 50 kontak per halaman

Menandai opt-in ​

Satu kontak:

bash
curl -X PATCH https://waq.karyawah.id/v1/contacts/<contact_id> \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"broadcastOptIn": true}'

Banyak kontak sekaligus — pilih salah satu mode:

bash
# mode 1: daftar id tertentu
curl -X POST https://waq.karyawah.id/v1/contacts/bulk-opt-in \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{"opt_in": true, "consent_acknowledged": true, "ids": ["<id1>", "<id2>"]}'

# mode 2: semua kontak yang cocok filter
curl -X POST https://waq.karyawah.id/v1/contacts/bulk-opt-in \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{"opt_in": true, "consent_acknowledged": true, "all": true, "source": "csv"}'

Balasan: { "updated": 1937, "opt_in": true }.

Untuk menandai opt-out massal, kirim "opt_in": false (tanpa perlu consent_acknowledged). Waktu penolakan dicatat, dan kontak itu tak akan pernah ikut broadcast lagi.

Validasi nomor ​

Nomor yang tidak terdaftar di WhatsApp membuang kuota harian dan memperbesar risiko pemblokiran nomor pengirim. Periksa dulu sebelum broadcast besar:

bash
curl -X POST https://waq.karyawah.id/v1/contacts/validate \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{"device_id": "<device_id>"}'

Pemeriksaan berjalan di latar belakang. Setelah selesai, hapus yang tidak valid:

bash
curl -X DELETE https://waq.karyawah.id/v1/contacts/invalid \
  -H "Authorization: Bearer $TOKEN"