API אוטומציות
אוטומציה היא תהליך עבודה המורכב משלבים: טריגר אחד או יותר שמפעילים אותו, ולאחר מכן פעולות, תנאים, השהיות, שלבי בינה מלאכותית ושאר מרכיבים, המחוברים יחד לגרף. זוהי אותה אוטומציה שאתה רואה ועורך בדף אוטומציות. מדריך זה מכסה קריאה ובנייה שלהן באמצעות ה-API.
- כתובת בסיס (Base URL):
https://api.dmchamp.com/v1 - אימות: מפתח ה-API שלך (ראה אימות)
- שגיאות: ראה שגיאות ועימוד ו-שגיאות להלן
כל הדוגמאות להלן מציגות את טופס השאילתה ?apiKey= ב-cURL ואת הכותרת X-API-Key ב-JavaScript וב-Python. כל אחת מהן עובדת בכל נקודת קצה.
סוכנויות: כל נקודת קצה בדף זה מקבלת
sub_account_idכפרמטר שאילתה, כך שתוכל לקרוא ולבנות אוטומציות של לקוח באמצעות מפתח הסוכנות שלך.sub_account_idשאינו אחד מחשבונות הלקוחות שלך יחזיר404. ראה API לסוכנויות.
איך זה עובד: תחילה טיוטה
ה-API בנוי כך ששום דבר לא יתחיל לפעול בטעות.
- קרא את הקטלוג.
GET /automations/stepsמפרט כל טריגר, פעולה וסוג שלב שניתן להשתמש בהם, בתוספת הדקדוק לכתיבת גרף (graph_rules). - צור טיוטה.
POST /automationsשומר את האוטומציה כשהיא כבויה. שום דבר עדיין לא רץ. - בדוק אותה. קרא אותה בחזרה, פתח אותה בבונה (התגובה נותנת לך את ה-
open_pathשלה), וודא שבעל החשבון ראה מה היא עושה ולמי. - הפעל אותה.
POST /automations/{automationId}/enableהיא קריאה בפני עצמה. זהו השלב שגורם לדברים אמיתיים לקרות: הודעות נשלחות, רשומות משתנות, כלים ניתנים לסוכן בינה מלאכותית.
עריכה לעולם לא משנה אם אוטומציה מופעלת או כבויה. המשמעות היא גם ששינוי באוטומציה שהיא מופעלת נכנס לתוקף מיד, באוטומציה החיה. כדי לשנות אוטומציה רצה בבטחה, השבת אותה, ערוך אותה, בדוק אותה והפעל אותה שוב.
כל גרף שאתה שולח עובר את אותן בדיקות שבונה הקנבס מיישם. גרף שלא ניתן לפתוח או להריץ נדחה עם 400 שמפרט בדיוק מה צריך לתקן.
גישה
- החשבון זקוק לאוטומציות. ללא זה, כל קריאה בדף זה תחזיר
403. - הגישה של חבר צוות עוקבת אחר אזור ה-אוטומציות שלו ב-ניהול צוות: קריאה (רשימה, קבלת פרטים, שלבים, הרצות, תיקיות) דורשת צפייה, וכל מה שמשנה משהו דורש עריכה.
- בחשבון לקוח שהתוכנית שלו אינה כוללת יצירה ועריכה של אוטומציות, קריאות הכתיבה יחזירו
403, בדיוק כפי שהבונה עושה באפליקציה.
אובייקט האוטומציה
הרשימה מחזירה סיכום של כל אוטומציה, ללא השלבים שלה:
{
"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"
}
| שדה | משמעות |
|---|---|
id |
המזהה (id) של האוטומציה. |
name |
איך היא נקראת ברשימה. |
description |
משפט עד שלושה משפטים על מה שהיא עושה, או null. |
enabled |
האם היא מופעלת. אוטומציה מושבתת לעולם לא רצה. |
updated_at |
מתי היא שונתה לאחרונה. |
trigger_kind |
מה מפעיל אותה, למשל incoming_message, schedule, webhook, agent_function או manual. null כאשר לגרף עדיין אין טריגר. |
folder_id, folder_name |
התיקייה שבה היא מאוחסנת, או null עבור ללא תיקייה. |
קריאת אוטומציה אחת מוסיפה את created_at ואת ה-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" }]
}
}
כל שלב (nodes[]) כולל:
| שדה | משמעות |
|---|---|
id |
מזהה השלב, ייחודי בתוך הגרף. |
kind |
סוג השלב: trigger, action, condition, transform, ai, delay, loop או respond. ראו סוגי שלבים. |
label |
השם המוצג על השלב בבונה האוטומציות. |
alias |
שם ההתייחסות של השלב. שלבים מאוחרים יותר קוראים את הפלט שלו כ-${nodes.<alias>.<field>}. null בשלב שאין לו כזה (אז הוא מופנה לפי המזהה שלו). |
action |
מה השלב עושה: הפעולה שהוא מריץ, או בשלב טריגר, סוג הטריגר. null בשלבים אחרים. |
params |
הפרמטרים של הפעולה בשלב פעולה, או הגדרות הטריגר בשלב טריגר. null בכל סוג אחר. נשמר עבור קוראים ישנים: config נושא את אותם ערכים ועוד. |
config |
ההגדרות המלאות של השלב כפי שהן נשמרות בבונה האוטומציות, עבור כל סוג שלב: חוקי תנאי, הנחיה (prompt) של שלב AI, משך זמן של השהיה, ה-slug והפרמטרים של פעולה. |
לכל חיבור (edges[]) יש from ו-to (מזהי שלבים), ו-branch כאשר הוא עוקב אחר ענף אחד של שלב, לדוגמה true או false לאחר תנאי.
שני דברים ב-config משתנים בדרך החוצה:
- סודות מוסתרים. ערכים שנראים כמו אישורי גישה (סודות webhook, אסימונים, מפתחות API, סיסמאות, ערכי כותרות) חוזרים כ-
"[redacted]". שלחו את"[redacted]"בחזרה ללא שינוי והערך השמור יישמר. - טקסטים ארוכים מקוצרים. טקסט בודד שארוך מ-4,000 תווים בערך נחתך ומסתיים בשלוש נקודות. אם אתם שולחים את השלב הזה בחזרה, הכניסו תחילה את הטקסט המלא שלו.
רשימת אוטומציות
GET /automations מחזיר את האוטומציות בחשבון, מהחדשה ביותר לישנה ביותר, כסיכומים (ללא שלבים).
פרמטרי שאילתה (כולם אופציונליים): folder_id (רק האוטומציות בתיקייה זו, מזהה מ-רשימת תיקיות, או none עבור אלו שאינן בתיקייה), sub_account_id.
cURL
curl "https://api.dmchamp.com/v1/automations?apiKey=YOUR_API_KEY&folder_id=none"
JavaScript
const res = await fetch("https://api.dmchamp.com/v1/automations?folder_id=none", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const { automations } = await res.json();
Python
res = requests.get(
"https://api.dmchamp.com/v1/automations",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"folder_id": "none"},
)
automations = res.json()["automations"]
תגובה (200)
{ "success": true, "automations": [{ "id": "8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f", "name": "Price question auto-reply", "enabled": false, "...": "..." }] }
אם לא ניתן להגיע לשירות האוטומציות, תקבלו 503, לעולם לא רשימה ריקה במקומו. רשימה ריקה תמיד אומרת שאין אוטומציות.
קבלת אוטומציה
GET /automations/{automationId} מחזיר אוטומציה אחת עם הגרף המלא שלה: סוג, תווית, כינוי, פעולה, פרמטרים והגדרות של כל שלב, בתוספת החיבורים ביניהם.
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"]
תגובה (200)
{ "success": true, "automation": { "id": "8d2c7f1e-2a3b-4c5d-9e8f-0a1b2c3d4e5f", "name": "Price question auto-reply", "graph": { "nodes": ["..."], "edges": ["..."] } } }
מזהה שאינו קיים בחשבון זה מחזיר 404.
קטלוג שלבים
GET /automations/steps מחזיר את כל מה שניתן לבנות ממנו אוטומציה:
node_kinds: 8 סוגי השלבים, כל אחד עם תווית ותיאור.triggers: כל טריגר שיכול להפעיל אוטומציה, עם שדות ההגדרות שלו (fields) והערכים שהוא מעביר לשלבים הבאים (output_keys).actions: הפעולות המובנות ששלב פעולה יכול להריץ, כל אחת עם ה-keyשלה (ה-slug שבו משתמשים בגרף) וה-paramsשלה, מסומנים כ-requiredהיכן שהם נמצאים.api_actions: הפעולות של API זה ששלב פעולה יכול לקרוא להן. ללאqהן חוזרות כתוויות המקובצות לפי תחום ב-api_actions_by_tag, והרשימה השטוחה ריקה, כיוון שיש מאות כאלו.graph_rules: הדקדוק לכתיבת גרף: הנתונים שכל סוג שלב נושא, כל סוג טריגר עם מפתחות ההגדרות שלו, ספקי הפעולות, שמות הענפים ותחביר התבנית. קרא זאת לפני שתיצור או תערוך אחד.counts: הסיכומים לפי רשימה, ללא קשר למה שחיפשת.
זה מה שהבונה מציע, לא מה שהחשבון בנה בפועל. בדוק זאת לפני שתסיק שטריגר או פעולה אינם קיימים.
פרמטרים של שאילתה (כולם אופציונליים): q, מילה לחיפוש בכל רשימה (ללא תלות באותיות רישיות/קטנות), ו-sub_account_id.
עם q:
api_actionsהיא הרשימה השטוחה של התאמות, מוגבלת ל-60.api_actions_truncatedהיאtrueכאשר המגבלה הופעלה. ההתאמות הראשונות נושאות את הפרמטרים שלהן.- פעולות עבור אפליקציות צד-שלישי מחוברות מחופשות גם הן וחוזרות ב-
app_actions. חפש לפי שם האפליקציה, לדוגמהq=hubspot. כל אחת מציינת האם לחשבון יש את האפליקציה הזו מחוברת (connected), ו-connected_appsמפרט את האפליקציות שהחשבון חיבר. app_actions_unavailableהיאtrueכאשר לא ניתן היה לחפש בפעולות האפליקציה הפעם. שאר הרשימות עדיין מלאות.
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()
תגובה (200, מקוצרת)
{
"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 }
}
רשימות סוגי השלבים ו-הטריגרים להלן לקוחות מנקודת קצה זו. נקודת הקצה עצמה היא תמיד הרשימה הנוכחית.
יצירת אוטומציה
POST /automations יוצר אוטומציה משם ומגרף. היא נשמרת כבויה, כטיוטה.
גוף הבקשה
| שדה | חובה | משמעות |
|---|---|---|
name |
כן | איך היא נקראת ברשימה. קצר וספציפי. |
description |
לא | משפט עד שלושה על מה היא עושה ומתי היא רצה. |
graph |
כן | { nodes, edges }, ראה להלן. |
folder_id |
לא | התיקייה שבה יש לשמור אותה, מזהה (id) מתוך רשימת תיקיות. אם הושאר ריק או null, היא לא תישמר באף תיקייה. |
הגרף. graph_rules מתוך קטלוג השלבים הוא הדקדוק המלא. בקצרה:
- לכל צומת יש
id(ייחודי בגרף, לדוגמהtrigger_1אוsend_reminder),type(אחד מ-8 סוגי השלבים),labelאופציונלי, והגדרותיו ב-data, תחת מפתח שנקרא על שם הסוג שלו: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 }. - אוטומציה זקוקה לטריגר אחד לפחות. הדקדוק החי מאפשר עד 10, והאוטומציה מתחילה כאשר כל אחד מהם מופעל.
- כל שלב אחר חייב להיות נגיש מטריגר, ואף חיבור לא יכול להוביל חזרה לשלב קודם.
- לכל קשת יש
sourceו-target. קשתות היוצאות מתנאי נושאותsourceHandletrueאוfalse. קשתות היוצאות מלולאה נושאותbodyאוdone. קשתות היוצאות מהמתנה לתגובה (Wait for reply) נושאותrepliedאוtimed_out. לקשתות אחרות איןsourceHandle; הדקדוק מפרט את השאר. - ה-slugs והפרמטרים של הפעולות מגיעים מהקטלוג. לעולם אל תנחש מזהה (סוכן, תגית, רשימה, שלב): חפש אותו קודם ב-API, או השאר את השדה כ-
""כדי שהמשתמש יבחר בבונה. - מיקומים הם אופציונליים. שלבים ללא מיקום מסודרים אוטומטית.
- ערכים משלבים קודמים נכתבים כ-
${trigger.<field>}ו-${nodes.<step>.<field>}. ראה שימוש במה ששלב קודם החזיר ו-ביטויים במדריך האוטומציות.
הגרף מתקבל בשני איותים: זה של הבונה (צמתים עם type ו-data, קשתות עם source ו-target, כפי שמופיע להלן) וזה ש-קבלת אוטומציה עונה איתו (צמתים עם kind, config, action, params; קשתות עם from, to, branch). כך שניתן לקרוא אוטומציה, לשנות שלב ולשלוח אותה חזרה.
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()
תגובה (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היא האוטומציה כפי שהיא שמורה, באותה צורה כמו ב-קבלת אוטומציה.draftהיאtrueבזמן שהיא כבויה. אוטומציה חדשה היא תמיד טיוטה עד שאתה מפעיל אותה, לכןenabled: falseכאן הוא תקין, לא כשל.open_pathהוא המקום שבו היא נפתחת בבונה של האפליקציה.warningsמפרט דברים שהבונה לא הצליח לסיים, כתוויות קצרות (לדוגמהagent_function:not_linked). הוא ריק כאשר הכל תקין.
יצירה אינה פעולה בטוחה לביצוע חוזר ללא בדיקה. אם בקשה חורגת מזמן ההמתנה, רשום את האוטומציות שלך לפני שתשלח אותה שוב, אחרת אתה עלול למצוא את עצמך עם שתי טיוטות.
עדכון אוטומציה
PUT /automations/{automationId} משנה את השם, התיאור ו/או התרשים. שלח רק את השדות שברצונך לשנות.
גוף הבקשה (Body): name, description, graph (כולם אופציונליים, לפחות אחד נדרש).
פעולת graph מחליפה את התרשים במלואו, לכן עבוד תמיד על בסיס מה ששמור:
- קרא את האוטומציה באמצעות
GET /automations/{automationId}. - שנה את מה שצריך בתרשים ההוא.
- שלח את התרשים המלא בחזרה, כולל כל השלבים.
כאשר אתה שולח אותו בחזרה:
- שמור על כל
aliasשל שלב בדיוק כפי שקיבלת אותו. שלבים מאוחרים יותר מתייחסים לשלב לפי הכינוי שלו (${nodes.<alias>.<field>}). שינוי או מחיקה שלו יגרמו לכל הפניה לאותו שלב להופיע כריקה. ראה מתן שמות לשלבים שלך. - השאר את ערכי ה-
"[redacted]"כפי שהם. ערך המוצג כ-"[redacted]"שומר על הערך המאוחסן שלו. - שחזר טקסטים מקוצרים. טקסט שהוחזר כשהוא מסתיים בשלוש נקודות קוצר בקריאה.
השאלה האם האוטומציה מופעלת לעולם אינה משתנה כאן. אם היא מופעלת, העריכה שלך נכנסת לתוקף ברגע השמירה. בזמן שאוטומציה מופעלת, שינוי שעלול לגרום לה להפעיל את עצמה יידחה: השבת אותה תחילה.
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"]})
תגובה (200): בעלת אותו מבנה כמו יצירה (automation, draft, open_path, warnings). שליחה של אף אחד מהערכים name, description או graph תחזיר 400.
הפעלה והשבתה
POST /automations/{automationId}/enable מפעיל אוטומציה, כך שהיא תרוץ לפי הטריגר שלה מעתה ואילך. יש לקרוא לו רק לאחר שבעל החשבון ראה מה האוטומציה עושה ולמי, והסכים להפעיל אותה. ה-builder יסרב להפעיל גרף שהוא אינו יכול להריץ (ללא טריגר, לולאה, או שלב שמפעיל את עצמו) עם 400 שמסביר מדוע.
POST /automations/{automationId}/disable מכבה אותה (משהה אותה). הרצות שכבר נמצאות בעיצומן יסתיימו; לא יתחילו הרצות חדשות. השבתה מותרת תמיד.
אף אחת מהקריאות אינה מקבלת גוף (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"},
)
תגובה (200): האוטומציה כפי שהיא שמורה כעת, באותה צורה של יצירה, עם draft: false לאחר הפעלה.
היסטוריית הרצות
GET /automations/{automationId}/runs מחזירה את ההרצות של אוטומציה אחת, מהחדשה לישנה: מתי כל הרצה התחילה והסתיימה, מה הפעיל אותה, האם היא הצליחה, ומה הייתה השגיאה במקרה של כישלון. קריאת האוטומציה אומרת לך מה היא תעשה. היסטוריית ההרצות אומרת לך מה היא עשתה, וזו הדרך היחידה להבדיל בין אוטומציה שמעולם לא רצה לבין כזו שרצה ונכשלת בכל פעם.
פרמטרי שאילתה (כולם אופציונליים): limit (1 עד 50, ברירת מחדל 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"]
תגובה (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הואliveעבור הרצה אמיתית, אוsafeעבור הרצה בטוחה (Safe run) מתוך העורך. הרצה בטוחה לא שולחת דבר, לכן היא אינה הוכחה לכך שהאוטומציה עובדת בשימוש אמיתי.- רשימת
runsריקה היא תשובה, לא חוסר בנתונים. התגובה במקרה כזה תכילnote: או שהטריגר מעולם לא הופעל, או שהאוטומציה כבויה, ולכן דבר לא רץ.
תיקיות
תיקיות רק מקבצות אוטומציות ברשימה. הן לעולם לא משנות את מה שהאוטומציה עושה או אם היא מופעלת. ראו ארגון אוטומציות בתיקיות.
הצגת תיקיות
GET /automations/folders מחזירה את התיקיות, כל אחת עם מספר האוטומציות שהיא מכילה, בתוספת unfiled_count: כמה אוטומציות אינן נמצאות באף תיקייה.
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
}
יצירת תיקייה
POST /automations/folders עם { "name": "Appointment reminders" }. השם הוא שדה חובה, עד 100 תווים, וחייב להיות ייחודי בחשבון. ניתן להכניס אליה אוטומציות באמצעות העברת אוטומציה, או להעביר folder_id בעת יצירת אוטומציה חדשה.
curl -X POST "https://api.dmchamp.com/v1/automations/folders?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Appointment reminders" }'
תגובה (201): { "success": true, "folder": { "id": "...", "name": "Appointment reminders", "automation_count": 0 } }. שם שכבר קיים בתיקייה אחרת יחזיר 409 עם code: "folder_name_taken".
שינוי שם תיקייה
PUT /automations/folders/{folderId} עם { "name": "..." }. האוטומציות שבתוכה נשארות במקומן.
תגובה (200): { "success": true, "folder": { ... } }.
מחיקת תיקייה
DELETE /automations/folders/{folderId} מוחק את התיקייה בלבד. האוטומציות שבתוכה אינן נמחקות: הן עוברות למצב ללא תיקייה וממשיכות לפעול בדיוק כפי שפעלו קודם.
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." }
העברת אוטומציה לתיקייה
PUT /automations/{automationId}/folder עם { "folder_id": "<folder id>" }, או { "folder_id": null } כדי להוציא אותה מהתיקייה שלה. folder_id נדרש. רק המיקום שבו האוטומציה מופיעה משתנה.
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" }'
תגובה (200): { "success": true, "automation_id": "...", "folder_id": "..." }.
קטלוג
סוגי שלבים
| סוג | מה הוא עושה |
|---|---|
trigger |
מפעיל את האוטומציה כאשר משהו קורה. |
action |
מריץ שלב אחד: פעולה מובנית, פעולת API, פעולה של אפליקציה מחוברת, בקשת HTTP או אימייל. |
condition |
מפצל את הזרימה לפי כלל, לענף true וענף false. |
transform |
מריץ קטע קוד קצר כדי לעצב מחדש נתונים בין שלבים. |
ai |
שואל את ה-AI באמצעות הנחיה (prompt) שתכתוב. הוא יכול להחזיר טקסט, שדות נפרדים, או לבחור באחד מכמה ענפים. |
delay |
ממתין לזמן מוגדר, או ממתין לתגובת איש הקשר (עם זמן קצוב). |
loop |
חוזר על השלבים שבתוכו עבור כל פריט ברשימה. |
respond |
מחזיר תגובה לקריאת ה-webhook או לקריאת פונקציית סוכן ה-AI שהפעילה את ההרצה. |
טריגרים
אלו הם 40 הטריגרים שהקטלוג מציג כיום, מקובצים כפי שהבונה מקבץ אותם. עמודת הגדרות מכילה את מפתחות ההגדרות של הטריגר עצמו (fields), אשר מצמצמים את מתי הוא מופעל. כל טריגר מקבל גם respect_quiet_hours, run_hours, reentry ו-stop_on_response; ראה הגדרות אוטומציה.
הודעות
טריגר (kind) |
מופעל כאשר | הגדרות |
|---|---|---|
הודעה נכנסת (incoming_message) |
איש קשר שולח הודעה בכל ערוץ. | campaign (מגביל לסוכן AI אחד), channel, message_filter_contains (מילת מפתח), message_filter_regex (תבנית) |
שיחה שלא נענתה (missed_call) |
מישהו מתקשר לאחד ממספרי ה-WhatsApp Web שלך או למספר ה-SMS שלך ואף אחד לא עונה. | to_number |
הודעה נמסרה (message_delivered) |
הודעה ששלחת אושרה כנמסרה על ידי הערוץ. | channel, agent |
הודעה נכשלה (message_failed) |
הודעה ששלחת לא הצליחה להימסר, עם השגיאה. | channel, agent |
הודעה נשלחה (message_sent) |
כל הודעה עוזבת את החשבון שלך: של ה-AI, שלך, שידור, או הודעת המשך. סנן אותה, אחרת היא תרוץ על כולן. | channel, sent_by |
הודעת המשך נשלחה (follow_up_sent) |
הודעת המשך אוטומטית יוצאת. | ללא |
הודעת המשך דולגה (follow_up_skipped) |
הודעת המשך עוכבה מכיוון שתנאי השליחה שלה נכשל. | ללא |
הודעות המשך הסתיימו (follow_up_exhausted) |
איש קשר קיבל את הודעת ההמשך האחרונה ברצף ושום דבר נוסף לא בתור. | ללא |
שיחה נסגרה (conversation_closed) |
צ’אט נסגר, עם פירוט איך הוא הסתיים וסיכום. | channel, agent |
שידור הסתיים (broadcast_completed) |
שידור סיים להישלח, עם פירוט כמה יצאו וכמה נכשלו. | ללא |
תגובת ליד מוינה (outreach_reply_labelled) |
תגובה של ליד מאימייל קר ממוינת, למשל כ’מתעניין’. | label |
תגובה ב-Skool התקבלה (skool_comment_received) |
חבר מגיב תחת פוסט ב-Skool שאחד מכללי התגובות שלך עוקב אחריו. | ללא |
אנשי קשר
טריגר (kind) |
מופעל כאשר | הגדרות |
|---|---|---|
איש קשר חדש (contact_created) |
אדם חדש מגיע אליך בפעם הראשונה בכל ערוץ, וגם עבור ייבוא, ה-API ואנשי קשר שאתה יוצר ידנית. | ללא |
איש קשר עודכן (contact_updated) |
שדה של איש קשר משתנה. | field |
אנשי קשר שאתה מוסיף כאן (contact_added) |
רק עבור אנשי קשר שאתה מכניס לאוטומציה זו בעצמך מדף אנשי הקשר. הרצה אחת לכל איש קשר. | ללא |
תגית הוחלה (tag_applied) |
תגית מתווספת לאיש קשר, על ידי סוכן ה-AI שלך, אדם, אוטומציה או ייבוא. | tag_name, channel, applied_by |
תגית הוסרה (tag_removed) |
תגית מוסרת מאיש קשר. | tag_name, channel |
חבר Skool הצטרף (skool_member_joined) |
מישהו מצטרף לקהילת Skool שאתה מחזיק או מנהל, עם הפרופיל שלו, תשובות וציון התאמה. | group_id, create_contact |
חבר Skool עבר הסמכה (skool_member_qualified) |
התשובות של חבר Skool חדש מגיעות לציון שווה או גבוה מהסף שלך. | min_score |
עסקאות
טריגר (kind) |
מופעל כאשר | הגדרות |
|---|---|---|
עסקה נוצרה (deal_created) |
עסקה חדשה מתווספת לאחד מצינורות המכירה שלך. | pipeline_id, stage_id |
שלב עסקה השתנה (deal_stage_changed) |
עסקה עוברת לשלב אחר, עם ציון השלב שהיא עזבה וזה שהיא נכנסה אליו. | pipeline_id, to_stage_id, from_stage_id |
עסקה עודכנה (deal_updated) |
שדה עסקה משתנה. | field |
פגישות
טריגר (kind) |
מופעל כאשר | הגדרות |
|---|---|---|
פגישה נקבעה (appointment_booked) |
פגישה חדשה נקבעת. | ללא |
פגישה בוטלה (appointment_cancelled) |
פגישה שנקבעה מבוטלת. | ללא |
פגישה נקבעה מחדש (appointment_rescheduled) |
פגישה שנקבעה עוברת לזמן אחר, עם הזמן הישן לצד החדש. | event_id |
לפני פגישה (appointment_upcoming) |
זמן מוגדר לפני כל פגישה מאושרת, עבור תזכורות. עד חמש תזכורות לכל אוטומציה. | offsets_minutes |
משימות
טריגר (kind) |
מופעל כאשר | הגדרות |
|---|---|---|
משימה נוצרה (task_created) |
משימה נוצרת. | task_type |
משימה הושלמה (task_completed) |
משימה מועברת לשלב הושלם. | ללא |
חשבון
טריגר (kind) |
מופעל כאשר | הגדרות |
|---|---|---|
יתרת קרדיט נמוכה (low_credit_balance) |
יתרת הקרדיט שלך יורדת מתחת לסף ההתראה שלך. | ללא |
ערוץ חובר (channel_connected) |
אחד הערוצים שלך מסיים להתחבר. | channel |
ערוץ התנתק (channel_disconnected) |
אחד הערוצים שלך מתנתק: התנתקות, ביטול קישור או ניתוק. מספר WhatsApp Web שמתחבר מחדש בעצמו נספר רק אם הוא עדיין למטה אחרי 30 דקות. | channel |
סוכנות
טריגר (kind) |
מופעל כאשר | הגדרות |
|---|---|---|
תת-חשבון נוצר (sub_account_created) |
חשבון לקוח חדש נוצר, מלוח הבקרה שלך, ה-API או דף ההרשמה שלך. | ללא |
פעילות תת-חשבון (sub_account_event) |
משהו קורה באחד מחשבונות הלקוח שלך: קרדיטים אוזלים, ערוץ מתחבר, שינוי תוכנית. | event, threshold |
כללי ואפליקציות
טריגר (kind) |
מופעל כאשר | הגדרות |
|---|---|---|
לפי לוח זמנים (schedule) |
לפי לוח זמנים של cron. | cron, timezone |
Webhook (webhook) |
מערכת חיצונית קוראת לכתובת ה-webhook של האוטומציה. | webhook_secret |
פונקציית סוכן AI (agent_function) |
סוכן ה-AI שלך קורא לאוטומציה זו כפונקציה במהלך שיחה. | function_name, function_description, parameters, agent_ids, campaign_ids |
פריט עדכון חדש (rss) |
פריט חדש מופיע בעדכון RSS או Atom. | feed_url |
התקבל אימייל (email_received) |
אימייל מגיע לתיבת הדואר המחוברת שלך. | from_contains, subject_contains |
אירוע באפליקציה (app_event) |
משהו קורה באפליקציה מחוברת: שלב בעסקה משתנה, תשלום מתקבל, טופס נשלח. | toolkit, trigger_slug, connected_account_id, config |
הרצה ידנית (manual) |
רק כאשר היא מופעלת באופן ידני. | none |
אוטומציה יכולה להכיל לכל היותר טריגר אחד מכל סוג של webhook, app_event, agent_function, rss, schedule, email_received, appointment_upcoming ו-contact_added. טריגר שמופעל כאשר רשומה נוצרת לא יכול להיות משולב עם הפעולה שיוצרת את אותה רשומה, כיוון שהאוטומציה תפעיל את עצמה.
למידע על מה כל טריגר מעביר לשלבים הבאים (output_keys) ועל הרשימה המלאה של פעולות עם הפרמטרים שלהן, קרא את GET /automations/steps. מדריך האוטומציות מסביר כל טריגר במילים של ה-builder.
שגיאות
לכל שגיאה יש את המבנה הרגיל { "success": false, "error_code": <status>, "error": "..." }. גרף שנדחה מוסיף code ו-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 מפרט כל בעיה, משפט אחד לכל תיקון, ו-error הוא הראשון שבהם. תקן בדיוק את מה שמפורט ושלח את הגרף כולו שוב. code הוא אחד מ-invalid_graph, automation_graph_has_a_cycle, self_triggering_automation, no_trigger, או קוד אחר מה-builder.
| סטטוס | מתי |
|---|---|
400 |
הגרף נדחה (ראה לעיל), שדה חובה חסר (name או graph ביצירה, folder_id בהעברה), עדכון שלא שלח שום דבר לשינוי, מזהה אוטומציה או תיקייה אינו תקין, או ששם תיקייה חסר, ריק או ארוך מדי (code: "invalid_name"). |
403 |
לחשבון אין אוטומציות; התוכנית של חשבון לקוח אינה כוללת יצירה ועריכה של אוטומציות (כתיבה בלבד); או שהרשאות הגישה של חבר הצוות ל-אוטומציות נמוכות מדי (צפייה לקריאה, עריכה לכתיבה). |
404 |
אין אוטומציה עם מזהה כזה בחשבון זה, אין תיקייה עם מזהה כזה (code: "folder_not_found"), או ש-sub_account_id אינו אחד מחשבונות הלקוח שלך. |
409 |
תיקייה עם שם זה כבר קיימת (code: "folder_name_taken"). |
413 |
האוטומציה גדולה מ-1 MB שה-builder מקבל. העבר קוד או נתונים גדולים מחוץ לשלבים שלה. |
422 |
ה-builder דחה את הבקשה מסיבה אחרת. בדוק את הגרף מול GET /automations/steps; שליחת אותה בקשה שוב לא תעזור. |
503 |
לא ניתן היה להגיע לשירות האוטומציות. נסה שוב בעוד רגע. עבור יצירה, רשום תחילה את האוטומציות שלך כדי שלא תיצור טיוטה שנייה. |
שימוש בנקודות קצה אלו דרך MCP
כל נקודת קצה בדף זה היא גם כלי עבור עוזר AI שאתה מחבר דרך MCP, עם אותם כללים: אוטומציה חדשה היא טיוטה עד שהיא מופעלת, ושינוי באוטומציה רצה הוא פעיל.
| כלי | נקודת קצה |
|---|---|
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 |
צעדים הבאים
- אוטומציות: כיצד טריגרים, שלבים, משתנים והיסטוריית הרצות עובדים ב-builder.
- API לסוכנויות: בנה אוטומציות בחשבון לקוח עם
sub_account_id. - תיעוד API: סייר נקודות הקצה האינטראקטיבי המלא.