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.
- URL de bază:
https://api.dmchamp.com/v1 - Autentificare: cheia ta API (vezi Autentificare)
- Erori: vezi Erori și Paginare și Erori mai jos
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_idca parametru de interogare, astfel încât să poți citi și construi automatizările unui client cu cheia ta de agenție. Unsub_account_idcare nu este unul dintre conturile clienților tăi va returna404. 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ă.
- Citește catalogul.
GET /automations/stepslistează fiecare declanșator, acțiune și tip de pas pe care îl poți folosi, plus gramatica pentru scrierea unui graf (graph_rules). - Creează o ciornă.
POST /automationsstochează automatizarea oprită. Încă nu rulează nimic. - 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. - Pornește-o.
POST /automations/{automationId}/enableeste 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 cukey(slug-ul pe care îl folosești într-un grafic) șiparams, marcaterequiredacolo 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 înapi_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_actionseste lista plată a potrivirilor, limitată la 60.api_actions_truncatedestetrueatunci 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 exempluq=hubspot. Fiecare indică dacă contul are acea aplicație conectată (connected), iarconnected_appslistează aplicațiile pe care contul le are conectate. app_actions_unavailableestetrueatunci 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 exemplutrigger_1sausend_reminder), untype(unul dintre cele 8 tipuri de pași), unlabelopțional și setările sale îndata, 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 untarget. Marginile care pleacă dintr-o condiție poartăsourceHandletruesaufalse. Marginile care pleacă dintr-o buclă poartăbodysaudone. Marginile care pleacă dintr-o întârziere de tip „Așteaptă răspuns” poartărepliedsautimed_out. Alte margini nu ausourceHandle; 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": []
}
automationeste automatizarea așa cum este stocată, în aceeași formă ca Obținerea unei automatizări.draftestetrueîn timp ce este dezactivată. O automatizare nouă este întotdeauna o schiță până când o activezi, decienabled: falseaici este normal, nu o eroare.open_patheste locul unde se deschide în constructorul aplicației.warningslistează lucrurile pe care constructorul nu le-a putut finaliza, ca etichete scurte (de exempluagent_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:
- Citiți automatizarea cu
GET /automations/{automationId}. - Modificați ceea ce aveți nevoie în acel graf.
- Trimiteți întregul graf înapoi, incluzând fiecare pas.
Când îl trimiteți înapoi:
- Păstrați fiecare
aliasal 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"
}
]
}
modeestelivepentru o execuție reală sausafepentru 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ă
runsgoală este un răspuns valid, nu o omisiune. Răspunsul conține atunci unnote: 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.