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との差に絞ります。
この記事の内容
同じ「問い合わせ受付」で見る、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がドルで、どちらも公式の表示どおりです。
| 項目 | n8n | Dify |
|---|---|---|
| 公式の位置づけ | ワークフロー自動化の基盤 | 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 Request | Marketplaceのプラグイン(総数の記載なし)、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」(ナレッジ)から作って資料を入れておきます。
- 「Studio」でアプリの作成を開き、「Create from Blank」(最初から作成)を選ぶ
- 種類に「Workflow」(ワークフロー)を選び、名前を「回答下書き」にして作る
- 開始ノードを「User Input」(ユーザー入力)にする
- ユーザー入力に、変数名
companyの短いテキストと、変数名messageの段落テキストを足す - 後ろに「Knowledge Retrieval」(知識検索)を足し、検索する文に
messageを、ナレッジに「料金表・FAQ」を選ぶ - 後ろに「LLM」を足し、コンテキストに知識検索の結果をつなぐ
- LLMのプロンプトに下の文を書き、
messageとコンテキストを「/」から差し込む - 後ろに「Output」(出力)を足し、変数名
draftにLLMの出力の文章を割り当てる - 右上の「Publish」(公開する)を押す
- 「Access Point」(アクセスポイント)タブの「Backend Service API」(バックエンドサービス API)で、APIキーの画面を開く
- 「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」の「時間のかかる処理は先に返事をする」と同じです。
- 「Overview」の「Credentials」タブで「Create credential」を押し、「Bearer Auth」を選ぶ
- 「Bearer Token」にDifyのAPIキーを貼って保存する
- Google SheetsとSlackの間に「HTTP Request」を足す
- 「Method」を
POST、「URL」をhttps://api.dify.ai/v1/workflows/runにする - 「Authentication」を「Generic Credential Type」にし、「Bearer Auth」で1の認証情報を選ぶ
- 「Send Body」をオンにし、「Body Content Type」をJSON、「Specify Body」を「Using JSON」にして下を入れる
- 「Add Option」から「Timeout」を足し、
90000にする - ノードの「Settings」で「On Error」を「Continue (using error output)」にする
- 正常の出口をSlackにつなぎ、エラーの出口には下書き無しで知らせるSlackをつなぐ
{
"inputs": {
"company": {{ JSON.stringify($('Edit Fields').item.json['会社名']) }},
"message": {{ JSON.stringify($('Edit Fields').item.json['本文']) }}
},
"response_mode": "blocking",
"user": "n8n-inquiry"
}

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をそのまま使います。足すのは、どこから来たかを残す列だけです。
- Edit Fieldsに項目「経路」を足し、値を
{{ $json.body.source ?? 'フォーム' }}にする - スプレッドシート「問い合わせ一覧」に「経路」の列を足す
- ワークフローが公開(Publish)されていることを確かめる
- 下の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から送る
- 「Create from Blank」(最初から作成)で「Chatflow」(チャットフロー)を選び、名前を「サイト案内チャット」にする
- 右上の「Environment Variables」(環境変数)で、Secret型の変数
N8N_FORM_TOKENを作り、n8nのHeader Authと同じ文字列を入れる - ユーザー入力の後ろに「Question Classifier」(質問分類器)を足し、分類を「製品の質問」と「担当者に相談したい」の2つにする
- 「製品の質問」の出口に知識検索・LLM・「Answer」(回答)をつなぎ、ナレッジで答える
- 「担当者に相談したい」の出口に「Parameter Extractor」(パラメータ抽出)を足し、
company・name・email・messageを必須で抜き出す設定にし、メモリをオンにする - 後ろに「IF/ELSE」を足し、
emailが空でないかを見る。空ならAnswerで連絡先を聞き返す - 空でない側に「HTTP Request」(HTTP リクエスト)を足し、メソッドを
POST、URLをhttps://n8n.example.co.jp/webhook/inquiryにする - 「Headers」(ヘッダー)に、キー
X-Form-Token、値に「/」から環境変数N8N_FORM_TOKENを差し込む - 「Body」(ボディ)をJSONにし、
company・name・email・messageにパラメータ抽出の結果を「/」で差し込み、sourceにはchatと書く - 後ろに「IF/ELSE」を足し、HTTP Requestのステータスコードが200かを見る
- 200ならAnswerで「担当者から1営業日以内にご連絡します」と返し、それ以外はAnswerで問い合わせフォームを案内する
- 「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へ送ると404 | n8nのワークフローが公開されていない、またはURLが webhook-test のまま | 公開して、URLを webhook に直す |
| Difyからn8nへ送ると403 | X-Form-Token が付いていないか値が違う | 環境変数の値と、ヘッダーのキー名の綴りを確かめる |
| セルフホストのDifyから、同じ社内のn8nに届かない | DifyのHTTP Requestは、社内向けのIPアドレスへの通信を止める中継(SSRFプロキシ)を通る | 公開のURL https://n8n.example.co.jp で呼ぶ。社内のアドレスで呼ぶなら docker/.env の SSRF_PROXY_ALLOW_PRIVATE_IPS にn8nのアドレスだけを足す |

止まったら、まずn8nの「Executions」でHTTP Requestの出力を見て、Difyまで届いたかを確かめ、届いていればDifyのアプリのログで同じ時刻の実行を開きます。
次にやること
- n8nとは?できることと、Zapier・Make・Difyとの違い
- n8nでAIエージェントを作る:ChatGPT・Claude・Geminiをつなぐ
- n8nでRAGを作る:社内資料を検索して答えるチャット
- n8nで外部サービスとつなぐ:Webhook・HTTP Request・API
Difyを足さずにAIの振り分けを入れるならAIエージェントの記事、社内資料のチャットをn8nだけで作れるか見極めるならRAGの記事に進みます。