# Mailketing Webhook Documentation

> Webhook mengirimkan notifikasi real-time ke URL yang Anda konfigurasi di menu **Integrations → Webhook** (`webhookext.php`).
> Format: **POST** dengan `Content-Type: application/json`.

## Konfigurasi

Masuk ke **Menu → Integrations → Webhook**, lalu isi URL untuk setiap event:

| Event | Field DB | Deskripsi |
|-------|----------|-----------|
| Bounce | `webhook` | Saat email bounce (gagal terkirim) |
| Open | `webhook_open` | Saat penerima membuka email |
| Click | `webhook_click` | Saat link di email diklik |
| New Subscriber | `webhook_newsub` | Saat subscriber baru masuk |
| Unsubscribe | `webhook_unsub` | Saat subscriber berhenti berlangganan |

---

## Event Payload

### 1. Open Track (`emailopen`)

Dikirim saat penerima membuka email.

```json
{
  "type": "emailopen",
  "email": "subscriber@example.com",
  "date": "2026-08-18 10:30:00",
  "message_id": "abc123def456"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `type` | string | Selalu `"emailopen"` |
| `email` | string | Email penerima |
| `date` | string | Waktu open (UTC, format `Y-m-d H:i:s`) |
| `message_id` | string | ID unik pesan untuk tracking. Bisa custom (dari API) atau auto-generated |

### 2. Click Track (`emailclick`)

Dikirim saat penerima mengklik link di email.

```json
{
  "type": "emailclick",
  "email": "subscriber@example.com",
  "link_clicked": "https://your-site.com/promo",
  "date": "2026-08-18 10:35:00"
}
```

### 3. Bounce (`bounce`)

Dikirim saat email bounce.

```json
{
  "type": "bounce",
  "email": "subscriber@example.com",
  "reason": "User Unknown",
  "date": "2026-08-18 10:20:00",
  "message_id": "abc123def456"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `type` | string | Selalu `"bounce"` |
| `email` | string | Email penerima yang bounce |
| `reason` | string | Alasan bounce |
| `date` | string | Waktu bounce (format `Y-m-d H:i:s`) |
| `message_id` | string | ID unik pesan untuk tracking. Bisa custom (dari API) atau auto-generated |

### 4. New Subscriber (`newsubscriber`)

Dikirim saat subscriber baru ditambahkan ke list.

```json
{
  "type": "newsubscriber",
  "email": "subscriber@example.com",
  "first_name": "John",
  "last_name": "Doe",
  "list_id": "1",
  "mobile": "628123456789",
  "date": "2026-08-18 10:15:00"
}
```

### 5. Unsubscribe (`unsubscribe`)

Dikirim saat subscriber berhenti berlangganan.

```json
{
  "type": "unsubscribe",
  "email": "subscriber@example.com",
  "date": "2026-08-18 10:40:00"
}
```

---

## Contoh Penerima (PHP)

```php
<?php
$payload = json_decode(file_get_contents('php://input'), true);

switch ($payload['type']) {
    case 'emailopen':
        // $payload['email'], $payload['date'], $payload['message_id']
        break;
    case 'emailclick':
        // $payload['email'], $payload['link_clicked']
        break;
    case 'bounce':
        // $payload['email'], $payload['reason'], $payload['message_id']
        break;
    case 'newsubscriber':
        // $payload['email'], $payload['list_id']
        break;
    case 'unsubscribe':
        // $payload['email']
        break;
}
```
