Otomasyonlar API’si
Otomasyon, adımlardan oluşan bir iş akışıdır: onu başlatan bir veya daha fazla tetikleyici, ardından eylemler, koşullar, gecikmeler, yapay zeka adımları ve bir grafiğe bağlanmış diğer öğeler. Bu, Otomasyonlar sayfasında gördüğünüz ve düzenlediğiniz otomasyonun aynısıdır. Bu kılavuz, bunları API üzerinden okumayı ve oluşturmayı kapsar.
- Temel URL:
https://api.dmchamp.com/v1 - Kimlik Doğrulama: API anahtarınız (bkz. Kimlik Doğrulama)
- Hatalar: bkz. Hatalar ve Sayfalama ve aşağıdaki Hatalar
Aşağıdaki tüm örnekler, cURL’de ?apiKey= sorgu formunu ve JavaScript ile Python’da X-API-Key başlığını göstermektedir. Her ikisi de her uç noktada çalışır.
Ajanslar: Bu sayfadaki her uç nokta, bir sorgu parametresi olarak
sub_account_idkabul eder, böylece ajans anahtarınızla bir müşterinin otomasyonlarını okuyabilir ve oluşturabilirsiniz. Müşteri hesaplarınızdan biri olmayan birsub_account_id,404döndürür. Bkz. Ajanslar için API.
Nasıl çalışır: önce taslak
API, hiçbir şeyin yanlışlıkla çalışmaya başlamaması için tasarlanmıştır.
- Kataloğu okuyun.
GET /automations/steps, kullanabileceğiniz her tetikleyiciyi, eylemi ve adım türünü, ayrıca bir grafik yazmak için gereken dil bilgisini (graph_rules) listeler. - Bir taslak oluşturun.
POST /automations, otomasyonu kapalı olarak saklar. Henüz hiçbir şey çalışmaz. - Kontrol edin. Geri okuyun, oluşturucuda açın (yanıt size
open_pathdeğerini verir) ve hesabın sahibinin ne yaptığını ve kime yaptığını gördüğünden emin olun. - Açın.
POST /automations/{automationId}/enablekendi başına bir çağrıdır. Bu, gerçek şeylerin gerçekleşmesini sağlayan adımdır: mesajlar gönderilir, kayıtlar değiştirilir, bir yapay zeka temsilcisine araçlar verilir.
Düzenleme, bir otomasyonun açık veya kapalı olma durumunu asla değiştirmez. Bu aynı zamanda açık olan bir otomasyonda yapılan bir düzenlemenin, canlı otomasyonda hemen geçerli olduğu anlamına gelir. Çalışan bir otomasyonu güvenli bir şekilde değiştirmek için devre dışı bırakın, düzenleyin, kontrol edin ve tekrar etkinleştirin.
Gönderdiğiniz her grafik, oluşturucu tuvalinin uyguladığı aynı kontrollerden geçer. Açamadığı veya çalıştıramadığı bir grafik, tam olarak neyin düzeltilmesi gerektiğini listeleyen bir 400 ile reddedilir.
Erişim
- Hesabın Otomasyonlara ihtiyacı vardır. Bu olmadan, bu sayfadaki her çağrı
403döndürür. - Bir ekip üyesinin erişimi, Ekip Yönetimi içindeki Otomasyonlar alanını takip eder: okuma (liste, al, adımlar, çalıştırmalar, klasörler) Görüntüleme yetkisi gerektirir, bir şeyi değiştiren her şey Düzenleme yetkisi gerektirir.
- Planı otomasyon oluşturmayı ve düzenlemeyi dışarıda bırakan bir müşteri hesabında, yazma çağrıları, uygulamadaki oluşturucunun yaptığı gibi
403döndürür.
Otomasyon nesnesi
Liste, her otomasyonun adımları olmadan bir özetini döndürür:
{
"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"
}
| Alan | Anlamı |
|---|---|
id |
Otomasyonun kimliği. |
name |
Listede nasıl adlandırıldığı. |
description |
Ne yaptığına dair bir ila üç cümle veya null. |
enabled |
Açık olup olmadığı. Devre dışı bırakılmış bir otomasyon asla çalışmaz. |
updated_at |
En son ne zaman değiştirildiği. |
trigger_kind |
Onu neyin tetiklediği, örneğin incoming_message, schedule, webhook, agent_function veya manual. Grafik henüz bir tetikleyiciye sahip olmadığında null. |
folder_id, folder_name |
İçinde dosyalandığı klasör veya klasör yoksa null. |
Bir otomasyonun okunması created_at ve onun graph öğesini ekler:
{
"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" }]
}
}
Her adım (nodes[]) şunları içerir:
| Alan | Anlamı |
|---|---|
id |
Adımın grafik içinde benzersiz olan kimliği (id). |
kind |
Adımın türü: trigger, action, condition, transform, ai, delay, loop veya respond. Bkz. Adım türleri. |
label |
Oluşturucuda adım üzerinde gösterilen ad. |
alias |
Adımın referans adı. Sonraki adımlar çıktısını ${nodes.<alias>.<field>} olarak okur. Hiçbir çıktısı olmayan bir adımda null (bu durumda kimliği ile referans verilir). |
action |
Adımın ne yaptığı: çalıştırdığı eylem veya bir tetikleyici adımda tetikleyici türü. Diğer adımlarda null. |
params |
Bir eylem adımında eylemin parametreleri veya bir tetikleyici adımda tetikleyicinin ayarları. Diğer tüm türlerde null. Eski okuyucular için tutulmuştur: config aynı değerleri ve daha fazlasını taşır. |
config |
Oluşturucunun depoladığı şekliyle adımın tam ayarları; her adım türü için: bir koşulun kuralları, bir yapay zeka adımının istemi, bir gecikmenin süresi, bir eylemin kısa adı (slug) ve parametreleri. |
Her bağlantı (edges[]), from ve to (adım kimlikleri) ile branch değerlerine sahiptir; bir adımın bir dalını takip ettiğinde, örneğin bir koşuldan sonra true veya false gibi değerler alır.
config içindeki iki şey çıkışta değiştirilir:
- Gizli bilgiler gizlenir. Kimlik bilgileri gibi görünen değerler (webhook gizli anahtarları, belirteçler, API anahtarları, parolalar, başlık değerleri)
"[redacted]"olarak geri döner."[redacted]"değerini değiştirmeden geri gönderirseniz, depolanan değer korunur. - Uzun metinler kısaltılır. Yaklaşık 4.000 karakterden uzun tek bir metin kısaltılır ve sonuna üç nokta eklenir. Bu adımı geri gönderecekseniz, önce tam metni geri yerleştirin.
Otomasyonları listele
GET /automations, hesaptaki otomasyonları, en son değiştirilenden başlayarak özetler halinde (adımlar olmadan) döndürür.
Sorgu parametreleri (hepsi isteğe bağlıdır): folder_id (yalnızca o klasördeki otomasyonlar, Klasörleri listele kısmından bir kimlik veya klasörde olmayanlar için none), 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"]
Yanıt (200)
{ "success": true, "automations": [{ "id": "8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f", "name": "Price question auto-reply", "enabled": false, "...": "..." }] }
Otomasyon hizmetine ulaşılamazsa 503 alırsınız, asla boş bir liste almazsınız. Boş bir liste her zaman hiç otomasyon olmadığı anlamına gelir.
Bir otomasyonu al
GET /automations/{automationId}, tam grafiğiyle birlikte bir otomasyonu döndürür: her adımın türü, etiketi, takma adı, eylemi, parametreleri ve ayarları ile aralarındaki bağlantılar.
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"]
Yanıt (200)
{ "success": true, "automation": { "id": "8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f", "name": "Price question auto-reply", "graph": { "nodes": ["..."], "edges": ["..."] } } }
Bu hesapta bulunmayan bir kimlik 404 döndürür.
Adım kataloğu
GET /automations/steps, bir otomasyonun oluşturulabileceği her şeyi döndürür:
node_kinds: her biri bir etiket ve açıklamaya sahip 8 adım türü.triggers: ayar alanları (fields) ve sonraki adımlara ilettiği değerler (output_keys) ile bir otomasyonu başlatabilen her tetikleyici.actions: bir eylem adımının çalıştırabileceği yerleşik eylemler; her birikey(bir grafikte kullandığınız kısa ad) veparamsile belirtilmiş olup, nerede olduklarırequiredile işaretlenmiştir.api_actions: bir eylem adımının çağırabileceği bu API’nin işlemleri.qolmadan, bunlarapi_actions_by_tagiçinde alana göre gruplandırılmış etiketler olarak döner ve birkaç yüz tane oldukları için düz liste boştur.graph_rules: bir grafik yazmak için dil bilgisi: her adım türünün taşıdığı veriler, ayar anahtarlarıyla birlikte her tetikleyici türü, eylem sağlayıcıları, dal adları ve şablon söz dizimi. Bir tane oluşturmadan veya düzenlemeden önce bunu okuyun.counts: ne aradığınızdan bağımsız olarak, liste başına toplamlar.
Bu, hesabın oluşturduğu şey değil, oluşturucunun sunduğu şeydir. Bir tetikleyicinin veya eylemin mevcut olmadığı sonucuna varmadan önce bunu kontrol edin.
Sorgu parametreleri (hepsi isteğe bağlı): q, her listede arama yapmak için bir kelime (büyük/küçük harfe duyarsız) ve sub_account_id.
q ile:
api_actions, 60 ile sınırlandırılmış eşleşmelerin düz listesidir.api_actions_truncated, sınır uygulandığındatruedeğerini alır. İlk eşleşmeler kendi parametrelerini taşır.- Bağlı üçüncü taraf uygulamalara yönelik eylemler de aranır ve
app_actionsiçinde döner. Uygulamanın adına göre arama yapın, örneğinq=hubspot. Her biri, hesabın o uygulamaya bağlı olup olmadığını (connected) belirtir veconnected_apps, hesabın bağlı olduğu uygulamaları listeler. app_actions_unavailable, uygulama eylemleri bu sefer aranamadığındatruedeğerini alır. Diğer listeler hala tamdır.
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()
Yanıt (200, kısaltılmış)
{
"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 }
}
Aşağıdaki adım türleri ve tetikleyiciler listeleri bu uç noktadan alınmıştır. Uç noktanın kendisi her zaman güncel listedir.
Bir otomasyon oluşturun
POST /automations, bir isim ve grafikten bir otomasyon oluşturur. Taslak olarak kapalı durumda saklanır.
Gövde
| Alan | Gerekli | Anlamı |
|---|---|---|
name |
Evet | Listede nasıl adlandırıldığı. Kısa ve belirgin. |
description |
Hayır | Ne yaptığı ve ne zaman çalıştığına dair bir ila üç cümle. |
graph |
Evet | { nodes, edges }, aşağıya bakın. |
folder_id |
Hayır | Dosyalanacağı klasör, Klasörleri listele içinden bir kimlik. Belirtilmezse veya null ise, hiçbir klasöre gitmez. |
Grafik. Adım kataloğundan graph_rules tam dil bilgisidir. Kısaca:
- Her düğümün bir
id(grafikte benzersiz, örneğintrigger_1veyasend_reminder), birtype(8 adım türünden biri), isteğe bağlı birlabelve türünün adını taşıyan bir anahtar altındadataiçinde ayarları vardır: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 }. - Bir otomasyon en az bir tetikleyiciye ihtiyaç duyar. Canlı dil bilgisi 10 taneye kadar izin verir ve otomasyon bunlardan herhangi biri tetiklendiğinde başlar.
- Diğer her adım bir tetikleyiciden ulaşılabilir olmalı ve hiçbir bağlantı daha önceki bir adıma geri dönmemelidir.
- Her kenarın bir
sourceve birtargetdeğeri vardır. Bir koşuldan çıkan kenarlarsourceHandletrueveyafalsetaşır. Bir döngüden çıkan kenarlarbodyveyadonetaşır. Yanıt bekleme gecikmesinden çıkan kenarlarrepliedveyatimed_outtaşır. Diğer kenarlarınsourceHandledeğeri yoktur; dil bilgisi geri kalanını listeler. - Eylem kısa adları ve parametreleri katalogdan gelir. Asla bir kimliği (bir temsilci, bir etiket, bir liste, bir aşama) tahmin etmeyin: önce API ile arayın veya alanı kişinin oluşturucuda seçmesi için
""olarak bırakın. - Konumlar isteğe bağlıdır. Konumu olmayan adımlar otomatik olarak düzenlenir.
- Önceki adımlardan gelen değerler
${trigger.<field>}ve${nodes.<step>.<field>}olarak yazılır. Otomasyonlar kılavuzundaki Önceki bir adımın döndürdüğü değeri kullanma ve İfadeler bölümlerine bakın.
Grafik iki yazım biçiminde kabul edilir: oluşturucunun kendi biçimi (aşağıdaki gibi type ve data içeren düğümler, source ve target içeren kenarlar) ve Bir otomasyonu al yanıtının biçimi (kind, config, action, params içeren düğümler; from, to, branch içeren kenarlar). Böylece bir otomasyonu okuyabilir, bir adımı değiştirebilir ve geri gönderebilirsiniz.
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()
Yanıt (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": []
}
automation, Bir otomasyonu al ile aynı şekilde, saklandığı haliyle otomasyondur.draft, kapalı olduğu sürecetruedeğerindedir. Yeni bir otomasyon, siz onu etkinleştirene kadar her zaman taslaktır, bu nedenle buradakienabled: falsenormaldir, bir hata değildir.open_path, uygulamanın oluşturucusunda açıldığı yerdir.warnings, oluşturucunun tamamlayamadığı şeyleri kısa etiketler olarak listeler (örneğinagent_function:not_linked). Her şey temiz olduğunda boştur.
Bir oluşturma işlemini körü körüne tekrarlamak güvenli değildir. Bir istek zaman aşımına uğrarsa, tekrar göndermeden önce otomasyonlarınızı listeleyin, aksi takdirde iki taslakla sonuçlanabilirsiniz.
Bir otomasyonu güncelleme
PUT /automations/{automationId} adını, açıklamasını ve/veya grafiğini değiştirir. Yalnızca değiştirmek istediğiniz alanları gönderin.
Gövde: name, description, graph (hepsi isteğe bağlı, en az biri gereklidir).
Bir graph tüm grafiğin yerini alır, bu nedenle her zaman depolanmış olan üzerinde çalışın:
- Otomasyonu
GET /automations/{automationId}ile okuyun. - O grafikte ihtiyacınız olanı değiştirin.
- Tüm grafiği, her adım dahil olacak şekilde geri gönderin.
Geri gönderdiğinizde:
- Her adımın
aliasdeğerini tam olarak aldığınız gibi koruyun. Sonraki adımlar bir adıma takma adıyla (${nodes.<alias>.<field>}) başvurur. Bunu değiştirir veya silerseniz, o adıma yapılan her başvuru boş kalır. Bkz. Adımlarınızı adlandırma. "[redacted]"değerlerini oldukları gibi bırakın."[redacted]"olarak gösterilen bir değer, depolanmış değerini korur.- Kısaltılmış metinleri geri yükleyin. Üç nokta ile biten bir metin, okuma sırasında kısaltılmıştır.
Otomasyonun açık olup olmadığı burada asla değiştirilmez. Açıksa, düzenlemeniz kaydedildiği anda canlıya alınır. Bir otomasyon açıkken, kendi kendini tetiklemesine neden olacak bir değişiklik reddedilir: önce onu devre dışı bırakın.
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"]})
Yanıt (200): bir oluşturma ile aynı biçimdedir (automation, draft, open_path, warnings). name, description veya graph değerlerinden hiçbirini göndermemek 400 döndürür.
Etkinleştirme ve devre dışı bırakma
POST /automations/{automationId}/enable bir otomasyonu açar, böylece bundan sonra tetikleyicisi üzerinde çalışır. Bunu yalnızca hesabın sahibi olan kişi otomasyonun ne yaptığını ve kime yaptığını gördükten ve açmayı kabul ettikten sonra çağırın. Oluşturucu, çalıştıramayacağı bir grafiği (tetikleyici yok, döngü, kendi kendini tetikleyen bir adım) nedenini belirten bir 400 ile açmayı reddeder.
POST /automations/{automationId}/disable onu kapatır (duraklatır). Hali hazırda devam eden çalışmalar tamamlanır; yeni bir çalışma başlamaz. Devre dışı bırakmaya her zaman izin verilir.
Her iki çağrı da gövde almaz.
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"},
)
Yanıt (200): otomasyonun şu anda depolandığı hali, bir oluşturma ile aynı biçimde ve etkinleştirmeden sonra draft: false ile birlikte.
Çalıştırma geçmişi
GET /automations/{automationId}/runs, bir otomasyonun çalıştırmalarını en yeniden başlayarak döndürür: her çalıştırmanın ne zaman başladığı ve bittiği, neyin tetiklediği, başarılı olup olmadığı ve başarısız olduğunda alınan hata. Otomasyonu okumak size ne yapacağını söyler. Çalıştırma geçmişi ise ne yaptığını söyler ve hiç çalışmamış bir otomasyon ile sürekli çalışıp başarısız olan bir otomasyonu ayırt etmenin tek yolu budur.
Sorgu parametreleri (hepsi isteğe bağlıdır): limit (1 ile 50 arası, varsayılan 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"]
Yanıt (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"
}
]
}
mode, gerçek bir çalıştırma içinlivedeğerini veya düzenleyiciden yapılan Güvenli çalıştırma içinsafedeğerini alır. Güvenli çalıştırma hiçbir şey göndermez, bu nedenle otomasyonun gerçek kullanımda çalıştığının bir kanıtı değildir.- Boş bir
runslistesi bir eksiklik değil, bir yanıttır. Bu durumda yanıt birnoteiçerir: ya tetikleyici hiç çalışmamıştır ya da otomasyon kapalıdır, bu yüzden hiçbir şey çalışmamıştır.
Klasörler
Klasörler, otomasyonları yalnızca listede gruplandırır. Bir otomasyonun ne yaptığını veya açık olup olmadığını asla değiştirmezler. Bkz. Otomasyonları klasörlerde düzenleme.
Klasörleri listeleme
GET /automations/folders, her biri içinde kaç otomasyon barındırdığı bilgisiyle birlikte klasörleri ve ayrıca unfiled_count değerini döndürür: hiçbir klasörde olmayan otomasyon sayısı.
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
}
Klasör oluşturma
POST /automations/folders ve { "name": "Appointment reminders" } ile. İsim zorunludur, en fazla 100 karakter olabilir ve hesapta benzersiz olmalıdır. Otomasyonları içine Otomasyon taşıma ile yerleştirin veya bir tane oluştururken folder_id parametresini iletin.
curl -X POST "https://api.dmchamp.com/v1/automations/folders?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Appointment reminders" }'
Yanıt (201): { "success": true, "folder": { "id": "...", "name": "Appointment reminders", "automation_count": 0 } }. Başka bir klasörün zaten sahip olduğu bir isim kullanılırsa code: "folder_name_taken" ile birlikte 409 döndürülür.
Klasörü yeniden adlandırma
PUT /automations/folders/{folderId} ve { "name": "..." } ile. İçindeki otomasyonlar oldukları yerde kalırlar.
Yanıt (200): { "success": true, "folder": { ... } }.
Klasörü silme
DELETE /automations/folders/{folderId} yalnızca klasörü siler. İçindeki otomasyonlar silinmez: herhangi bir klasöre bağlı olmazlar ve tam olarak eskisi gibi çalışmaya devam ederler.
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." }
Bir otomasyonu klasöre taşıma
PUT /automations/{automationId}/folder ile { "folder_id": "<folder id>" } veya klasöründen çıkarmak için { "folder_id": null } kullanın. folder_id gereklidir. Sadece otomasyonun listelendiği yer değişir.
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" }'
Yanıt (200): { "success": true, "automation_id": "...", "folder_id": "..." }.
Katalog
Adım türleri
| Tür | Ne yapar |
|---|---|
trigger |
Bir şey olduğunda otomasyonu başlatır. |
action |
Tek bir adım çalıştırır: yerleşik bir eylem, API eylemi, bağlı uygulama eylemi, HTTP isteği veya e-posta. |
condition |
Akışı bir kurala göre true ve false dalına ayırır. |
transform |
Adımlar arasındaki verileri yeniden şekillendirmek için kısa bir kod parçası çalıştırır. |
ai |
Yazdığınız bir istemle yapay zekaya soru sorar. Metin döndürebilir, alanları ayırabilir veya birkaç daldan birini seçebilir. |
delay |
Belirli bir süre bekler veya (zaman aşımı ile) kişinin yanıt vermesini bekler. |
loop |
İçindeki adımları bir listedeki her öğe için tekrarlar. |
respond |
Webhook çağrısına veya çalıştırmayı başlatan yapay zeka temsilcisi işlev çağrısına bir yanıt döndürür. |
Tetikleyiciler
Bunlar, kataloğun bugün listelediği ve oluşturucunun gruplandırdığı 40 tetikleyicidir. Ayarlar sütunu, tetikleyicinin ne zaman çalışacağını daraltan kendi ayar anahtarlarını (fields) içerir. Her tetikleyici ayrıca respect_quiet_hours, run_hours, reentry ve stop_on_response değerlerini alır; bkz. Otomasyon ayarları.
Mesajlaşma
Tetikleyici (kind) |
Ne zaman çalışır | Ayarlar |
|---|---|---|
Gelen mesaj (incoming_message) |
Bir kişi herhangi bir kanaldan mesaj gönderdiğinde. | campaign (tek bir yapay zeka temsilcisiyle sınırlar), channel, message_filter_contains (anahtar kelime), message_filter_regex (desen) |
Cevapsız arama (missed_call) |
Birisi WhatsApp Web numaralarınızdan birini veya kendi SMS numaranızı aradığında ve kimse açmadığında. | to_number |
Mesaj iletildi (message_delivered) |
Gönderdiğiniz bir mesajın kanal tarafından iletildiği onaylandığında. | channel, agent |
Mesaj başarısız (message_failed) |
Gönderdiğiniz bir mesaj hata nedeniyle iletilemediğinde. | channel, agent |
Mesaj gönderildi (message_sent) |
Hesabınızdan herhangi bir mesaj çıktığında: yapay zekanınki, sizinki, yayın veya takip mesajı. Filtreleyin, aksi takdirde hepsinde çalışır. | channel, sent_by |
Takip mesajı gönderildi (follow_up_sent) |
Otomatik bir takip mesajı gönderildiğinde. | yok |
Takip mesajı atlandı (follow_up_skipped) |
Gönderme koşulu başarısız olduğu için bir takip mesajı bekletildiğinde. | yok |
Takip mesajları bitti (follow_up_exhausted) |
Bir kişi dizideki son takip mesajını aldığında ve sırada başka bir şey kalmadığında. | yok |
Sohbet kapatıldı (conversation_closed) |
Bir sohbet, nasıl bittiği ve bir özeti ile birlikte kapatıldığında. | channel, agent |
Yayın bitti (broadcast_completed) |
Bir yayın gönderimi bittiğinde, kaç tane gönderildiği ve kaç tanesinin başarısız olduğu ile birlikte. | yok |
Soğuk e-posta yanıtı sıralandı (outreach_reply_labelled) |
Bir soğuk e-posta adayının yanıtı, örneğin İlgileniyor olarak sıralandığında. | label |
Skool yorumu alındı (skool_comment_received) |
Bir üye, yorum kurallarınızdan birinin izlediği bir Skool gönderisinin altına yorum yaptığında. | yok |
Kişiler
Tetikleyici (kind) |
Ne zaman çalışır | Ayarlar |
|---|---|---|
Yeni kişi (contact_created) |
Yeni bir kişi size herhangi bir kanaldan ilk kez ulaştığında, ayrıca içe aktarmalar, API ve elle oluşturduğunuz kişiler için. | yok |
Kişi güncellendi (contact_updated) |
Bir kişi alanı değiştiğinde. | field |
Buraya eklediğiniz kişiler (contact_added) |
Sadece Kişiler sayfasından bu otomasyona bizzat eklediğiniz kişiler için. Kişi başına bir çalıştırma. | yok |
Etiket uygulandı (tag_applied) |
Yapay zeka temsilciniz, bir kişi, otomasyon veya içe aktarma yoluyla bir kişiye etiket eklendiğinde. | tag_name, channel, applied_by |
Etiket kaldırıldı (tag_removed) |
Bir kişiden etiket çıkarıldığında. | tag_name, channel |
Skool üyesi katıldı (skool_member_joined) |
Birisi sahip olduğunuz veya yönettiğiniz bir Skool topluluğuna katıldığında, profili, yanıtları ve uygunluk puanı ile birlikte. | group_id, create_contact |
Skool üyesi onaylandı (skool_member_qualified) |
Yeni bir Skool üyesinin yanıtları eşiğinize ulaştığında veya geçtiğinde. | min_score |
Fırsatlar
Tetikleyici (kind) |
Ne zaman çalışır | Ayarlar |
|---|---|---|
Anlaşma oluşturuldu (deal_created) |
İş akışlarınızdan birine yeni bir anlaşma eklendiğinde. | pipeline_id, stage_id |
Anlaşma aşaması değişti (deal_stage_changed) |
Bir anlaşma farklı bir aşamaya geçtiğinde, ayrıldığı ve girdiği aşamayı belirterek. | pipeline_id, to_stage_id, from_stage_id |
Anlaşma güncellendi (deal_updated) |
Bir anlaşma alanı değiştiğinde. | field |
Randevular
Tetikleyici (kind) |
Ne zaman çalışır | Ayarlar |
|---|---|---|
Randevu alındı (appointment_booked) |
Yeni bir randevu alındığında. | yok |
Randevu iptal edildi (appointment_cancelled) |
Alınan bir randevu iptal edildiğinde. | yok |
Randevu yeniden planlandı (appointment_rescheduled) |
Alınan bir randevu başka bir zamana taşındığında, eski zamanı yenisiyle birlikte belirterek. | event_id |
Randevu öncesi (appointment_upcoming) |
Hatırlatıcılar için her onaylanmış randevudan belirli bir süre önce. Otomasyon başına beş hatırlatıcıya kadar. | offsets_minutes |
Görevler
Tetikleyici (kind) |
Ne zaman çalışır | Ayarlar |
|---|---|---|
Görev oluşturuldu (task_created) |
Bir görev oluşturulduğunda. | task_type |
Görev tamamlandı (task_completed) |
Bir görev tamamlanmış aşamaya taşındığında. | yok |
Hesap
Tetikleyici (kind) |
Ne zaman çalışır | Ayarlar |
|---|---|---|
Düşük kredi bakiyesi (low_credit_balance) |
Kredi bakiyeniz uyarı eşiğinizin altına düştüğünde. | yok |
Kanal bağlandı (channel_connected) |
Kanallarınızdan birinin bağlantısı tamamlandığında. | channel |
Kanal bağlantısı kesildi (channel_disconnected) |
Kanallarınızdan biri düştüğünde: oturum kapatıldığında, bağlantı kesildiğinde veya erişim engellendiğinde. Kendiliğinden yeniden bağlanan bir WhatsApp Web numarası, ancak 30 dakika sonra hala kapalıysa sayılır. | channel |
Ajans
Tetikleyici (kind) |
Ne zaman çalışır | Ayarlar |
|---|---|---|
Alt hesap oluşturuldu (sub_account_created) |
Panonuzdan, API’den veya kayıt sayfanızdan yeni bir müşteri hesabı oluşturulduğunda. | yok |
Alt hesap etkinliği (sub_account_event) |
Müşteri hesaplarınızdan birinde bir şey olduğunda: kredilerin azalması, bir kanalın bağlanması, plan değişikliği gibi. | event, threshold |
Genel ve uygulamalar
Tetikleyici (kind) |
Ne zaman tetiklenir | Ayarlar |
|---|---|---|
Zamanlamaya göre (schedule) |
Bir cron zamanlamasında. | cron, timezone |
Webhook (webhook) |
Dış bir sistem otomasyonun webhook adresini çağırdığında. | webhook_secret |
Yapay Zeka Ajanı İşlevi (agent_function) |
Yapay zeka ajanınız bir konuşma sırasında bu otomasyonu bir işlev olarak çağırdığında. | function_name, function_description, parameters, agent_ids, campaign_ids |
Yeni akış öğesi (rss) |
Bir RSS veya Atom akışında yeni bir öğe göründüğünde. | feed_url |
E-posta alındı (email_received) |
Bağlı posta kutunuza bir e-posta geldiğinde. | from_contains, subject_contains |
Uygulama etkinliği (app_event) |
Bağlı bir uygulamada bir şey olduğunda: bir fırsat aşaması değiştiğinde, ödeme geldiğinde, form gönderildiğinde. | toolkit, trigger_slug, connected_account_id, config |
Manuel çalıştırma (manual) |
Sadece elle başlatıldığında. | none |
Bir otomasyon, webhook, app_event, agent_function, rss, schedule, email_received, appointment_upcoming ve contact_added tetikleyicilerinin her birinden en fazla bir tanesini içerebilir. Bir kayıt oluşturulduğunda tetiklenen bir tetikleyici, aynı kaydı oluşturan eylemle eşleştirilemez, çünkü otomasyon kendi kendini tetikleyecektir.
Her tetikleyicinin sonraki adımlara (output_keys) ne sağladığı ve parametreleriyle birlikte eylemlerin tam listesi için GET /automations/steps bölümünü okuyun. Otomasyonlar kılavuzu, oluşturucunun dilinde her bir tetikleyiciyi açıklar.
Hatalar
Her hatanın genel yapısı { "success": false, "error_code": <status>, "error": "..." } şeklindedir. Reddedilen bir grafik code ve errors ekler:
{
"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, her biri düzeltilebilir bir cümle olan tüm sorunları listeler ve error bunlardan ilkidir. Listelenenleri tam olarak düzeltin ve grafiğin tamamını tekrar gönderin. code; invalid_graph, automation_graph_has_a_cycle, self_triggering_automation, no_trigger değerlerinden biri veya oluşturucudan gelen başka bir koddur.
| Durum | Ne zaman |
|---|---|
400 |
Grafik reddedildi (yukarıya bakın), gerekli bir alan eksik (oluşturma işleminde name veya graph, taşıma işleminde folder_id), güncelleme değişikliğe neden olmadı, bir otomasyon veya klasör kimliği geçerli değil veya klasör adı eksik, boş ya da çok uzun (code: "invalid_name"). |
403 |
Hesapta Otomasyonlar özelliği yok; bir müşteri hesabının planı otomasyon oluşturmayı ve düzenlemeyi içermiyor (sadece yazma); veya ekip üyesinin Otomasyonlar erişimi çok düşük (Görüntüleme okuma için, Düzenleme yazma için). |
404 |
Bu hesapta bu kimliğe sahip bir otomasyon yok, bu kimliğe sahip bir klasör yok (code: "folder_not_found") veya sub_account_id müşteri hesaplarınızdan biri değil. |
409 |
Bu ada sahip bir klasör zaten mevcut (code: "folder_name_taken"). |
413 |
Otomasyon, oluşturucunun kabul ettiği 1 MB boyutundan daha büyük. Büyük kodları veya verileri adımlarından dışarı taşıyın. |
422 |
Oluşturucu isteği başka bir nedenden dolayı reddetti. Grafiği GET /automations/steps ile karşılaştırın; aynı isteği tekrar göndermek yardımcı olmayacaktır. |
503 |
Otomasyon servisine ulaşılamadı. Birazdan tekrar deneyin. Oluşturma işlemi için, ikinci bir taslak oluşturmamak adına önce otomasyonlarınızı listeleyin. |
Bu uç noktaları MCP üzerinden kullanma
Bu sayfadaki her uç nokta, MCP üzerinden bağlandığınız bir yapay zeka asistanı için de bir araçtır ve aynı kurallara tabidir: yeni bir otomasyon etkinleştirilene kadar taslaktır ve çalışan bir otomasyonda yapılan düzenleme anında canlıya alınır.
| Araç | Uç Nokta |
|---|---|
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 |
Sonraki adımlar
- Otomasyonlar: oluşturucuda tetikleyicilerin, adımların, değişkenlerin ve çalıştırma geçmişinin nasıl çalıştığı.
- Ajanslar için API:
sub_account_idile bir müşteri hesabında otomasyonlar oluşturun. - API Referansı: tam etkileşimli uç nokta gezgini.