# Nodaro と n8n の連携

> n8n の HTTP Request ノード 1 つで Nodaro のワークフローを開始し、完成した画像や動画を n8n の Webhook ノードで受け取ります。API キーは不要です。

Source: https://nodaro.ai/ja/docs/guides/n8n-integration

**n8n** は、1 回の HTTP リクエストで Nodaro のどのワークフローでも開始でき、完成した画像、動画、オーディオを n8n の Webhook ノードで受け取れます。生成は Nodaro が行います。いつ実行し、結果を次にどこへ送るかは、n8n が決めます。どちらの方向にも Nodaro の API キーは要りません。ワークフロー自身の Webhook のアドレスが、実行を開始するからです。

## 連携の仕組み
1. n8n の **HTTP Request**（HTTP リクエスト）ノードが、プロンプトなどを含む JSON 本文を、Nodaro のワークフローの Webhook のアドレスに POST します。
2. Nodaro のワークフローは [Webhook トリガー](https://nodaro.ai/docs/nodes/automate/webhook-trigger)で始まり、ノードを実行して、[Webhook 出力](https://nodaro.ai/docs/nodes/publish/webhook-output)で終わります。
3. **Webhook 出力**が結果を n8n の **Webhook** ノードに POST し、n8n のワークフローの残りの部分がそこから続きます。

Workflow: Nodaro 側の構成：n8n が Webhook トリガーを開始し、Webhook 出力が画像のアドレスを n8n に送り返します。

- Webhook トリガー → 画像生成 (prompt)
- 画像生成 → Webhook 出力 (image_url)

## ステップ 1：n8n で結果を受け取る
Nodaro のワークフローには受け取る側のアドレスが必要なので、受け取る側を先に作ります。

1. n8n で **Webhook** ノードを追加します。
2. **HTTP Method**（HTTP メソッド）を **POST** にし、ノードに `nodaro-result` などの **Path**（パス）を設定します。
3. n8n がすぐに Nodaro に応答するように、**Respond**（応答）は **Immediately**（すぐに）のままにします。
4. **Production URL**（本番用 URL）をコピーします。

n8n は、n8n のワークフローを公開したときに Production URL を登録します。**Test URL**（テスト用 URL）は、**Listen for test event**（テストイベントを待ち受ける）を選択してから 120 秒間しか待ち受けないので、構築中にだけ使ってください。

## ステップ 2：Nodaro のワークフローを構築する
1. **Webhook トリガー**ノードを追加します。**出力パラメーター**で、`prompt` という名前で、タイプが**テキスト**のパラメーターを追加します。
2. `prompt` 出力を、[画像生成](https://nodaro.ai/docs/nodes/image/generate-image)ノード、または結果を作るほかのノードのプロンプト入力に接続します。
3. **Webhook 出力**ノードを追加します。n8n の Production URL を **Webhook URL** に貼り付けます。**入力パラメーター**で、タイプが**画像 URL** の `image_url` を追加し、画像をそこに接続します。
4. ワークフローを保存します。Webhook トリガーを選択し、**Webhook URL** の下にあるアドレスをコピーします。

アドレスは `https://app.nodaro.ai/v1/webhooks/<token>` という形式です。トークンはパスワードと同じように働きます。アドレスを知っている人は誰でも、ワークフローを開始できます。

## ステップ 3：n8n から実行を開始する
1. n8n で、実行を開始したい位置に **HTTP Request** ノードを追加します。
2. **Method**（メソッド）を **POST** にし、Nodaro のアドレスを **URL** に貼り付けます。
3. **Send Body**（本文を送信）をオンにし、**Body Content Type**（本文のコンテンツタイプ）を **JSON** にして、**Specify Body**（本文の指定方法）で **Using JSON**（JSON を使用）を選びます。
4. 本文を入力します。キーは、出力パラメーターの名前です。

```json
{ "prompt": "{{ $json.prompt }}" }
```

もっと速い方法もあります。HTTP Request ノードで **Import cURL**（cURL をインポート）を選択し、トークンを入れた次のコマンドを貼り付けます。

```bash
curl -X POST "https://app.nodaro.ai/v1/webhooks/<token>" \
  -H "Content-Type: application/json" \
  -d '{"prompt": "A red kite over a green hill, morning light"}'
```

## 返ってくるもの
Nodaro は、何かを生成する前に、すぐに HTTP Request ノードに応答します。応答は `202` で、実行の ID が含まれます。

```json
{ "executionId": "3f9e2b1a-7c6d-4e5f-8a9b-0c1d2e3f4a5b", "status": "pending" }
```

実行が終わると、Webhook 出力が結果を n8n の Webhook ノードに POST します。本文には入力パラメーターごとに 1 つのキーがあり、メディアの値は Nodaro 上のファイルのアドレスです。

```json
{ "image_url": "https://cdn.nodaro.ai/images/2538b658-d2e1-42ee-890a-72ce06089feb.png" }
```

n8n では、受け取った本文は `body` の下に入るので、次のノードはアドレスを `{{ $json.body.image_url }}` として読み取ります。

## Webhook の代わりにポーリングする
n8n がインターネットからのリクエストを受け取れない場合は、[個人用 API トークン](https://nodaro.ai/docs/developers/api/authentication)を使って、ポーリングで結果を取得します。ポーリングは、個人のプロジェクトにあるワークフローで使えます。

1. ステップ 3 の HTTP Request ノードはそのまま使います。このノードは `executionId` を返します。
2. **Wait**（待機）ノードを追加し、**Resume**（再開）を **After Time Interval**（一定時間後）にして、たとえば 10 秒に設定します。
3. **Method** が **GET** で、URL が `https://app.nodaro.ai/v1/api/status/{{ $json.executionId }}` の **HTTP Request** ノードを追加します。ヘッダー `Authorization` を、値 `Bearer <your API token>` で送ります。この値は、n8n の認証情報として保存します。
4. **If** ノードを追加します。`status` が `pending` または `running` のあいだは、その分岐を Wait ノードに戻るように接続します。
5. ステータスが `completed` になったら、同じ方法で `https://app.nodaro.ai/v1/api/result/<executionId>` を呼び出します。応答には、実行の出力がそのアドレスとともに一覧で含まれます。

ステータスと結果の応答については、[新しい入力値でワークフローを実行する](https://nodaro.ai/docs/developers/api/workflows#run-a-workflow-with-new-input-values)で説明しています。

## 事前に考慮する制限
| 制限 | 起こること | 対処 |
| --- | --- | --- |
| 1 つのワークフローで一度に 1 つの実行 | 実行中に届いたリクエストには `409` が返され、進行中の実行の `executionId` も含まれます。 | 前の結果が届いてから次のリクエストを送るか、ワークフローをコピーします。 |
| 1 つのアドレスにつき 1 分間に 10 リクエスト | それを超えるリクエストには `429` が返されます。 | リクエストの間隔を空けます。 |
| 送信の試行は 1 回だけ | Webhook 出力は応答を 30 秒間待ち、再試行しません。送信に失敗すると、ノードが失敗します。 | **Respond** を **Immediately** のままにし、n8n のワークフローを公開します。 |
| 公開された https:// のアドレスのみ | Webhook 出力は、localhost やプライベートなアドレスには送信しません。 | n8n Cloud を使うか、セルフホスティングの n8n に公開のアドレスを用意します。 |

## 料金
Webhook トリガーと Webhook 出力は無料です。そのあいだにあるノードのクレジットを、エディターと同じ料金で支払います。上の例では、1 回の実行で Nano Banana 2 の画像 1 枚分の料金、22 クレジットがかかります。失敗したノードのために確保されたクレジットは、自動で返還されます。

同じ方法は、[Make](https://nodaro.ai/docs/guides/make-integration) と [Zapier](https://nodaro.ai/docs/guides/zapier-integration) でも使えます。スケジュールや、ワークフローを開始するそのほかの方法については、[自動化](https://nodaro.ai/docs/guides/automations)で説明しています。

## よくある質問

### n8n から Nodaro を使うのに、Nodaro の API キーは必要ですか？

いいえ。n8n の HTTP Request ノードが Nodaro のワークフローの Webhook のアドレスを通じて実行を開始し、Webhook 出力ノードが結果を n8n に送り返します。API キーが必要なのは、代わりにポーリングで結果を取得する場合だけです。

### n8n は、完成した画像や動画をどのように受け取りますか？

Nodaro のワークフローの最後に Webhook 出力ノードを置き、n8n の Webhook ノードの Production URL（本番用 URL）を貼り付けます。実行が終わると、Nodaro が結果のアドレスを含む JSON 本文を n8n に送ります。

### Nodaro が 409 を返すのはなぜですか？

Nodaro のワークフローで、すでに実行が進行中です。ワークフローは、一度に 1 つのリクエストしか実行しません。前の結果が届いてから次のリクエストを送るか、並行して実行するためにワークフローのコピーを作ってください。

### セルフホスティングの n8n でも結果を受け取れますか？

はい、Nodaro からその n8n に届く場合は受け取れます。Webhook 出力ノードは公開された https:// のアドレスに送信するため、localhost だけで動いている n8n には、トンネルなどで先に公開のアドレスを用意する必要があります。

### 料金はいくらかかりますか？

Webhook トリガーと Webhook 出力は無料です。そのあいだにあるノードのクレジットを、エディターと同じ料金で支払います。
