D
API Reference

Send Outbound

Endpoint kirim pesan keluar — send_message, send_image, send_document, send_audio, send_video, send_link, send_location, send_express. Detail request param dan response per tipe pesan.

Endpoint untuk mengirim pesan keluar. Semua handler memakai shared Payload struct dan memanggil saveMessageMongo yang menulis ke chat_inbox + chat_outbox.

Shared request body

Semua endpoint send_* memakai Payload struct (handlers/chat.go:22-72). Field wajib divalidasi:

FieldTipeWajibDeskripsi
tokenstring✅Device token (untuk resolve device)
numberstring✅Nomor tujuan (support comma-separated untuk multi-recipient)

Field opsional (per tipe pesan)

FieldTipeDipakai diDeskripsi
messagestringmessage, expressKonten teks
filestringimage, document, audio, videoURL/path file media
captionstringimage, videoCaption media
linkstringlinkURL link
latitudestringlocationLat
longitudestringlocationLng
locationNamestringlocationNama lokasi
locationAddressstringlocationAlamat lokasi
datestringsemuaOverride tanggal (default: today)
timestringsemuaOverride waktu (default: now)
pttstringaudioPush-to-talk flag
rolestringsemuaRole pengirim (CS/Owner/Admin/Gudang/bot)
team_idstringsemuaCS ID pengirim
teamgudang_idstringsemuaGudang ID (jika role=Gudang)
teamgeneral_idstringsemuaGeneral team ID
team_namestringsemuaNama team pengirim
profile_namestringsemuaNama profil
kategoristringsemuaKategori pesan
groupnamestringsemuaNama grup (jika ke group)
temp_idstringsemuaTemp ID
quoted_message_idstringsemuaID pesan yang di-quote
raw_messagestringsemuaRaw message blob
expressboolsemuaJika true, synchronous via sendNotif

Validasi tambahan

validateAuthMongo (chat_submit.go:877-891) memeriksa:

KondisiPesan error
Nomor invalid (regex ^[0-9,\-,\+]+$)"Nomor tujuan tidak valid!"
Device tidak ditemukan (orderPaket.ID == "")"Token salah"
Device nonaktif (!orderPaket.Status)"Device sudah tidak aktif/expired!"

Response umum

Sukses

json
{
  "result": true,
  "message": "Kirim pesan sukses!",
  "status": "pending",
  "number": "62812xxxx",
  "ids": ["inbox-id-1", "inbox-id-2"],
  "data": {/* ChatInboxStruct */}
}

Error

KondisiBody
Validasi gagal422 {"errors": [{"field": "...", "tag": "...", "message": "..."}]}
Field wajib kosong{"result": false, "message": "Pesan harus diisi"} (hanya send_message/send_express)
Device tidak ditemukan{"result": false, "message": "<err>"}
Validasi auth gagal{"result": false, "message": "<errMessage>"}
Save gagal{"result": false, "message": "<err>"}

POST /v1/send_message

Kirim pesan teks.

Handler: handlers/chat_submit.go:26 SubmitMessage

Field khusus

FieldWajibCatatan
message✅ (di-check manual)Konten teks — jika kosong return "Pesan harus diisi"

Behavior

  • MessageType = Chat
  • saveMessageMongo menulis ke chat_inbox (Jenis=keluar, Tipe=chat) + chat_outbox
  • Mendukung Spintax {hai|halo|selamat} di message (di-expand di saveMessageMongo)
  • status_ack = "pending" (default) atau "sent"/"error" jika express=true

POST /v1/send_image

Kirim pesan gambar.

Handler: handlers/chat_submit.go:77 SubmitImage

Field khusus

FieldWajibCatatan
fileseharusnya ✅ (tapi dead check)URL/path gambar
caption❌Caption gambar

Behavior

  • MessageType = Image
  • saveMessageMongo endpoint WA gateway: send-image

POST /v1/send_document

Kirim dokumen.

Handler: handlers/chat_submit.go:127 SubmitDocument

Field khusus

FieldWajibCatatan
fileseharusnya ✅ (tapi dead check)URL/path dokumen

Behavior

  • MessageType = Document
  • Endpoint WA gateway: send-document

POST /v1/send_audio

Kirim audio.

Handler: handlers/chat_submit.go:176 SubmitAudio

Field khusus

FieldWajibCatatan
fileseharusnya ✅ (tapi dead check)URL/path audio
ptt❌Push-to-talk flag

Behavior

  • MessageType = Audio
  • Endpoint WA gateway: send-audio (atau send-document dengan ptt flag)

POST /v1/send_video

Kirim video.

Handler: handlers/chat_submit.go:225 SubmitVideo

Field khusus

FieldWajibCatatan
fileseharusnya ✅ (tapi dead check)URL/path video
caption❌Caption video

Behavior

  • MessageType = Video
  • Endpoint WA gateway: send-video (atau send-image)

POST /v1/send_link

Kirim link dengan preview.

Handler: handlers/chat_submit.go:274 SubmitLink

Field khusus

FieldWajibCatatan
linkseharusnya ✅ (tapi dead check)URL link

Behavior

  • MessageType = Link
  • Endpoint WA gateway: send-link
  • MatchedText di-set ke payload.Link

POST /v1/send_location

Kirim lokasi.

Handler: handlers/chat_submit.go:323 SubmitLocation

Field khusus

FieldWajibCatatan
latitudeseharusnya ✅ (tapi dead check)Lat
longitudeseharusnya ✅ (tapi dead check)Lng
locationName❌Nama lokasi
locationAddress❌Alamat lokasi

Behavior

  • MessageType = Location
  • Pesan di-set ke "lat,lng"
  • Endpoint WA gateway: send-location

POST /v1/send_express

Kirim pesan teks synchronous — langsung POST ke WA gateway tanpa lewat chat_outbox.

Handler: handlers/chat_submit.go:372 SubmitExpress

Field khusus

FieldWajibCatatan
message✅ (di-check manual)Konten teks

Behavior

  • Force payload.Express = true (chat_submit.go:405)
  • saveMessageMongo memanggil sendNotif(...) synchronous — langsung POST ke WA gateway :5002
  • status_ack di-set langsung di chat_inbox:
    • pending — sebelum kirim
    • sent — sukses (data.Result == true)
    • error — gagal
  • Tidak ada row chat_outbox dibuat

Response (sukses)

json
{
  "result": true,
  "message": "Kirim pesan sukses!",
  "status": "pending",
  "number": "62812xxxx",
  "ids": [...],
  "data": {/* ChatInboxStruct */}
}

Contoh request

send_message (normal)

bash
curl -X POST https://api.dazo.id/v1/send_message \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  -d '{
    "token": "device-token-xxx",
    "number": "62812xxxx,62813xxxx",
    "message": "Halo {selamat|hai}, pesan dari Dazo",
    "role": "CS",
    "team_id": "cs-001",
    "team_name": "CS Andi",
    "teamgeneral_id": "team-general-1"
  }'

send_image

bash
curl -X POST https://api.dazo.id/v1/send_image \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  -d '{
    "token": "device-token-xxx",
    "number": "62812xxxx",
    "file": "https://cdn.dazo.id/image.jpg",
    "caption": "Ini gambar produk"
  }'

send_express

bash
curl -X POST https://api.dazo.id/v1/send_express \
  -H "Authorization: Bearer <jwt>" \
  -H "Content-Type: application/json" \
  -d '{
    "token": "device-token-xxx",
    "number": "62812xxxx",
    "message": "OTP Anda: 123456"
  }'

Kembali ke