DM Champ Docs

API אוטומציות

אוטומציה היא תהליך עבודה המורכב משלבים: טריגר אחד או יותר שמפעילים אותו, ולאחר מכן פעולות, תנאים, השהיות, שלבי בינה מלאכותית ושאר מרכיבים, המחוברים יחד לגרף. זוהי אותה אוטומציה שאתה רואה ועורך בדף אוטומציות. מדריך זה מכסה קריאה ובנייה שלהן באמצעות ה-API.

כל הדוגמאות להלן מציגות את טופס השאילתה ?apiKey= ב-cURL ואת הכותרת X-API-Key ב-JavaScript וב-Python. כל אחת מהן עובדת בכל נקודת קצה.

סוכנויות: כל נקודת קצה בדף זה מקבלת sub_account_id כפרמטר שאילתה, כך שתוכל לקרוא ולבנות אוטומציות של לקוח באמצעות מפתח הסוכנות שלך. sub_account_id שאינו אחד מחשבונות הלקוחות שלך יחזיר 404. ראה API לסוכנויות.


איך זה עובד: תחילה טיוטה

ה-API בנוי כך ששום דבר לא יתחיל לפעול בטעות.

  1. קרא את הקטלוג. GET /automations/steps מפרט כל טריגר, פעולה וסוג שלב שניתן להשתמש בהם, בתוספת הדקדוק לכתיבת גרף (graph_rules).
  2. צור טיוטה. POST /automations שומר את האוטומציה כשהיא כבויה. שום דבר עדיין לא רץ.
  3. בדוק אותה. קרא אותה בחזרה, פתח אותה בבונה (התגובה נותנת לך את ה-open_path שלה), וודא שבעל החשבון ראה מה היא עושה ולמי.
  4. הפעל אותה. 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. קשתות היוצאות מתנאי נושאות sourceHandle true או 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 מחליפה את התרשים במלואו, לכן עבוד תמיד על בסיס מה ששמור:

  1. קרא את האוטומציה באמצעות GET /automations/{automationId}.
  2. שנה את מה שצריך בתרשים ההוא.
  3. שלח את התרשים המלא בחזרה, כולל כל השלבים.

כאשר אתה שולח אותו בחזרה:

  • שמור על כל 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: סייר נקודות הקצה האינטראקטיבי המלא.