
# API Otomatisasi

Otomatisasi adalah alur kerja yang terdiri dari langkah-langkah: satu atau lebih pemicu yang memulainya, kemudian tindakan, kondisi, penundaan, langkah AI, dan lainnya, yang dihubungkan ke dalam sebuah grafik. Ini adalah otomatisasi yang sama dengan yang Anda lihat dan edit di halaman [Otomatisasi](../automations/automations.md). Panduan ini mencakup cara membaca dan membangunnya melalui API.

- **Base URL**: `https://api.dmchamp.com/v1`
- **Autentikasi**: kunci API Anda (lihat [Autentikasi](authentication.md))
- **Bidang dan isi**: setiap parameter dan bidang respons ada di [Referensi API](reference.md#tag/automations)
- **Kesalahan**: lihat [Kesalahan & Penomoran Halaman](errors-and-pagination.md) dan [Kesalahan](#errors) di bawah

> **Agensi:** setiap endpoint di halaman ini menerima `sub_account_id` sebagai parameter kueri, sehingga Anda dapat membaca dan membangun otomatisasi klien dengan kunci agensi Anda. `sub_account_id` yang bukan salah satu akun klien Anda akan mengembalikan `404`. Lihat [API untuk Agensi](../agency/api-for-agencies.md).

---

## Cara kerjanya: buat draf terlebih dahulu

API ini dibuat agar tidak ada yang berjalan secara tidak sengaja.

1. **Baca katalog.** `GET /automations/steps` mencantumkan setiap pemicu, tindakan, dan jenis langkah yang dapat Anda gunakan, ditambah tata bahasa untuk menulis grafik (`graph_rules`).
2. **Buat draf.** `POST /automations` menyimpan otomatisasi dalam keadaan **nonaktif**. Belum ada yang berjalan.
3. **Periksa.** Baca kembali, buka di pembuat (respons memberikan `open_path`-nya), dan pastikan pemilik akun telah melihat apa yang dilakukan otomatisasi tersebut dan kepada siapa.
4. **Aktifkan.** `POST /automations/{automationId}/enable` adalah panggilan tersendiri. Ini adalah langkah yang membuat hal nyata terjadi: pesan terkirim, catatan berubah, alat diberikan kepada agen AI.

Mengedit tidak akan pernah mengubah status otomatisasi apakah aktif atau nonaktif. Itu juga berarti pengeditan pada otomatisasi yang **aktif** akan segera berlaku pada otomatisasi yang sedang berjalan. Untuk mengubah otomatisasi yang sedang berjalan dengan aman, nonaktifkan, edit, periksa, lalu aktifkan kembali.

Setiap grafik yang Anda kirim melalui pemeriksaan yang sama dengan yang diterapkan oleh kanvas pembuat. Grafik yang tidak dapat dibuka atau dijalankan akan ditolak dengan `400` yang mencantumkan dengan tepat apa yang perlu diperbaiki.

### Akses

- Akun memerlukan Otomatisasi. Tanpanya, setiap panggilan di halaman ini akan mengembalikan `403`.
- Akses anggota tim mengikuti area **Otomatisasi** mereka di [Manajemen Tim](../settings/team-management.md): membaca (daftar, ambil, langkah, proses, folder) memerlukan **Lihat**, segala sesuatu yang mengubah sesuatu memerlukan **Edit**.
- Pada akun klien yang paketnya tidak menyertakan pembuatan dan pengeditan otomatisasi, panggilan tulis akan mengembalikan `403`, persis seperti yang dilakukan pembuat di aplikasi.

---

## Endpoint

| Tugas | Metode + jalur | Penjelajah |
|---|---|---|
| Mencantumkan otomatisasi | `GET /automations` | [Buka di Referensi API](reference.md#tag/automations/GET/automations) |
| Mendapatkan otomatisasi beserta grafnya | `GET /automations/{automationId}` | [Buka di Referensi API](reference.md#tag/automations/GET/automations/{automationId}) |
| Membaca katalog langkah | `GET /automations/steps` | [Buka di Referensi API](reference.md#tag/automations/GET/automations/steps) |
| Membuat otomatisasi (draf) | `POST /automations` | [Buka di Referensi API](reference.md#tag/automations/POST/automations) |
| Memperbarui otomatisasi | `PUT /automations/{automationId}` | [Buka di Referensi API](reference.md#tag/automations/PUT/automations/{automationId}) |
| Menyalakannya | `POST /automations/{automationId}/enable` | [Buka di Referensi API](reference.md#tag/automations/POST/automations/{automationId}/enable) |
| Mematikannya | `POST /automations/{automationId}/disable` | [Buka di Referensi API](reference.md#tag/automations/POST/automations/{automationId}/disable) |
| Membaca riwayat eksekusi | `GET /automations/{automationId}/runs` | [Buka di Referensi API](reference.md#tag/automations/GET/automations/{automationId}/runs) |
| Mencantumkan folder | `GET /automations/folders` | [Buka di Referensi API](reference.md#tag/automations/GET/automations/folders) |
| Membuat folder | `POST /automations/folders` | [Buka di Referensi API](reference.md#tag/automations/POST/automations/folders) |
| Mengganti nama folder | `PUT /automations/folders/{folderId}` | [Buka di Referensi API](reference.md#tag/automations/PUT/automations/folders/{folderId}) |
| Menghapus folder | `DELETE /automations/folders/{folderId}` | [Buka di Referensi API](reference.md#tag/automations/DELETE/automations/folders/{folderId}) |
| Memindahkan otomatisasi ke folder | `PUT /automations/{automationId}/folder` | [Buka di Referensi API](reference.md#tag/automations/PUT/automations/{automationId}/folder) |

---

## Membaca otomatisasi

`GET /automations` mengembalikan ringkasan (tanpa langkah), yang paling baru diubah didahulukan; `folder_id=none` mencantumkan yang tidak berada di folder mana pun. `GET /automations/{automationId}` menambahkan `graph` lengkap: setiap langkah (`nodes[]`) dengan `kind`, `label`, `alias`, `action`, `params`, dan `config`-nya, serta koneksi (`edges[]`) dengan `from`, `to`, dan, setelah kondisi atau sejenisnya, `branch`.

```bash
curl "https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f?apiKey=YOUR_API_KEY"
```

**Perlu diketahui**

- **`alias` adalah cara langkah selanjutnya membaca output suatu langkah**, sebagai `${nodes.<alias>.<field>}`. Langkah tanpa output dirujuk berdasarkan id-nya.
- `params` dipertahankan untuk pembaca lama; `config` membawa nilai yang sama dan lebih banyak lagi (aturan kondisi, prompt langkah AI, durasi penundaan, slug dan parameter tindakan).
- **Rahasia disembunyikan.** Nilai yang terlihat seperti kredensial (rahasia webhook, token, kunci API, kata sandi, nilai header) akan kembali sebagai `"[redacted]"`. Kirim `"[redacted]"` kembali tanpa perubahan dan nilai yang tersimpan akan tetap terjaga.
- **Teks panjang dipersingkat.** Satu teks yang lebih panjang dari sekitar 4.000 karakter akan dipotong dan diakhiri dengan elipsis. Jika Anda mengirim langkah tersebut kembali, masukkan teks lengkapnya terlebih dahulu.
- Jika layanan otomatisasi tidak dapat dijangkau, Anda akan mendapatkan `503`, bukan daftar kosong. Daftar kosong selalu berarti tidak ada otomatisasi.

### Katalog langkah

`GET /automations/steps` mengembalikan semua hal yang dapat digunakan untuk membangun otomatisasi: 8 `node_kinds`, setiap pemicu dengan pengaturan `fields` dan `output_keys`-nya, `actions` bawaan dengan parameternya, `api_actions` (operasi API ini yang dapat dipanggil oleh langkah tindakan), tata bahasa `graph_rules`, dan `counts`. Ini adalah apa yang **ditawarkan** oleh pembuat, bukan apa yang telah dibuat oleh akun: periksa ini sebelum Anda menyimpulkan bahwa pemicu atau tindakan tidak ada.

- Tanpa `q`, beberapa ratus tindakan API akan kembali sebagai label yang dikelompokkan berdasarkan area di `api_actions_by_tag` dan daftar datar akan kosong.
- Dengan `q` (kata yang tidak peka huruf besar/kecil), `api_actions` adalah daftar kecocokan datar, dibatasi hingga 60 (`api_actions_truncated` menjelaskan kapan). Tindakan untuk aplikasi pihak ketiga yang terhubung juga dicari dan kembali di `app_actions`: cari berdasarkan nama aplikasi, contohnya `q=hubspot`. Masing-masing menyatakan apakah akun memiliki aplikasi tersebut `connected`, dan `connected_apps` mencantumkan yang terhubung. `app_actions_unavailable` adalah `true` ketika tindakan aplikasi tidak dapat dicari saat ini; daftar lainnya tetap lengkap.

---

## Membuat dan mengedit

### Membuat draf

```bash
curl -X POST "https://api.dmchamp.com/v1/automations?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Price question auto-reply",
    "description": "Replies with the price list when someone asks about prices.",
    "graph": {
      "nodes": [
        { "id": "trigger_1", "type": "trigger", "label": "Incoming message",
          "data": { "trigger": { "kind": "incoming_message", "message_filter_contains": "price" } } },
        { "id": "send_prices", "type": "action", "label": "Send message",
          "data": { "action": { "provider": "native", "slug": "SEND_MESSAGE",
            "params": { "contact_id": "${trigger.contact.id}", "body": "Hi ${trigger.contact.first_name}, here is our price list: https://example.com/prices" } } } }
      ],
      "edges": [{ "source": "trigger_1", "target": "send_prices" }]
    }
  }'
```

```json
{ "success": true, "automation": { "id": "8d2c7f1e-…", "enabled": false, "…": "…" }, "draft": true, "open_path": "/automations/8d2c7f1e-…", "warnings": [] }
```

`draft: true` dan `enabled: false` adalah normal, bukan kegagalan: otomatisasi baru selalu berupa draf sampai Anda mengaktifkannya. `warnings` mencantumkan apa yang tidak dapat diselesaikan oleh pembuat, sebagai label singkat (contohnya `agent_function:not_linked`).

**Menulis graf.** `graph_rules` dari katalog adalah tata bahasa lengkap. Singkatnya:

- Setiap node memiliki `id` (unik dalam graf), `type` (salah satu dari 8 [jenis langkah](#step-kinds)), `label` opsional, dan pengaturannya di `data` di bawah kunci yang dinamai sesuai jenisnya (`data.trigger`, `data.action`, `data.condition`, `data.delay`, `data.ai`, `data.loop`, `data.transform`, `data.respond`).
- Otomatisasi memerlukan setidaknya satu pemicu. Tata bahasa langsung memungkinkan hingga 10, dan otomatisasi dimulai saat salah satunya aktif.
- Setiap langkah lainnya harus dapat dijangkau dari pemicu, dan tidak ada koneksi yang boleh mengarah kembali ke langkah sebelumnya.
- Tepi yang keluar dari kondisi membawa `sourceHandle` `true` atau `false`; loop `body` atau `done`; penundaan Tunggu balasan `replied` atau `timed_out`. Tepi lainnya tidak memiliki apa pun.
- Slug dan parameter tindakan berasal dari katalog. **Jangan pernah menebak id** (agen, tag, daftar, tahap): cari terlebih dahulu dengan API, atau biarkan bidang sebagai `""` agar orang tersebut dapat memilihnya di pembuat.
- Posisi bersifat opsional; langkah tanpa posisi akan diatur secara otomatis.
- Nilai dari langkah sebelumnya ditulis sebagai `${trigger.<field>}` dan `${nodes.<step>.<field>}`. Lihat [Menggunakan apa yang dikembalikan langkah sebelumnya](../automations/automations.md#using-what-an-earlier-step-returned) dan [Ekspresi](../automations/automations.md#expressions).
- Graf diterima dalam dua ejaan: milik pembuat (di atas) dan yang dijawab oleh pembaca (`kind`, `config`, `from`, `to`, `branch`). Jadi, Anda dapat membaca otomatisasi, mengubah langkah, dan mengirimnya kembali.
- **Membuat tidak aman untuk diulang secara membabi buta.** Jika permintaan kehabisan waktu, cantumkan otomatisasi Anda sebelum mengirimnya lagi, atau Anda mungkin berakhir dengan dua draf.

### Pembaruan

`PUT /automations/{automationId}` mengubah `name`, `description` dan/atau `graph` (setidaknya satu, atau `400`). Sebuah `graph` menggantikan **seluruh** grafik, jadi selalu kerjakan dari apa yang tersimpan: baca, ubah apa yang Anda perlukan, lalu kirim kembali seluruh grafiknya.

```bash
curl -X PUT "https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Price question auto-reply (EN)" }'
```

- **Pertahankan setiap `alias` langkah persis seperti yang Anda terima.** Ubah atau hapus, maka setiap referensi ke langkah tersebut akan menjadi kosong. Lihat [Menamai langkah Anda](../automations/automations.md#naming-your-steps).
- **Biarkan nilai `"[redacted]"` tetap apa adanya**, dan **pulihkan teks yang dipotong** (teks yang diakhiri dengan elipsis telah dipotong saat dibaca).
- Status aktif atau tidaknya otomatisasi tidak pernah diubah di sini. Jika aktif, suntingan Anda akan langsung berjalan segera setelah disimpan. Saat aktif, perubahan yang dapat memicu otomatisasi itu sendiri akan ditolak: nonaktifkan terlebih dahulu.

### Aktifkan dan nonaktifkan

`POST /automations/{automationId}/enable` mengaktifkan otomatisasi, sehingga otomatisasi tersebut akan berjalan berdasarkan pemicunya mulai sekarang. Panggil hanya setelah pemilik akun melihat apa yang dilakukan otomatisasi tersebut dan kepada siapa, serta telah menyetujuinya. Pembuat (builder) menolak untuk mengaktifkan grafik yang tidak dapat dijalankan (tidak ada pemicu, perulangan, langkah yang memicu dirinya sendiri) dengan `400` yang menjelaskan alasannya.

```bash
curl -X POST "https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f/enable?apiKey=YOUR_API_KEY"
```

`POST /automations/{automationId}/disable` menjeda otomatisasi: proses yang sedang berjalan akan selesai, namun tidak ada proses baru yang dimulai. Penonaktifan selalu diizinkan. Tidak ada panggilan yang memerlukan isi (body).

---

## Riwayat eksekusi

`GET /automations/{automationId}/runs` mengembalikan proses dari satu otomatisasi, yang terbaru terlebih dahulu (`limit` 1 hingga 50, default 10): kapan masing-masing dimulai dan selesai, apa yang memicunya, apakah berhasil, dan kesalahan saat gagal. Membaca otomatisasi memberi tahu Anda apa yang **akan** dilakukannya; riwayat proses memberi tahu Anda apa yang **telah** dilakukannya, dan ini adalah satu-satunya cara untuk membedakan otomatisasi yang tidak pernah berjalan dengan yang berjalan namun selalu gagal.

```bash
curl "https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f/runs?apiKey=YOUR_API_KEY&limit=20"
```

- `mode` adalah `live` untuk proses nyata, atau `safe` untuk **Proses aman (Safe run)** dari editor. Proses aman tidak mengirim apa pun, jadi ini bukan bukti bahwa otomatisasi berfungsi dalam penggunaan nyata.
- Daftar `runs` yang kosong adalah jawaban, bukan celah. Respons tersebut kemudian membawa `note`: entah pemicunya belum pernah aktif, atau otomatisasi sedang dinonaktifkan.

---

## Folder

Folder hanya mengelompokkan otomatisasi dalam daftar. Folder tidak pernah mengubah apa yang dilakukan otomatisasi atau apakah otomatisasi tersebut aktif. Lihat [Mengatur otomatisasi dalam folder](../automations/automations.md#organizing-automations-in-folders).

```bash
curl -X PUT "https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f/folder?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "folder_id": "f1a2b3c4-5d6e-7f80-91a2-b3c4d5e6f708" }'
```

- Mencantumkan folder juga mengembalikan `unfiled_count`, yaitu berapa banyak otomatisasi yang tidak berada dalam folder.
- Nama folder diperlukan, maksimal 100 karakter, dan unik di akun tersebut (`409`, `code: "folder_name_taken"`). Anda juga dapat mengarsipkan otomatisasi dengan meneruskan `folder_id` saat membuatnya.
- Mengubah nama tidak memindahkan otomatisasi dari tempatnya.
- **Menghapus folder hanya menghapus foldernya saja.** Otomatisasi di dalamnya berpindah ke luar folder dan tetap berjalan seperti sebelumnya; respons akan memberi tahu berapa banyak yang dipindahkan (`moved_to_no_folder`).
- Saat memindahkan, `folder_id` diperlukan; kirim `null` untuk mengeluarkan otomatisasi dari foldernya.

---

## Katalog

### Jenis langkah

| Jenis | Apa fungsinya |
|---|---|
| `trigger` | Memulai otomasi saat sesuatu terjadi. |
| `action` | Menjalankan satu langkah: tindakan bawaan, tindakan API, tindakan aplikasi yang terhubung, permintaan HTTP, atau email. |
| `condition` | Membagi alur berdasarkan aturan, menjadi cabang `true` dan `false`. |
| `transform` | Menjalankan potongan kode singkat untuk mengubah bentuk data antar langkah. |
| `ai` | Bertanya kepada AI dengan perintah yang Anda tulis. AI dapat mengembalikan teks, memisahkan kolom, atau memilih salah satu dari beberapa cabang. |
| `delay` | Menunggu selama waktu yang ditentukan, atau menunggu kontak membalas (dengan batas waktu). |
| `loop` | Mengulangi langkah-langkah di dalamnya untuk setiap item dalam daftar. |
| `respond` | Mengembalikan respons ke panggilan webhook atau panggilan fungsi agen AI yang memulai eksekusi. |

### Pemicu

Ini adalah 40 pemicu yang tercantum dalam katalog saat ini, dikelompokkan sebagaimana pembuat otomasi mengelompokkannya. Kolom **Pengaturan** berisi kunci pengaturan pemicu itu sendiri (`fields`), yang mempersempit kapan pemicu tersebut aktif. Setiap pemicu juga memerlukan `respect_quiet_hours`, `run_hours`, `reentry` dan `stop_on_response`; lihat [Pengaturan otomasi](../automations/automations.md#automation-settings).

**Pesan**

| Pemicu (`kind`) | Aktif saat | Pengaturan |
|---|---|---|
| Pesan masuk (`incoming_message`) | Kontak mengirim pesan di saluran mana pun. | `campaign` (membatasinya ke satu agen AI), `channel`, `message_filter_contains` (kata kunci), `message_filter_regex` (pola) |
| Panggilan tak terjawab (`missed_call`) | Seseorang menelepon salah satu nomor WhatsApp Web Anda atau nomor SMS Anda sendiri dan tidak ada yang mengangkat. | `to_number` |
| Pesan terkirim (`message_delivered`) | Pesan yang Anda kirim dikonfirmasi terkirim oleh saluran tersebut. | `channel`, `agent` |
| Pesan gagal (`message_failed`) | Pesan yang Anda kirim tidak dapat terkirim, beserta error-nya. | `channel`, `agent` |
| Pesan dikirim (`message_sent`) | Pesan apa pun keluar dari akun Anda: milik AI, milik Anda, siaran, atau tindak lanjut. Filter pesan tersebut, atau pesan akan berjalan pada semuanya. | `channel`, `sent_by` |
| Tindak lanjut dikirim (`follow_up_sent`) | Tindak lanjut otomatis terkirim. | tidak ada |
| Tindak lanjut dilewati (`follow_up_skipped`) | Tindak lanjut ditahan karena kondisi pengirimannya gagal. | tidak ada |
| Tindak lanjut selesai (`follow_up_exhausted`) | Kontak telah menerima tindak lanjut terakhir dalam urutan dan tidak ada lagi yang mengantre. | tidak ada |
| Percakapan ditutup (`conversation_closed`) | Obrolan ditutup, dengan keterangan bagaimana obrolan berakhir dan ringkasannya. | `channel`, `agent` |
| Siaran selesai (`broadcast_completed`) | Siaran selesai dikirim, dengan keterangan berapa banyak yang terkirim dan berapa banyak yang gagal. | tidak ada |
| Balasan prospek disortir (`outreach_reply_labelled`) | Balasan prospek email dingin disortir, misalnya sebagai Tertarik. | `label` |
| Komentar Skool diterima (`skool_comment_received`) | Anggota berkomentar di bawah postingan Skool yang dipantau oleh salah satu aturan komentar Anda. | tidak ada |

**Kontak**

| Pemicu (`kind`) | Aktif saat | Pengaturan |
|---|---|---|
| Kontak baru (`contact_created`) | Seseorang yang baru menghubungi Anda untuk pertama kalinya di saluran mana pun, dan juga untuk impor, API, serta kontak yang Anda buat secara manual. | tidak ada |
| Kontak diperbarui (`contact_updated`) | Kolom kontak berubah. | `field` |
| Kontak yang Anda tambahkan di sini (`contact_added`) | Hanya untuk kontak yang Anda masukkan sendiri ke dalam otomasi ini dari halaman Kontak. Satu eksekusi per kontak. | tidak ada |
| Tag diterapkan (`tag_applied`) | Tag ditambahkan ke kontak, oleh agen AI Anda, seseorang, otomasi, atau impor. | `tag_name`, `channel`, `applied_by` |
| Tag dihapus (`tag_removed`) | Tag dihapus dari kontak. | `tag_name`, `channel` |
| Anggota Skool bergabung (`skool_member_joined`) | Seseorang bergabung dengan komunitas Skool yang Anda miliki atau kelola, dengan profil, jawaban, dan skor kecocokan mereka. | `group_id`, `create_contact` |
| Anggota Skool terkualifikasi (`skool_member_qualified`) | Jawaban anggota Skool baru mencapai atau melebihi ambang batas Anda. | `min_score` |

**Kesepakatan**

| Pemicu (`kind`) | Aktif saat | Pengaturan |
|---|---|---|
| Kesepakatan dibuat (`deal_created`) | Kesepakatan baru ditambahkan ke salah satu saluran pipa Anda. | `pipeline_id`, `stage_id` |
| Tahap kesepakatan berubah (`deal_stage_changed`) | Kesepakatan berpindah ke tahap yang berbeda, dengan menyebutkan tahap yang ditinggalkan dan tahap yang dimasuki. | `pipeline_id`, `to_stage_id`, `from_stage_id` |
| Kesepakatan diperbarui (`deal_updated`) | Kolom kesepakatan berubah. | `field` |

**Janji Temu**

| Pemicu (`kind`) | Aktif saat | Pengaturan |
|---|---|---|
| Janji temu dipesan (`appointment_booked`) | Janji temu baru dipesan. | tidak ada |
| Janji temu dibatalkan (`appointment_cancelled`) | Janji temu yang sudah dipesan dibatalkan. | tidak ada |
| Janji temu dijadwalkan ulang (`appointment_rescheduled`) | Janji temu yang sudah dipesan berpindah ke waktu lain, dengan waktu lama ditampilkan di samping waktu baru. | `event_id` |
| Sebelum janji temu (`appointment_upcoming`) | Waktu yang ditentukan sebelum setiap janji temu yang dikonfirmasi, untuk pengingat. Hingga lima pengingat per otomasi. | `offsets_minutes` |

**Tugas**

| Pemicu (`kind`) | Aktif saat | Pengaturan |
|---|---|---|
| Tugas dibuat (`task_created`) | Tugas dibuat. | `task_type` |
| Tugas selesai (`task_completed`) | Tugas dipindahkan ke tahap selesai. | tidak ada |

**Akun**

| Pemicu (`kind`) | Aktif saat | Pengaturan |
|---|---|---|
| Saldo kredit rendah (`low_credit_balance`) | Saldo kredit Anda turun di bawah ambang batas peringatan Anda. | tidak ada |
| Saluran terhubung (`channel_connected`) | Salah satu saluran Anda selesai terhubung. | `channel` |
| Saluran terputus (`channel_disconnected`) | Salah satu saluran Anda terputus: keluar, tidak tertaut, atau terputus. Nomor WhatsApp Web yang terhubung kembali dengan sendirinya hanya dihitung jika masih mati setelah 30 menit. | `channel` |

**Agensi**

| Pemicu (`kind`) | Aktif saat | Pengaturan |
|---|---|---|
| Sub-akun dibuat (`sub_account_created`) | Akun klien baru dibuat, dari dasbor Anda, API, atau halaman pendaftaran Anda. | tidak ada |
| Aktivitas sub-akun (`sub_account_event`) | Sesuatu terjadi pada salah satu akun klien Anda: kredit hampir habis, saluran terhubung, perubahan paket. | `event`, `threshold` |

**Umum dan aplikasi**

| Pemicu (`kind`) | Berjalan saat | Pengaturan |
|---|---|---|
| Sesuai jadwal (`schedule`) | Pada jadwal cron. | `cron`, `timezone` |
| Webhook (`webhook`) | Sistem luar memanggil alamat webhook otomatisasi. | `webhook_secret` |
| Fungsi Agen AI (`agent_function`) | Agen AI Anda memanggil otomatisasi ini sebagai fungsi selama percakapan. | `function_name`, `function_description`, `parameters`, `agent_ids`, `campaign_ids` |
| Item feed baru (`rss`) | Item baru muncul di feed RSS atau Atom. | `feed_url` |
| Email diterima (`email_received`) | Email tiba di kotak masuk Anda yang terhubung. | `from_contains`, `subject_contains` |
| Peristiwa aplikasi (`app_event`) | Sesuatu terjadi di aplikasi yang terhubung: tahap kesepakatan berubah, pembayaran masuk, formulir dikirimkan. | `toolkit`, `trigger_slug`, `connected_account_id`, `config` |
| Jalankan manual (`manual`) | Hanya saat dijalankan secara manual. | tidak ada |

Satu otomatisasi dapat menampung paling banyak satu pemicu untuk masing-masing `webhook`, `app_event`, `agent_function`, `rss`, `schedule`, `email_received`, `appointment_upcoming` dan `contact_added`. Pemicu yang berjalan saat catatan dibuat tidak dapat dipasangkan dengan tindakan yang membuat catatan yang sama, karena otomatisasi tersebut akan memicu dirinya sendiri.

Untuk mengetahui apa yang diberikan setiap pemicu ke langkah-langkah selanjutnya (`output_keys`) dan daftar lengkap tindakan beserta parameternya, baca `GET /automations/steps`. [Panduan Otomatisasi](../automations/automations.md#triggers) menjelaskan setiap pemicu dengan bahasa pembuatnya.

---

## Kesalahan

Setiap kesalahan memiliki bentuk umum `{ "success": false, "error_code": <status>, "error": "..." }`. Grafik yang ditolak menambahkan `code` dan `errors`: `errors` mencantumkan setiap masalah, masing-masing dengan satu kalimat yang dapat diperbaiki, dan `error` adalah masalah pertama. Perbaiki persis apa yang tercantum dan kirim kembali seluruh grafiknya. `code` adalah salah satu dari `invalid_graph`, `automation_graph_has_a_cycle`, `self_triggering_automation`, `no_trigger`, atau kode lain dari pembuat (builder).

| Status | Kapan |
|---|---|
| `400` | Grafik ditolak, kolom wajib diisi tidak ada (`name` atau `graph` saat membuat, `folder_id` saat memindahkan), pembaruan tidak mengirim apa pun untuk diubah, id tidak valid, atau nama folder hilang, kosong, atau terlalu panjang (`code: "invalid_name"`). |
| `403` | Akun tidak memiliki Otomatisasi; paket akun klien tidak mencakup pembuatan dan penyuntingan otomatisasi (hanya tulis); atau akses **Otomatisasi** anggota tim terlalu rendah. |
| `404` | Tidak ada otomatisasi dengan id tersebut di akun ini, tidak ada folder dengan id tersebut (`code: "folder_not_found"`), atau `sub_account_id` yang bukan salah satu akun klien Anda. |
| `409` | Folder dengan nama tersebut sudah ada (`code: "folder_name_taken"`). |
| `413` | Otomatisasi lebih besar dari 1 MB yang diterima oleh pembuat (builder). Pindahkan kode atau data yang besar keluar dari langkah-langkahnya. |
| `422` | Pembuat (builder) menolak permintaan karena alasan lain. Periksa grafik terhadap `GET /automations/steps`; mengirim permintaan yang sama lagi tidak akan membantu. |
| `503` | Layanan otomatisasi tidak dapat dijangkau. Coba lagi nanti. Untuk pembuatan, cantumkan otomatisasi Anda terlebih dahulu agar Anda tidak membuat draf kedua. |

::: master-only
## Menggunakan endpoint ini melalui MCP

Setiap endpoint di halaman ini juga merupakan alat untuk asisten AI yang Anda [hubungkan melalui MCP](../integrations/connect-ai-clients.md), dengan aturan yang sama: otomatisasi baru adalah draf sampai diaktifkan, dan pengeditan pada otomatisasi yang sedang berjalan bersifat langsung.

| Alat | Endpoint |
|---|---|
| `list_automations` | `GET /automations` |
| `get_automation` | `GET /automations/{automationId}` |
| `list_automation_steps` | `GET /automations/steps` |
| `create_automation` | `POST /automations` |
| `update_automation` | `PUT /automations/{automationId}` |
| `enable_automation` | `POST /automations/{automationId}/enable` |
| `disable_automation` | `POST /automations/{automationId}/disable` |
| `list_automation_runs` | `GET /automations/{automationId}/runs` |
| `list_automation_folders` | `GET /automations/folders` |
| `create_automation_folder` | `POST /automations/folders` |
| `rename_automation_folder` | `PUT /automations/folders/{folderId}` |
| `delete_automation_folder` | `DELETE /automations/folders/{folderId}` |
| `move_automation_to_folder` | `PUT /automations/{automationId}/folder` |
:::

---

## Langkah berikutnya

- [Otomatisasi](../automations/automations.md): cara kerja pemicu, langkah, variabel, dan riwayat proses di pembuat.
- [API untuk Agensi](../agency/api-for-agencies.md): membangun otomatisasi pada akun klien dengan `sub_account_id`.
- [Referensi API](reference.md): penjelajah endpoint interaktif lengkap.
