Automations-API
En automatisering er et workflow bestående af trin: en eller flere udløsere, der starter det, efterfulgt af handlinger, betingelser, forsinkelser, AI-trin og resten, forbundet i en graf. Det er den samme automatisering, som du ser og redigerer på siden Automatiseringer. Denne guide dækker læsning og opbygning af dem via API’et.
- Base-URL:
https://api.dmchamp.com/v1 - Godkendelse: din API-nøgle (se Godkendelse)
- Fejl: se Fejl & Sidetal og Fejl nedenfor
Alle eksempler nedenfor viser ?apiKey=-forespørgselsformen i cURL og X-API-Key-headeren i JavaScript og Python. Begge fungerer på alle slutpunkter.
Bureauer: alle slutpunkter på denne side accepterer
sub_account_idsom en forespørgselsparameter, så du kan læse og opbygge en klients automatiseringer med din bureau-nøgle. Etsub_account_id, der ikke er en af dine klientkonti, returnerer404. Se API for bureauer.
Hvordan det fungerer: kladde først
API’et er bygget således, at intet starter ved et uheld.
- Læs kataloget.
GET /automations/stepsviser alle udløsere, handlinger og trintyper, du kan bruge, plus grammatikken til at skrive en graf (graph_rules). - Opret en kladde.
POST /automationsgemmer automatiseringen slået fra. Intet kører endnu. - Tjek den. Læs den tilbage, åbn den i editoren (svaret giver dig dens
open_path), og sørg for, at personen, der ejer kontoen, har set, hvad den gør, og over for hvem. - Slå den til.
POST /automations/{automationId}/enableer sit eget kald. Dette er trinnet, der får virkelige ting til at ske: beskeder sendes, poster ændres, værktøjer gives til en AI-agent.
Redigering ændrer aldrig, om en automatisering er slået til eller fra. Det betyder også, at en rettelse til en automatisering, der er slået til, træder i kraft med det samme på den aktive automatisering. For at ændre en kørende automatisering sikkert, skal du deaktivere den, redigere den, tjekke den og aktivere den igen.
Hver graf, du sender, gennemgår de samme tjek, som editoren anvender. En graf, den ikke kan åbne eller køre, afvises med en 400, der præcist angiver, hvad der skal rettes.
Adgang
- Kontoen skal have Automatiseringer. Uden det returnerer hvert kald på denne side
403. - Et teammedlems adgang følger deres Automatiseringer-område i Teamstyring: læsning (liste, hent, trin, kørsler, mapper) kræver Vis, alt der ændrer noget kræver Rediger.
- På en klientkonto, hvis abonnement ikke inkluderer oprettelse og redigering af automatiseringer, returnerer skrivekald
403, præcis som editoren gør i appen.
Automatiserings-objektet
Listen returnerer et resumé af hver automatisering uden dens trin:
{
"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"
}
| Felt | Betydning |
|---|---|
id |
Automatiseringens id. |
name |
Hvad den kaldes på listen. |
description |
En til tre sætninger om, hvad den gør, eller null. |
enabled |
Om den er slået til. En deaktiveret automatisering kører aldrig. |
updated_at |
Hvornår den sidst blev ændret. |
trigger_kind |
Hvad der udløser den, for eksempel incoming_message, schedule, webhook, agent_function eller manual. null når grafen endnu ikke har en udløser. |
folder_id, folder_name |
Mappen den er arkiveret i, eller null for ingen mappe. |
Læsning af en automatisering tilføjer created_at og dens graph:
{
"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" }]
}
}
Hvert trin (nodes[]) indeholder:
| Felt | Betydning |
|---|---|
id |
Trinets id, unikt inden for grafen. |
kind |
Typen af trin: trigger, action, condition, transform, ai, delay, loop eller respond. Se Trintyper. |
label |
Navnet, der vises på trinnet i editoren. |
alias |
Trinets referencenavn. Senere trin læser dets output som ${nodes.<alias>.<field>}. null på et trin, der ikke har nogen (det refereres derefter ved dets id). |
action |
Hvad trinnet gør: den handling, det udfører, eller på et udløsertrin, udløsertypen. null på andre trin. |
params |
Handlingens parametre på et handlingstrin, eller udløserens indstillinger på et udløsertrin. null på alle andre typer. Beholdes for ældre læsere: config indeholder de samme værdier og mere. |
config |
Trinets fulde indstillinger, som editoren gemmer dem, for alle typer trin: regler for en betingelse, prompt for et AI-trin, varighed for en forsinkelse, slug og parametre for en handling. |
Hver forbindelse (edges[]) har from og to (trin-id’er), og branch når den følger en gren af et trin, for eksempel true eller false efter en betingelse.
To ting i config ændres på vej ud:
- Hemmeligheder skjules. Værdier, der ligner legitimationsoplysninger (webhook-hemmeligheder, tokens, API-nøgler, adgangskoder, header-værdier), returneres som
"[redacted]". Send"[redacted]"tilbage uændret, så bevares den gemte værdi. - Lange tekster forkortes. En enkelt tekst, der er længere end ca. 4.000 tegn, afkortes og slutter med en ellipse. Hvis du sender det trin tilbage, skal du først indsætte den fulde tekst igen.
List automatiseringer
GET /automations returnerer automatiseringerne på kontoen, sorteret efter seneste ændring først, som oversigter (ingen trin).
Forespørgselsparametre (alle valgfrie): folder_id (kun automatiseringerne i den mappe, et id fra List mapper, eller none for dem, der ikke er i en mappe), 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"]
Svar (200)
{ "success": true, "automations": [{ "id": "8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f", "name": "Price question auto-reply", "enabled": false, "...": "..." }] }
Hvis automatiseringsservicen ikke kan nås, får du en 503, aldrig en tom liste i stedet. En tom liste betyder altid, at der ikke er nogen automatiseringer.
Hent en automatisering
GET /automations/{automationId} returnerer én automatisering med dens fulde graf: hvert trins type, etiket, alias, handling, parametre og indstillinger, plus forbindelserne imellem dem.
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"]
Svar (200)
{ "success": true, "automation": { "id": "8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f", "name": "Price question auto-reply", "graph": { "nodes": ["..."], "edges": ["..."] } } }
Et id, der ikke findes på denne konto, returnerer 404.
Trinkatalog
GET /automations/steps returnerer alt, hvad en automatisering kan bygges af:
node_kinds: de 8 typer trin, hver med en etiket og en beskrivelse.triggers: enhver trigger, der kan starte en automatisering, med dens indstillingsfelter (fields) og de værdier, den sender videre til efterfølgende trin (output_keys).actions: de indbyggede handlinger, som et handlingstrin kan udføre, hver med denskey(det slug, du bruger i en graf) og densparams, markeret medrequired, hvor de befinder sig.api_actions: de operationer i denne API, som et handlingstrin kan kalde. Udenqkommer de tilbage som etiketter grupperet efter område iapi_actions_by_tag, og den flade liste er tom, da der er flere hundrede af dem.graph_rules: grammatikken til at skrive en graf: de data, hver trintype indeholder, enhver triggertype med dens indstillingsnøgler, handlingsudbyderne, grennavnene og skabelonsyntaksen. Læs den, før du opretter eller redigerer en.counts: totalerne pr. liste, uanset hvad du har søgt efter.
Dette er, hvad editoren tilbyder, ikke hvad kontoen har bygget. Tjek dette, før du konkluderer, at en trigger eller handling ikke eksisterer.
Forespørgselsparametre (alle valgfrie): q, et ord til at søge i alle lister (ikke-forskel på store og små bogstaver), og sub_account_id.
Med q:
api_actionser den flade liste over resultater, begrænset til 60.api_actions_truncatedertrue, når begrænsningen er anvendt. De første resultater indeholder deres parametre.- Handlinger for forbundne tredjepartsapps søges også og returneres i
app_actions. Søg efter appens navn, for eksempelq=hubspot. Hver af dem angiver, om kontoen har den pågældende app forbundet (connected), ogconnected_appsviser de apps, som kontoen har forbundet. app_actions_unavailableertrue, når app-handlinger ikke kunne søges denne gang. De andre lister er stadig komplette.
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()
Svar (200, forkortet)
{
"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 }
}
Listerne over trintyper og triggere herunder er hentet fra dette slutpunkt. Selve slutpunktet er altid den aktuelle liste.
Opret en automatisering
POST /automations opretter en automatisering ud fra et navn og en graf. Den gemmes slået fra, som et udkast.
Brødtekst
| Felt | Påkrævet | Betydning |
|---|---|---|
name |
Ja | Hvad den kaldes på listen. Kort og specifik. |
description |
Nej | En til tre sætninger om, hvad den gør, og hvornår den kører. |
graph |
Ja | { nodes, edges }, se nedenfor. |
folder_id |
Nej | Mappen den skal gemmes i, et id fra List mapper. Hvis udeladt eller null, placeres den ikke i nogen mappe. |
Grafen. graph_rules fra trinkataloget er den fulde grammatik. Kort sagt:
- Hver node har et
id(unikt i grafen, for eksempeltrigger_1ellersend_reminder), entype(en af de 8 trintyper), et valgfritlabel, og dens indstillinger idata, under en nøgle opkaldt efter dens type: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 }. - En automatisering kræver mindst én trigger. Den aktive grammatik tillader op til 10, og automatiseringen starter, når en af dem aktiveres.
- Ethvert andet trin skal kunne nås fra en trigger, og ingen forbindelse må føre tilbage til et tidligere trin.
- Hver kant har et
sourceog ettarget. Kanter, der forlader en betingelse, bærersourceHandletrueellerfalse. Kanter, der forlader et loop, bærerbodyellerdone. Kanter, der forlader en “Vent på svar”-forsinkelse, bærerrepliedellertimed_out. Andre kanter har intetsourceHandle; grammatikken viser resten. - Handlings-slugs og parametre kommer fra kataloget. Gæt aldrig et id (en agent, et tag, en liste, et stadie): slå det op med API’en først, eller lad feltet stå som
"", så personen kan vælge det i editoren. - Positioner er valgfrie. Trin uden en position placeres automatisk.
- Værdier fra tidligere trin skrives som
${trigger.<field>}og${nodes.<step>.<field>}. Se Brug af hvad et tidligere trin returnerede og Udtryk i vejledningen til automatiseringer.
Grafen accepteres i to stavemåder: editorens egen (noder med type og data, kanter med source og target, som vist nedenfor) og den, som Hent en automatisering svarer med (noder med kind, config, action, params; kanter med from, to, branch). Så du kan læse en automatisering, ændre et trin og sende den tilbage.
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()
Svar (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": []
}
automationer automatiseringen som gemt, i samme form som Hent en automatisering.draftertrue, mens den er slået fra. En ny automatisering er altid et udkast, indtil du aktiverer den, såenabled: falseher er normalt, ikke en fejl.open_pather hvor den åbner i appens editor.warningsviser ting, som editoren ikke kunne færdiggøre, som korte etiketter (for eksempelagent_function:not_linked). Den er tom, når alt er korrekt.
En oprettelse er ikke sikker at gentage blindt. Hvis en anmodning får timeout, skal du liste dine automatiseringer, før du sender den igen, ellers risikerer du at ende med to kladder.
Opdater en automatisering
PUT /automations/{automationId} ændrer navnet, beskrivelsen og/eller grafen. Send kun de felter, du ønsker at ændre.
Brødtekst: name, description, graph (alle valgfrie, mindst én).
En graph erstatter hele grafen, så arbejd altid ud fra det, der er gemt:
- Læs automatiseringen med
GET /automations/{automationId}. - Ændr det, du har brug for i den graf.
- Send hele grafen tilbage, inklusive hvert trin.
Når du sender den tilbage:
- Behold hver steps
aliaspræcis som du modtog den. Senere steps refererer til et step via dets alias (${nodes.<alias>.<field>}). Hvis du ændrer eller fjerner det, vil alle referencer til det step blive tomme. Se Navngivning af dine steps. - Lad
"[redacted]"værdier være, som de er. En værdi vist som"[redacted]"beholder sin gemte værdi. - Gendan forkortede tekster. En tekst, der kom tilbage med en udeladelsesprik, blev afkortet under læsningen.
Hvorvidt automatiseringen er tændt, ændres aldrig her. Hvis den er tændt, er din rettelse live, så snart den er gemt. Mens en automatisering er tændt, afvises en ændring, der ville få den til at udløse sig selv: deaktiver den først.
curl -X PUT "https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Price question auto-reply (EN)" }'
// Read, edit, send back the whole graph
const get = await fetch(`https://api.dmchamp.com/v1/automations/${id}`, { headers: { "X-API-Key": "YOUR_API_KEY" } });
const { automation } = await get.json();
const step = automation.graph.nodes.find((n) => n.id === "send_prices");
step.config.params.body = "Hi ${trigger.contact.first_name}, our new price list: https://example.com/prices";
await fetch(`https://api.dmchamp.com/v1/automations/${id}`, {
method: "PUT",
headers: { "X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json" },
body: JSON.stringify({ graph: automation.graph }),
});
url = f"https://api.dmchamp.com/v1/automations/{automation_id}"
automation = requests.get(url, headers={"X-API-Key": "YOUR_API_KEY"}).json()["automation"]
# ...edit automation["graph"] here, keeping every alias...
requests.put(url, headers={"X-API-Key": "YOUR_API_KEY"}, json={"graph": automation["graph"]})
Respons (200): samme form som en oprettelse (automation, draft, open_path, warnings). Hvis ingen af name, description eller graph sendes, returneres 400.
Aktiver og deaktiver
POST /automations/{automationId}/enable tænder for en automatisering, så den kører på sin trigger fra nu af. Kald den kun, når personen, der ejer kontoen, har set, hvad automatiseringen gør og for hvem, og har accepteret at tænde for den. Builder-værktøjet nægter at tænde for en graf, den ikke kan køre (ingen trigger, et loop, et step der udløser sig selv), med en 400, der forklarer hvorfor.
POST /automations/{automationId}/disable slukker for den (sætter den på pause). Kørsler, der allerede er i gang, færdiggøres; ingen nye kørsler starter. Deaktivering er altid tilladt.
Ingen af kaldene tager en body.
curl -X POST "https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f/enable?apiKey=YOUR_API_KEY"
await fetch("https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f/disable", {
method: "POST",
headers: { "X-API-Key": "YOUR_API_KEY" },
});
requests.post(
"https://api.dmchamp.com/v1/automations/8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f/enable",
headers={"X-API-Key": "YOUR_API_KEY"},
)
Respons (200): automatiseringen som den er gemt nu, i samme form som en oprettelse, med draft: false efter en aktivering.
Kørselshistorik
GET /automations/{automationId}/runs returnerer kørslerne for en automatisering, nyeste først: hvornår hver kørsel startede og sluttede, hvad der udløste den, om den lykkedes, og fejlen, hvis den fejlede. Ved at læse automatiseringen kan du se, hvad den ville gøre. Kørselshistorikken fortæller dig, hvad den gjorde, og det er den eneste måde at skelne mellem en automatisering, der aldrig er kørt, og en, der kører og fejler hver gang.
Forespørgselsparametre (alle valgfrie): limit (1 til 50, standard 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"]
Svar (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"
}
]
}
modeerlivefor en rigtig kørsel ellersafefor en Sikker kørsel fra editoren. En sikker kørsel sender intet, så det er ikke et bevis på, at automatiseringen virker i reel brug.- En tom
runs-liste er et svar, ikke en mangel. Svaret indeholder derefter ennote: enten er udløseren aldrig blevet aktiveret, eller også er automatiseringen slået fra, så intet er kørt.
Mapper
Mapper grupperer kun automatiseringer på listen. De ændrer aldrig, hvad en automatisering gør, eller om den er tændt. Se Organisering af automatiseringer i mapper.
List mapper
GET /automations/folders returnerer mapperne, hver med antallet af automatiseringer den indeholder, plus unfiled_count: hvor mange automatiseringer der ikke er i nogen mappe.
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
}
Opret en mappe
POST /automations/folders med { "name": "Appointment reminders" }. Navnet er påkrævet, må være op til 100 tegn og skal være unikt for kontoen. Placer automatiseringer i den med Flyt en automatisering, eller angiv folder_id, når du opretter en.
curl -X POST "https://api.dmchamp.com/v1/automations/folders?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Appointment reminders" }'
Svar (201): { "success": true, "folder": { "id": "...", "name": "Appointment reminders", "automation_count": 0 } }. Et navn, som en anden mappe allerede har, returnerer 409 med code: "folder_name_taken".
Omdøb en mappe
PUT /automations/folders/{folderId} med { "name": "..." }. Automatiseringerne i den bliver, hvor de er.
Svar (200): { "success": true, "folder": { ... } }.
Slet en mappe
DELETE /automations/folders/{folderId} sletter kun mappen. Automatiseringerne i den bliver ikke slettet: de flyttes til ingen mappe og fortsætter med at køre præcis som før.
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." }
Flyt en automatisering til en mappe
PUT /automations/{automationId}/folder med { "folder_id": "<folder id>" }, eller { "folder_id": null } for at tage den ud af dens mappe. folder_id er påkrævet. Kun hvor automatiseringen er angivet, ændres.
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" }'
Svar (200): { "success": true, "automation_id": "...", "folder_id": "..." }.
Katalog
Trin-typer
| Type | Hvad det gør |
|---|---|
trigger |
Starter automatiseringen, når noget sker. |
action |
Kører ét trin: en indbygget handling, en API-handling, en handling fra en forbundet app, en HTTP-anmodning eller en e-mail. |
condition |
Opdeler flowet baseret på en regel i en true og en false gren. |
transform |
Kører et lille stykke kode for at omforme data mellem trin. |
ai |
Spørger AI’en med en prompt, du skriver. Den kan returnere tekst, separate felter eller vælge en af flere grene. |
delay |
Venter i et bestemt tidsrum eller venter på, at kontakten svarer (med en timeout). |
loop |
Gentager trinnene indeni for hvert element på en liste. |
respond |
Returnerer et svar til webhook-kaldet eller AI-agentens funktionskald, der startede kørslen. |
Triggers
Dette er de 40 triggere, som kataloget viser i dag, grupperet som bygherren grupperer dem. Kolonnen Indstillinger indeholder triggerens egne indstillingsnøgler (fields), som indsnævrer, hvornår den udløses. Hver trigger tager også respect_quiet_hours, run_hours, reentry og stop_on_response; se Automatiseringsindstillinger.
Beskeder
Trigger (kind) |
Udløses når | Indstillinger |
|---|---|---|
Indgående besked (incoming_message) |
En kontakt sender en besked på en hvilken som helst kanal. | campaign (begrænser den til én AI-agent), channel, message_filter_contains (nøgleord), message_filter_regex (mønster) |
Ubesvaret opkald (missed_call) |
Nogen ringer til et af dine WhatsApp Web-numre eller dit eget SMS-nummer, og ingen tager den. | to_number |
Besked leveret (message_delivered) |
En besked, du har sendt, bekræftes leveret af kanalen. | channel, agent |
Besked fejlede (message_failed) |
En besked, du har sendt, kunne ikke leveres, med fejlen. | channel, agent |
Besked sendt (message_sent) |
Enhver besked forlader din konto: AI’ens, din egen, en udsendelse, en opfølgning. Filtrer den, ellers kører den på dem alle. | channel, sent_by |
Opfølgning sendt (follow_up_sent) |
En automatisk opfølgning sendes ud. | ingen |
Opfølgning sprunget over (follow_up_skipped) |
En opfølgning blev holdt tilbage, fordi dens afsendelsesbetingelse fejlede. | ingen |
Opfølgninger afsluttet (follow_up_exhausted) |
En kontakt modtog den sidste opfølgning i sekvensen, og intet mere er i kø. | ingen |
Samtale lukket (conversation_closed) |
En chat lukkes, med hvordan den sluttede og et resumé. | channel, agent |
Udsendelse afsluttet (broadcast_completed) |
En udsendelse er færdig med at sende, med hvor mange der blev sendt, og hvor mange der fejlede. | ingen |
Lead-svar sorteret (outreach_reply_labelled) |
Et svar fra et koldt e-mail-lead sorteres, for eksempel som Interesserede. | label |
Skool-kommentar modtaget (skool_comment_received) |
Et medlem kommenterer under et Skool-opslag, som en af dine kommentarregler overvåger. | ingen |
Kontakter
Trigger (kind) |
Udløses når | Indstillinger |
|---|---|---|
Ny kontakt (contact_created) |
En ny person kontakter dig for første gang på en hvilken som helst kanal, og også ved import, API’en og kontakter, du opretter manuelt. | ingen |
Kontakt opdateret (contact_updated) |
Et kontaktfelt ændres. | field |
Kontakter du tilføjer her (contact_added) |
Kun for kontakter, du selv placerer i denne automatisering fra siden Kontakter. Én kørsel pr. kontakt. | ingen |
Tag tilføjet (tag_applied) |
Et tag tilføjes til en kontakt af din AI-agent, en person, en automatisering eller en import. | tag_name, channel, applied_by |
Tag fjernet (tag_removed) |
Et tag fjernes fra en kontakt. | tag_name, channel |
Skool-medlem tilmeldt (skool_member_joined) |
Nogen tilmelder sig et Skool-fællesskab, du ejer eller driver, med deres profil, svar og fit-score. | group_id, create_contact |
Skool-medlem kvalificeret (skool_member_qualified) |
Et nyt Skool-medlems svar scorer på eller over din tærskelværdi. | min_score |
Handler
Trigger (kind) |
Udløses når | Indstillinger |
|---|---|---|
Handel oprettet (deal_created) |
En ny handel tilføjes til en af dine pipelines. | pipeline_id, stage_id |
Handelsstadie ændret (deal_stage_changed) |
En handel flyttes til et andet stadie, med angivelse af stadiet, den forlod, og det, den trådte ind i. | pipeline_id, to_stage_id, from_stage_id |
Handel opdateret (deal_updated) |
Et handelfelt ændres. | field |
Aftaler
Trigger (kind) |
Udløses når | Indstillinger |
|---|---|---|
Aftale booket (appointment_booked) |
En ny aftale bookes. | ingen |
Aftale annulleret (appointment_cancelled) |
En booket aftale annulleres. | ingen |
Aftale flyttet (appointment_rescheduled) |
En booket aftale flyttes til et andet tidspunkt, med det gamle tidspunkt ved siden af det nye. | event_id |
Før en aftale (appointment_upcoming) |
Et bestemt tidspunkt før hver bekræftet aftale, til påmindelser. Op til fem påmindelser pr. automatisering. | offsets_minutes |
Opgaver
Trigger (kind) |
Udløses når | Indstillinger |
|---|---|---|
Opgave oprettet (task_created) |
En opgave oprettes. | task_type |
Opgave fuldført (task_completed) |
En opgave flyttes til et fuldført stadie. | ingen |
Konto
Trigger (kind) |
Udløses når | Indstillinger |
|---|---|---|
Lav kreditbalance (low_credit_balance) |
Din kreditbalance falder under din advarselstærskel. | ingen |
Kanal forbundet (channel_connected) |
En af dine kanaler er færdig med at oprette forbindelse. | channel |
Kanal afbrudt (channel_disconnected) |
En af dine kanaler falder ud: logget ud, afbrudt eller afskåret. Et WhatsApp Web-nummer, der genopretter forbindelsen af sig selv, tæller kun, hvis det stadig er nede efter 30 minutter. | channel |
Bureau
Trigger (kind) |
Udløses når | Indstillinger |
|---|---|---|
Underkonto oprettet (sub_account_created) |
En ny klientkonto oprettes fra dit dashboard, API’en eller din tilmeldingsside. | ingen |
Underkonto-aktivitet (sub_account_event) |
Noget sker på en af dine klientkonti: kreditterne er ved at løbe tør, en kanal opretter forbindelse, en planændring. | event, threshold |
| } | ||
| Generelt og apps |
Udløser (kind) |
Aktiveres når | Indstillinger |
|---|---|---|
Efter tidsplan (schedule) |
På en cron-tidsplan. | cron, timezone |
Webhook (webhook) |
Et eksternt system kalder automatiseringens webhook-adresse. | webhook_secret |
AI Agent-funktion (agent_function) |
Din AI-agent kalder denne automatisering som en funktion under en samtale. | function_name, function_description, parameters, agent_ids, campaign_ids |
Nyt feed-element (rss) |
Et nyt element vises i et RSS- eller Atom-feed. | feed_url |
E-mail modtaget (email_received) |
En e-mail ankommer i din egen forbundne postkasse. | from_contains, subject_contains |
App-hændelse (app_event) |
Noget sker i en forbundet app: en salgsmuligheds-fase ændres, en betaling modtages, en formular indsendes. | toolkit, trigger_slug, connected_account_id, config |
Manuel kørsel (manual) |
Kun når den startes manuelt. | ingen |
En automatisering kan højst indeholde én udløser af hver type: webhook, app_event, agent_function, rss, schedule, email_received, appointment_upcoming og contact_added. En udløser, der aktiveres, når en post oprettes, kan ikke parres med den handling, der opretter den samme post, da automatiseringen ville aktivere sig selv.
For at se hvad hver udløser sender videre til efterfølgende trin (output_keys) og den fulde liste over handlinger med deres parametre, læs GET /automations/steps. Automationsguiden forklarer hver udløser med bygherrens ord.
Fejl
Enhver fejl har den sædvanlige form { "success": false, "error_code": <status>, "error": "..." }. En afvist graf tilføjer code og 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 viser hvert problem, én rettelig sætning hver, og error er den første. Ret præcis det, der er angivet, og send hele grafen igen. code er en af invalid_graph, automation_graph_has_a_cycle, self_triggering_automation, no_trigger eller en anden kode fra bygherren.
| Status | Hvornår |
|---|---|
400 |
Grafen blev afvist (se ovenfor), et påkrævet felt mangler (name eller graph ved oprettelse, folder_id ved flytning), en opdatering sendte intet at ændre, et automatiserings- eller mappe-id er ikke gyldigt, eller et mappenavn mangler, er tomt eller for langt (code: "invalid_name"). |
403 |
Kontoen har ikke Automatiseringer; en klientkontos plan inkluderer ikke oprettelse og redigering af automatiseringer (kun skrivning); eller teammedlemmets Automatiseringer-adgang er for lav (Vis for læsning, Rediger for skrivning). |
404 |
Ingen automatisering med det id på denne konto, ingen mappe med det id (code: "folder_not_found"), eller et sub_account_id, der ikke er en af dine klientkonti. |
409 |
En mappe med det navn findes allerede (code: "folder_name_taken"). |
413 |
Automatiseringen er større end den 1 MB, som bygherren accepterer. Flyt stor kode eller data ud af dens trin. |
422 |
Bygherren afviste anmodningen af en anden årsag. Tjek grafen mod GET /automations/steps; at sende den samme anmodning igen hjælper ikke. |
503 |
Automatiserings-tjenesten kunne ikke nås. Prøv igen om et øjeblik. Ved oprettelse, list dine automatiseringer først, så du ikke laver et ekstra udkast. |
Brug af disse slutpunkter via MCP
Hvert slutpunkt på denne side er også et værktøj til en AI-assistent, som du forbinder via MCP, med de samme regler: en ny automatisering er et udkast, indtil den aktiveres, og en redigering af en kørende automatisering er live.
| Værktøj | Slutpunkt |
|---|---|
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 |
Næste skridt
- Automatiseringer: hvordan udløsere, trin, variabler og kørselshistorik fungerer i bygherren.
- API for bureauer: byg automatiseringer på en klientkonto med
sub_account_id. - API-reference: den fulde interaktive slutpunkts-oversigt.