WhatsApp

Kirim Pesan WhatsApp

Kirim pesan teks, media, lokasi, audio, dan video lewat API whatsGo.

Endpoint ini memungkinkan kamu mengirim berbagai tipe pesan WhatsApp — teks, gambar, audio, video, dokumen, lokasi, template, dan pesan interaktif — dari sistem kamu ke nomor WhatsApp tujuan.

Endpoint

POST /external-api/inbox/send-message

Base URL: https://whats.sahabatmobile.com

Header yang dibutuhkan

Header Nilai
Authorization Bearer <api_key>
Content-Type application/json
Idempotency-Key Opsional. Kunci unik untuk mencegah pengiriman ganda.

Body Request — Field Umum

Setiap request harus mengirim JSON body. Berikut field yang berlaku untuk semua tipe pesan.

Field Tipe Wajib Deskripsi
to string Ya Nomor tujuan dalam format E.164 tanpa tanda + (contoh: 6281234567890).
type string Ya Tipe pesan. Salah satu dari: text, image, audio, video, document, location, template, interactive.
channel_id string Tidak ID saluran WhatsApp pengirim. Diperlukan jika workspace memiliki lebih dari satu saluran terhubung.

Tipe Pesan

Field tambahan di body request bergantung pada nilai type. Berikut masing-masing tipe beserta contohnya.

Teks

Mengirim pesan teks biasa. Bisa menyertakan link dan preview URL jika preview_url diaktifkan.

Field Tipe Wajib Deskripsi
text.body string Ya Isi pesan teks. Maksimal 4.096 karakter.
text.preview_url boolean Tidak Jika true, WhatsApp akan menampilkan preview untuk link yang ada di pesan. Default: false.

Contoh request:

curl -X POST "https://whats.sahabatmobile.com/external-api/inbox/send-message" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "6281234567890",
    "type": "text",
    "text": {
      "body": "Halo! Pesan ini dikirim lewat API whatsGo.",
      "preview_url": true
    }
  }'

Gambar

Mengirim gambar (JPG, PNG) beserta caption opsional.

Field Tipe Wajib Deskripsi
image.link string (URL) Ya URL publik menuju file gambar. Format: JPG atau PNG. Maksimal 5 MB.
image.caption string Tidak Caption yang menyertai gambar. Maksimal 1.024 karakter.

Contoh request:

curl -X POST "https://whats.sahabatmobile.com/external-api/inbox/send-message" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "6281234567890",
    "type": "image",
    "image": {
      "link": "https://example.com/images/promo.jpg",
      "caption": "Promo spesial hari ini!"
    }
  }'

Audio

Mengirim file audio (MP3, OGG, AMR).

Field Tipe Wajib Deskripsi
audio.link string (URL) Ya URL publik menuju file audio. Format: MP3, OGG, atau AMR. Maksimal 16 MB.

Contoh request:

curl -X POST "https://whats.sahabatmobile.com/external-api/inbox/send-message" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "6281234567890",
    "type": "audio",
    "audio": {
      "link": "https://example.com/audio/voice-note.mp3"
    }
  }'

Video

Mengirim file video beserta caption opsional.

Field Tipe Wajib Deskripsi
video.link string (URL) Ya URL publik menuju file video. Format: MP4. Maksimal 16 MB.
video.caption string Tidak Caption yang menyertai video. Maksimal 1.024 karakter.

Contoh request:

curl -X POST "https://whats.sahabatmobile.com/external-api/inbox/send-message" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "6281234567890",
    "type": "video",
    "video": {
      "link": "https://example.com/video/product-demo.mp4",
      "caption": "Ini video demo produk kami."
    }
  }'

Dokumen

Mengirim file dokumen beserta caption dan nama file.

Field Tipe Wajib Deskripsi
document.link string (URL) Ya URL publik menuju file dokumen. Mendukung PDF, DOCX, XLSX, TXT. Maksimal 100 MB.
document.caption string Tidak Caption yang menyertai dokumen. Maksimal 1.024 karakter.
document.filename string Tidak Nama file yang ditampilkan kepada penerima (contoh: invoice-juni-2026.pdf).

Contoh request:

curl -X POST "https://whats.sahabatmobile.com/external-api/inbox/send-message" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "6281234567890",
    "type": "document",
    "document": {
      "link": "https://example.com/files/invoice-2026-06.pdf",
      "caption": "Invoice bulan Juni 2026.",
      "filename": "invoice-2026-06.pdf"
    }
  }'

Lokasi

Mengirim koordinat lokasi beserta nama dan alamat opsional.

Field Tipe Wajib Deskripsi
location.latitude number Ya Garis lintang. Rentang: -90 s/d 90.
location.longitude number Ya Garis bujur. Rentang: -180 s/d 180.
location.name string Tidak Nama lokasi yang ditampilkan (contoh: "Kantor Pusat").
location.address string Tidak Alamat lokasi yang ditampilkan.

Contoh request:

curl -X POST "https://whats.sahabatmobile.com/external-api/inbox/send-message" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "6281234567890",
    "type": "location",
    "location": {
      "latitude": -6.2088,
      "longitude": 106.8456,
      "name": "Kantor Pusat Sahabat Mobile",
      "address": "Jl. Sudirman No. 123, Jakarta"
    }
  }'

Multi-Channel

Jika workspace kamu memiliki lebih dari satu saluran WhatsApp terhubung, tentukan channel_id untuk memilih saluran pengirim. Jika hanya ada satu saluran, field ini bersifat opsional — sistem akan menggunakan saluran default secara otomatis.

Untuk mengetahui daftar saluran yang tersedia, gunakan endpoint List Kontak atau lihat di dashboard pada menu Pengaturan > Saluran.

{
  "to": "6281234567890",
  "type": "text",
  "channel_id": "ch_abc123def456",
  "text": {
    "body": "Pesan ini dikirim dari saluran tertentu."
  }
}

Response

Semua response mengikuti format envelope standar whatsGo.

Response sukses

{
  "success": true,
  "message": "Pesan berhasil dikirim.",
  "data": {
    "messageId": "msg_7a8b9c0d1e2f",
    "whatsappMessageId": "wamid.HBgLMjgxMjM0NTY3ODkw",
    "to": "6281234567890",
    "type": "text",
    "channelId": "ch_abc123def456",
    "status": "sent",
    "createdAt": "2026-07-16T10:30:00.000000Z"
  }
}

Field response

Field Tipe Deskripsi
messageId string ID unik pesan di sistem whatsGo.
whatsappMessageId string ID pesan dari WhatsApp server. Berguna untuk tracking status delivery.
to string Nomor tujuan pesan.
type string Tipe pesan yang dikirim.
channelId string ID saluran WhatsApp yang digunakan.
status string Status pengiriman: sent, delivered, read, atau failed.
createdAt string Timestamp pengiriman (ISO 8601).

Response error

{
  "success": false,
  "error": {
    "code": "VALIDATION_INVALID_PHONE",
    "message": "Format nomor telepon tidak valid.",
    "details": {
      "field": "to",
      "hint": "Gunakan format kode negara + nomor tanpa tanda plus (contoh: 628123456789)."
    }
  }
}
Aturan Jendela 24 Jam

WhatsApp hanya mengizinkan pesan template di luar jendela 24 jam sejak pesan terakhir diterima dari pengguna. Jika jendela sudah tertutup dan kamu mencoba mengirim pesan tipe selain template, request akan gagal. Pastikan kamu memahami status jendela sebelum mengirim pesan. Lihat Template WhatsApp untuk detail lebih lanjut.

Pesan Error

Berikut daftar error yang mungkin terjadi saat mengirim pesan WhatsApp.

Kode Error HTTP Code Deskripsi
VALIDATION_INVALID_PHONE 422 Format nomor telepon tujuan tidak valid.
VALIDATION_MISSING_TYPE 422 Field type wajib diisi.
VALIDATION_MISSING_FIELD 422 Field yang wajib untuk tipe pesan tertentu belum diisi (contoh: text.body untuk tipe text).
VALIDATION_INVALID_TYPE 422 Nilai type tidak dikenali. Harus salah satu dari: text, image, audio, video, document, location, template, interactive.
VALIDATION_INVALID_URL 422 URL media tidak valid atau tidak dapat diakses oleh server whatsGo.
VALIDATION_FILE_TOO_LARGE 422 Ukuran file media melebihi batas yang diizinkan.
WHATSAPP_TEMPLATE_REQUIRED 400 Jendela 24 jam sudah tertutup. Hanya pesan template yang diperbolehkan.
WHATSAPP_SEND_FAILED 502 WhatsApp server menolak pengiriman. Periksa nomor tujuan atau status saluran.
WHATSAPP_CHANNEL_NOT_FOUND 404 ID saluran yang diberikan tidak ditemukan atau tidak aktif.
RATE_LIMIT_EXCEEDED 429 Melebihi batas request rate limit. Coba lagi setelah beberapa saat.
unauthorized 401 API key tidak valid atau belum disediakan.