<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Grewup</title>
    <description>The latest articles on DEV Community by Grewup (@grewup).</description>
    <link>https://dev.to/grewup</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3861039%2F28d3225e-4032-4432-aaa9-7ead5aeb1021.jpg</url>
      <title>DEV Community: Grewup</title>
      <link>https://dev.to/grewup</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/grewup"/>
    <language>en</language>
    <item>
      <title>Build a Voice Clone Bot with n8n + ElevenLabs (No Code, 15 Minutes)</title>
      <dc:creator>Grewup</dc:creator>
      <pubDate>Wed, 08 Apr 2026 18:07:51 +0000</pubDate>
      <link>https://dev.to/grewup/build-a-voice-clone-bot-with-n8n-elevenlabs-no-code-15-minutes-2efc</link>
      <guid>https://dev.to/grewup/build-a-voice-clone-bot-with-n8n-elevenlabs-no-code-15-minutes-2efc</guid>
      <description>&lt;p&gt;What you'll build&lt;br&gt;
A Telegram bot that receives your voice message, clones it into any AI voice using ElevenLabs, saves the output to Google Drive, and sends the cloned audio back — all in under 20 seconds. Eight n8n nodes. Zero code required.&lt;br&gt;
Here's the full workflow at a glance:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;`Telegram message received
        ↓
Security check (your ID only)
        ↓
Route by message type (voice / text / image)
        ↓
Fetch actual audio file from Telegram servers
        ↓
POST to ElevenLabs speech-to-speech API
        ↓
Upload cloned audio to Google Drive
        ↓
Send cloned audio back to Telegram chat`

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 1 — Create your Telegram bot&lt;br&gt;
Open Telegram → search &lt;a class="mentioned-user" href="https://dev.to/botfather"&gt;@botfather&lt;/a&gt; → send /newbot → follow prompts → copy the bot token.&lt;br&gt;
Find your own Telegram user ID by messaging @userinfobot. You'll need this in Step 3.&lt;/p&gt;

&lt;p&gt;Step 2 — Set up the n8n canvas&lt;br&gt;
Log into n8n → New Workflow → name it Voice Clone Bot.&lt;br&gt;
Add the Telegram Trigger node:&lt;/p&gt;

&lt;p&gt;Credential: paste your bot token&lt;br&gt;
Updates to listen for: message&lt;/p&gt;

&lt;p&gt;This is the entry point. Every incoming message wakes the workflow.&lt;/p&gt;

&lt;p&gt;Step 3 — Add the security gate&lt;br&gt;
Without this, anyone who finds your bot burns through your ElevenLabs credits.&lt;br&gt;
Add a Code node → rename it Sanitize → paste this:&lt;/p&gt;

&lt;p&gt;javascript&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="s2"&gt;`javascript
const allowedId = 123456789; // replace with your Telegram user ID
const senderId = $input.first().json.message.from.id;
if (senderId !== allowedId) {
  throw new Error('Unauthorized sender');
}
return $input.all();`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Replace 123456789 with your actual ID from @userinfobot.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Step 4 — Route by message type&lt;br&gt;
Add a Switch node with three outputs:&lt;br&gt;
OutputConditionFieldVoiceExistsmessage.voiceTextExistsmessage.textImageExistsmessage.photo&lt;br&gt;
Voice messages take the active path for this workflow.&lt;/p&gt;

&lt;p&gt;Step 5 — Fetch the audio file&lt;br&gt;
Telegram webhooks only send a file reference ID, not the actual audio. You need a separate fetch step.&lt;br&gt;
Add a Telegram node:&lt;/p&gt;

&lt;p&gt;Resource: File&lt;br&gt;
Operation: Get&lt;br&gt;
File ID: {{ $json.message.voice.file_id }}&lt;/p&gt;

&lt;p&gt;This pulls the real MP3 from Telegram's servers.&lt;/p&gt;

&lt;p&gt;Step 6 — Call the ElevenLabs API&lt;br&gt;
Add an HTTP Request node with these exact settings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;`plaintext
Method:          POST
URL:             https://api.elevenlabs.io/v1/speech-to-speech/{voice_id}
Authentication:  Header Auth
Header name:     xi-api-key
Header value:    [your ElevenLabs API key]

Body type:       Multipart Form Data
Fields:
  - audio:       [binary from previous node]
  - model_id:    eleven_english_sts_v2

Response format: File
`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Find {voice_id} in your ElevenLabs dashboard under Voices. For a Morgan Freeman-style voice, search the public voice library. For your own cloned voice, upload a 30-second sample first.&lt;/p&gt;

&lt;p&gt;Step 7 — Save to Google Drive&lt;br&gt;
Add a Google Drive node:&lt;/p&gt;

&lt;p&gt;Operation: Upload&lt;br&gt;
File name: cloned_{{ $json.message.voice.file_unique_id }}.mp3&lt;br&gt;
Drive folder: create one called ElevenLabs in your My Drive&lt;/p&gt;

&lt;p&gt;Dynamic file names prevent overwrites and make your library searchable later.&lt;/p&gt;

&lt;p&gt;Step 8 — Send the cloned audio back&lt;br&gt;
Add a final Telegram node:&lt;/p&gt;

&lt;p&gt;Operation: Send Audio&lt;br&gt;
Chat ID: {{ $('Telegram Trigger').first().json.message.chat.id }}&lt;br&gt;
Binary data: toggle ON&lt;br&gt;
Input field: output from ElevenLabs node&lt;/p&gt;

&lt;p&gt;Step 9 — Wire it up and test&lt;br&gt;
Connect all 8 nodes in sequence. Toggle the workflow active (top right — turns blue).&lt;br&gt;
Open Telegram → send your bot a voice message → wait 15–20 seconds → play the response.&lt;br&gt;
That's not your voice anymore.&lt;/p&gt;

&lt;p&gt;What tends to break&lt;br&gt;
"Unauthorized sender" error on your own messages — Double-check you used the ID from @userinfobot, not your phone number.&lt;br&gt;
ElevenLabs returns 422 — Check that model_id is exactly eleven_english_sts_v2. Older model strings are deprecated.&lt;br&gt;
Google Drive upload fails — Make sure you completed the OAuth connection inside n8n credentials, not just pasted an API key.&lt;br&gt;
No audio sent back — Binary Data toggle must be ON in the final Telegram node. Easy to miss.&lt;/p&gt;

&lt;p&gt;What this unlocks&lt;br&gt;
Once running:&lt;/p&gt;

&lt;p&gt;Record one voiceover → clone into 5 voices → A/B test conversion&lt;br&gt;
Generate client audio deliverables in seconds&lt;br&gt;
Build a searchable Drive library of every voice clip you produce&lt;/p&gt;

&lt;p&gt;Full guide + workflow JSON&lt;br&gt;
I kept the node configs tight here. The full guide on the Elevoras blog includes every screenshot, the complete node settings, and a workflow JSON you can import directly into n8n without building from scratch:&lt;br&gt;
&lt;a href="https://elevoras.com/build-voice-clone-bot-n8n-elevenlabs-automation-2026/" rel="noopener noreferrer"&gt;Full n8n + ElevenLabs Voice Clone Bot guide →&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Building something with n8n? Drop it in the comments — happy to look at your workflow.&lt;/p&gt;

</description>
      <category>n8n</category>
      <category>automation</category>
      <category>nocode</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
