AI開発
n8nで作る音声チャットフロー:macOSローカル環境で完結するAI音声対話
📅 2025年9月15日
✍️ 王 家豪
#n8n
#音声認識
#SpeechToText
#TextToSpeech
#LLM
#Webhook
#ローカル開発
n8nで作る音声チャットフロー(macOSローカル環境)
本記事では、macOS上に構築した n8n(ローカル環境) を使い、
- 音声入力
- 音声認識(Speech-to-Text)
- LLMによる応答生成(会話履歴考慮)
- 音声合成(Text-to-Speech)
- Webhook経由でブラウザに音声返却
までを すべてn8n上で完結 させる方法を解説します。
クラウドに依存せず、
プロトタイピング・個人開発・PoC用途に最適な音声チャット構成 です。

🎯 ゴール
以下を満たす「音声チャット体験」を構築します。
- 音声をWebhookに送信するとテキストに変換される
- LLMが会話履歴を考慮して自然な応答を生成する
- 応答を音声に変換する
- ブラウザ上でそのまま音声が再生される
🏗️ 全体アーキテクチャ
- Webhook
音声ファイルを受信 - Speech-to-Text
音声 → テキスト変換 - Memory Manager / Buffer Memory
会話履歴を保持 - LLM(Gemini / OpenAI / Claude など)
応答生成 - Text-to-Speech
音声合成(ElevenLabs / Fish Audio / MiniMax Audio) - Respond to Webhook
音声データを返却
ローカルn8nだけで
音声 → AI → 音声 のループを実現します。
📝 構築手順
1. Webhookで音声を受け取る
使用ノード
- Webhook
設定例
- Path:
voice_message - HTTP Method:
POST - Response Mode:
Response Node
動作確認(curl)
curl -X POST http://localhost:5678/webhook-test/voice_message \
-H "Content-Type: multipart/form-data" \
-F "voice_message=@sample.m4a"
👉 ここで Binary形式の音声ファイル がn8nに渡ります。
2. 音声をテキスト化する(Speech-to-Text)
使用ノード
- OpenAI - Speech to Text
※ Whisper互換
設定
- Resource:
audio - Operation:
transcribe - Binary Property Name:
voice_message
ポイント:
- 音声形式は
.m4a,.wav,.mp3が安定 - 長時間音声は分割推奨
3. 会話履歴を管理する(Conversation Memory)
使用ノード構成
- Get Chat(過去履歴取得)
- Aggregate(履歴整形)
- Insert Chat(新規保存)
- Window Buffer Memory(履歴制限)
なぜ必要か?
- 単発応答では「会話」にならない
- 直近N件を渡すことで自然な対話が可能
ベストプラクティス
- 履歴は 直近5〜10往復
- トークン肥大化を防ぐ
4. LLMで応答を生成
使用ノード
- Basic LLM Chain
モデル例
- Google Gemini Chat Model
- OpenAI GPT-4.x
- Claude Sonnet
プロンプト設計ポイント
- 「これまでの会話を考慮して回答してください」
- 「簡潔かつ音声向きの表現で」

5. 応答を音声に変換する(Text-to-Speech)
使用ノード
- HTTP Request
サービス例
- ElevenLabs API
- Fish Audio
- MiniMax Audio
ElevenLabs API例
POST https://api.elevenlabs.io/v1/text-to-speech/{voice_id}
Headers
{
"Content-Type": "application/json",
"xi-api-key": "YOUR_API_KEY"
}
Body
{
"text": "={{ $('Basic LLM Chain').item.json.text }}"
}
👉 応答を Binary(audio) として受け取るのがポイント
6. Webhookで音声を返却する
使用ノード
- Respond to Webhook
設定
- Respond With:
Binary - Binary Property:
data - Response Content Type:
audio/mpeg - Response Headers:
Content-Disposition: inline(任意)
これにより、
👉 ブラウザでWebhook URLを叩くだけで音声が再生 されます。
🔒 セキュリティ・運用の注意点
- Webhook URLは外部公開しない
- ngrok利用時はIP制限推奨
- APIキーはn8n Credential管理
- 音声ログの保存可否を明確に
✅ まとめ
本構成により、
- 音声入力
- 会話履歴を考慮したAI応答
- 高品質な音声合成
- ブラウザ即再生
を n8nだけで実現 できます。
ローカル環境でも十分に「音声チャットAI体験」を構築可能です。
ぜひ、自分の声でAIと会話する環境を作ってみてください。