Nodaro ドキュメント
ドキュメントノードリファレンスモデルAI エージェント(MCP)開発者向けセルフホスティングリサーチ
REST API

Webhook

Webhook トリガーの URL で任意のシステムからワークフローを開始し、API でスケジュールを作成し、Webhook 出力で結果を自分のサーバーに送信します。

Webhook は、Nodaro とほかのシステムを双方向につなぎます。Webhook トリガー(Webhook Trigger)ノードは、どのシステムからでも呼び出して実行を開始できる URL を、ワークフローに与えます。スケジュールトリガー(Schedule Trigger)は、それをタイムテーブルどおりに実行します。Webhook 出力(Webhook Output)ノードは、実行の結果を自分のサーバーに送信します。Nodaro が自分からこちらを呼び出すことはありません。実行が終わったことを知るには、それをポーリングするか、Webhook 出力ノードでワークフローを終えてください。

プロンプトWebhook トリガーprompt, imageUrl画像生成Nano Banana ProWebhook 出力自分のサーバー
外部のシステムが Webhook トリガーの URL を呼び出すと、画像生成が実行され、Webhook 出力が画像の URL を自分のサーバーに送信します。

エンドポイント

メソッドパス説明
POST/v1/webhooks/:token実行を開始します。公開のルートで、パス内のトークンが認証情報です。
GET/v1/workflows/:id/triggersワークフローのトリガーを返します。各 Webhook の URL とトークンを含みます。
PATCH/v1/workflow-triggers/:idisActive でトリガーを一時停止または再開するか、スケジュールの config を変更します。
POST/v1/workflow-triggersどのノードにも紐付かないトリガーを、手動で作成します。
POST/v1/workflows/:id/sync-triggersワークフローの保存済みバージョンから、トリガーノードを登録し直します。

HTTP 呼び出しでワークフローを開始する

Webhook トリガーを追加する

Webhook トリガーノードをワークフローに追加します。出力パラメーターで、呼び出し元が送信する値ごとに、パラメーターを 1 つ追加します。各パラメーターには、リクエストの JSON ボディのキーと一致する名前と、タイプ(text、imageUrl、videoUrl、audioUrl のいずれか)があります。パラメーターは、それを使うノードに接続します。

ワークフローを保存する

保存すると、エンドポイントが作成されます。Nodaro が 32 バイトのトークンを発行し、POST /v1/webhooks/<token> を登録します。これは、エディター、API、SDK、インポート、MCP のいずれでワークフローを保存した場合でも起こります。トークンは一度だけ発行され、その後は保持されるので、外部のシステムに渡した URL は、その後何度保存してもそのまま使えます。ノードを削除すると、URL は無効になります。

URL を読み取る

GET /v1/workflows/<id>/triggers は、ワークフローのトリガーを返します。各 Webhook の webhookUrl と webhookToken を含みます。webhookUrl は /v1/webhooks/<token> というパスなので、その前に自分の Nodaro のアドレスを付けてください。config.nodeId がノードの ID と一致するトリガーが、その Webhook トリガーノードのものです。一覧に表示されるのは、自分が所有するワークフローのトリガーだけです。

エディターでは、ノードの設定パネルの Webhook URL に、同じアドレスが完全な形で、コピーボタンとともに表示されます。

呼び出す

JSON ボディを付けて POST を送信します。Authorization ヘッダーは必要ありません。URL 内のトークンが認証情報です。

curl -s -X POST "https://app.nodaro.ai/v1/webhooks/$WEBHOOK_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"prompt": "a lighthouse in a storm", "imageUrl": "https://example.com/lighthouse.jpg"}'

このボディが、トリガーのペイロードになります。各パラメーターは、同じ名前のキーを読み取り、そのタイプによって値の渡し先が決まります。imageUrl は画像の入力に、videoUrl は動画の入力に渡されます。

各 Webhook トリガーは、1 分あたり 10 リクエストを受け付けます。この上限は、API トークンの上限とは別です。

呼び出し元としてよくあるのは、顧客の登録時にオンボーディング動画を開始する決済システム、リリースノートの要約を求めるコードリポジトリ、新しい記事を公開するコンテンツシステム、ノーコードの自動化ツールなどです。

トリガーによる実行の範囲

  • 何かに接続されたトリガーは、自分の分岐だけを実行します。トリガーより後ろにあるノードと、それらのノードが入力として必要とするすべてのノードです。
  • どこにも接続されていないトリガーは、ワークフロー全体を実行します。
  • そのため、1 つのワークフローに複数のトリガーを置き、それぞれに自分の分岐を開始させることができます。
  • 「接続」とは、ほかのノードに値を渡すものすべてを指します。線で結んだ接続、グループ(Group)の中にあるノード、またはフィールドのマッピングです。
  • エディター、API、公開したアプリからの実行は、トリガーによる制限を受けません。常に実行する範囲を、そのまま実行します。

API で手動作成したトリガーは、どのノードも指定しません。この場合 Nodaro は、キャンバス上の唯一の Webhook トリガーを使います。2 つある場合は、ワークフロー全体が実行されます。

URL を秘密にする

トークンが唯一の認証情報なので、URL を持っている人は誰でも実行を開始でき、あなたのクレジットを消費できます。組織のワークスペースにあるワークフローでは、実行の代金はワークスペースの予算から支払われます。URL を共有した相手は誰でも、そのクラスやチームのクレジットを消費できます。

Webhook、スケジュール、Telegram のいずれからの自動実行でも、実行の前に、トリガーの作成者がまだそのワークフローを実行できるかどうかが確認されます。権限付与が取り消された、メンバーシップが停止された、またはワークスペースがアーカイブされたなどの理由で実行できなくなっていた場合、自動化は停止します。この場合、ワークフローの実行履歴には、コード run_requires_authenticated_member を伴う失敗が 1 件表示されます。

API でトリガーを管理する

トリガーノードは、ワークフローを保存すると自分自身を登録します。4 つのルートが、それらを直接管理します。

  • GET /v1/workflows/<id>/triggers は、ワークフローのトリガーを一覧表示します。
  • PATCH /v1/workflow-triggers/<id> は、{ "isActive": false } でトリガーを一時停止し、true で再開します。ノードに属するトリガーでは、次に保存したときにノード自身のスイッチが再び適用されるので、後々まで残したい変更にはノードのスイッチを使ってください。送信した config は、保存済みの内容にマージされます。変更する項目だけを送信してください。トリガーとノードの紐付けと、実行回数は保持されます。
  • POST /v1/workflows/<id>/sync-triggers は、ワークフローの保存済みバージョンから、トリガーノードを登録し直します。エディターは、保存するたびにこれを呼び出し、編集権限を持つ人なら誰でも呼び出せます。レスポンスは { "data": { "synced": …, "created": …, "updated": …, "removed": … } } です。
  • POST /v1/workflow-triggers は、どのノードにも属さないトリガーを作成します。そのため、ワークフローを保存しても、変更されたり削除されたりすることはありません。トリガーは誰も見ていない状態で実行されるものなので、作成には、ワークフローの実行と同じ権限が必要です。

スケジュール

スケジュールトリガーは、ワークフローをタイムテーブルどおりに実行します。スケジュールはルールのリストで、いずれかのルールが現在の分と一致するたびに、ワークフローが実行されます。

スケジュールをオンにする

スケジュールトリガーノードは、データが "active": true(ノードのスイッチ)を示している間だけ実行されます。API、SDK、MCP で active なしに書き込まれたノードは、一時停止中の状態で登録されます。エディターのスイッチとスケジュールボタンは、同じフィールドを設定します。テンプレートのエクスポートにこのフィールドが含まれることはないため、インポートしたスケジュールは必ず一時停止の状態で始まります。

スケジュールを手動で作成する

{
  "workflowId": "8c2d7f1e-3a4b-4c5d-9e6f-7a8b9c0d1e2f",
  "type": "schedule",
  "config": {
    "rules": [
      { "kind": "days", "every": 1, "hour": 9, "minute": 0 },
      { "kind": "weeks", "every": 2, "weekdays": [1, 3], "hour": 18, "minute": 30 }
    ],
    "timezone": "Asia/Jerusalem"
  }
}

これを POST /v1/workflow-triggers に送信します。スケジュールトリガーノードが保存するのも、これと同じ形の config です。

config フィールド意味
rules1 つ以上のルールです。いずれかのルールが一致すると、ワークフローが実行されます。
timezoneルールを読み取る基準となる時計で、Asia/Jerusalem のようなゾーン名で指定します。省略すると UTC になります。
maxExecutionsこの回数だけ実行すると停止します。スケジュールは登録されたままなので、続けるには回数を増やすか、空にしてください。
kindフィールド実行されるタイミング
minutesevery(1〜59)毎時、0 分、N 分、2N 分…の時点
hoursevery(1〜23)、minute毎日 0 時、N 時、2N 時…の、指定した分
daysevery(1〜31)、hour、minute暦日で N 日ごとの、指定した時刻
weeksevery(1〜52)、weekdays(0 が日曜日、6 が土曜日)、hour、minute指定した曜日の、N 週ごと
monthsevery(1〜12)、dayOfMonth(1〜31)、hour、minuteN か月ごとの、指定した日。月の日数が足りない場合は、その月の最終日
croncron(5 フィールドの式)式に一致するたび
  • N 日、N 週、N か月ごとは、いずれも固定された起点から数えます。週は月曜日に始まるため、保存し直しても、スケジュールが実行される日がずれることはありません。
  • cron ルールでは、日と曜日の組み合わせも含め、すべてのフィールドが一致する必要があります。一部の cron ツールでは、日と曜日はどちらか一方が一致すれば実行されます。7 は、0 と同じく日曜日を意味します。
  • 範囲外の値には 400 が返されます。サーバーが認識できないタイムゾーンでも同様です。
  • 手動で作成するトリガーでは、古い形式も引き続き使えます。5m、1h、1d のような interval や、cron 文字列です。これらで保存されたスケジュールトリガーノードは、ルールに変換されます。

スケジュールの実行の仕組み

  • サーバーは、すべてのスケジュールを 1 分ごとに確認し、いずれかのルールがその分に一致すると、ワークフローを実行します。
  • 同じ分が 2 回実行されることはありません。再起動や時刻の変更をまたいでも同様です。時刻の切り替えで飛ばされた分は、その日はスキップされます。
  • ワークフローの前回の実行がまだ続いている場合、その分はスキップされます。
  • 実行できないノードは、実行不可の状態になります。たとえば、式のない cron ルールや、認識できないタイムゾーンです。何も推測されないので、ノードを修正して、もう一度保存してください。

結果を自分のサーバーに送信する

Webhook 出力ノードは、そのノードに渡された結果を、設定したパラメーターとともに、POST リクエストとして自分の URL に送信します。パラメーターのタイプは、トリガーと同じ text、imageUrl、videoUrl、audioUrl です。メディアの値は、Nodaro が保存したファイルの URL で、自分のサーバーからダウンロードできます。

自分のエンドポイントがエラーを返すと、ノードは失敗し、そのエラーが実行の履歴に表示されます。https の URL を使ってください。

リクエストにキーを付けて送信する

多くのエンドポイントは、ヘッダーにキーが含まれたリクエストしか受け付けません。ヘッダー名とキーを、Web アプリの連携 › HTTP 認証情報で認証情報として一度だけ保存し、ノードで選びます。キーが、ワークフロー、エクスポート、テンプレートに含まれることはありません。

キーを保存するときは、それを使える範囲を選びます。

選択肢機能する場面
すべてのアドレス(ロックなしの認証情報)自分で開始した実行です。エディターからの実行と、エディターで設定したスケジュールです。
1 つのアドレスのみ(ロックされた認証情報)すべての実行で機能しますが、送信先はそのアドレス、または許可されていればその配下のパスに限られます。

API トークンや OAuth トークンで開始した実行、Webhook トリガーによる実行、API で作成したスケジュールによる実行、公開したアプリからの実行は、あなたとして動作しますが、あなた自身が開始したものではありません。そうした実行のためには、認証情報をロックしてください。ロックしていない認証情報は、送信する代わりに、わかりやすいメッセージを出してノードを失敗させます。ロックした認証情報が送信されるのは、ノードの URL がそのアドレスと一致するときだけで、別のアドレスへのリダイレクトには従わず、キーが暗号化されていない http で送信されることもありません。

認証情報を付けている場合、ノードは自分のエンドポイントからの応答の本文を保持も表示もせず、扱うのはステータスコードだけです。認証情報は Web アプリでのみ管理します。認証情報のルートは、トークンに対して 403 in_app_only を返します。アプリの公開や、ほかの人が実行できるワークフローの共有は、サブワークフロー内のものも含め、送信に使うすべての認証情報が、ノードの送信先のアドレスにロックされるまで、409 credential_unbound を返します。

API での実行はコールバックなし

API から開始した実行は、終わっても URL を呼び出しません。結果を知る方法は、2 つあります。

  • ポーリングする。GET /v1/workflow-executions/:id で実行を追跡するか、GET /v1/jobs/:id/status で 1 つのノードのジョブを追跡します。実行とジョブを参照してください。
  • ワークフローに知らせてもらう。結果を自分のサーバーに送信する Webhook 出力ノードで、ワークフローを終えます。

よくある質問

最終更新

目次