> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
> Use this file to discover all available pages before exploring further.

# MailerLite

> Secara otomatis menambahkan pelanggan ke daftar pelanggan MailerLite dan memicu otomatisasi email berdasarkan peristiwa Dodo Payments.

## Pendahuluan

Secara otomatis menyinkronkan pelanggan yang membayar Anda ke daftar pelanggan MailerLite saat peristiwa pembayaran terjadi. Tambahkan pelanggan ke grup tertentu, memicu alur kerja otomatisasi, dan jaga agar daftar pemasaran email Anda tetap terbaru dengan data pembayaran yang nyata.

MailerLite adalah platform pemasaran email yang kuat untuk buletin, kampanye, dan otomatisasi. Integrasi ini membantu Anda mengelola pelanggan secara otomatis berdasarkan aktivitas pembayaran - sempurna untuk urutan onboarding, segmentasi pelanggan, dan kampanye pemasaran yang ditargetkan.

<Info>
  Integrasi ini memerlukan MailerLite API Key untuk otentikasi. Anda dapat membuatnya dari [MailerLite Integrations page](https://dashboard.mailerlite.com/integrations/api).
</Info>

## Memulai

<Steps>
  <Step title="Open the Webhook Section">
    Di dasbor Dodo Payments Anda, navigasikan ke <b>Webhooks + Tambah Endpoint</b> dan perluas dropdown integrasi.

    <Frame>
      <img src="https://mintcdn.com/dodopayments/j9AWnq3yJLUq3cjh/images/integrations/mailerlite.png?fit=max&auto=format&n=j9AWnq3yJLUq3cjh&q=85&s=4f247c342f82ffe529b79970fcf1a4e3" alt="Tambah Endpoint dan dropdown integrasi" style={{ maxHeight: '500px', width: 'auto' }} width="876" height="769" data-path="images/integrations/mailerlite.png" />
    </Frame>
  </Step>

  <Step title="Select MailerLite">
    Pilih kartu integrasi <b>MailerLite</b>.
  </Step>

  <Step title="Enter API Key">
    Masukkan MailerLite API Key Anda dalam konfigurasi.
  </Step>

  <Step title="Configure Transformation">
    Sunting kode transformasi untuk memformat data pelanggan agar sesuai dengan API MailerLite.
  </Step>

  <Step title="Test & Create">
    Uji dengan payload sampel dan klik <b>Create</b> untuk mengaktifkan sinkronisasi pelanggan.
  </Step>

  <Step title="Done!">
    Peristiwa pembayaran sekarang secara otomatis menyinkronkan pelanggan ke daftar MailerLite Anda.
  </Step>
</Steps>

## Contoh Kode Transformasi

### Tambahkan Pelanggan pada Pembayaran Berhasil

```javascript add_customer.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const p = webhook.payload.data;
    webhook.url = "https://connect.mailerlite.com/api/subscribers";
    webhook.payload = {
      email: p.customer.email,
      fields: {
        name: p.customer.name,
        company: p.customer.business_name || "",
        last_name: ""
      },
      groups: ["your-group-id-here"],
      status: "active"
    };
  }
  return webhook;
}
```

### Tambahkan Pelanggan ke Beberapa Grup Berdasarkan Produk

```javascript product_segmentation.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const p = webhook.payload.data;
    
    // Determine groups based on product or amount
    const groups = ["customers-group-id"];
    
    // Add to premium group if high-value purchase
    if (p.total_amount >= 10000) { // $100+
      groups.push("premium-customers-group-id");
    }
    
    webhook.url = "https://connect.mailerlite.com/api/subscribers";
    webhook.payload = {
      email: p.customer.email,
      fields: {
        name: p.customer.name,
        last_purchase_amount: (p.total_amount / 100).toFixed(2),
        last_purchase_date: new Date(webhook.payload.timestamp).toISOString().split('T')[0],
        payment_id: p.payment_id
      },
      groups: groups,
      status: "active"
    };
  }
  return webhook;
}
```

### Tambahkan Pelanggan Baru pada Aktivasi Langganan

```javascript subscription_subscriber.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType === "subscription.active") {
    const s = webhook.payload.data;
    webhook.url = "https://connect.mailerlite.com/api/subscribers";
    webhook.payload = {
      email: s.customer.email,
      fields: {
        name: s.customer.name,
        subscription_plan: s.product_id,
        subscription_amount: (s.recurring_pre_tax_amount / 100).toFixed(2),
        billing_frequency: s.payment_frequency_interval,
        subscription_start: new Date().toISOString().split('T')[0]
      },
      groups: ["subscribers-group-id", "active-subscriptions-group-id"],
      status: "active"
    };
  }
  return webhook;
}
```

### Perbarui Pelanggan pada Pembatalan Langganan

```javascript subscription_cancelled.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType === "subscription.cancelled") {
    const s = webhook.payload.data;
    // Use PUT to update existing subscriber
    webhook.url = "https://connect.mailerlite.com/api/subscribers/" + encodeURIComponent(s.customer.email);
    webhook.method = "PUT";
    webhook.payload = {
      fields: {
        subscription_status: "cancelled",
        cancellation_date: new Date().toISOString().split('T')[0]
      },
      groups: ["churned-customers-group-id"]
    };
  }
  return webhook;
}
```

### Tambahkan Pelanggan dengan Bidang Kustom

```javascript custom_fields.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const p = webhook.payload.data;
    webhook.url = "https://connect.mailerlite.com/api/subscribers";
    webhook.payload = {
      email: p.customer.email,
      fields: {
        name: p.customer.name,
        company: p.customer.business_name || "",
        country: p.customer.country || "",
        city: p.customer.city || "",
        phone: p.customer.phone || "",
        // Custom fields (must be created in MailerLite first)
        total_spent: (p.total_amount / 100).toFixed(2),
        customer_since: new Date().toISOString().split('T')[0],
        payment_method: p.payment_method || "unknown",
        currency: p.currency || "USD"
      },
      groups: ["paying-customers-group-id"],
      status: "active",
      subscribed_at: new Date().toISOString().replace('T', ' ').split('.')[0]
    };
  }
  return webhook;
}
```

### Memicu Otomatisasi melalui Peristiwa

```javascript trigger_automation.js icon="js" expandable theme={null}
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const p = webhook.payload.data;
    
    // First, ensure subscriber exists
    webhook.url = "https://connect.mailerlite.com/api/subscribers";
    webhook.payload = {
      email: p.customer.email,
      fields: {
        name: p.customer.name,
        // Add a trigger field that your automation watches
        last_payment_trigger: new Date().toISOString(),
        last_payment_amount: (p.total_amount / 100).toFixed(2)
      },
      status: "active"
    };
    
    // Tip: Create an automation in MailerLite that triggers
    // when 'last_payment_trigger' field is updated
  }
  return webhook;
}
```

## Tips

* Buat bidang kustom di MailerLite sebelum menggunakannya dalam transformasi Anda
* Gunakan grup untuk mengsegmentasi pelanggan berdasarkan produk, tingkat rencana, atau perilaku pembelian
* Siapkan alur kerja otomatisasi di MailerLite yang dipicu pada pembaruan bidang
* Gunakan perilaku upsert (POST ke /subscribers) untuk menghindari kesalahan pelanggan duplikat
* Simpan metadata pembayaran di bidang kustom untuk wawasan pelanggan yang lebih baik
* Uji dengan sekelompok kecil sebelum mengaktifkan untuk semua pembayaran

## Pengaturan Bidang Kustom

Sebelum menggunakan bidang kustom, Anda perlu membuatnya di MailerLite:

1. Buka dasbor MailerLite Anda
2. Buka **Subscribers Fields**
3. Klik **Create field** dan tambahkan bidang seperti:
   * `total_spent` (Number)
   * `customer_since` (Date)
   * `subscription_plan` (Text)
   * `payment_method` (Text)
   * `last_payment_amount` (Number)

## Pemecahan Masalah

<AccordionGroup>
  <Accordion title="Subscribers not being added">
    * Pastikan API Key benar dan aktif
    * Periksa bahwa alamat email valid (mematuhi RFC 2821)
    * Pastikan ID grup benar dan ada di akun Anda
    * Catatan: Pelanggan yang berhenti berlangganan, terpantul, atau masuk ke spam tidak dapat diaktifkan kembali melalui API
  </Accordion>

  <Accordion title="Custom fields not updating">
    * Pastikan bidang khusus ada di MailerLite sebelum digunakan
    * Periksa nama bidang cocok persis (peka huruf besar/kecil)
    * Pastikan nilai bidang sesuai jenis yang diharapkan (text, number, date)
  </Accordion>

  <Accordion title="Rate limit errors">
    * API MailerLite memiliki batas 120 permintaan per menit
    * Gunakan endpoint batch jika memproses banyak pelanggan
    * Terapkan strategi backoff untuk skenario volume tinggi
  </Accordion>

  <Accordion title="Group assignment not working">
    * Pastikan ID grup berupa string numerik
    * Periksa bahwa grup ada di akun MailerLite Anda
    * Catatan: Menggunakan PUT dengan grup akan menghapus pelanggan dari grup yang tidak tercantum
  </Accordion>
</AccordionGroup>

## Referensi API

API Pelanggan MailerLite menerima parameter kunci berikut:

| Parameter          | Tipe   | Wajib | Deskripsi                                                         |
| ------------------ | ------ | ----- | ----------------------------------------------------------------- |
| `email`            | string | Ya    | Alamat email yang valid (mematuhi RFC 2821)                       |
| `fields`           | object | Tidak | Objek dengan pasangan nama/nilai bidang                           |
| `fields.name`      | string | Tidak | Nama depan pelanggan                                              |
| `fields.last_name` | string | Tidak | Nama belakang pelanggan                                           |
| `fields.company`   | string | Tidak | Nama perusahaan                                                   |
| `fields.country`   | string | Tidak | Negara                                                            |
| `fields.city`      | string | Tidak | Kota                                                              |
| `fields.phone`     | string | Tidak | Nomor telepon                                                     |
| `groups`           | array  | Tidak | Array ID grup untuk menambahkan pelanggan                         |
| `status`           | string | Tidak | Salah satu dari: active, unsubscribed, unconfirmed, bounced, junk |
| `subscribed_at`    | string | Tidak | Tanggal dalam format `yyyy-MM-dd HH:mm:ss`                        |
| `ip_address`       | string | Tidak | Alamat IP pelanggan                                               |

Untuk dokumentasi API lengkap, kunjungi [Pengembang MailerLite](https://developers.mailerlite.com/docs/subscribers.html).
