DM Champ Docs

API pentru Automatizări

O automatizare este un flux de lucru compus din pași: unul sau mai multe declanșatoare care îl pornesc, urmate de acțiuni, condiții, întârzieri, pași AI și restul, conectate într-un graf. Este aceeași automatizare pe care o vezi și o editezi pe pagina Automatizări. Acest ghid acoperă citirea și crearea acestora prin API.

Toate exemplele de mai jos arată forma de interogare ?apiKey= în cURL și antetul X-API-Key în JavaScript și Python. Oricare dintre ele funcționează pe orice endpoint.

Agenții: fiecare endpoint de pe această pagină acceptă sub_account_id ca parametru de interogare, astfel încât să poți citi și construi automatizările unui client cu cheia ta de agenție. Un sub_account_id care nu este unul dintre conturile clienților tăi va returna 404. Vezi API pentru Agenții.


Cum funcționează: mai întâi ciorna

API-ul este construit astfel încât nimic să nu înceapă să ruleze din greșeală.

  1. Citește catalogul. GET /automations/steps listează fiecare declanșator, acțiune și tip de pas pe care îl poți folosi, plus gramatica pentru scrierea unui graf (graph_rules).
  2. Creează o ciornă. POST /automations stochează automatizarea oprită. Încă nu rulează nimic.
  3. Verifică. Citește-o, deschide-o în constructor (răspunsul îți oferă open_path-ul său) și asigură-te că persoana care deține contul a văzut ce face și pentru cine.
  4. Pornește-o. POST /automations/{automationId}/enable este propriul său apel. Acesta este pasul care face ca lucrurile reale să se întâmple: mesaje trimise, înregistrări modificate, instrumente oferite unui agent AI.

Editarea nu schimbă niciodată starea unei automatizări (pornită sau oprită). Acest lucru înseamnă, de asemenea, că o modificare adusă unei automatizări care este pornită intră în vigoare imediat, pe automatizarea activă. Pentru a modifica în siguranță o automatizare care rulează, dezactivează-o, editează-o, verifică-o și activează-o din nou.

Fiecare graf pe care îl trimiți trece prin aceleași verificări pe care le aplică pânza constructorului. Un graf pe care nu îl poate deschide sau rula este refuzat cu un 400 care listează exact ce trebuie remediat.

Acces

  • Contul are nevoie de Automatizări. Fără aceasta, fiecare apel de pe această pagină returnează 403.
  • Accesul unui membru al echipei urmează zona lor de Automatizări din Gestionarea Echipei: citirea (listă, obținere, pași, rulări, foldere) necesită Vizualizare, tot ce modifică ceva necesită Editare.
  • Pe un cont de client al cărui plan exclude crearea și editarea automatizărilor, apelurile de scriere returnează 403, exact așa cum face constructorul în aplicație.

Obiectul de automatizare

Lista returnează un rezumat al fiecărei automatizări, fără pașii săi:

{
  "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"
}
Câmp Semnificație
id ID-ul automatizării.
name Cum este numită în listă.
description Una până la trei propoziții despre ce face sau null.
enabled Dacă este pornită. O automatizare dezactivată nu rulează niciodată.
updated_at Când a fost modificată ultima dată.
trigger_kind Ce o declanșează, de exemplu incoming_message, schedule, webhook, agent_function sau manual. null când graful nu are încă un declanșator.
folder_id, folder_name Folderul în care este stocată sau null pentru niciun folder.

Citirea unei automatizări adaugă created_at și graph acesteia:

{
  "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" }]
  }
}

Fiecare pas (nodes[]) conține:

Câmp Semnificație
id ID-ul pasului, unic în cadrul grafului.
kind Tipul pasului: trigger, action, condition, transform, ai, delay, loop sau respond. Consultați Tipuri de pași.
label Numele afișat pe pas în constructor.
alias Numele de referință al pasului. Pașii ulteriori îi citesc rezultatul ca ${nodes.<alias>.<field>}. null pe un pas care nu are niciunul (este apoi referențiat prin ID-ul său).
action Ce face pasul: acțiunea pe care o rulează sau, în cazul unui pas de declanșare, tipul declanșatorului. null pe alți pași.
params Parametrii acțiunii într-un pas de acțiune sau setările declanșatorului într-un pas de declanșare. null pe orice alt tip. Păstrat pentru cititorii mai vechi: config conține aceleași valori și multe altele.
config Setările complete ale pasului așa cum le stochează constructorul, pentru fiecare tip de pas: regulile unei condiții, promptul unui pas AI, durata unei întârzieri, slug-ul și parametrii unei acțiuni.

Fiecare conexiune (edges[]) are from și to (ID-uri de pași) și branch atunci când urmează o ramură a unui pas, de exemplu true sau false după o condiție.

Două lucruri din config sunt modificate la ieșire:

  • Secretele sunt ascunse. Valorile care arată ca niște credențiale (secrete webhook, tokenuri, chei API, parole, valori de antet) sunt returnate ca "[redacted]". Trimiteți "[redacted]" înapoi neschimbat și valoarea stocată va fi păstrată.
  • Textele lungi sunt scurtate. Un text unic mai lung de aproximativ 4.000 de caractere este trunchiat și se termină cu o elipsă. Dacă trimiteți acel pas înapoi, introduceți mai întâi textul complet.

Listarea automatizărilor

GET /automations returnează automatizările din cont, cele mai recent modificate fiind primele, sub formă de rezumate (fără pași).

Parametri de interogare (toți opționali): folder_id (doar automatizările din acel folder, un ID din Listare foldere sau none pentru cele care nu se află în niciun folder), 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"]

Răspuns (200)

{ "success": true, "automations": [{ "id": "8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f", "name": "Price question auto-reply", "enabled": false, "...": "..." }] }

Dacă serviciul de automatizare nu poate fi accesat, veți primi o eroare 503, niciodată o listă goală în schimb. O listă goală înseamnă întotdeauna că nu există automatizări.


Obținerea unei automatizări

GET /automations/{automationId} returnează o automatizare cu graful său complet: tipul, eticheta, aliasul, acțiunea, parametrii și setările fiecărui pas, plus conexiunile dintre acestea.

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"]

Răspuns (200)

{ "success": true, "automation": { "id": "8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f", "name": "Price question auto-reply", "graph": { "nodes": ["..."], "edges": ["..."] } } }

Un ID care nu se află în acest cont returnează 404.


Catalog de pași

GET /automations/steps returnează tot ceea ce poate fi folosit pentru a construi o automatizare:

  • node_kinds: cele 8 tipuri de pași, fiecare cu o etichetă și o descriere.
  • triggers: fiecare declanșator care poate porni o automatizare, cu câmpurile sale de setări (fields) și valorile pe care le transmite pașilor următori (output_keys).
  • actions: acțiunile încorporate pe care un pas de acțiune le poate executa, fiecare cu key (slug-ul pe care îl folosești într-un grafic) și params, marcate required acolo unde se află.
  • api_actions: operațiunile acestui API pe care un pas de acțiune le poate apela. Fără q, acestea revin ca etichete grupate pe domenii în api_actions_by_tag, iar lista plată este goală, deoarece există câteva sute dintre ele.
  • graph_rules: gramatica pentru scrierea unui grafic: datele pe care le poartă fiecare tip de pas, fiecare tip de declanșator cu cheile sale de setări, furnizorii de acțiuni, numele ramurilor și sintaxa șablonului. Citește-o înainte de a crea sau edita unul.
  • counts: totalurile per listă, indiferent ce ai căutat.

Acesta este ceea ce oferă constructorul, nu ceea ce a construit contul. Verifică acest lucru înainte de a concluziona că un declanșator sau o acțiune nu există.

Parametri de interogare (toți opționali): q, un cuvânt pentru a căuta în fiecare listă (fără a ține cont de majuscule/minuscule) și sub_account_id.

Cu q:

  • api_actions este lista plată a potrivirilor, limitată la 60. api_actions_truncated este true atunci când s-a aplicat limita. Primele potriviri poartă parametrii lor.
  • Acțiunile pentru aplicații terțe conectate sunt, de asemenea, căutate și revin în app_actions. Caută după numele aplicației, de exemplu q=hubspot. Fiecare indică dacă contul are acea aplicație conectată (connected), iar connected_apps listează aplicațiile pe care contul le are conectate.
  • app_actions_unavailable este true atunci când acțiunile aplicației nu au putut fi căutate de această dată. Celelalte liste sunt încă complete.
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()

Răspuns (200, prescurtat)

{
  "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 }
}

Listele de tipuri de pași și declanșatori de mai jos sunt preluate din acest endpoint. Endpoint-ul în sine este întotdeauna lista curentă.


Crearea unei automatizări

POST /automations creează o automatizare dintr-un nume și un grafic. Aceasta este stocată dezactivată, ca schiță.

Corp

Câmp Obligatoriu Semnificație
name Da Cum este numit în listă. Scurt și specific.
description Nu Una până la trei propoziții despre ce face și când rulează.
graph Da { nodes, edges }, vezi mai jos.
folder_id Nu Dosarul în care să fie salvat, un id din Listare dosare. Dacă este omis sau null, nu va fi pus în niciun dosar.

Graficul. graph_rules din catalogul de pași este gramatica completă. Pe scurt:

  • Fiecare nod are un id (unic în grafic, de exemplu trigger_1 sau send_reminder), un type (unul dintre cele 8 tipuri de pași), un label opțional și setările sale în data, sub o cheie numită după tipul său: 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 }.
  • O automatizare are nevoie de cel puțin un declanșator. Gramatica live permite până la 10, iar automatizarea pornește când oricare dintre ele este declanșat.
  • Orice alt pas trebuie să fie accesibil dintr-un declanșator și nicio conexiune nu poate duce înapoi la un pas anterior.
  • Fiecare margine are un source și un target. Marginile care pleacă dintr-o condiție poartă sourceHandle true sau false. Marginile care pleacă dintr-o buclă poartă body sau done. Marginile care pleacă dintr-o întârziere de tip „Așteaptă răspuns” poartă replied sau timed_out. Alte margini nu au sourceHandle; gramatica listează restul.
  • Slug-urile și parametrii acțiunilor provin din catalog. Nu ghici niciodată un id (un agent, o etichetă, o listă, o etapă): caută-l mai întâi cu API-ul sau lasă câmpul ca "" pentru ca persoana să îl aleagă în constructor.
  • Pozițiile sunt opționale. Pașii fără una sunt așezați automat.
  • Valorile din pașii anteriori sunt scrise ca ${trigger.<field>} și ${nodes.<step>.<field>}. Vezi Utilizarea a ceea ce a returnat un pas anterior și Expresii în ghidul de Automatizări.

Graficul este acceptat în două scrieri: cea proprie a constructorului (noduri cu type și data, margini cu source și target, ca mai jos) și cea cu care răspunde Obținerea unei automatizări (noduri cu kind, config, action, params; margini cu from, to, branch). Astfel, poți citi o automatizare, poți schimba un pas și o poți trimite înapoi.

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()

Răspuns (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 este automatizarea așa cum este stocată, în aceeași formă ca Obținerea unei automatizări.
  • draft este true în timp ce este dezactivată. O automatizare nouă este întotdeauna o schiță până când o activezi, deci enabled: false aici este normal, nu o eroare.
  • open_path este locul unde se deschide în constructorul aplicației.
  • warnings listează lucrurile pe care constructorul nu le-a putut finaliza, ca etichete scurte (de exemplu agent_function:not_linked). Este goală când totul este curat.

O operațiune de creare nu este sigură pentru a fi repetată orbește. Dacă o cerere expiră, listați automatizările înainte de a o trimite din nou, altfel s-ar putea să vă treziți cu două ciorne.


Actualizarea unei automatizări

PUT /automations/{automationId} modifică numele, descrierea și/sau graful. Trimiteți doar câmpurile pe care doriți să le modificați.

Corp: name, description, graph (toate opționale, cel puțin unul).

O operațiune graph înlocuiește întregul graf, așa că lucrați întotdeauna pornind de la ceea ce este stocat:

  1. Citiți automatizarea cu GET /automations/{automationId}.
  2. Modificați ceea ce aveți nevoie în acel graf.
  3. Trimiteți întregul graf înapoi, incluzând fiecare pas.

Când îl trimiteți înapoi:

  • Păstrați fiecare alias al pasului exact așa cum l-ați primit. Pașii ulteriori fac referire la un pas prin aliasul său (${nodes.<alias>.<field>}). Dacă îl modificați sau îl eliminați, fiecare referință la acel pas va rămâne goală. Consultați Denumirea pașilor.
  • Lăsați valorile "[redacted]" așa cum sunt. O valoare afișată ca "[redacted]" își păstrează valoarea stocată.
  • Restaurați textele scurtate. Un text care a revenit terminându-se cu puncte de suspensie a fost scurtat în timpul citirii.

Starea de activare a automatizării nu este niciodată modificată aici. Dacă este activată, modificarea dvs. devine activă imediat ce este salvată. Cât timp o automatizare este activată, o modificare care ar putea determina declanșarea acesteia de către ea însăși este refuzată: dezactivați-o mai întâi.

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"]})

Răspuns (200): aceeași formă ca la creare (automation, draft, open_path, warnings). Trimiterea niciunuia dintre name, description sau graph returnează 400.


Activare și dezactivare

POST /automations/{automationId}/enable activează o automatizare, astfel încât aceasta să ruleze la declanșare de acum înainte. Apelați-l doar după ce persoana care deține contul a văzut ce face automatizarea și pentru cine, și a fost de acord cu activarea acesteia. Constructorul refuză activarea unui grafic pe care nu îl poate rula (fără declanșator, o buclă, un pas care se declanșează singur) cu un 400 care explică motivul.

POST /automations/{automationId}/disable o dezactivează (o pune pe pauză). Execuțiile deja în curs se finalizează; nu începe nicio execuție nouă. Dezactivarea este întotdeauna permisă.

Niciunul dintre apeluri nu necesită un corp (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"},
)

Răspuns (200): automatizarea așa cum este stocată acum, în aceeași formă ca la creare, cu draft: false după o activare.


Istoricul execuțiilor

GET /automations/{automationId}/runs returnează execuțiile unei automatizări, începând cu cea mai recentă: când a început și s-a terminat fiecare execuție, ce a declanșat-o, dacă a reușit și eroarea apărută în caz de eșec. Citirea automatizării îți spune ce ar face aceasta. Istoricul execuțiilor îți spune ce a făcut și este singura modalitate de a distinge o automatizare care nu a rulat niciodată de una care rulează și eșuează de fiecare dată.

Parametri de interogare (toți opționali): limit (de la 1 la 50, implicit 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"]

Răspuns (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 este live pentru o execuție reală sau safe pentru o Execuție sigură din editor. O execuție sigură nu trimite nimic, deci nu este o dovadă că automatizarea funcționează în utilizarea reală.
  • O listă runs goală este un răspuns valid, nu o omisiune. Răspunsul conține atunci un note: fie declanșatorul nu a fost activat niciodată, fie automatizarea este oprită, deci nu a rulat nimic.

Foldere

Folderele doar grupează automatizările în listă. Acestea nu schimbă niciodată ceea ce face o automatizare sau dacă aceasta este activată. Vezi Organizarea automatizărilor în foldere.

Listarea folderelor

GET /automations/folders returnează folderele, fiecare cu numărul de automatizări pe care le conține, plus unfiled_count: câte automatizări nu se află în niciun folder.

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
}

Crearea unui folder

POST /automations/folders cu { "name": "Appointment reminders" }. Numele este obligatoriu, are maximum 100 de caractere și trebuie să fie unic în cont. Adaugă automatizări în acesta folosind Mutarea unei automatizări sau transmite folder_id atunci când creezi una.

curl -X POST "https://api.dmchamp.com/v1/automations/folders?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Appointment reminders" }'

Răspuns (201): { "success": true, "folder": { "id": "...", "name": "Appointment reminders", "automation_count": 0 } }. Un nume pe care îl are deja un alt folder returnează 409 cu code: "folder_name_taken".

Redenumirea unui folder

PUT /automations/folders/{folderId} cu { "name": "..." }. Automatizările din acesta rămân acolo unde sunt.

Răspuns (200): { "success": true, "folder": { ... } }.

Ștergerea unui folder

DELETE /automations/folders/{folderId} șterge doar folderul. Automatizările din acesta nu sunt șterse: acestea sunt mutate în afara oricărui folder și continuă să ruleze exact ca înainte.

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." }

Mutarea unei automatizări într-un folder

PUT /automations/{automationId}/folder cu { "folder_id": "<folder id>" } sau { "folder_id": null } pentru a o scoate din folderul său. folder_id este obligatoriu. Se modifică doar locul în care este listată automatizarea.

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" }'

Răspuns (200): { "success": true, "automation_id": "...", "folder_id": "..." }.


Catalog

Tipuri de pași

Tip Ce face
trigger Pornește automatizarea atunci când se întâmplă ceva.
action Rulează un pas: o acțiune integrată, o acțiune API, acțiunea unei aplicații conectate, o cerere HTTP sau un e-mail.
condition Împarte fluxul pe baza unei reguli, într-o ramură true și una false.
transform Rulează o mică bucată de cod pentru a restructura datele între pași.
ai Interoghează AI-ul cu un prompt scris de tine. Poate returna text, câmpuri separate sau poate alege una dintre mai multe ramuri.
delay Așteaptă o perioadă de timp setată sau așteaptă ca persoana de contact să răspundă (cu un timeout).
loop Repetă pașii din interiorul său pentru fiecare element dintr-o listă.
respond Returnează un răspuns către apelul webhook sau apelul funcției agentului AI care a pornit execuția.

Declanșatoare

Acestea sunt cele 40 de declanșatoare (triggers) pe care catalogul le listează astăzi, grupate așa cum le grupează constructorul. Coloana Setări conține cheile de setări proprii ale declanșatorului (fields), care restrâng condițiile în care acesta se activează. Fiecare declanșator acceptă, de asemenea, respect_quiet_hours, run_hours, reentry și stop_on_response; consultați Setări automatizare.

Mesagerie

Declanșator (kind) Se activează când Setări
Mesaj primit (incoming_message) O persoană de contact trimite un mesaj pe orice canal. campaign (îl limitează la un singur agent AI), channel, message_filter_contains (cuvânt cheie), message_filter_regex (model)
Apel ratat (missed_call) Cineva apelează unul dintre numerele tale WhatsApp Web sau propriul tău număr SMS și nimeni nu răspunde. to_number
Mesaj livrat (message_delivered) Un mesaj trimis de tine este confirmat ca livrat de către canal. channel, agent
Mesaj eșuat (message_failed) Un mesaj trimis de tine nu a putut fi livrat, împreună cu eroarea. channel, agent
Mesaj trimis (message_sent) Orice mesaj părăsește contul tău: al AI-ului, al tău, o difuzare, o continuare. Filtrează-l, altfel va rula pentru toate. channel, sent_by
Continuare trimisă (follow_up_sent) O continuare automată este trimisă. niciuna
Continuare omisă (follow_up_skipped) O continuare a fost reținută deoarece condiția de trimitere a eșuat. niciuna
Continuări finalizate (follow_up_exhausted) O persoană de contact a primit ultima continuare din secvență și nu mai există nimic în coadă. niciuna
Conversație închisă (conversation_closed) Un chat este închis, cu detalii despre cum s-a încheiat și un rezumat. channel, agent
Difuzare finalizată (broadcast_completed) O difuzare a terminat trimiterea, cu numărul de mesaje trimise și numărul de eșecuri. niciuna
Răspuns lead sortat (outreach_reply_labelled) Răspunsul unui lead de e-mail la rece este sortat, de exemplu ca Interesat. label
Comentariu Skool primit (skool_comment_received) Un membru comentează la o postare Skool pe care o urmărește una dintre regulile tale de comentarii. niciuna

Contacte

Declanșator (kind) Se activează când Setări
Contact nou (contact_created) O persoană nouă te contactează pentru prima dată pe orice canal, și de asemenea pentru importuri, API și contacte create manual. niciuna
Contact actualizat (contact_updated) Un câmp de contact se modifică. field
Contacte adăugate aici (contact_added) Doar pentru contactele pe care le introduci tu în această automatizare din pagina Contacte. O singură rulare per contact. niciuna
Etichetă aplicată (tag_applied) O etichetă este adăugată unui contact, de către agentul tău AI, o persoană, o automatizare sau un import. tag_name, channel, applied_by
Etichetă eliminată (tag_removed) O etichetă este eliminată de pe un contact. tag_name, channel
Membru Skool s-a alăturat (skool_member_joined) Cineva se alătură unei comunități Skool pe care o deții sau o administrezi, cu profilul, răspunsurile și scorul de potrivire. group_id, create_contact
Membru Skool calificat (skool_member_qualified) Răspunsurile unui nou membru Skool ating sau depășesc pragul tău. min_score

Tranzacții

Declanșator (kind) Se activează când Setări
Oportunitate creată (deal_created) O nouă oportunitate (deal) este adăugată într-unul dintre fluxurile tale de lucru. pipeline_id, stage_id
Etapa oportunității schimbată (deal_stage_changed) O oportunitate se mută într-o etapă diferită, specificând etapa din care a ieșit și cea în care a intrat. pipeline_id, to_stage_id, from_stage_id
Oportunitate actualizată (deal_updated) Un câmp al oportunității se modifică. field

Programări

Declanșator (kind) Se activează când Setări
Programare efectuată (appointment_booked) O nouă programare este efectuată. niciuna
Programare anulată (appointment_cancelled) O programare efectuată este anulată. niciuna
Programare reprogramată (appointment_rescheduled) O programare efectuată se mută la o altă oră, cu ora veche afișată alături de cea nouă. event_id
Înainte de o programare (appointment_upcoming) Cu un timp stabilit înainte de fiecare programare confirmată, pentru mementouri. Până la cinci mementouri per automatizare. offsets_minutes

Sarcini

Declanșator (kind) Se activează când Setări
Sarcină creată (task_created) O sarcină este creată. task_type
Sarcină finalizată (task_completed) O sarcină este mutată într-o etapă finalizată. niciuna

Cont

Declanșator (kind) Se activează când Setări
Sold credite scăzut (low_credit_balance) Soldul tău de credite scade sub pragul de alertă. niciuna
Canal conectat (channel_connected) Unul dintre canalele tale termină conectarea. channel
Canal deconectat (channel_disconnected) Unul dintre canalele tale se deconectează: delogat, nelegat sau întrerupt. Un număr WhatsApp Web care se reconectează singur contează doar dacă este încă indisponibil după 30 de minute. channel

Agenție

Declanșator (kind) Se activează când Setări
Sub-cont creat (sub_account_created) Un nou cont de client este creat, din tabloul tău de bord, prin API sau prin pagina ta de înregistrare. niciuna
Activitate sub-cont (sub_account_event) Se întâmplă ceva pe unul dintre conturile tale de client: credite pe sfârșite, un canal care se conectează, o schimbare de plan. event, threshold

General și aplicații

Declanșator (kind) Se activează când Setări
Conform programării (schedule) La o programare cron. cron, timezone
Webhook (webhook) Un sistem extern apelează adresa webhook a automatizării. webhook_secret
Funcție Agent AI (agent_function) Agentul tău AI apelează această automatizare ca o funcție în timpul unei conversații. function_name, function_description, parameters, agent_ids, campaign_ids
Element nou în flux (rss) Un element nou apare într-un flux RSS sau Atom. feed_url
E-mail primit (email_received) Un e-mail sosește în propria ta căsuță poștală conectată. from_contains, subject_contains
Eveniment aplicație (app_event) Se întâmplă ceva într-o aplicație conectată: o etapă a unei oportunități se schimbă, se primește o plată, un formular este trimis. toolkit, trigger_slug, connected_account_id, config
Rulare manuală (manual) Doar când este pornită manual. niciuna

O automatizare poate conține cel mult un declanșator pentru fiecare dintre webhook, app_event, agent_function, rss, schedule, email_received, appointment_upcoming și contact_added. Un declanșator care se activează la crearea unei înregistrări nu poate fi asociat cu acțiunea care creează aceeași înregistrare, deoarece automatizarea s-ar declanșa singură.

Pentru ceea ce transmite fiecare declanșator către pașii următori (output_keys) și lista completă de acțiuni cu parametrii lor, citește GET /automations/steps. Ghidul de automatizări explică fiecare declanșator în termenii constructorului.


Erori

Fiecare eroare are forma obișnuită { "success": false, "error_code": <status>, "error": "..." }. Un graf refuzat adaugă code și 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 listează fiecare problemă, câte o propoziție remediabilă pentru fiecare, iar error este prima dintre ele. Corectează exact ceea ce este listat și trimite din nou întregul graf. code este unul dintre invalid_graph, automation_graph_has_a_cycle, self_triggering_automation, no_trigger sau un alt cod din constructor.

Status Când
400 Graful a fost refuzat (vezi mai sus), lipsește un câmp obligatoriu (name sau graph la creare, folder_id la mutare), o actualizare nu a trimis nimic de schimbat, un id de automatizare sau de folder nu este valid, sau un nume de folder lipsește, este gol sau prea lung (code: "invalid_name").
403 Contul nu are Automatizări; planul unui cont de client nu include crearea și editarea automatizărilor (doar scriere); sau accesul membrului echipei la Automatizări este prea scăzut (Vizualizare pentru citire, Editare pentru scriere).
404 Nu există nicio automatizare cu acel id în acest cont, niciun folder cu acel id (code: "folder_not_found"), sau un sub_account_id care nu este unul dintre conturile tale de client.
409 Un folder cu acel nume există deja (code: "folder_name_taken").
413 Automatizarea este mai mare de 1 MB, limita acceptată de constructor. Mută codul sau datele mari în afara pașilor săi.
422 Constructorul a respins cererea din alt motiv. Verifică graful în raport cu GET /automations/steps; retrimiterea aceleiași cereri nu va ajuta.
503 Serviciul de automatizare nu a putut fi accesat. Încearcă din nou într-un moment. Pentru o creare, listează mai întâi automatizările tale pentru a nu crea o a doua ciornă.

Utilizarea acestor endpoint-uri prin MCP

Fiecare endpoint de pe această pagină este, de asemenea, un instrument pentru un asistent AI pe care îl conectezi prin MCP, cu aceleași reguli: o nouă automatizare este o ciornă până când este activată, iar o editare a unei automatizări care rulează este imediată.

Instrument 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

Pașii următori

  • Automatizări: cum funcționează declanșatoarele, pașii, variabilele și istoricul rulărilor în constructor.
  • API pentru Agenții: construiește automatizări pe un cont de client cu sub_account_id.
  • Referință API: exploratorul interactiv complet de endpoint-uri.