はじめに
AIチャットボットの構築というと、PythonでLangChainを書いて、バックエンドを立てて、フロントエンドも作って…と大掛かりなイメージがあります。しかしn8nを使えば、コードをほぼ書かずに30分で動くチャットボットを構築できます。この記事では、Webhookで質問を受け取り、OpenAIで回答を生成し、レスポンスを返すシンプルなチャットボットをステップバイステップで作ります。
完成イメージ:何を作るのか
今回構築するのは、APIエンドポイントとして動作するチャットボットです。Webhookで質問を受け取り、OpenAIが回答を生成して返します。
用途としては、Webサイトに埋め込むFAQ Bot、Slackやline連携のカスタマーサポートBot、社内ツールのヘルプアシスタントなどに応用できます。
最終的なワークフローの構成はたった4ノードです。
[Webhook] → [システムプロンプト設定] → [OpenAI Chat] → [Webhookレスポンス]
ポイント:
- APIエンドポイントとして動作するチャットボット
- たった4ノードで構成
- Webサイト、Slack、LINEなど様々なフロントエンドと連携可能
ステップ1:Webhookでエンドポイントを作成
まず新しいワークフローを作成し、Webhookノードを追加します。これがチャットボットの入口になります。
設定は以下の通りです。
{
"httpMethod": "POST",
"path": "chatbot",
"responseMode": "responseNode"
}
このノードの動作:
https://your-n8n-instance.com/webhook/chatbotというURLが生成され、POSTリクエストでユーザーの質問を受け取れるようになります。responseModeをresponseNodeに設定することで、ワークフローの処理が完了してからレスポンスを返せます。
テスト時は「Test URL」を使い、本番では「Production URL」に切り替えます。リクエストのボディには以下のようなJSONを送ります。
{
"question": "n8nでWebhookはどう使いますか?"
}
ステップ2:システムプロンプトを設定
次にSetノードを追加して、OpenAIに渡すシステムプロンプトを準備します。システムプロンプトは、AIの振る舞いを定義する重要な部分です。
{
"systemPrompt": "あなたは親切なテクニカルサポートアシスタントです。以下のルールに従ってください:\n1. 質問に対して簡潔で正確に回答する\n2. わからない場合は正直に「わかりません」と答える\n3. 日本語で回答する\n4. 必要に応じてコード例を含める",
"userQuestion": "{{ $json.body.question }}"
}
このノードの動作:
Webhookから受け取ったユーザーの質問と、AIの振る舞いを定義するシステムプロンプトをセットにまとめます。このデータが次のOpenAIノードに渡されます。
ここでのコツは、システムプロンプトを具体的に書くことです。「親切に回答してください」だけでなく、回答のフォーマット、言語、制約条件を明確に指定すると、AIの回答品質が大きく向上します。
ステップ3:OpenAIで回答を生成
OpenAIノード(またはChat Model系ノード)を追加して、実際の回答を生成します。
設定のポイントは3つあります。
モデル選択は用途に応じて使い分けます。GPT-4oは高品質な回答が必要な場合、GPT-4o-miniはコストを抑えたい場合に適しています。本番運用では、まずGPT-4o-miniで試して、品質が足りなければGPT-4oに切り替えるのがおすすめです。
Temperature設定は回答の一貫性に影響します。FAQやサポートBotなら0.1〜0.3で一貫した回答を、クリエイティブな用途なら0.7〜0.9で多様な回答を返すように設定します。
Max Tokensは回答の長さを制限します。短い回答が求められる場合は300〜500、詳細な説明が必要な場合は1000〜2000に設定します。
{
"model": "gpt-4o-mini",
"temperature": 0.2,
"maxTokens": 500,
"messages": [
{
"role": "system",
"content": "{{ $json.systemPrompt }}"
},
{
"role": "user",
"content": "{{ $json.userQuestion }}"
}
]
}
ステップ4:レスポンスを返す
最後にRespond to Webhookノードを追加して、OpenAIの回答をユーザーに返します。
{
"respondWith": "json",
"responseBody": {
"answer": "{{ $json.message.content }}",
"model": "gpt-4o-mini",
"timestamp": "{{ $now.toISO() }}"
}
}
このノードの動作:
OpenAIが生成した回答をJSON形式でレスポンスとして返します。モデル名とタイムスタンプも含めることで、デバッグやログ記録に役立ちます。
これで完成です。Webhookの「Test URL」を使ってcurlやPostmanでテストしてみましょう。
curl -X POST https://your-n8n.com/webhook-test/chatbot \
-H "Content-Type: application/json" \
-d '{"question": "n8nとは何ですか?"}'
本番運用のためのヒント
30分で動くものは作れますが、本番で安定運用するにはいくつかの追加対応が必要です。
会話履歴の保持が最も重要です。現状のワークフローは単発の質問応答しかできません。会話の文脈を保持するには、過去のメッセージをデータベース(Google SheetsやPostgres)に保存し、毎回コンテキストとしてOpenAIに渡す仕組みが必要です。
エラーハンドリングも忘れずに。OpenAI APIのレート制限、タイムアウト、無効なリクエストなど、起こりうるエラーに対してError Triggerノードで対応を追加しましょう。
レート制限の実装も検討してください。公開APIとして運用する場合、同一IPからの過剰なリクエストをブロックする仕組みが必要です。n8nのCodeノードで簡易的なレート制限を実装できます。
ポイント:
- 会話履歴はデータベースに保存して毎回コンテキストとして渡す
- Error Triggerノードでエラーハンドリングを追加
- 公開APIにはレート制限を実装
まとめ
n8nとOpenAIを使えば、たった4ノード・30分でAPIチャットボットが構築できます。Webhook、Set、OpenAI、Respond to Webhookという基本ノードの組み合わせだけで、実用的なチャットボットの土台が完成します。
ここからさらに会話履歴、RAG(外部データ参照)、マルチツール対応など、高度な機能を追加していくことで、本格的なAIアシスタントに進化させることができます。n8nのノードを体系的に学びたいなら、Eight Universityが参考になりました。41レッスンで基礎から応用まで順序立てて学べるので、こうしたワークフローを自力で構築できるようになります。
次のステップ:
- まずはこの4ノード構成で動かしてみる
- 会話履歴の保持を追加してマルチターン対話に対応
- Eight Universityでn8nとAIエージェントの構築を体系的に学ぶ