n8nとDifyの違い:どちらを使うか、組み合わせて使う方法

公開 書いた人 大林 諒

n8nとDifyはどちらもノードを線でつなぐ画面ですが、得意な仕事が違います。この記事では、問い合わせフォームの内容をGoogleスプレッドシート「問い合わせ一覧」に残してSlackの #問い合わせ に知らせる「問い合わせ受付」を例に、2つの違いを公式の数字で比べます。後半では、n8nからDifyのAPIを呼ぶ形と、DifyからWebhookでn8nを呼ぶ形を手順で通します。読み終わると、自社がどちらか1つで済むのか、両方を組み合わせるべきかを決められます。料金・ライセンス・AI機能は2026年10月時点の公式情報で、n8nは2.44.7、Difyは1.18.0(2026年10月23日公開)を前提にしています。

n8nそのものの説明と、Zapier・Makeを含めた選び方は「n8nとは?できることと、Zapier・Make・Difyとの違い」に書いています。ここではDifyとの差に絞ります。

この記事の内容
  1. 同じ「問い合わせ受付」で見る、2つの得意分野
  2. 先に決めること
  3. 比較表
  4. どちらか1つで済む場合
  5. 組み合わせ方1:n8nからDifyのAPIを呼ぶ
  6. 組み合わせ方2:DifyからWebhookでn8nを呼ぶ
  7. 応用
  8. できないことと、その代わり
  9. よく詰まるところ
  10. 次にやること

同じ「問い合わせ受付」で見る、2つの得意分野

n8nの公式サイトは、n8nを「500以上の連携が組み込まれたワークフロー自動化の基盤」として紹介しています。フォームの送信やメールの受信、決まった時刻をきっかけに動き出し、スプレッドシート・Slack・kintone・Salesforceのような業務のサービスに書き込みます。AIは流れの途中に置く部品の1つです。

Difyの公式ドキュメントは、Difyを「AIアプリケーションを作るためのオープンソースのプラットフォーム」と書いています。社内文書を取り込んで答えるチャット、決まった形式の文章を作るアプリ、エージェントを作り、公開ボタンを押すとWebアプリとAPIが同時にできます。

同じ問い合わせ受付を、それぞれで作るとどうなるかを並べます。

やりたいことn8nで作るとDifyで作ると
フォームの送信を受ける「Webhook」ノード。公開すれば本番のURLができる「Webhook Trigger」(Workflowアプリだけ)
スプレッドシートに1行足す「Google Sheets」ノードの「Append Row」Marketplaceのプラグインか「HTTP Request」ノードで組む
Slackに知らせる「Slack」ノードの「Send」同上
問い合わせの種類をAIで分ける「Text Classifier」などのAIノードを1つ挟む「Question Classifier」(質問分類器)ノード
料金表やFAQを読んで回答の下書きを作るベクトルストア・埋め込み・読み込みのノードを自分で組む「Knowledge」(ナレッジ)に資料を上げて「Knowledge Retrieval」(知識検索)ノードでつなぐ
社員が画面で質問できるチャット「Chat Trigger」でn8nのチャット画面を出す公開するとチャットのWebアプリが自動でできる

上の3行はn8n、下の3行はDifyのほうが短く済みます。

Difyの画面は日本語に切り替えられます。このあとDifyのボタン名は、公式ドキュメントの英語表示と、日本語表示を並べて書きます。n8nは英語表示のままです。

先に決めること

決めずに両方を入れると、同じ処理を2か所で作ってどちらが本番か分からなくなります。

画面を使う人がいるか

社員やお客様がチャット画面で質問するなら、画面ごと作ってくれるDifyが早いです。誰も画面を見ず、裏で転記や通知が流れるだけならn8nだけで足ります。問い合わせ受付の本体は後者です。

回答の根拠になる資料が何本あって、誰が差し替えるか

Difyはナレッジの画面で資料を上げ、どこで区切られたかを見て、検索の当たり方を試せます。n8nでは資料を入れる仕組みをワークフローとして組みます。資料を差し替えるのが営業やサポートの担当者なら、Difyに置くほうが手離れします。

誰が何台のサーバーを見るか

両方をセルフホストにすると、更新・バックアップ・障害対応が2つになります。Difyの公式の手順では、起動するコンテナが主要サービス7つと周辺コンポーネント8つあり、最低でもCPU 2コア・メモリ4GiBが要ります。月額1,000〜2,000円台のVPSでn8nと同居させるのは現実的ではありません。片方をクラウドにするのが基本です。

顧客に提供するものか、社内で使うものか

どちらも自社の業務に使う分には問題ありません。気をつけるのは、作ったものを顧客企業に提供する場合です。Difyのライセンスは、Difyの書面の許可なしにDifyのソースコードでマルチテナント(1ワークスペースを1テナントと数える)の環境を運営することを禁じ、Difyの画面を使うならロゴと著作権表示を消したり変えたりしてはいけないと定めています。n8nの線引きは「n8nの料金:Cloudとセルフホストの費用、商用利用の線引き」に書いています。

比較表

公式ページで確かめた事実だけを並べます。料金はn8nがユーロ、Difyがドルで、どちらも公式の表示どおりです。

項目n8nDify
公式の位置づけワークフロー自動化の基盤AIアプリを作るオープンソースの基盤
クラウドの料金Starter 月20€(年払い)で月2,500実行、Pro 月50€(年払い)で月10,000実行Sandbox 無料、Professional 年590ドル、Team 年1,590ドル(ワークスペースごと・税別)
クラウドで数えるもの実行(ワークフロー1回で1)メッセージクレジット(Sandbox 200、Professional 月5,000、Team 月10,000)とトリガーで始まった実行(Sandbox 3,000、Professional 月20,000、Team 無制限)
セルフホストCommunity Editionは無料。Businessは月667€(年払い)Community Editionは無料(ワークスペース1つ)。Enterpriseは要問い合わせ
ライセンスの制限Sustainable Use License。社内業務と非商用の利用に限るApache 2.0を改変。商用利用は可、マルチテナント運営は書面の許可が要る、画面のロゴ・著作権表示は消せない
つなげるサービス組み込みの連携500以上。無ければHTTP RequestMarketplaceのプラグイン(総数の記載なし)、HTTP Request、OpenAPIの取り込み、MCP
LLM機能AI Agent、Text Classifier、Information Extractor、Basic LLM ChainなどLLM、Agent、Question Classifier、Parameter Extractorなど。クラウドはクレジットで主要なモデルを試せる
RAGベクトルストア・埋め込み・読み込みのノードを組むナレッジが組み込み。取り込み・区切り・検索テストを画面で行う
画面の作りやすさChat Triggerのチャット画面、n8n Form Triggerのフォーム公開でWebアプリができ、サイトに埋め込める。画面は日本語を含む25言語
外から呼ぶ口Webhook、Public API、MCPアプリごとのAPI、Webhook Trigger、MCPサーバー
運用の手間本体1つで動く。公式の導入手順はメモリ2GBのVPS(Hetzner CPX11)で組んでいる最低CPU 2コア・メモリ4GiB、コンテナ15個

n8nはノードが何個あっても1回の実行で1と数えます。Difyのクラウドは、自前のAPIキーを入れずにクレジットでモデルを使うと、モデルの呼び出し1回ごとにクレジットが減り、減り方はモデルの大きさで変わります。自社のAPIキーを登録すれば、モデルの費用は各社に直接払う形になります。

Sandboxには、API呼び出し月5,000回、アプリ5つ、ナレッジの文書50件・50MBまでの上限もあります。n8nから毎日呼ぶなら、Professional以上で見積もります。

どちらか1つで済む場合

組み合わせると、キーの管理も障害の切り分けも2倍になります。

状況選ぶもの理由
フォームを受けてシートとSlackに流し、AIは種類の振り分けだけn8nだけText Classifierを1つ挟めば済む。Difyを足す理由がない
毎朝9時に未対応の件数を知らせる、顧客管理に登録するn8nだけ業務のサービスへの読み書きが中心
社員が就業規則や経費の規程を質問するチャット。資料はPDFで十数本Difyだけ資料の取り込みからチャット画面まで画面の操作で終わる
問い合わせ受付に、料金表とFAQをもとにした回答の下書きを付けたい組み合わせ(n8nからDifyを呼ぶ)受付の骨格はn8n、資料の管理と下書きの質はDifyに任せる
サイトにチャットを置き、相談したい人は問い合わせ一覧に回したい組み合わせ(Difyからn8nを呼ぶ)会話はDify、受付後の転記と通知はn8nに一本化する

n8nだけでも社内資料を検索して答えるチャットは作れます。作り方は「n8nでRAGを作る:社内資料を検索して答えるチャット」にあります。それでもDifyを足すかどうかは、資料を差し替える人が誰かで決めます。担当者が自分で資料を入れ替え、検索の当たり方を確かめたいなら、Difyのナレッジの画面が向きます。資料がめったに変わらず、触るのがn8nを作った人だけなら、n8nだけで済ませます。

Difyにも「Schedule Trigger」やWebhook Trigger、HTTP Requestノードはあります。ただ、実際に本番で両方を動かしていると、シート・Slack・顧客管理への書き込みが並ぶ処理はn8nに寄せたほうが、失敗の見つけ方と直し方が1か所にまとまります。Difyは「文章を作って返す」までにとどめます。

組み合わせ方1:n8nからDifyのAPIを呼ぶ

問い合わせ受付で受けた本文を、Difyに作った「回答下書き」アプリに渡し、料金表とFAQをもとにした返信の下書きをSlackの通知に添えます。

置き場所中身
Difyのナレッジ「料金表・FAQ」料金表とよくある質問の文書
DifyのWorkflowアプリ「回答下書き」ユーザー入力 → 知識検索 → LLM → 出力
n8nの「問い合わせ受付」Webhook → Edit Fields → Respond to Webhook → Google Sheets → HTTP Request(Dify) → Slack

Dify側:アプリを作って公開する

ナレッジ「料金表・FAQ」は、先に「Knowledge」(ナレッジ)から作って資料を入れておきます。

  1. 「Studio」でアプリの作成を開き、「Create from Blank」(最初から作成)を選ぶ
  2. 種類に「Workflow」(ワークフロー)を選び、名前を「回答下書き」にして作る
  3. 開始ノードを「User Input」(ユーザー入力)にする
  4. ユーザー入力に、変数名 company の短いテキストと、変数名 message の段落テキストを足す
  5. 後ろに「Knowledge Retrieval」(知識検索)を足し、検索する文に message を、ナレッジに「料金表・FAQ」を選ぶ
  6. 後ろに「LLM」を足し、コンテキストに知識検索の結果をつなぐ
  7. LLMのプロンプトに下の文を書き、message とコンテキストを「/」から差し込む
  8. 後ろに「Output」(出力)を足し、変数名 draft にLLMの出力の文章を割り当てる
  9. 右上の「Publish」(公開する)を押す
  10. 「Access Point」(アクセスポイント)タブの「Backend Service API」(バックエンドサービス API)で、APIキーの画面を開く
  11. 「Create new Secret key」(新しいシークレットキーを作成)を押し、表示されたキーをパスワード管理ツールに保存する
役割:法人向けサービス会社の営業担当として、問い合わせへの返信の下書きを作る。
- 料金・契約条件・納期は、コンテキストに書かれていることだけを使う
- コンテキストに無いことは「担当者が確認します」と書き、推測で埋めない
- 300字以内、です・ます調で書く

3は必ずユーザー入力にします。開始ノードがトリガーのワークフローは、APIから呼ぶと403で断られます。キーはアプリごとで、閉じると二度と全体を表示できません。

n8nに入れる前に、手元のターミナルで呼べることを確かめます。クラウドのURLは https://api.dify.ai/v1 で、セルフホストなら自社のDifyのURLに置き換えます。

curl -X POST 'https://api.dify.ai/v1/workflows/run' \
  -H "Authorization: Bearer $DIFY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"inputs":{"company":"株式会社サンプル","message":"30名で使う場合の料金表を送ってください"},"response_mode":"blocking","user":"n8n-inquiry"}'

response_mode を blocking にすると、ワークフローが終わってから結果がまとめて返ります。user はDify側で呼び出し元を区別する値で、省くと400で断られます。n8nから呼ぶ分は n8n-inquiry のように1つに決めておけば足ります。返ってくる形は次のとおりで、下書きは data.outputs.draft に入ります。

{
  "task_id": "c3800678-a077-43df-a102-53f23ed20b88",
  "workflow_run_id": "fb47b2e6-5e43-4f90-be01-d5c5a088d156",
  "data": {
    "status": "succeeded",
    "outputs": { "draft": "お問い合わせありがとうございます。30名でのご利用の場合…" },
    "total_tokens": 150
  }
}

n8n側:HTTP Requestで呼んで、Slackに添える

Difyの返事は数秒から数十秒かかるので、Respond to WebhookをEdit Fieldsの直後に移し、フォームに先に返事を返します。考え方は「n8nで外部サービスとつなぐ:Webhook・HTTP Request・API」の「時間のかかる処理は先に返事をする」と同じです。

  1. 「Overview」の「Credentials」タブで「Create credential」を押し、「Bearer Auth」を選ぶ
  2. 「Bearer Token」にDifyのAPIキーを貼って保存する
  3. Google SheetsとSlackの間に「HTTP Request」を足す
  4. 「Method」を POST、「URL」を https://api.dify.ai/v1/workflows/run にする
  5. 「Authentication」を「Generic Credential Type」にし、「Bearer Auth」で1の認証情報を選ぶ
  6. 「Send Body」をオンにし、「Body Content Type」をJSON、「Specify Body」を「Using JSON」にして下を入れる
  7. 「Add Option」から「Timeout」を足し、90000 にする
  8. ノードの「Settings」で「On Error」を「Continue (using error output)」にする
  9. 正常の出口をSlackにつなぎ、エラーの出口には下書き無しで知らせるSlackをつなぐ
{
  "inputs": {
    "company": {{ JSON.stringify($('Edit Fields').item.json['会社名']) }},
    "message": {{ JSON.stringify($('Edit Fields').item.json['本文']) }}
  },
  "response_mode": "blocking",
  "user": "n8n-inquiry"
}
n8nのHTTP RequestノードでURL・Bearer Auth・Using JSONの本文を入れたところ
n8nのHTTP RequestノードでURL・Bearer Auth・Using JSONの本文を入れたところ

7のTimeoutは要注意です。この欄を足さなければn8nは5分まで待ちますが、足した瞬間の初期値は10,000ミリ秒(10秒)で、ナレッジを検索してから文章を作るDifyの処理はよくこれを超えます。Difyのクラウドは、blockingの返事が100秒以内に来ないと途中の中継で切れる仕様なので、n8n側は90秒にしておきます。

Slackの本文は次のように組みます。HTTP Requestの直後なので、$json はDifyの返事を指します。

新しい問い合わせが来ました
会社名:{{ $('Edit Fields').item.json['会社名'] }}
内容:{{ $('Edit Fields').item.json['本文'] }}

回答の下書き(担当者が確認してから送る):
{{ $json.data.outputs.draft }}

data.status が succeeded 以外のとき、下書きは空です。「If」で {{ $json.data.status }} が succeeded に等しいかを見て、違えば下書き無しの通知に回すと、空の欄が付いた通知が出ません。

n8nは問い合わせ1件で1実行のままで、Dify側はLLMを呼んだ回数だけクレジットか各社のAPI料金がかかります。

組み合わせ方2:DifyからWebhookでn8nを呼ぶ

自社サイトにDifyのチャットを置き、製品の質問にはナレッジで答え、「担当者と話したい」という人の連絡先は問い合わせ受付に流します。フォームから来た問い合わせと同じシートとSlackに入るので、受付の窓口が2つに割れません。

n8n側:受け口はそのまま使う

「n8nで外部サービスとつなぐ:Webhook・HTTP Request・API」で作った、Pathが inquiry でHeader Authの鍵 X-Form-Token を付けたWebhookをそのまま使います。足すのは、どこから来たかを残す列だけです。

  1. Edit Fieldsに項目「経路」を足し、値を {{ $json.body.source ?? 'フォーム' }} にする
  2. スプレッドシート「問い合わせ一覧」に「経路」の列を足す
  3. ワークフローが公開(Publish)されていることを確かめる
  4. 下のcurlで、Difyが送るのと同じ形の本文を送り、シートに「chat」と入ることを確かめる
curl -X POST 'https://n8n.example.co.jp/webhook/inquiry' \
  -H 'Content-Type: application/json' \
  -H 'X-Form-Token: (n8nのHeader Authに入れた文字列)' \
  -d '{"company":"株式会社サンプル","name":"山田 太郎","email":"taro@example.com","message":"導入の相談をしたい","source":"chat"}'

Dify側:Chatflowから送る

  1. 「Create from Blank」(最初から作成)で「Chatflow」(チャットフロー)を選び、名前を「サイト案内チャット」にする
  2. 右上の「Environment Variables」(環境変数)で、Secret型の変数 N8N_FORM_TOKEN を作り、n8nのHeader Authと同じ文字列を入れる
  3. ユーザー入力の後ろに「Question Classifier」(質問分類器)を足し、分類を「製品の質問」と「担当者に相談したい」の2つにする
  4. 「製品の質問」の出口に知識検索・LLM・「Answer」(回答)をつなぎ、ナレッジで答える
  5. 「担当者に相談したい」の出口に「Parameter Extractor」(パラメータ抽出)を足し、company・name・email・message を必須で抜き出す設定にし、メモリをオンにする
  6. 後ろに「IF/ELSE」を足し、email が空でないかを見る。空ならAnswerで連絡先を聞き返す
  7. 空でない側に「HTTP Request」(HTTP リクエスト)を足し、メソッドを POST、URLを https://n8n.example.co.jp/webhook/inquiry にする
  8. 「Headers」(ヘッダー)に、キー X-Form-Token、値に「/」から環境変数 N8N_FORM_TOKEN を差し込む
  9. 「Body」(ボディ)をJSONにし、company・name・email・message にパラメータ抽出の結果を「/」で差し込み、source には chat と書く
  10. 後ろに「IF/ELSE」を足し、HTTP Requestのステータスコードが200かを見る
  11. 200ならAnswerで「担当者から1営業日以内にご連絡します」と返し、それ以外はAnswerで問い合わせフォームを案内する
  12. 「Publish」(公開する)を押し、アクセスポイントの「Embed on website」(ウェブサイトに埋め込む)のコードをサイトに貼る

鍵を環境変数のSecret型にするのは、実行ログとHTTP Requestのリクエストログで伏せ字になるからです。認証の欄の「API-Key」(API キー)で「Custom」(カスタム)を選び、ヘッダー名と値を入れる方法でも同じヘッダーが送れます。

連絡先を集めるので、Webアプリの設定の「Privacy Policy」に自社のプライバシーポリシーのURLを入れます。

n8n側のRespond to WebhookはEdit Fieldsの直後に置き、チャットの返事を待たせないようにします。

応用

Difyのアプリを、n8nのAIエージェントの道具にする

Difyのアプリは、アクセスポイントの「MCP Server」の枠でオンにするとMCPサーバーになります。発行されたURLには認証の情報が含まれるので、APIキーと同じ扱いにします。n8nのAI Agentに「MCP Client Tool」でこのURLをつなぐと、エージェントが必要なときだけDifyの「回答下書き」を呼びます。逆向きに、n8nの「MCP Server Trigger」で作った道具を、Difyの「Integrations」(インテグレーション)の「Tools」からMCPとして登録することもできます。Difyが受け付けるのはHTTPで通信するMCPサーバーだけです。設定の詳細は「n8nのMCP:ワークフローを外から呼び出す、外のMCPを使う」にあります。

ナレッジの資料をn8nから入れ替える

Difyのナレッジにも専用のAPIがあり、キーは「Knowledge」画面の右上の「Service API」から作ります。キーは触ってよいナレッジだけに絞れます。共有ドライブの料金表が更新されたら、n8nの「Schedule Trigger」で毎晩見に行き、変わったファイルだけDifyのナレッジに上げ直す、という分担ができます。

できないことと、その代わり

できないこと代わりの手
トリガーで始まるDifyのワークフローをAPIで呼ぶ開始ノードをユーザー入力にしたアプリを別に作る
DifyのWebhook Triggerで、ワークフローの結果を返事として受け取る返事は起動した時点で返る固定の内容だけ。結果が要るならアプリのAPIを呼ぶ
DifyのChatflowをトリガーで動かす、道具として使うトリガーと道具化はWorkflowだけ。会話が要らない処理はWorkflowで作る
DifyのAgentアプリをblockingで呼ぶAgentはstreamingだけで、blockingは400。n8nから呼ぶならWorkflowアプリにする
Difyのクラウドで100秒を超える処理をblockingで待つ処理を分ける。資料の検索件数を絞り、短いモデルにする
DifyのCodeノードから外のAPIを呼ぶCodeの中は通信できない。HTTP Requestノードに分ける
n8nに専用の「Dify」ノードを置く2.44.7の組み込みノードに無い。HTTP RequestかMCP Client Toolで呼ぶ
Difyで顧客企業ごとのワークスペースを運営して売るライセンス上、Difyの書面の許可(商用ライセンス)が要る。Difyに問い合わせる

よく詰まるところ

症状原因直し方
Difyから400「Arg user must be provided.」本文に user が無い"user": "n8n-inquiry" のように必ず入れる
Difyから400 not_workflow_appアプリの種類とURLが合っていないWorkflowは /workflows/run、Chatflowは /chat-messages(本文に query が要る)に送る
Difyから403 trigger_workflow_service_mode_unavailable開始ノードがトリガーのワークフローを呼んでいる開始ノードをユーザー入力にしたアプリを呼ぶ
n8nのHTTP Requestが10秒で落ちるTimeoutを足したまま初期値の10,000ミリ秒になっている90000 に直す
Slackの下書きの欄が空$json.outputs.draft と書いている、またはDifyに出力ノードが無い$json.data.outputs.draft にする。Difyの出力ノードに draft を置く
Difyに渡したはずの本文が入っていないinputs のキーとユーザー入力の変数名が違う変数名を company・message にそろえる
Difyで直したプロンプトがAPIの結果に出ない編集したが公開していない「Publish」(公開する)を押す。APIは公開済みの版で動く
Difyから400 provider_not_initialize や provider_quota_exceededモデルのキーが無い、またはクレジットを使い切った「Model Provider」で自社のAPIキーを登録する
Difyから429アプリへの同時の呼び出しが多い、またはクラウドの上限に達したn8nのHTTP Requestの「Batching」で間隔を空け、「Retry On Fail」を足す
Difyからn8nへ送ると404n8nのワークフローが公開されていない、またはURLが webhook-test のまま公開して、URLを webhook に直す
Difyからn8nへ送ると403X-Form-Token が付いていないか値が違う環境変数の値と、ヘッダーのキー名の綴りを確かめる
セルフホストのDifyから、同じ社内のn8nに届かないDifyのHTTP Requestは、社内向けのIPアドレスへの通信を止める中継(SSRFプロキシ)を通る公開のURL https://n8n.example.co.jp で呼ぶ。社内のアドレスで呼ぶなら docker/.env の SSRF_PROXY_ALLOW_PRIVATE_IPS にn8nのアドレスだけを足す
n8nのHTTP Requestノードの出力に data.status と data.outputs が見えているところ
n8nのHTTP Requestノードの出力に data.status と data.outputs が見えているところ

止まったら、まずn8nの「Executions」でHTTP Requestの出力を見て、Difyまで届いたかを確かめ、届いていればDifyのアプリのログで同じ時刻の実行を開きます。

次にやること

Difyを足さずにAIの振り分けを入れるならAIエージェントの記事、社内資料のチャットをn8nだけで作れるか見極めるならRAGの記事に進みます。

あわせて読む