D
Modul

Broadcast

Broadcast pesan WhatsApp ke kontak/segment/tag. Scheduler vs manual, recipient selection, pengiriman di service eksternal.

Modul broadcast mengirim pesan WhatsApp massal ke kontak berdasarkan tag, segment, atau daftar eksplisit. Dua mode: manual (langsung) dan scheduler (terjadwal).

File kunci

FileBarisPeran
app/Http/Controllers/BroadcastscedularController.php1.450Scheduler CRUD, filter recipient, statistik
app/Http/Controllers/BroadcastchatController.php929Message CRUD (pesan + media), overview
app/Models/BroadcastSceduler.php74Model scheduler
app/Models/BroadcastMessage.php37Model pesan
app/Models/BroadcastLog.php48Model log pengiriman

Model

BroadcastMessage

Field: title, message (array {type:'text'|'images'|'video'|'file', message, original_name, stored_name, size}), media_type, team_id, store_id.

BroadcastSceduler

Field: device, message_id, mode (BroadcastTarget enum), type (SchedulerTypeCast), status (bool), broadcast_type ('langsung'|'jadwal'), start_date, end_date, time, contact_list[], product_list[], status_list[], tag_list[], segment_list[], onprogress (bool), last_execute_date, last_manualrun_date.

BroadcastLog

Field: status (bool — sukses/gagal), broadcast_id, customer_id, batch_id, store_id.

Scheduler vs Manual

  • Manual (broadcast_type='langsung'): kirim langsung, update last_manualrun_date. Frontend trigger
  • Scheduler (broadcast_type='jadwal'): punya start_date/end_date/time/type (once/once-range/everidate/every-range). Worker eksternal update last_execute_date

Recipient selection

FilterCara
mode='tag_customer'Filter by tag_list + criteria
mode='segment_customer'Filter by segment_list (hanya index [0])
contact_listDaftar eksplisit
product_listFilter customer yang beli produk tertentu
status_listFilter by status order customer

Criteria tag

CriteriaQuery MongoDB
andelemMatch $eq per tag (semua tag harus ada)
orwhereIn (salah satu tag)
exclude!= (tidak ada tag)

Route

Web (routes/web.php:435)

MethodPathFungsi
GET/broadcast/messageIndex pesan
GET/broadcast/createForm buat pesan
POST/broadcast/storeSimpan pesan
GET/broadcast/sceduler/createForm buat scheduler
POST/broadcast/sceduler/storeSimpan scheduler

API (routes/api.php:627)

Prefix /broadcast:

MethodPathFungsi
GET/broadcast/listList pesan
POST/broadcast/duplicate/{id}Duplikasi
PUT/broadcast/update/{id}Update pesan
DELETE/broadcast/destroy/{id}Hapus
GET/broadcast/scedulerList scheduler
POST/broadcast/sceduler/saveSimpan scheduler
PATCH/broadcast/sceduler/change-status/{id}Toggle status
POST/broadcast/sceduler/count-recipientsHitung penerima

Integrasi

ServiceEndpointUntuk
Engine WA (url_engine)GET /api/device-infoCek status device via DeviceService
AWS S3upload/deleteUpload media pesan

Temuan

  • updatestatus duplikat changeStatus — tanpa return response & tanpa permission check. Salah satu harus dihapus
  • Index2.vue mungkin orphan — pola duplikat seperti Pages/Biolink copy/
  • Typo persisten Sceduler — sudah merasuk ke nama file, controller, model, route, frontend. Jangan perbaiki tanpa koordinasi lintas repo
  • Tidak ada retry/throttle di Laravel — tidak ditemukan mekanisme retry. Throttle hanya di middleware API umum