D
API Reference

Broadcast

Endpoint broadcast — send_broadcast (one-shot) dan broadcast/scheduler (jadwal). Kedua endpoint spawn goroutine async dengan rate limiter 8 msg/s.

Endpoint untuk mengirim pesan ke banyak penerima sekaligus. Kedua endpoint return immediately — pengiriman sebenarnya berjalan async di goroutine.

POST /v1/send_broadcast

Kirim broadcast one-shot — payload berisi daftar penerima dan pesan.

Handler: handlers/broadcast.go:237 SubmitBroadcastMessage

Request body

PayloadBroadcast struct (models/mongo_broadcast.go:15-38):

FieldTipeWajibDeskripsi
tokenstring✅Device token
numbers[]string❌Daftar nomor tujuan
message[]BroadcastMessages❌Daftar pesan (multi-variant)
messagexstring❌Pesan tunggal alternatif
sendModestring❌Mode kirim
send_allstring❌Numbers mode
isFilterbool❌Aktifkan filter
criteriastring❌Kriteria filter
teamIdstring❌Team ID
storeIdstring❌Store ID
productList[]string❌Filter produk
statusList[]string❌Filter status
startDatestring❌Filter tanggal mulai
endDatestring❌Filter tanggal akhir
statusStartDatestring❌Status start date
statusEndDatestring❌Status end date
tagList[]TagList❌Filter tag
segmentList[]string❌Filter segment
idBroadcaststring❌Broadcast ID
idScedulerstring❌Scheduler ID (jika dari scheduler)
batchIdstring❌Batch ID
runningModestring❌Mode running

Response (sukses)

json
{"result": true, "message": "test submit"}

Response (error)

json
{"result": false, "message": "<err>"}

Error source: GetDevicebyFilter({"token": payload.Token}) — device tidak ditemukan.


POST /v1/broadcast/scheduler

Trigger broadcast terjadwal — baca konfigurasi dari broadcast_scedulers collection, lalu fan-out.

Handler: handlers/broadcast.go:29 SubmitBroadcastScheduler

Request body

PayloadBroadcastScheduler struct (broadcast.go:1861-1865):

FieldTipeWajibDeskripsi
broadcast_scheduler_idstring✅ID scheduler di broadcast_scedulers collection
batch_idstring❌Override batch ID
running_modestring❌manual atau auto

Response (sukses)

json
{
  "status": "success",
  "message": "Broadcast Sedang Dalam Pengiriman"
}

Response (error)

StatusKondisiBody
400BodyParser gagal{"status": "error", "message": "Invalid request payload"}
400broadcast_scheduler_id kosong{"status": "error", "message": "Broadcast scheduler ID is required"}
404Scheduler tidak ditemukan{"status": "error", "message": "Scheduler not found"}
500Database error{"status": "error", "message": "Database error"}
500Aggregate gagal{"status": "error", "message": "Failed to process scheduler data"}
500Decode gagal{"status": "error", "message": "Failed to decode scheduler data"}
404Data kosong{"status": "error", "message": "Scheduler data not found"}
400Device token kosong{"status": "error", "message": "Device token not found"}
400Pesan kosong{"status": "error", "message": "No broadcast messages found"}

Behavior fan-out

Kedua endpoint spawn RunningSubmitBroadcastMessage goroutine (broadcast.go:266):

  • Rate limiter: 8 msg/s (token bucket, burst 8)
  • Timeout: 60 menit overall, 90 detik per-pesan
  • Endpoint WA gateway: EngineUri + "send-broadcast" (text), EngineUri + "send-media" (media)
  • Log: per-pesan ke broadcast_logs collection
  • Recovery: jika gagal dan mode broadcast_sceduler, set onprogress: false di scheduler

Lihat Broadcast Scheduler untuk detail alur.


Contoh request

send_broadcast (one-shot)

bash
curl -X POST https://api.dazo.id/v1/send_broadcast \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  -d '{
    "token": "device-token-xxx",
    "numbers": ["62812xxxx", "62813xxxx"],
    "messagex": "Promo minggu ini!",
    "teamId": "team-1",
    "storeId": "store-1"
  }'

broadcast/scheduler

bash
curl -X POST https://api.dazo.id/v1/broadcast/scheduler \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  -d '{
    "broadcast_scheduler_id": "scheduler-uuid-xxx",
    "running_mode": "manual"
  }'

Tenant CRM

POST /v1/send_broadcast_crm (handlers/broadcast_crm.go:127) — varian CRM, pakai EngineUriCRM + "send-broadcast" (:5003) dan submitPoint (non-context). Saat ini panic (MongoClientCrm nil).


Kembali ke