Webhook Mailketing
Di halaman ini
Webhook membuat Mailketing mengirim data secara otomatis ke URL di sistem Anda setiap kali terjadi aksi tertentu, misalnya email dibuka, link diklik, atau ada subscriber baru. Panduan ini untuk developer yang ingin menangkap data tersebut, misalnya untuk memperbarui CRM atau database pelanggan.
Yang Perlu Disiapkan
- Akun Mailketing dan akses ke menu Integrasi → WebHook.
- Server atau hosting yang bisa diakses publik lewat
http://atauhttps://. URL localhost dan IP jaringan lokal (192.168.x.x, 10.x.x.x, 172.x.x.x) ditolak. - Sedikit kemampuan pemrograman (contoh di bawah memakai PHP).
Event yang Didukung
Mailketing mengirim data dengan method POST dan Content-Type: application/json. Setiap event punya kolom URL sendiri, jadi Anda bisa memakai satu URL untuk semua event atau URL berbeda per event.
| Event | Kolom di dashboard | Nilai type | Dikirim saat |
|---|---|---|---|
| Bounce | Bounce Webhook | bounce | Email gagal terkirim |
| Open | Open Webhook | emailopen | Penerima membuka email |
| Click | Click Webhook | emailclick | Link di email diklik |
| New Subscriber | New Subscriber Webhook | newsubscriber | Subscriber baru masuk ke list |
| Unsubscribe | Unsubscribe Webhook | unsubscribe | Subscriber berhenti berlangganan |
Akun Business API mendapat satu kolom tambahan, Delivered Webhook (type: delivered), yang dikirim saat server penerima menerima email. Detail formatnya ada di dokumentasi webhook.
Langkah-langkah Mengatur Webhook
Langkah 1: Buat file penerima webhook di sistem Anda
Misalnya Anda membuat file webhook.php di https://domainanda.com/webhook.php. Contoh berikut membaca data JSON dan memisahkannya per event:
<?php
// webhook.php — terima data dari Mailketing
$payload = json_decode(file_get_contents('php://input'), true);
if (!is_array($payload) || empty($payload['type'])) {
http_response_code(400);
exit;
}
switch ($payload['type']) {
case 'newsubscriber':
// subscriber baru masuk ke list
$email = $payload['email'];
$first_name = $payload['first_name'];
$last_name = $payload['last_name'];
$mobile = $payload['mobile'];
$list_id = $payload['list_id'];
$date = $payload['date'];
// proses Anda di sini
break;
case 'unsubscribe':
// ada email yang berhenti berlangganan
$email = $payload['email'];
$date = $payload['date'];
break;
case 'emailopen':
// subscriber membuka email
$email = $payload['email'];
$date = $payload['date'];
$message_id = $payload['message_id'];
break;
case 'emailclick':
// subscriber mengklik link di email
$email = $payload['email'];
$link_click = $payload['link_clicked'];
$date = $payload['date'];
break;
case 'bounce':
// email gagal terkirim
$email = $payload['email'];
$reason = $payload['reason'];
$date = $payload['date'];
$message_id = $payload['message_id'];
break;
}
// jawab cepat dengan HTTP 200
http_response_code(200);
echo 'OK';Unggah file ke server dan pastikan URL-nya bisa dibuka dari internet.
Langkah 2: Isi URL di dashboard Mailketing
- Masuk ke dashboard Mailketing.
- Buka menu Integrasi → WebHook.
- Di kotak Konfigurasi Webhook, tempel URL penerima ke kolom event yang ingin ditangkap: Bounce Webhook, Open Webhook, Click Webhook, New Subscriber Webhook, dan/atau Unsubscribe Webhook. Kolom yang tidak dipakai boleh dikosongkan.
- Klik Simpan Pengaturan Webhook.
Gambar di atas berasal dari tampilan lama (label Integrations → WebHook, tombol Simpan Pengaturan). Di tampilan terkini menu bernama Integrasi → WebHook dan tombolnya Simpan Pengaturan Webhook.
Format Data per Event
Open (emailopen)
{
"type": "emailopen",
"email": "[email protected]",
"date": "2026-08-18 10:30:00",
"message_id": "abc123def456"
}| Field | Keterangan |
|---|---|
type | Selalu emailopen |
email | Email penerima |
date | Waktu email dibuka (UTC, format Y-m-d H:i:s) |
message_id | ID pesan. Untuk email dari API, nilainya sama dengan message_id di respons POST /send |
Click (emailclick)
{
"type": "emailclick",
"email": "[email protected]",
"link_clicked": "https://your-site.com/promo",
"date": "2026-08-18 10:35:00"
}| Field | Keterangan |
|---|---|
type | Selalu emailclick |
email | Email penerima yang mengklik |
link_clicked | URL yang diklik |
date | Waktu klik |
Bounce (bounce)
{
"type": "bounce",
"email": "[email protected]",
"reason": "User Unknown",
"date": "2026-08-18 10:20:00",
"message_id": "abc123def456"
}| Field | Keterangan |
|---|---|
type | Selalu bounce |
email | Email penerima yang bounce |
reason | Alasan bounce |
date | Waktu bounce (format Y-m-d H:i:s) |
message_id | ID pesan untuk pelacakan |
New Subscriber (newsubscriber)
{
"type": "newsubscriber",
"email": "[email protected]",
"first_name": "John",
"last_name": "Doe",
"list_id": "1",
"mobile": "628123456789",
"date": "2026-08-18 10:15:00"
}| Field | Keterangan |
|---|---|
type | Selalu newsubscriber |
email, first_name, last_name | Data subscriber |
list_id | ID list tempat subscriber masuk |
mobile | Nomor HP (format 62…) |
date | Waktu subscriber masuk |
Unsubscribe (unsubscribe)
{
"type": "unsubscribe",
"email": "[email protected]",
"date": "2026-08-18 10:40:00"
}| Field | Keterangan |
|---|---|
type | Selalu unsubscribe |
email | Email yang berhenti berlangganan |
date | Waktu unsubscribe |
Cara Memastikan Berhasil
Tombol Uji di samping setiap kolom hanya memeriksa format URL dan menampilkan hasil simulasi. Tombol ini tidak mengirim data sungguhan ke server Anda. Untuk uji nyata:
- Tambahkan baris di file penerima untuk mencatat data masuk, misalnya
file_put_contents('webhook-log.txt', file_get_contents('php://input') . PHP_EOL, FILE_APPEND);. - Picu event sungguhan: tambahkan subscriber uji ke list (event New Subscriber), atau kirim email ke alamat Anda sendiri lalu buka dan klik link-nya (event Open dan Click).
- Cek file log. Jika data JSON muncul, webhook sudah berjalan.
Pertanyaan yang Sering Diajukan
URL saya ditolak saat disimpan.
Pastikan URL diawali http:// atau https:// dan memakai domain/IP publik. Localhost dan IP jaringan lokal tidak bisa dipakai.
Bagaimana mencocokkan event dengan email yang saya kirim via API?
Simpan message_id dari respons POST /send. Event Open dan Bounce membawa message_id yang sama.
Apa yang harus dibalas server saya?
Cukup balas HTTP 200 secepat mungkin. Jika ada proses berat (misalnya memanggil sistem lain), simpan datanya dulu lalu proses terpisah.
Zona waktu kolom date apa?
Dokumentasi webhook menyebut waktu event Open dalam UTC. Untuk Indonesia bagian barat (WIB), tambahkan 7 jam.
Contoh Lama (Masih Berlaku)
Contoh file webhook.php dari versi lama dokumen ini masih bisa dipakai, karena nama field-nya sama:
<?php
$json = file_get_contents('php://input');
$data=json_decode($json);
if($data->type=='newsubscriber'){
$email = $data->email;
$mobile = $data->mobile;
$first_name = $data->first_name;
$last_name = $data->last_name;
$date =$data->date;
//silakan masukkan function anda disini, ini adalah response ketika ada subscriber baru masuk ke list mailketing
}
if($data->type=='unsubscribe'){
$email = $data->email;
$date =$data->date;
//silakan masukkan function anda disini, ini adalah response ketika ada email yang unsubcribe
}
if($data->type=='emailopen'){
$email = $data->email;
$date =$data->date;
//silakan masukkan function anda disini, ini adalah response ketika ada subscriber anda membuka email
}
if($data->type=='emailclick'){
$email = $data->email;
$link_click = $data->link_clicked;
$date =$data->date;
//silakan masukkan function anda disini, ini adalah response ketika ada subscriber click link tertentu pada email anda
}
if($data->type=='bounce'){
$email = $data->email;
$reason = $data->reason;
$date =$data->date;
//silakan masukkan function anda disini, ini adalah response ketika ada subscriber bounced
}
?>Panduan Terkait
Masih butuh bantuan?
Tim support Mailketing siap membantu setup domain, SMTP, maupun integrasi API melalui WhatsApp atau email.
