Channel WhatsApp
Ambil daftar Channel WhatsApp perangkat, kirim atau jadwalkan postingan teks dan gambar, lalu cek statusnya lewat API.
Kirim postingan ke Channel WhatsApp yang dikelola nomor perangkat API key, misalnya untuk mengumumkan artikel baru atau promo dari sistem Anda sendiri.
Tersedia di paket Pro dan Enterprise. Nomor perangkat harus menjadi pemilik atau admin channel. Setiap postingan dihitung 1 pesan dari kuota bulanan. Untuk mengelola channel dari dashboard, lihat Kelola Channel WA.
Base URL https://dash.ngirimwa.com/api/v1
x-api-key: API_KEY_ANDA
Content-Type: application/json
Idempotency-Key: <uuid-unik-per-postingan> (opsional, sangat disarankan)| Endpoint | Fungsi |
|---|---|
GET /channels | Daftar channel yang dikelola perangkat |
POST /channels/posts | Kirim sekarang atau jadwalkan postingan |
GET /channels/posts/{post_id} | Cek status satu postingan |
Postingan ke channel memakai endpoint di halaman ini, bukan /messages/send.
Daftar Channel
GET /channels{
"success": true,
"message": "Channels retrieved successfully",
"data": {
"channels": [
{
"id": "120363000000000001@newsletter",
"name": "Promo Toko Maju Jaya",
"role": "owner",
"followers": 1250,
"invite_link": "https://whatsapp.com/channel/xxxxxxxxxxxxxxxxxxxxxx"
}
],
"stale": false
}
}| Field | Arti |
|---|---|
id | ID channel. Pakai sebagai channel_id saat posting |
role | owner (pemilik) atau admin |
followers | Jumlah pengikut |
stale | true bila perangkat sedang terputus dan daftar diambil dari data terakhir |
Tambahkan ?refresh=true untuk menarik ulang daftar dari WhatsApp, misalnya setelah nomor perangkat baru dijadikan admin sebuah channel.
Kirim Postingan
POST /channels/postsTeks
{
"channel_id": "120363000000000001@newsletter",
"message": "*Promo Akhir Pekan*\nDiskon 20% semua produk sampai Minggu.\nhttps://domain-anda.com/promo"
}Gambar
{
"channel_id": "120363000000000001@newsletter",
"message": "Koleksi terbaru sudah tersedia ๐",
"media": "https://domain-anda.com/images/koleksi.jpg",
"media_type": "image"
}Terjadwal
{
"channel_id": "120363000000000001@newsletter",
"message": "Live sale dimulai sekarang!",
"scheduled_at": "2026-10-20T19:00:00+07:00"
}| Field | Tipe | Wajib | Keterangan |
|---|---|---|---|
channel_id | string | โ | ID dari Daftar Channel. Angka tanpa @newsletter juga diterima |
message | string | โ untuk teks | Isi postingan, atau caption bila ada media. Maks. 4.096 karakter. Mendukung *tebal*, _miring_, ~coret~ |
media | string | โ | URL HTTPS publik sebuah gambar |
media_type | string | โ
bila ada media | Saat ini hanya image |
scheduled_at | string | โ | Waktu kirim (ISO 8601 dengan zona waktu), paling lambat 60 hari ke depan. Kosongkan untuk kirim sekarang |
- Gambar JPG dan PNG dikirim apa adanya. WebP, AVIF, dan format lain diubah otomatis ke JPG. Gambar lebih dari 5 MB diperkecil, dan ditolak bila tetap terlalu besar.
Idempotency-Keyyang sama selalu mengembalikan postingan yang sama, jadi request yang diulang tidak membuat postingan ganda.- Bila perangkat sedang terputus sesaat, postingan menunggu sampai 30 menit lalu dikirim. Bila sesi perangkat sudah berakhir (perlu scan QR), request langsung ditolak dengan
device_logged_out.
Respons
{
"success": true,
"message": "Channel post queued for delivery",
"data": {
"post_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx1",
"channel_id": "120363000000000001@newsletter",
"status": "queued",
"scheduled_at": null,
"sent_at": null,
"error": null,
"created_at": "2026-10-15T02:00:00.000Z"
}
}Postingan terjadwal dijawab dengan "message": "Channel post scheduled" dan "status": "scheduled".
Cek Status Postingan
GET /channels/posts/{post_id}Respons sama seperti Kirim Postingan, dengan status terbaru:
status | Arti |
|---|---|
scheduled | Menunggu waktu kirim |
queued, sending | Masuk antrean / sedang dikirim |
sent | Sudah tampil di channel (sent_at terisi) |
failed | Gagal; alasan di error.code dan error.message |
cancelled | Dibatalkan dari dashboard sebelum terkirim |
deleted | Dihapus dari channel |
Kode error.code saat gagal: not_admin (nomor bukan admin channel), device_offline (perangkat terputus lebih dari 30 menit), device_logged_out, quota_exceeded, subscription_inactive, plan_feature_required, media_invalid, media_error, unconfirmed (WhatsApp tidak mengonfirmasi postingan), send_failed.
Contoh cURL
curl https://dash.ngirimwa.com/api/v1/channels \
-H "x-api-key: API_KEY_ANDA"
curl -X POST https://dash.ngirimwa.com/api/v1/channels/posts \
-H "x-api-key: API_KEY_ANDA" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: artikel-1024" \
-d '{ "channel_id": "120363000000000001@newsletter", "message": "Artikel baru: Tips Jualan Online\nhttps://domain-anda.com/tips" }'Error Khusus Channel
details.code | HTTP | Arti |
|---|---|---|
plan_feature_required | 403 | Paket belum mendukung Channel. Upgrade ke Pro atau Enterprise |
channel_not_found | 404 | Channel tidak ada, atau nomor perangkat bukan pemilik/admin channel itu |
post_not_found | 404 | post_id tidak ada atau milik akun lain |
media_download_failed | 400 | URL media tidak bisa diunduh |
unsupported_media | 400 | media bukan gambar |
media_too_large | 400 | Gambar tetap lebih dari 5 MB setelah diperkecil |
device_not_connected | 409 | GET /channels: perangkat terputus dan belum ada daftar tersimpan |
Kode umum lain (API key, kuota, rate limit, perangkat logout) ada di Penanganan Error.