DM Champ Docs

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.

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_id kabul eder, böylece ajans anahtarınızla bir müşterinin otomasyonlarını okuyabilir ve oluşturabilirsiniz. Müşteri hesaplarınızdan biri olmayan bir sub_account_id, 404 dö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.

  1. 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.
  2. Bir taslak oluşturun. POST /automations, otomasyonu kapalı olarak saklar. Henüz hiçbir şey çalışmaz.
  3. Kontrol edin. Geri okuyun, oluşturucuda açın (yanıt size open_path değerini verir) ve hesabın sahibinin ne yaptığını ve kime yaptığını gördüğünden emin olun.
  4. Açın. POST /automations/{automationId}/enable kendi 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ı 403 dö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 403 dö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 biri key (bir grafikte kullandığınız kısa ad) ve params ile belirtilmiş olup, nerede oldukları required ile işaretlenmiştir.
  • api_actions: bir eylem adımının çağırabileceği bu API’nin işlemleri. q olmadan, bunlar api_actions_by_tag iç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ığında true değerini alır. İlk eşleşmeler kendi parametrelerini taşır.
  • Bağlı üçüncü taraf uygulamalara yönelik eylemler de aranır ve app_actions içinde döner. Uygulamanın adına göre arama yapın, örneğin q=hubspot. Her biri, hesabın o uygulamaya bağlı olup olmadığını (connected) belirtir ve connected_apps, hesabın bağlı olduğu uygulamaları listeler.
  • app_actions_unavailable, uygulama eylemleri bu sefer aranamadığında true değ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ğin trigger_1 veya send_reminder), bir type (8 adım türünden biri), isteğe bağlı bir label ve türünün adını taşıyan bir anahtar altında data iç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 source ve bir target değeri vardır. Bir koşuldan çıkan kenarlar sourceHandle true veya false taşır. Bir döngüden çıkan kenarlar body veya done taşır. Yanıt bekleme gecikmesinden çıkan kenarlar replied veya timed_out taşır. Diğer kenarların sourceHandle değ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ürece true değerindedir. Yeni bir otomasyon, siz onu etkinleştirene kadar her zaman taslaktır, bu nedenle buradaki enabled: false normaldir, bir hata değildir.
  • open_path, uygulamanın oluşturucusunda açıldığı yerdir.
  • warnings, oluşturucunun tamamlayamadığı şeyleri kısa etiketler olarak listeler (örneğin agent_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:

  1. Otomasyonu GET /automations/{automationId} ile okuyun.
  2. O grafikte ihtiyacınız olanı değiştirin.
  3. Tüm grafiği, her adım dahil olacak şekilde geri gönderin.

Geri gönderdiğinizde:

  • Her adımın alias değ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çin live değerini veya düzenleyiciden yapılan Güvenli çalıştırma için safe değ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 runs listesi bir eksiklik değil, bir yanıttır. Bu durumda yanıt bir note iç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_id ile bir müşteri hesabında otomasyonlar oluşturun.
  • API Referansı: tam etkileşimli uç nokta gezgini.