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. Panduan ini mencakup cara membaca dan membangunnya melalui API.
- URL Dasar:
https://api.dmchamp.com/v1 - Autentikasi: kunci API Anda (lihat Autentikasi)
- Error: lihat Error & Penomoran Halaman dan Error di bawah
Semua contoh di bawah menunjukkan bentuk kueri ?apiKey= dalam cURL dan header X-API-Key dalam JavaScript dan Python. Keduanya berfungsi di setiap endpoint.
Agensi: setiap endpoint di halaman ini menerima
sub_account_idsebagai parameter kueri, sehingga Anda dapat membaca dan membangun otomatisasi klien dengan kunci agensi Anda.sub_account_idyang bukan salah satu akun klien Anda akan mengembalikan404. Lihat API untuk Agensi.
Cara kerjanya: buat draf terlebih dahulu
API ini dibuat agar tidak ada yang berjalan secara tidak sengaja.
- Baca katalog.
GET /automations/stepsmencantumkan setiap pemicu, tindakan, dan jenis langkah yang dapat Anda gunakan, ditambah tata bahasa untuk menulis grafik (graph_rules). - Buat draf.
POST /automationsmenyimpan otomatisasi dalam keadaan nonaktif. Belum ada yang berjalan. - 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. - Aktifkan.
POST /automations/{automationId}/enableadalah 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: 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.
Objek otomatisasi
Daftar ini mengembalikan ringkasan setiap otomatisasi, tanpa langkah-langkahnya:
{
"id": "8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f",
"name": "Price question auto-reply",
"description": "Replies with the price list when someone asks about prices.",
"enabled": false,
"updated_at": "2026-10-27T09:40:00.000Z",
"trigger_kind": "incoming_message",
"folder_id": "f1a2b3c4-5d6e-7f80-91a2-b3c4d5e6f708",
"folder_name": "Sales"
}
| Bidang | Arti |
|---|---|
id |
ID otomatisasi. |
name |
Nama otomatisasi dalam daftar. |
description |
Satu hingga tiga kalimat tentang apa yang dilakukannya, atau null. |
enabled |
Apakah otomatisasi diaktifkan. Otomatisasi yang dinonaktifkan tidak akan pernah berjalan. |
updated_at |
Kapan terakhir kali diubah. |
trigger_kind |
Apa yang memicunya, misalnya incoming_message, schedule, webhook, agent_function atau manual. null jika grafik belum memiliki pemicu. |
folder_id, folder_name |
Folder tempat otomatisasi disimpan, atau null jika tidak ada folder. |
Membaca satu otomatisasi menambahkan created_at dan graph-nya:
{
"id": "8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f",
"name": "Price question auto-reply",
"description": "Replies with the price list when someone asks about prices.",
"enabled": false,
"created_at": "2026-10-27T09:12:00.000Z",
"updated_at": "2026-10-27T09:40:00.000Z",
"trigger_kind": "incoming_message",
"folder_id": null,
"folder_name": null,
"graph": {
"nodes": [
{
"id": "trigger_1",
"kind": "trigger",
"label": "Incoming message",
"alias": "incoming_message",
"action": "incoming_message",
"params": { "message_filter_contains": "price" },
"config": { "kind": "incoming_message", "message_filter_contains": "price" }
},
{
"id": "send_prices",
"kind": "action",
"label": "Send message",
"alias": "send_message",
"action": "SEND_MESSAGE",
"params": { "contact_id": "${trigger.contact.id}", "body": "Hi ${trigger.contact.first_name}, here is our price list: https://example.com/prices" },
"config": { "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": [{ "from": "trigger_1", "to": "send_prices" }]
}
}
Setiap langkah (nodes[]) memuat:
| Bidang | Arti |
|---|---|
id |
Id langkah, unik di dalam grafik. |
kind |
Jenis langkah: trigger, action, condition, transform, ai, delay, loop atau respond. Lihat Jenis langkah. |
label |
Nama yang ditampilkan pada langkah di pembuat. |
alias |
Nama referensi langkah. Langkah selanjutnya membaca output-nya sebagai ${nodes.<alias>.<field>}. null pada langkah yang tidak memilikinya (langkah tersebut kemudian direferensikan berdasarkan id-nya). |
action |
Apa yang dilakukan langkah tersebut: tindakan yang dijalankannya, atau pada langkah pemicu, jenis pemicunya. null pada langkah lainnya. |
params |
Parameter tindakan pada langkah tindakan, atau pengaturan pemicu pada langkah pemicu. null pada setiap jenis lainnya. Disimpan untuk pembaca lama: config memuat nilai yang sama dan lebih banyak lagi. |
config |
Pengaturan lengkap langkah sebagaimana pembuat menyimpannya, untuk setiap jenis langkah: aturan kondisi, prompt langkah AI, durasi penundaan, slug dan parameter tindakan. |
Setiap koneksi (edges[]) memiliki from dan to (id langkah), dan branch saat mengikuti satu cabang langkah, misalnya true atau false setelah kondisi.
Dua hal dalam config diubah saat keluar:
- Rahasia disembunyikan. Nilai yang terlihat seperti kredensial (rahasia webhook, token, kunci API, kata sandi, nilai header) dikembalikan sebagai
"[redacted]". Kirim"[redacted]"kembali tanpa diubah 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 itu kembali, masukkan teks lengkapnya terlebih dahulu.
Daftar otomatisasi
GET /automations mengembalikan otomatisasi pada akun, yang paling baru diubah ditampilkan pertama, sebagai ringkasan (tanpa langkah).
Parameter kueri (semuanya opsional): folder_id (hanya otomatisasi di folder tersebut, id dari Daftar folder, atau none untuk yang tidak ada di folder mana pun), sub_account_id.
cURL
curl "https://api.dmchamp.com/v1/automations?apiKey=YOUR_API_KEY&folder_id=none"
JavaScript
const res = await fetch("https://api.dmchamp.com/v1/automations?folder_id=none", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const { automations } = await res.json();
Python
res = requests.get(
"https://api.dmchamp.com/v1/automations",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"folder_id": "none"},
)
automations = res.json()["automations"]
Respons (200)
{ "success": true, "automations": [{ "id": "8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f", "name": "Price question auto-reply", "enabled": false, "...": "..." }] }
Jika layanan otomatisasi tidak dapat dijangkau, Anda akan mendapatkan 503, bukan daftar kosong. Daftar kosong selalu berarti tidak ada otomatisasi.
Mendapatkan otomatisasi
GET /automations/{automationId} mengembalikan satu otomatisasi dengan grafik lengkapnya: jenis, label, alias, tindakan, parameter, dan pengaturan setiap langkah, ditambah koneksi di antara langkah-langkah tersebut.
curl "https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f?apiKey=YOUR_API_KEY"
const res = await fetch("https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const { automation } = await res.json();
res = requests.get(
"https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f",
headers={"X-API-Key": "YOUR_API_KEY"},
)
automation = res.json()["automation"]
Respons (200)
{ "success": true, "automation": { "id": "8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f", "name": "Price question auto-reply", "graph": { "nodes": ["..."], "edges": ["..."] } } }
Id yang tidak ada di akun ini akan mengembalikan 404.
Katalog langkah
GET /automations/steps mengembalikan semua hal yang dapat digunakan untuk membangun otomatisasi:
node_kinds: 8 jenis langkah, masing-masing dengan label dan deskripsi.triggers: setiap pemicu yang dapat memulai otomatisasi, dengan kolom pengaturannya (fields) dan nilai yang diteruskan ke langkah berikutnya (output_keys).actions: tindakan bawaan yang dapat dijalankan oleh langkah tindakan, masing-masing dengankey(slug yang Anda gunakan dalam grafik) danparams-nya, ditandairequireddi tempatnya.api_actions: operasi API ini yang dapat dipanggil oleh langkah tindakan. Tanpaq, operasi tersebut kembali sebagai label yang dikelompokkan berdasarkan area diapi_actions_by_tag, dan daftar datar kosong, karena jumlahnya ada ratusan.graph_rules: tata bahasa untuk menulis grafik: data yang dibawa setiap jenis langkah, setiap jenis pemicu dengan kunci pengaturannya, penyedia tindakan, nama cabang, dan sintaksis templat. Baca ini sebelum Anda membuat atau mengeditnya.counts: total per daftar, apa pun yang Anda cari.
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.
Parameter kueri (semua opsional): q, kata untuk mencari setiap daftar (tidak peka huruf besar-kecil), dan sub_account_id.
Dengan q:
api_actionsadalah daftar kecocokan datar, dibatasi hingga 60.api_actions_truncatedadalahtruesaat batas diterapkan. Kecocokan pertama membawa parameternya.- Tindakan untuk aplikasi pihak ketiga yang terhubung juga dicari dan kembali di
app_actions. Cari berdasarkan nama aplikasi, misalnyaq=hubspot. Masing-masing menyatakan apakah akun telah menghubungkan aplikasi tersebut (connected), danconnected_appsmencantumkan aplikasi yang telah dihubungkan oleh akun. app_actions_unavailableadalahtruesaat tindakan aplikasi tidak dapat dicari kali ini. Daftar lainnya tetap lengkap.
curl "https://api.dmchamp.com/v1/automations/steps?apiKey=YOUR_API_KEY&q=tag"
const res = await fetch("https://api.dmchamp.com/v1/automations/steps?q=tag", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const { triggers, actions, graph_rules } = await res.json();
res = requests.get(
"https://api.dmchamp.com/v1/automations/steps",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"q": "tag"},
)
catalogue = res.json()
Respons (200, disingkat)
{
"success": true,
"q": "tag",
"node_kinds": [{ "kind": "trigger", "label": "Trigger", "description": "Starts the automation when an event happens." }],
"triggers": [
{
"kind": "tag_applied",
"label": "Tag applied",
"group": "Contacts",
"fields": ["tag_name", "channel", "applied_by"],
"output_keys": ["contact.id", "contact.first_name", "..."]
}
],
"actions": [
{
"key": "SET_CONTACT_TAG",
"label": "Set contact tag",
"group": "Contacts",
"provider": "native",
"params": [{ "key": "contact_id", "required": true }, { "key": "tag", "required": true }]
}
],
"api_actions": ["..."],
"app_actions": [],
"graph_rules": "GRAPH: { nodes: [{ id, type, label?, data }], edges: [{ source, target, sourceHandle? }] } ...",
"counts": { "node_kinds": 8, "triggers": 40, "actions": 44, "api_actions": 454 }
}
Daftar jenis langkah dan pemicu di bawah ini diambil dari titik akhir ini. Titik akhir itu sendiri selalu merupakan daftar saat ini.
Membuat otomatisasi
POST /automations membuat otomatisasi dari nama dan grafik. Otomatisasi disimpan dalam keadaan dimatikan, sebagai draf.
Isi
| Bidang | Wajib | Arti |
|---|---|---|
name |
Ya | Apa namanya dalam daftar. Singkat dan spesifik. |
description |
Tidak | Satu hingga tiga kalimat tentang apa yang dilakukannya dan kapan dijalankan. |
graph |
Ya | { nodes, edges }, lihat di bawah. |
folder_id |
Tidak | Folder untuk menyimpannya, id dari Daftar folder. Jika dikosongkan atau null, otomatisasi tidak masuk ke folder mana pun. |
Grafik. graph_rules dari katalog langkah adalah tata bahasa lengkapnya. Singkatnya:
- Setiap simpul memiliki
id(unik dalam grafik, misalnyatrigger_1atausend_reminder),type(salah satu dari 8 jenis langkah),labelopsional, dan pengaturannya didata, di bawah kunci yang dinamai menurut jenisnya:data.trigger = { kind, ... },data.action = { provider, slug, params },data.condition = { ... },data.delay = { seconds },data.ai = { prompt },data.loop = { over },data.transform = { language, code },data.respond = { status, body, content_type }. - 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.
- Setiap tepi memiliki
sourcedantarget. Tepi yang meninggalkan kondisi membawasourceHandletrueataufalse. Tepi yang meninggalkan perulangan membawabodyataudone. Tepi yang meninggalkan penundaan Tunggu balasan membawarepliedatautimed_out. Tepi lainnya tidak memilikisourceHandle; tata bahasa mencantumkan sisanya. - 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 memilih di pembuat. - Posisi bersifat opsional. Langkah tanpa posisi akan diletakkan secara otomatis.
- Nilai dari langkah sebelumnya ditulis sebagai
${trigger.<field>}dan${nodes.<step>.<field>}. Lihat Menggunakan apa yang dikembalikan langkah sebelumnya dan Ekspresi dalam panduan Otomatisasi.
Grafik diterima dalam dua ejaan: milik pembuat (simpul dengan type dan data, tepi dengan source dan target, seperti di bawah) dan yang dijawab oleh Dapatkan otomatisasi (simpul dengan kind, config, action, params; tepi dengan from, to, branch). Jadi, Anda dapat membaca otomatisasi, mengubah langkah, dan mengirimnya kembali.
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" }]
}
}'
const res = await fetch("https://api.dmchamp.com/v1/automations", {
method: "POST",
headers: { "X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json" },
body: JSON.stringify({ name: "Price question auto-reply", graph: { nodes, edges } }),
});
const { automation, draft, open_path, warnings } = await res.json();
res = requests.post(
"https://api.dmchamp.com/v1/automations",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"name": "Price question auto-reply", "graph": {"nodes": nodes, "edges": edges}},
)
draft = res.json()
Respons (201)
{
"success": true,
"automation": { "id": "8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f", "name": "Price question auto-reply", "enabled": false, "graph": { "...": "..." } },
"draft": true,
"open_path": "/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f",
"warnings": []
}
automationadalah otomatisasi seperti yang disimpan, dalam bentuk yang sama dengan Dapatkan otomatisasi.draftadalahtruesaat dimatikan. Otomatisasi baru selalu berupa draf sampai Anda mengaktifkannya, jadienabled: falsedi sini adalah normal, bukan kegagalan.open_pathadalah tempat otomatisasi terbuka di pembuat aplikasi.warningsmencantumkan hal-hal yang tidak dapat diselesaikan oleh pembuat, sebagai label singkat (misalnyaagent_function:not_linked). Daftar ini kosong jika semuanya bersih.
Operasi buat tidak aman untuk diulang secara membabi buta. Jika permintaan mengalami waktu habis (timeout), buat daftar otomatisasi Anda sebelum mengirimnya kembali, atau Anda mungkin akan mendapatkan dua draf.
Memperbarui otomatisasi
PUT /automations/{automationId} mengubah nama, deskripsi, dan/atau grafik. Kirim hanya kolom yang ingin Anda ubah.
Body: name, description, graph (semuanya opsional, setidaknya satu).
Sebuah graph menggantikan seluruh grafik, jadi selalu kerjakan berdasarkan apa yang tersimpan:
- Baca otomatisasi dengan
GET /automations/{automationId}. - Ubah apa yang Anda perlukan dalam grafik tersebut.
- Kirim kembali seluruh grafik, termasuk setiap langkahnya.
Saat Anda mengirimnya kembali:
- Pertahankan
aliassetiap langkah persis seperti yang Anda terima. Langkah selanjutnya merujuk pada suatu langkah berdasarkan aliasnya (${nodes.<alias>.<field>}). Jika Anda mengubah atau menghapusnya, setiap referensi ke langkah tersebut akan menjadi kosong. Lihat Menamai langkah Anda. - Biarkan nilai
"[redacted]"sebagaimana adanya. Nilai yang ditampilkan sebagai"[redacted]"tetap mempertahankan nilai yang tersimpan. - Pulihkan teks yang dipotong. Teks yang muncul dengan akhiran elipsis telah dipotong saat pembacaan.
Status aktif atau tidaknya otomatisasi tidak pernah diubah di sini. Jika aktif, hasil edit Anda akan langsung diterapkan segera setelah disimpan. Saat otomatisasi aktif, perubahan yang dapat memicu otomatisasi itu sendiri akan ditolak: nonaktifkan terlebih dahulu.
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)" }'
// Read, edit, send back the whole graph
const get = await fetch(`https://api.dmchamp.com/v1/automations/${id}`, { headers: { "X-API-Key": "YOUR_API_KEY" } });
const { automation } = await get.json();
const step = automation.graph.nodes.find((n) => n.id === "send_prices");
step.config.params.body = "Hi ${trigger.contact.first_name}, our new price list: https://example.com/prices";
await fetch(`https://api.dmchamp.com/v1/automations/${id}`, {
method: "PUT",
headers: { "X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json" },
body: JSON.stringify({ graph: automation.graph }),
});
url = f"https://api.dmchamp.com/v1/automations/{automation_id}"
automation = requests.get(url, headers={"X-API-Key": "YOUR_API_KEY"}).json()["automation"]
# ...edit automation["graph"] here, keeping every alias...
requests.put(url, headers={"X-API-Key": "YOUR_API_KEY"}, json={"graph": automation["graph"]})
Respons (200): memiliki bentuk yang sama dengan pembuatan (automation, draft, open_path, warnings). Mengirimkan salah satu dari name, description, atau graph akan mengembalikan 400.
Aktifkan dan nonaktifkan
POST /automations/{automationId}/enable mengaktifkan otomatisasi, sehingga otomatisasi tersebut akan berjalan berdasarkan pemicunya mulai saat ini. Panggil hanya setelah pemilik akun melihat apa yang dilakukan otomatisasi tersebut dan kepada siapa, serta telah setuju untuk mengaktifkannya. Pembuat (builder) akan menolak untuk mengaktifkan grafik yang tidak dapat dijalankan (tidak ada pemicu, perulangan, langkah yang memicu dirinya sendiri) dengan 400 yang menjelaskan alasannya.
POST /automations/{automationId}/disable menonaktifkannya (menjeda). Proses yang sedang berjalan akan diselesaikan; tidak ada proses baru yang dimulai. Penonaktifan selalu diizinkan.
Kedua panggilan tidak memerlukan isi (body).
curl -X POST "https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f/enable?apiKey=YOUR_API_KEY"
await fetch("https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f/disable", {
method: "POST",
headers: { "X-API-Key": "YOUR_API_KEY" },
});
requests.post(
"https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f/enable",
headers={"X-API-Key": "YOUR_API_KEY"},
)
Respons (200): otomatisasi sebagaimana tersimpan saat ini, dalam bentuk yang sama dengan pembuatan, dengan draft: false setelah pengaktifan.
Riwayat eksekusi
GET /automations/{automationId}/runs mengembalikan eksekusi dari satu otomatisasi, yang terbaru terlebih dahulu: kapan setiap eksekusi dimulai dan selesai, apa yang memicunya, apakah berhasil, dan kesalahan saat gagal. Membaca otomatisasi memberi tahu Anda apa yang akan dilakukannya. Riwayat eksekusi memberi tahu Anda apa yang telah dilakukannya, dan ini adalah satu-satunya cara untuk membedakan otomatisasi yang tidak pernah berjalan dengan yang berjalan dan gagal setiap saat.
Parameter kueri (semuanya opsional): limit (1 hingga 50, default 10), sub_account_id.
curl "https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f/runs?apiKey=YOUR_API_KEY&limit=20"
const res = await fetch("https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f/runs?limit=20", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const { runs, note } = await res.json();
res = requests.get(
"https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f/runs",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"limit": 20},
)
runs = res.json()["runs"]
Respons (200)
{
"success": true,
"automation": { "id": "8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f", "name": "Price question auto-reply", "enabled": true, "trigger_kind": "incoming_message" },
"runs": [
{
"id": "run_7f3a",
"status": "failed",
"trigger_source": "incoming_message",
"started_at": "2026-10-27T10:02:11.000Z",
"finished_at": "2026-10-27T10:02:12.000Z",
"error": "Contact is on Do Not Disturb list",
"cancel_reason": null,
"mode": "live"
}
]
}
modeadalahliveuntuk eksekusi nyata, atausafeuntuk Eksekusi aman dari editor. Eksekusi aman tidak mengirim apa pun, jadi itu bukan bukti bahwa otomatisasi berfungsi dalam penggunaan nyata.- Daftar
runsyang kosong adalah sebuah jawaban, bukan celah. Respons tersebut kemudian membawanote: entah pemicu belum pernah aktif, atau otomatisasi dimatikan, sehingga tidak ada yang berjalan.
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.
Daftar folder
GET /automations/folders mengembalikan folder, masing-masing dengan jumlah otomatisasi yang dimuatnya, ditambah unfiled_count: berapa banyak otomatisasi yang tidak berada dalam folder apa pun.
curl "https://api.dmchamp.com/v1/automations/folders?apiKey=YOUR_API_KEY"
{
"success": true,
"folders": [{ "id": "f1a2b3c4-5d6e-7f80-91a2-b3c4d5e6f708", "name": "Sales", "automation_count": 3 }],
"unfiled_count": 5
}
Membuat folder
POST /automations/folders dengan { "name": "Appointment reminders" }. Nama wajib diisi, maksimal 100 karakter, dan harus unik di akun tersebut. Masukkan otomatisasi ke dalamnya dengan Memindahkan otomatisasi, atau berikan folder_id saat Anda membuatnya.
curl -X POST "https://api.dmchamp.com/v1/automations/folders?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Appointment reminders" }'
Respons (201): { "success": true, "folder": { "id": "...", "name": "Appointment reminders", "automation_count": 0 } }. Nama yang sudah dimiliki folder lain akan mengembalikan 409 dengan code: "folder_name_taken".
Mengganti nama folder
PUT /automations/folders/{folderId} dengan { "name": "..." }. Otomatisasi di dalamnya tetap berada di tempatnya.
Respons (200): { "success": true, "folder": { ... } }.
Menghapus folder
DELETE /automations/folders/{folderId} hanya menghapus folder tersebut. Otomasi di dalamnya tidak dihapus: otomasi tersebut akan berpindah ke luar folder dan tetap berjalan seperti sebelumnya.
curl -X DELETE "https://api.dmchamp.com/v1/automations/folders/f1a2b3c4-5d6e-7f80-91a2-b3c4d5e6f708?apiKey=YOUR_API_KEY"
{ "success": true, "deleted": true, "moved_to_no_folder": 3, "message": "Folder deleted. 3 automations were moved to No folder; no automation was deleted." }
Memindahkan otomasi ke folder
PUT /automations/{automationId}/folder dengan { "folder_id": "<folder id>" }, atau { "folder_id": null } untuk mengeluarkannya dari folder. folder_id diperlukan. Hanya lokasi daftar otomasi yang berubah.
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" }'
Respons (200): { "success": true, "automation_id": "...", "folder_id": "..." }.
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.
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 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:
{
"success": false,
"error_code": 400,
"code": "invalid_graph",
"error": "<the first problem, as one sentence>",
"errors": ["<the first problem, as one sentence>", "<the next problem>"]
}
errors mencantumkan setiap masalah, masing-masing dengan satu kalimat perbaikan, dan error adalah yang pertama. Perbaiki persis apa yang tercantum dan kirimkan kembali seluruh grafik. code adalah salah satu dari invalid_graph, automation_graph_has_a_cycle, self_triggering_automation, no_trigger, atau kode lain dari pembuatnya.
| Status | Kapan |
|---|---|
400 |
Grafik ditolak (lihat di atas), kolom wajib diisi tidak ada (name atau graph saat pembuatan, folder_id saat pemindahan), pembaruan tidak mengirimkan perubahan apa pun, id otomatisasi atau folder tidak valid, atau nama folder tidak ada, kosong, atau terlalu panjang (code: "invalid_name"). |
403 |
Akun tidak memiliki Otomatisasi; paket akun klien tidak mencakup pembuatan dan pengeditan otomatisasi (hanya tulis); atau akses Otomatisasi anggota tim terlalu rendah (Lihat untuk baca, Edit untuk tulis). |
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. Pindahkan kode atau data besar keluar dari langkah-langkahnya. |
422 |
Pembuat menolak permintaan karena alasan lain. Periksa grafik terhadap GET /automations/steps; mengirimkan permintaan yang sama lagi tidak akan membantu. |
503 |
Layanan otomatisasi tidak dapat dijangkau. Coba lagi nanti. Untuk pembuatan, buat daftar otomatisasi Anda terlebih dahulu agar Anda tidak membuat draf kedua. |
Menggunakan endpoint ini melalui MCP
Setiap endpoint di halaman ini juga merupakan alat untuk asisten AI yang Anda hubungkan melalui MCP, 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: cara kerja pemicu, langkah, variabel, dan riwayat proses di pembuat.
- API untuk Agensi: membangun otomatisasi pada akun klien dengan
sub_account_id. - Referensi API: penjelajah endpoint interaktif lengkap.