Langsung ke konten

Webhook Mailketing

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:// atau https://. 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.

EventKolom di dashboardNilai typeDikirim saat
BounceBounce WebhookbounceEmail gagal terkirim
OpenOpen WebhookemailopenPenerima membuka email
ClickClick WebhookemailclickLink di email diklik
New SubscriberNew Subscriber WebhooknewsubscriberSubscriber baru masuk ke list
UnsubscribeUnsubscribe WebhookunsubscribeSubscriber 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

  1. Masuk ke dashboard Mailketing.
  2. Buka menu Integrasi → WebHook.
  3. 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.
  4. Klik Simpan Pengaturan Webhook.
Halaman pengaturan WebHook di dashboard Mailketing

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"
}
FieldKeterangan
typeSelalu emailopen
emailEmail penerima
dateWaktu email dibuka (UTC, format Y-m-d H:i:s)
message_idID 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"
}
FieldKeterangan
typeSelalu emailclick
emailEmail penerima yang mengklik
link_clickedURL yang diklik
dateWaktu klik

Bounce (bounce)

{
  "type": "bounce",
  "email": "[email protected]",
  "reason": "User Unknown",
  "date": "2026-08-18 10:20:00",
  "message_id": "abc123def456"
}
FieldKeterangan
typeSelalu bounce
emailEmail penerima yang bounce
reasonAlasan bounce
dateWaktu bounce (format Y-m-d H:i:s)
message_idID 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"
}
FieldKeterangan
typeSelalu newsubscriber
email, first_name, last_nameData subscriber
list_idID list tempat subscriber masuk
mobileNomor HP (format 62…)
dateWaktu subscriber masuk

Unsubscribe (unsubscribe)

{
  "type": "unsubscribe",
  "email": "[email protected]",
  "date": "2026-08-18 10:40:00"
}
FieldKeterangan
typeSelalu unsubscribe
emailEmail yang berhenti berlangganan
dateWaktu 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:

  1. 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);.
  2. 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).
  3. 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

Apakah artikel ini membantu?

Masih butuh bantuan?

Tim support Mailketing siap membantu setup domain, SMTP, maupun integrasi API melalui WhatsApp atau email.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *