# Nodaro と Make の連携

> Make のシナリオから HTTP アプリで Nodaro のワークフローを開始し、完成した画像や動画を Make のカスタム Webhook で受け取ります。API キーは不要です。

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

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

## 連携の仕組み
1. HTTP アプリの **Make a request**（リクエストを送信）モジュールが、プロンプトなどを含む 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 出力**が結果を Make の **Custom webhook**（カスタム Webhook）に POST し、その結果で 2 つ目のシナリオが始まります。

Workflow: Nodaro 側の構成：Make のシナリオが Webhook トリガーを開始し、Webhook 出力が画像のアドレスを Make のカスタム Webhook に送ります。

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

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

1. シナリオを作成し、トリガーとして **Webhooks › Custom webhook**（Webhook › カスタム Webhook）モジュールを追加します。
2. **Webhook** の横にある **Add**（追加）をクリックし、「Nodaro result」（Nodaro の結果）などの名前を付けて、**Save**（保存）をクリックします。
3. Make が生成した URL をコピーします。これで Make は、最初のリクエストを待ち受けます。

Make の Webhook は、それぞれ 1 つのシナリオに属します。準備ができたらシナリオをオンにして、届いた結果をすべて処理するようにします。

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

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

## ステップ 3：Make から実行を開始する
1. 実行を開始するシナリオに、**HTTP** アプリの **Make a request** モジュールを追加します。
2. Nodaro のアドレスを **URL** に貼り付け、**Method**（メソッド）を **POST** にします。
3. **Body content type**（本文のコンテンツタイプ）を `application/JSON` に、**Body input method**（本文の入力方法）を **Data structure**（データ構造）にします。`prompt` という名前のフィールドを追加し、前のモジュールから値をマッピングします。
4. 次のモジュールで `executionId` をマッピングできるように、**Parse response**（レスポンスを解析）を **Yes**（はい）にします。

**Data structure** の方法では、値がエスケープされます。値をマッピングした生の JSON 文字列は、値に引用符が含まれると壊れることがあります。

## 返ってくるもの
Nodaro は、何かを生成する前に、すぐにリクエストに応答します。応答は `202` で、実行の ID が含まれます。

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

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

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

カスタム Webhook が待ち受けているあいだに Nodaro のワークフローを 1 回実行すると、Make が構造を学習し、`image_url` がマッピングできるフィールドになります。Webhook の詳細設定で、構造を手動で定義することもできます。

## Webhook の代わりにポーリングする
同じシナリオの中で、[個人用 API トークン](https://nodaro.ai/docs/developers/api/authentication)を使って、ポーリングで結果を取得することもできます。ポーリングは、個人のプロジェクトにあるワークフローで使えます。

1. リクエストのモジュールの後に、**Tools › Sleep**（ツール › スリープ）モジュールを追加し、たとえば 30 秒に設定します。
2. **Method** が **GET** で、URL が `https://app.nodaro.ai/v1/api/status/<executionId>` の **Make a request** モジュールをもう 1 つ追加し、最初のリクエストから `executionId` をマッピングします。
3. トークンには、認証の種類 **API key**（API キー）を選びます。**Key**（キー）に `Bearer <your API token>` を入れ、ヘッダーに配置して、パラメーター名を `Authorization` にします。
4. ステータスが `completed` になったら、同じ方法で `https://app.nodaro.ai/v1/api/result/<executionId>` を呼び出します。応答には、実行の出力がそのアドレスとともに一覧で含まれます。

動画は数分かかることがあり、1 つの Sleep モジュールで待てる時間には上限があります。長い実行では、上の Webhook の方法のほうが簡単です。ステータスと結果の応答については、[新しい入力値でワークフローを実行する](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 秒間待ち、再試行しません。送信に失敗すると、ノードが失敗します。 | 受け取る側のシナリオをオンのままにします。 |
| 使われていない Make の Webhook は停止する | どのシナリオにも 5 日間使われていない Webhook は、Make が無効にします。 | カスタム Webhook を、有効なシナリオに入れたままにします。 |

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

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

## よくある質問

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

いいえ。HTTP アプリの Make a request（リクエストを送信）モジュールが Nodaro のワークフローの Webhook のアドレスを通じて実行を開始し、Webhook 出力ノードが結果を Make のカスタム Webhook に送ります。API キーが必要なのは、代わりにポーリングで結果を取得する場合だけです。

### Make で、Nodaro の結果のフィールドをマッピングできないのはなぜですか？

Make のカスタム Webhook は、最初に受け取ったリクエストからデータ構造を学習します。Webhook が待ち受けているあいだに Nodaro のワークフローを 1 回実行するか、データ構造を手動で定義すると、フィールドが使えるようになります。

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

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

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

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