DM Champ Docs

オートメーション API

オートメーションとは、ステップで構成されるワークフローです。開始のトリガー(1つ以上)、アクション、条件、遅延、AIステップなどがグラフ状に接続されています。これは、オートメーションページで表示・編集するものと同じです。このガイドでは、APIを通じてこれらを読み取り、構築する方法を説明します。

以下のすべての例では、cURLでの ?apiKey= クエリ形式と、JavaScriptおよびPythonでの X-API-Key ヘッダーを示しています。どちらもすべてのエンドポイントで使用可能です。

代理店: このページのすべてのエンドポイントはクエリパラメータとして 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 は専用の呼び出しです。このステップを実行することで、メッセージの送信、レコードの変更、AIエージェントへのツール提供など、実際の処理が行われます。

編集を行っても、オートメーションのオン/オフ状態は変わりません。つまり、オンになっているオートメーションを編集すると、その変更は直ちにライブ環境のオートメーションに反映されます。実行中のオートメーションを安全に変更するには、無効化し、編集・確認を行った後、再度有効化してください。

送信するすべてのグラフは、ビルダーキャンバスが適用するものと同じチェックを受けます。開くことや実行することができないグラフは、修正すべき箇所を正確にリストアップした 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 動作内容を説明する1〜3文、または null。
enabled オンになっているかどうか。無効化されたオートメーションは実行されません。
updated_at 最終変更日時。
trigger_kind 何がトリガーとなるか(例: incoming_message、schedule、webhook、agent_function、manual)。グラフにまだトリガーがない場合は null。
folder_id, folder_name 格納されているフォルダ。フォルダがない場合は null。

オートメーションを1つ読み取ると、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 グラフ内で一意となるステップのID。
kind ステップの種類:trigger、action、condition、transform、ai、delay、loop、またはrespond。ステップの種類を参照してください。
label ビルダー上でステップに表示される名前。
alias ステップの参照名。後続のステップは、その出力を${nodes.<alias>.<field>}として読み取ります。持たないステップではnullとなります(その場合はIDで参照されます)。
action ステップの動作:実行するアクション、またはトリガーステップの場合はトリガーの種類。nullは他のステップで使用されます。
params アクションステップの場合はアクションのパラメータ、トリガーステップの場合はトリガーの設定。他のすべての種類ではnullとなります。古いリーダーとの互換性のため、configには同じ値などが含まれます。
config ビルダーが保存するステップの完全な設定。すべての種類のステップに対応します(条件のルール、AIステップのプロンプト、遅延の期間、アクションのスラッグとパラメータなど)。

各接続(edges[])にはfromとto(ステップID)があり、ステップの特定の分岐に従う場合はbranchがあります。例えば、条件の後のtrueやfalseなどです。

config内の2つの項目は、出力時に変更されます:

  • シークレットは非表示になります。 認証情報のように見える値(Webhookシークレット、トークン、APIキー、パスワード、ヘッダー値)は"[redacted]"として返されます。"[redacted]"をそのまま送り返すと、保存されている値が保持されます。
  • 長いテキストは短縮されます。 約4,000文字を超える単一のテキストは切り詰められ、末尾が省略記号になります。そのステップを送り返す場合は、最初に完全なテキストを戻してください。

オートメーションの一覧表示

GET /automationsは、アカウント上のオートメーションを、変更日が新しい順に要約(ステップなし)として返します。

クエリパラメータ(すべて任意):folder_id(そのフォルダ内のオートメーションのみ。フォルダの一覧表示からの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}は、完全なグラフを持つ1つのオートメーションを返します。これには、各ステップの種類、ラベル、エイリアス、アクション、パラメータ、設定、およびそれらの間の接続が含まれます。

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": ["..."] } } }

このアカウントに存在しないIDを指定すると、404が返されます。


ステップカタログ

GET /automations/stepsは、オートメーションの構築に使用できるすべての要素を返します:

  • node_kinds: 8種類のステップ。それぞれにラベルと説明があります。
  • triggers: オートメーションを開始できるすべてのトリガー。設定フィールド(fields)と、後続のステップに渡される値(output_keys)が含まれます。
  • actions: アクションステップが実行できる組み込みアクション。それぞれにkey(グラフ内で使用するスラッグ)と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 いいえ 何を行い、いつ実行されるかについての1〜3文の説明。
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 })のキーの下に配置されます。
  • オートメーションには少なくとも1つのトリガーが必要です。現在の文法では最大10個まで許可されており、いずれかが起動するとオートメーションが開始されます。
  • 他のすべてのステップはトリガーから到達可能である必要があり、前のステップに戻るような接続は許可されません。
  • 各エッジにはsourceとtargetがあります。条件から出るエッジにはsourceHandle trueまたはfalseが含まれます。ループから出るエッジにはbodyまたはdoneが含まれます。「返信待ち」の遅延から出るエッジにはrepliedまたはtimed_outが含まれます。その他のエッジにはsourceHandleはありません。詳細は文法を参照してください。
  • アクションのスラッグとパラメータはカタログから取得します。ID(エージェント、タグ、リスト、ステージなど)を推測せず、最初にAPIで検索するか、フィールドを""のままにしてビルダーでユーザーが選択できるようにしてください。
  • 位置情報はオプションです。指定がないステップは自動的に配置されます。
  • 前のステップからの値は${trigger.<field>}および${nodes.<step>.<field>}として記述されます。オートメーションガイドの前のステップの戻り値を使用するおよび式を参照してください。

グラフは2種類の記述方法を受け付けます。ビルダー独自の形式(ノードは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)でリストします。すべてが正常な場合は空になります。

作成操作は、無闇に繰り返すと安全ではありません。リクエストがタイムアウトした場合は、再度送信する前にオートメーションの一覧を取得してください。そうしないと、ドラフトが2つ作成されてしまう可能性があります。


オートメーションの更新

PUT /automations/{automationId} は、名前、説明、またはグラフを変更します。変更したいフィールドのみを送信してください。

Body: name、description、graph(すべて任意ですが、少なくとも1つは必要です)。

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 はオートメーションをオンにし、トリガーに基づいて実行されるようにします。アカウントの所有者がオートメーションの動作と対象を確認し、オンにすることに同意した場合にのみ呼び出してください。ビルダーは、実行できないグラフ(トリガーがない、ループがある、自身をトリガーするステップがあるなど)のオンへの切り替えを拒否し、その理由を示す 400 を返します。

POST /automations/{automationId}/disable はオートメーションをオフ(一時停止)にします。実行中のプロセスは完了しますが、新しい実行は開始されません。無効化はいつでも可能です。

どちらの呼び出しもボディを必要としません。

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 となります。安全な実行では何も送信されないため、実際の環境でオートメーションが機能することの証明にはなりません。
  • 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
}

フォルダーの作成

{ "name": "Appointment reminders" } を指定して POST /automations/folders を呼び出します。名前は必須で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 } }。他のフォルダーですでに使用されている名前を指定すると、code: "folder_name_taken" を含む 409 が返されます。

フォルダーの名前変更

{ "name": "..." } を指定して PUT /automations/folders/{folderId} を呼び出します。フォルダー内のオートメーションはそのまま保持されます。

レスポンス (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 1つのステップを実行します(組み込みアクション、APIアクション、接続済みアプリのアクション、HTTPリクエスト、またはメール)。
condition ルールに基づいてフローを true と false の分岐に分割します。
transform ステップ間でデータを整形するための短いコードを実行します。
ai 作成したプロンプトを使用してAIに質問します。テキストの返信、フィールドの分離、または複数の分岐のいずれかを選択させることができます。
delay 指定した時間待機するか、連絡先からの返信を(タイムアウト付きで)待ちます。
loop リスト内の各アイテムに対して、内部のステップを繰り返します。
respond 実行を開始したWebhook呼び出しまたはAIエージェント関数呼び出しに対してレスポンスを返します。

トリガー

これらはカタログに現在リストされている40個のトリガーであり、ビルダーでのグループ分けに従って分類されています。設定列には、トリガーがいつ起動するかを絞り込むためのトリガー独自の設定キー (fields) が含まれています。すべてのトリガーは respect_quiet_hours、run_hours、reentry、および stop_on_response も受け取ります。オートメーション設定 を参照してください。

メッセージング

トリガー (kind) 起動条件 設定
受信メッセージ (incoming_message) 連絡先が任意のチャネルでメッセージを送信したとき。 campaign (AIエージェントを1つに限定)、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) [連絡先] ページからこのオートメーションに手動で追加した連絡先のみ。連絡先ごとに1回実行されます。 なし
タグ付与 (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) 確定した各予約の指定時間前(リマインダー用)。オートメーションごとに最大5つのリマインダー。 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) 手動で開始された場合のみ。 なし

1つのオートメーションには、webhook、app_event、agent_function、rss、schedule、email_received、appointment_upcoming、contact_addedの各トリガーを最大1つずつ設定できます。レコード作成時に起動するトリガーは、同じレコードを作成するアクションと組み合わせることはできません。オートメーションが無限ループに陥る可能性があるためです。

各トリガーが後続のステップに渡す内容(output_keys)や、パラメータを含むアクションの全リストについては、GET /automations/stepsを参照してください。オートメーションガイドでは、ビルダーの用語を用いて各トリガーを解説しています。


エラー

すべてのエラーは通常の形式 { "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 には各問題が修正可能な1文でリストアップされており、error がその最初の項目です。リストされた内容を正確に修正し、グラフ全体を再度送信してください。code は invalid_graph、automation_graph_has_a_cycle、self_triggering_automation、no_trigger、またはビルダーからのその他のコードのいずれかです。

ステータス 状況
400 グラフが拒否された(上記参照)、必須フィールドが不足している(作成時の name または graph、移動時の folder_id)、更新内容が空である、オートメーションIDまたはフォルダIDが無効である、あるいはフォルダ名が欠落・空・長すぎる(code: "invalid_name")。
403 アカウントにオートメーション機能がない、クライアントアカウントのプランにオートメーションの作成・編集が含まれていない(書き込みのみ)、またはチームメンバーのオートメーションアクセス権限が不足している(読み取りには表示、書き込みには編集が必要)。
404 このアカウントに該当IDのオートメーションが存在しない、該当IDのフォルダが存在しない(code: "folder_not_found")、またはクライアントアカウントではない sub_account_id が指定された。
409 同名のフォルダが既に存在する(code: "folder_name_taken")。
413 オートメーションがビルダーの許容サイズである1MBを超えている。大きなコードやデータはステップの外に移動してください。
422 その他の理由でビルダーがリクエストを拒否した。GET /automations/steps と照らし合わせてグラフを確認してください。同じリクエストを再送しても解決しません。
503 オートメーションサービスに接続できなかった。しばらくしてから再試行してください。作成リクエストの場合は、二重にドラフトを作成しないよう、まずオートメーションの一覧を取得してください。

MCP経由でのこれらのエンドポイントの使用

このページのすべてのエンドポイントは、MCP経由で接続するAIアシスタントのツールとしても利用可能です。ルールは同じで、新しいオートメーションは有効化されるまでドラフト状態であり、実行中のオートメーションへの編集は即座に反映されます。

ツール エンドポイント
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

次のステップ

  • オートメーション: ビルダーにおけるトリガー、ステップ、変数、実行履歴の仕組み。
  • エージェンシー向けAPI: sub_account_id を使用してクライアントアカウント上にオートメーションを構築する方法。
  • APIリファレンス: インタラクティブなエンドポイントエクスプローラーの全機能。