n8nで自分の声をクローン!Telegram × ElevenLabsで音声AIエージェントを構築する方法

目次

はじめに

「AIと会話するとき、もっと自然な体験にできないだろうか?」「自分の声で応答するAIアシスタントを作れたら面白いのに」——そんなことを考えたことはありませんか?

本記事では、n8nElevenLabsを組み合わせて、自分の声をクローンしたAIエージェントをTelegram上に構築する方法を解説します。テキストでも音声でもメッセージを送ると、AIが応答を生成し、あなた自身の声で返答してくれるワークフローです。

完成イメージ

Telegramで「最近どう?」と送ると、AIがあなたの声のクローンで音声メッセージを返してくれます。テキストメッセージでも音声メッセージでも、どちらにも対応しています。

こんなシーンでの活用に適しています

  • 自分の声で応答するカスタムAIアシスタントを作ってみたい
  • Telegramを通じて音声で気軽にAIとやり取りしたい
  • ElevenLabsの音声クローン技術をn8nワークフローに組み込みたい

方法: n8n × Telegram × OpenAI × ElevenLabs

メリット自分の声で応答: ElevenLabsの音声クローンにより自然な音声体験
音声・テキスト両対応: Telegramからどちらでも入力可能
会話履歴の保持: 過去のやり取りを記憶し、文脈を踏まえた応答
ノーコード: n8nのビジュアルエディタでプログラミング不要
デメリット複数サービスの登録が必要: Telegram、OpenAI、ElevenLabsそれぞれのアカウントとAPIキーが必要
APIコストが発生: OpenAI API、ElevenLabsともに従量課金あり
難易度★★★☆☆(中級)
所要時間: 約60分
特徴・n8nが持つ1,031以上のインテグレーションを活用可能
・ElevenLabsはネイティブ連携がないため HTTP Request ノードで接続
・ツール追加でGoogle Calendar、Google Sheets等との連携も拡張可能
価格n8n: セルフホスト無料 / クラウド版 €20〜
OpenAI API: 従量課金(最低$5チャージが必要)
ElevenLabs: 無料枠あり / スタータープラン $5/月推奨
合計: 月$10程度〜で運用可能

ElevenLabsとは

ElevenLabsは、高品質な音声合成(テキスト読み上げ)と音声クローンを提供するサービスです。自分の声を録音・アップロードするだけで、AIがその声を再現してテキストを読み上げてくれます。

現時点ではn8nにネイティブ連携(専用ノード)がないため、HTTP Request ノードを使ってAPIを直接呼び出します。Google SheetsやTelegramのように専用ノードがあるサービスと異なり、自分でAPIリクエストを構築する必要がありますが、手順通りに進めれば難しくありません。

事前準備

以下のアカウント・環境を用意してください。

  • n8nアカウント(クラウド版 または セルフホスト版)
  • Telegramアカウント(スマートフォンでアプリ設定が必要)
  • OpenAIアカウント(API Key取得済み、最低$5のクレジットチャージが必要)
  • ElevenLabsアカウント(スタータープラン $5/月 推奨。無料プランではAPIコール制限あり)

設定手順

Step 1: ワークフローの作成

1-1. 以下のコードをコピーし、JSONファイル形式(.json)で保存します。

{
  "name": "Voice Clone Agent",
  "nodes": [
    {
      "parameters": {
        "updates": ["message"],
        "additionalFields": {}
      },
      "type": "n8n-nodes-base.telegramTrigger",
      "typeVersion": 1.1,
      "position": [-1024, -240],
      "id": "036b311e-e7bd-41a9-880c-eb7eb48a4347",
      "name": "Telegram Trigger"
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 1
                },
                "conditions": [
                  {
                    "leftValue": "={{ $json.message.text }}",
                    "rightValue": "",
                    "operator": {
                      "type": "string",
                      "operation": "notExists",
                      "singleValue": true
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "Audio"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 1
                },
                "conditions": [
                  {
                    "leftValue": "={{ $json.message.text }}",
                    "rightValue": "",
                    "operator": {
                      "type": "string",
                      "operation": "exists",
                      "singleValue": true
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "Text"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3,
      "position": [-800, -240],
      "id": "5a87a0bf-a06e-4bf0-b290-f30ad9b4a793",
      "name": "Switch"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "text-field",
              "name": "text",
              "value": "={{ $('Telegram Trigger').item.json.message.text }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [-576, -80],
      "id": "68564b37-2f78-43c2-b0e2-85f3cca1ea9f",
      "name": "Edit Fields"
    },
    {
      "parameters": {
        "resource": "file",
        "fileId": "={{ $('Telegram Trigger').item.json.message.voice.file_id }}",
        "additionalFields": {}
      },
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [-576, -400],
      "id": "b26e2777-9c82-430e-b563-15ed220edbae",
      "name": "Telegram - Get File"
    },
    {
      "parameters": {
        "resource": "audio",
        "operation": "transcribe",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "typeVersion": 1.8,
      "position": [-352, -400],
      "id": "66412df4-98ad-4ad1-a118-82ed558755b7",
      "name": "OpenAI - Transcribe"
    },
    {
      "parameters": {},
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3,
      "position": [-144, -240],
      "id": "df8cbdb6-d71f-46dd-be60-f3c5ad14416f",
      "name": "Merge",
      "alwaysOutputData": false
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $json.text }}",
        "options": {
          "systemMessage": "You are a helpful assistant named [YourName] and your tasked with answering user questions."
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 1.7,
      "position": [16, -240],
      "id": "5db85a22-ac60-46df-82bc-0e69edac31d7",
      "name": "AI Agent"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "value": "gpt-4o-mini",
          "mode": "list",
          "cachedResultName": "gpt-4o-mini"
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [-16, -16],
      "id": "9e51a250-2c8f-44b8-a6e4-dda93714a2b3",
      "name": "OpenAI Chat Model"
    },
    {
      "parameters": {
        "sessionIdType": "customKey",
        "sessionKey": "={{ $('Telegram Trigger').item.json.message.chat.id }}"
      },
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "typeVersion": 1.3,
      "position": [192, -16],
      "id": "82943293-495d-47ae-9441-98f15473ec3d",
      "name": "Window Buffer Memory"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "=https://api.elevenlabs.io/v1/text-to-speech/YOUR_VOICE_ID",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "xi-api-key",
              "value": "YOUR_ELEVENLABS_API_KEY"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify({ text: $json.output, model_id: \"eleven_multilingual_v2\" }) }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file"
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [304, -240],
      "id": "cced9fa8-ecd3-4e5d-8662-bc6da0ac67bc",
      "name": "HTTP Request"
    },
    {
      "parameters": {
        "operation": "sendAudio",
        "chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
        "binaryData": true,
        "additionalFields": {}
      },
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [528, -240],
      "id": "8c1ceb17-096a-4aae-b214-2ed012f28a0a",
      "name": "Telegram - Send Audio"
    }
  ],
  "pinData": {},
  "connections": {
    "Telegram Trigger": {
      "main": [[{ "node": "Switch", "type": "main", "index": 0 }]]
    },
    "Switch": {
      "main": [
        [{ "node": "Telegram - Get File", "type": "main", "index": 0 }],
        [{ "node": "Edit Fields", "type": "main", "index": 0 }]
      ]
    },
    "Edit Fields": {
      "main": [[{ "node": "Merge", "type": "main", "index": 1 }]]
    },
    "Telegram - Get File": {
      "main": [[{ "node": "OpenAI - Transcribe", "type": "main", "index": 0 }]]
    },
    "OpenAI - Transcribe": {
      "main": [[{ "node": "Merge", "type": "main", "index": 0 }]]
    },
    "Merge": {
      "main": [[{ "node": "AI Agent", "type": "main", "index": 0 }]]
    },
    "AI Agent": {
      "main": [[{ "node": "HTTP Request", "type": "main", "index": 0 }]]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [[{ "node": "AI Agent", "type": "ai_languageModel", "index": 0 }]]
    },
    "Window Buffer Memory": {
      "ai_memory": [[{ "node": "AI Agent", "type": "ai_memory", "index": 0 }]]
    },
    "HTTP Request": {
      "main": [[{ "node": "Telegram - Send Audio", "type": "main", "index": 0 }]]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  }
}

1-2. n8nで新規ワークフローを作成し、右上の「・・・」から、Import from File を選択し、保存したJSONファイルを選択します。

1-3. 全体のフロー接続が完成していることを確認します。

ワークフローの構成

このワークフローは以下のノードで構成されています。

ノード名役割
Telegram TriggerTelegramからのメッセージを受信
Switch音声メッセージとテキストメッセージを振り分け
Telegram – Get File音声ファイルをダウンロード(音声パス)
OpenAI – TranscribeOpenAI Whisperで音声を文字起こし(音声パス)
Edit Fieldsテキストメッセージを統一フォーマットに変換(テキストパス)
Merge音声パスとテキストパスの結果を統合
AI AgentAIエージェント(応答テキストを生成)
OpenAI Chat ModelLLMモデル(GPT-4o-mini等)
Window Buffer Memory会話履歴を保持するメモリ
HTTP RequestElevenLabs APIで応答テキストを音声に変換
Telegram – Send Audio生成した音声をTelegramに送信

処理の流れ

Telegram Trigger(メッセージ受信)
    ↓
Switch(振り分け)
    ├→ 音声の場合: Telegram - Get File → OpenAI - Transcribe
    └→ テキストの場合: Edit Fields
    ↓
Merge(両パスを統合)
    ↓
AI Agent(応答テキストを生成)
    ├→ OpenAI Chat Model(LLM)
    └→ Window Buffer Memory(会話メモリ)
    ↓
HTTP Request(ElevenLabs TTS API → 音声合成)
    ↓
Telegram - Send Audio(音声を返信)

Step 2: Telegram Botの作成

Telegramで専用のBotを作成し、n8nと連携するためのBot Tokenを取得します。

2-1. Telegramアプリで @BotFather を検索し、チャットを開始します。

2-2. /newbot と入力して送信します。

2-3. Botの表示名を入力します(例: Voice AI Clone)。末尾に bot が含まれている必要があり、他のユーザーと重複しない名前を指定してください(例: voice_ai_clone_bot)。

2-4. 作成が完了すると、Bot Token(アクセストークン)が表示されます。このトークンをコピーして保存してください。

例: 1234567890:ABCdefGHIjklMNOpqrsTUVwxyz

2-5. n8nを開き、OverviewCredentialsCreate Credential をクリックします。

2-6. 「Telegram」を検索し、Telegram API を選択し、Continueをクリックします。

2-7. Access Token に先ほどコピーしたBot Tokenを貼り付け、保存します。

Step 3: OpenAI APIの設定

音声文字起こし(Whisper)で使用するOpenAI APIを設定します。

3-1. OpenAI Platform にログインし、右上のアカウントメニューからYourprofileをクリックします。

3-2. 左側のサイドバーから API Keys を選択します。

3-3. Create new secret key をクリックし、API Keyを生成します。生成されたAPI Keyをコピーして保存します(一度しか表示されません)。

3-4. 2-5.~2-7と同様にn8nでAPIの設定を実施します。

Step 4: ElevenLabsの設定(音声クローン作成 + APIキー取得)

AI Agentの応答を自分の声で読み上げるため、ElevenLabsで音声クローンを作成し、APIキーを取得します。

4-1. アカウント作成

4-1-1. ElevenLabs にサインインします。Googleアカウントを利用して簡単にサインインできます。サインインするとアンケートを聞かれるので回答して、アカウント作成を完了します。

4-1-2.初期設定を進めていくと、言語を日本語に設定します。

4-1-3. 音声クローンのAPI利用にはスタータープラン($5/月)以上が推奨です。選択した場合はクレジットカード情報などを登録します。

4-1-4. 設定が完了し、以下の画面が表示されたらアカウント作成完了です。

4-2. 音声クローンの作成

4-2-1. ダッシュボードの左側のパネルで ボイス を選択します。

4-2-2. ボイスを作成というポップアップが表示されるのでインスタントボイスクローン を選択します。

4-2-3. 自分の声を録音するか、音声ファイルをアップロードします。

ポイント: 音声データは長ければ長いほど、クローンの品質が向上します。複数のファイルをアップロードすることも可能です。

4-2-4. 作成が完了したら、名前と説明を入力して保存します。

4-2-3. 作成が完了したら、ダッシュボードからボイス作成した音声Voice ID をコピーして保存します。

4-3. APIキーの取得

4-3-1. ダッシュボード左下のデベロッパーをクリックします。

4-3-2. APIキーを作成のリンクをクリックし、キーを作成ボタンをクリックします。

4-3-3. APIキーの制限でテキスト読み上げをアクセスにし、キーを作成ボタンをクリックします。

4-3-4. APIキーが表示されるのでメモ帳などに保存しておきます。

Step 5: Telegram Triggerの設定

インポートしたワークフローの Telegram Trigger にTelegram認証情報を設定します。

5-1. キャンバス上の Telegram Trigger ノードをダブルクリックして開きます。

5-2. Credential to connect with で、Step 2で作成したTelegram認証情報を選択し、 Trigger Onmessage になっていることを確認します。

Step 6: 音声/テキスト振り分け(Switch)

このワークフローでは、Switch ノードが入力メッセージを音声とテキストに振り分けます。

仕組みの解説:

Telegram Trigger
    ↓
Switch
    ├→ Audio(音声): message.text が存在しない場合
    └→ Text(テキスト): message.text が存在する場合

Switch ノードは以下の条件で分岐しています。

ルート条件
Audio{{ $json.message.text }} が存在しない(= 音声メッセージ)
Text{{ $json.message.text }} が存在する(= テキストメッセージ)

音声メッセージにはテキストフィールドが含まれないため、テキストの有無で入力タイプを判定しています。音声の場合は文字起こし処理へ、テキストの場合は直接 Edit Fields ノードへ送られます。n8nでは、以下のように設定されます。

Step 7: 音声文字起こしの設定

音声メッセージを受け取った場合、Telegramから音声ファイルをダウンロードし、OpenAI Whisperでテキストに変換します。

処理の流れ:

Telegram - Get File → OpenAI - Transcribe → Merge

7-1. Telegram – Get File の設定

7-1-1. Telegram - Get File ノードをダブルクリックして開きます。

7-1-2. Credential to connect with で、Step 2で作成したTelegram認証情報を選択します。

7-1-3. 他の設定では、ResourceFileFile ID{{ $('Telegram Trigger').item.json.message.voice.file_id }} で設定されていることを確認します。

7-2. OpenAI – Transcribe の設定

7-2-1. OpenAI - Transcribe ノードを開きます。

7-2-2. Credential to connect with で、Step 3で作成したOpenAI認証情報を選択します。

7-2-3. ResourceAudioOperationTranscribe になっていることを確認します。

Step 8: テキスト正規化(Edit Fields)とMerge

テキスト入力と音声入力を統一した形式に揃え、1つのパスに統合します。

仕組みの解説:

  • 音声ルート: OpenAI - Transcribe の出力には text フィールドにテキスト変換結果が格納されます
  • テキストルート: Edit Fields ノードで message.texttext フィールドにマッピングします

これにより、どちらのルートを通っても {{ $json.text }} でメッセージ内容を取得できるようになります。

Edit Fields ノードの設定:

設定項目
Nametext
TypeString
Value{{ $('Telegram Trigger').item.json.message.text }}

n8nでは、以下のように設定されます。

Merge ノードは、両パスの出力を1つに統合する役割を担います。音声パス・テキストパスのどちらか一方だけが実行されるため、実行されたパスのデータがそのまま後続の AI Agent に渡されます。n8nでは、以下のように設定されます。

Step 9: AI Agentの設定

ユーザーのメッセージを受け取り、応答テキストを生成する AI Agent の設定を確認します。

9-1. AI Agent ノードをダブルクリックして開きます。

9-2. 以下のパラメータを確認します。

パラメータ
AgentTool Agent
Source for Prompt(User Message)Define below
Prompt(User Message){{ $json.text }}

9-3. Options を展開し、System Message を確認します。デフォルトでは以下のように設定されています。

You are a helpful assistant named [YourName] and your tasked with answering user questions.

[YourName] の部分を自分の名前に変更してください。必要に応じてメッセージの内容をカスタマイズすることもできます。n8nでは、以下のように設定されます。

ポイント: ツール(Google Calendar、Google Sheets、Airtableなど)を追加して機能を拡張することもできます。ツールを追加する場合は、システムプロンプトにツールの使い方の指示も記載してください。

Step 10: LLMモデルの設定(OpenAI Chat Model)

AI Agent が使用するLLMモデルの認証を設定します。

10-1. OpenAI Chat Model ノードをダブルクリックして開きます。

10-2. Credential to connect with で、Step 3で作成したOpenAI認証情報を選択します。

10-3. Modelgpt-5-mini になっていることを確認します。

ポイント: GPT-5-miniはコストパフォーマンスに優れたモデルです。より高精度な応答が必要な場合は gpt-5 に変更することもできます。

Step 11: メモリ設定(Window Buffer Memory)

会話の文脈を保持するため、Window Buffer Memory ノードの設定を確認します。

11-1. Window Buffer Memory ノードをダブルクリックして開きます。

11-2. Session IDDefine below になっていることを確認します。

11-3. Key が以下のようになっていることを確認します:

{{ $('Telegram Trigger').item.json.message.chat.id }}

この設定により、同じTelegramチャット内での会話履歴が保持されます。別のチャットとは独立したセッションになります。n8nでは、以下のように設定されます。

Step 12: HTTP Requestノードの設定(ElevenLabs TTS API)

AI Agentの応答テキストをElevenLabsのAPIに送信し、音声データに変換します。ElevenLabsにはn8nのネイティブ連携がないため、HTTP Request ノードを使って直接APIを呼び出します。

12-1. URLの設定

12-1-1. HTTP Request ノードをダブルクリックして開きます。

12-1-2. MethodPOST になっていることを確認します。

12-1-3. URLYOUR_VOICE_ID 部分を、Step 4で取得したElevenLabsのVoice IDに置き換えます。

https://api.elevenlabs.io/v1/text-to-speech/{ここにVoice IDを貼り付け}

注意: URLの前後に余分なスペースが入るとエラーの原因になります。貼り付けた後にスペースがないか確認してください。

12-2. Headersの設定

12-2-1. Headers セクションで、xi-api-key の値を Step 4で取得したElevenLabs APIキーに置き換えます。

NameValue
xi-api-key(Step 4で取得したElevenLabs APIキー)
Content-Typeapplication/json

n8nでは、以下のように設定されます。

12-3. Bodyの確認

12-3-1. Send Body が有効になっていることを確認します。

12-3-2. Body Content TypeJSONSpecify BodyUsing JSON になっていることを確認します。

12-3-3. JSONエディタに以下の式が設定されていることを確認します。

{{ JSON.stringify({ text: $json.output, model_id: "eleven_multilingual_v2" }) }}

n8nでは、以下のように設定されます。

重要: JSON.stringifyについて

AI Agentの出力には改行コード(\n)や引用符(")などの特殊文字が含まれることがあります。これらをそのままJSONに入れると、JSON形式が壊れてエラーになります。

JSON.stringify() を使うと、特殊文字を適切にエスケープし、さらにオブジェクト全体を正しいJSON文字列として出力してくれるため、安全にAPIリクエストを送信できます。

12-4. レスポンス形式の確認

12-4-1. OptionsResponseResponse FormatFile に設定されていることを確認します。これにより、ElevenLabsから返される音声データがバイナリファイルとして受信されます。n8nでは、以下のように設定されます。

Step 13: Telegram – Send Audioの設定

ElevenLabsで生成された音声データをTelegramに送信します。

13-1. Telegram - Send Audio ノードをダブルクリックして開きます。

13-2. Credential to connect with で、Step 2で作成したTelegram認証情報を選択します。

13-3. 以下のパラメータを確認します。

パラメータ
OperationSend Audio
Chat ID{{ $('Telegram Trigger').item.json.message.chat.id }}
Binary FileON(バイナリモードに切り替え)

n8nでは、以下のように設定されます。

Chat ID にTelegram TriggerのチャットIDを設定することで、メッセージを送信してきた相手に音声を返信します。

Step 14: 動作確認

ここまでの設定が正しく動作するか確認しましょう。

テキストメッセージのテスト:

14-1. n8nワークフローを保存し、Active にします。

14-2. Telegramで作成したBotとのチャットを開き、/start と送信してBotを有効化します。

14-3. テキストメッセージを送信します(例: 「こんにち!」)。Botからあなたの声のクローンで音声メッセージが返信されることを確認します。

音声メッセージのテスト:

14-5. Telegramのマイクアイコンを長押しして、音声メッセージを送信します。

14-6. 音声が正しく文字起こしされ、AIの応答が音声で返信されることを確認します。

問題がある場合:

14-7. n8nのワークフロー画面で Executions を開き、どのノードでエラーが発生しているか確認します。各ノードの入出力データを確認することで、問題箇所を特定できます。

よくある質問

Telegram以外のメッセンジャー(WhatsApp、Siri等)でも使えますか?

はい、可能です。n8nにはWhatsApp、Twilio、Slackなど多くのメッセンジャーに対応したノードがあります。Triggerノードとレスポンスノードを差し替え、入出力の形式を調整することで同様のワークフローを構築できます。

ElevenLabsの無料プランで使えますか?

無料プランでも音声合成は利用できますが、APIコール数に制限があります。また、音声クローン機能を安定して使うにはスタータープラン($5/月)以上が推奨されています。

音声クローンの品質を上げるにはどうすればいいですか?

アップロードする音声データの量と質が重要です。長い音声ファイルを複数アップロードすることで精度が向上します。静かな環境で録音し、はっきりと話すことも品質向上につながります。

つまずきやすいポイント

  • ElevenLabs APIでJSONエラーが発生する: AI Agentの出力に改行コード(\n)や引用符(")が含まれていると、JSONの構文が壊れます。JSON.stringify() を使ってテキストをエスケープしてください。また、stringifyの結果は引用符付きで出力されるため、外側に引用符を追加すると二重引用符になりエラーになります。
  • AI AgentのChat Input設定ミス: AI Agentはデフォルトでn8nの内蔵チャットウィジェットからの入力を想定しています。Telegramなど外部トリガーを使う場合は、Source for PromptDefine below に変更し、{{ $json.text }} を手動で設定する必要があります。Session IDも同様に、Telegram TriggerのChat IDに変更してください。
  • URL内の余分なスペース: ElevenLabs APIのURL(https://api.elevenlabs.io/v1/text-to-speech/{voice_id})にVoice IDを貼り付ける際、前後にスペースが入ることがあります。たった1文字のスペースでもAPIリクエストが失敗するため、貼り付け後にスペースがないか確認してください。

なかなかうまくいかないときは?

初めてn8nやElevenLabsを使うと「API連携でエラーが出る」「JSONの書き方がわからない」「音声クローンが期待通りに動かない」などでつまずく方もいます。また、「HTTP Requestノードの設定が複雑で自信がない」「自分の環境で同じように動くか不安」といった声も聞かれます。

そこで、おすすめしたいのが「ジドウカ」です。

ジドウカは、これまで合計800タスク以上の業務の自動化をしてきた実績のある法人専用の自動化サービスです。

ジドウカ

業務の一部を”タスク単位”で自動化し、【月額1万円から】安定運用できるサブスクリプション型のサービスです。
技術のことが分からなくても「こういう作業をラクにしたい」と伝えるだけで自動化することが可能です。

「自分のやりたい自動化って本当に実現できるのかな…」という方には、
少額・短期間での「お試し開発」があるので、お気軽にご活用ください。

まとめ

本記事では、n8n × Telegram × OpenAI × ElevenLabs を使って、自分の声で応答するAIエージェントを構築する方法を解説しました。

  • ワークフローのインポート とノード構成の全体像
  • Telegram Bot の作成とn8nへの接続
  • OpenAI API・ElevenLabs の設定(APIキー・音声クローン作成)
  • Switch ノードによる音声・テキストの振り分け
  • OpenAI Whisper による音声文字起こし
  • Edit FieldsMerge ノードで両パスの統合
  • AI Agent の設定(LLMモデル + 会話メモリ)
  • HTTP Request ノードでElevenLabs TTS APIを呼び出し、音声合成
  • Telegram – Send Audio で音声を返信

一度仕組みを構築すれば、Telegramからメッセージを送るだけで、あなた自身の声のAIクローンと会話できるようになります。

さらにAI Agentにツールを追加すれば、カレンダーの確認やメール送信、スプレッドシートの操作など、さまざまなタスクを音声で指示して自動実行することも可能です。

「AIアシスタントを自分好みにカスタマイズしたい」「音声で気軽に業務を自動化したい」という方は、ぜひ今回の手順を参考に構築してみてください。

目次