Skip to content

πŸ”— Day 2 β€” Integrasi ElevenLabs + n8n: Dua Pendekatan Voice Agent ​

Minggu 2 Β· Hari 2 β€” Yellow Day (Integration) Topik: Dua pola integrasi (n8n orchestrates vs ElevenLabs orchestrates), terminologi HTTP/webhook, membangun kedua pendekatan, deploy ke production


πŸ“‹ Daftar Isi ​

  1. Dua Pola Integrasi
  2. Terminologi HTTP & Webhook
  3. Node Generik: HTTP Request & Webhook
  4. Pendekatan 1: n8n Orchestrates
  5. Pendekatan 2: ElevenLabs Orchestrates
  6. Deploy ke Production
  7. Rangkuman & Poin Penting

πŸ”€ Dua Pola Integrasi ​

Ada dua cara fundamental untuk mengintegrasikan ElevenLabs dengan n8n. Pemahaman kedua pola ini sangat penting karena masing-masing memiliki kelebihan dan kekurangan yang jelas.

╔══════════════════════════════════════════════════════════════════════╗
β•‘                                                                      β•‘
β•‘   Pendekatan 1: n8n Orchestrates        Pendekatan 2: 11Labs        β•‘
β•‘   ─────────────────────────────         Orchestrates                β•‘
β•‘                                          ─────────────────          β•‘
β•‘   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”                           β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”            β•‘
β•‘   β”‚  Audio   β”‚                           β”‚  11Labs      β”‚            β•‘
β•‘   β”‚  Input   β”‚                           β”‚  Voice Agent β”‚            β•‘
β•‘   β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜                           β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜            β•‘
β•‘        β”‚                                        β”‚                    β•‘
β•‘   β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”                           β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”            β•‘
β•‘   β”‚ 11Labs  β”‚ ◀── API call              β”‚  Webhook     β”‚            β•‘
║   │ STT API │    (Speech→Text)          │  Tool Call   │            ║
β•‘   β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜                           β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜            β•‘
β•‘        β”‚                                        β”‚                    β•‘
β•‘   β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”                           β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”            β•‘
β•‘   β”‚  n8n    β”‚                           β”‚  n8n         β”‚            β•‘
β•‘   β”‚ AI Agentβ”‚                           β”‚  Business    β”‚            β•‘
β•‘   β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜                           β”‚  Logic       β”‚            β•‘
β•‘        β”‚                                β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜            β•‘
β•‘   β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”                           β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”            β•‘
β•‘   β”‚ 11Labs  β”‚ ◀── API call              β”‚  Response    β”‚            β•‘
║   │ TTS API │    (Text→Speech)          │  → 11Labs    │            ║
β•‘   β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜                           β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜            β•‘
β•‘        β”‚                                        β”‚                    β•‘
β•‘   β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”                           β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”            β•‘
β•‘   β”‚  Audio  β”‚                           β”‚  11Labs      β”‚            β•‘
β•‘   β”‚ Output  β”‚                           β”‚  Speaks      β”‚            β•‘
β•‘   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                           β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜            β•‘
β•‘                                                                      β•‘
β•‘   ⚠️ Latency tinggi                    βœ… Latency rendah            β•‘
β•‘   βœ… Semua di satu canvas              βœ… Best of both worlds       β•‘
β•‘   βœ… Vendor-switchable                 βœ… Real-time voice           β•‘
β•‘                                        β˜… DIREKOMENDASIKAN β˜…         β•‘
β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

Perbandingan Detail ​

Aspekn8n OrchestratesElevenLabs Orchestrates (β˜…)
Siapa bos-nya?n8n mengontrol seluruh alurElevenLabs mengelola voice flow
LatencyTinggi (linear: STT→Agent→TTS)Rendah (real-time conversion)
KompleksitasSederhana, satu canvasSedikit lebih kompleks
Fidelitas suaraStandard API callFitur penuh 11Labs (filler, etc)
Vendor lock-inRendah (mudah ganti API)Lebih terikat ke 11Labs
Fitur teleponTidak tersediaBisa hubungkan ke Twilio
RekomendasiUntuk bagian dari workflow besarUntuk voice agent dedicated

🎯 Rekomendasi: Pendekatan 2 (ElevenLabs Orchestrates) adalah pilihan terbaik karena latency rendah sangat krusial dalam voice agent. ElevenLabs secara otomatis melakukan konversi speech real-time tanpa proses linear.


πŸ“‘ Terminologi HTTP & Webhook ​

Sebelum membangun integrasi, penting memahami terminologi dasar komunikasi antar platform.

Istilah Kunci ​

IstilahDefinisiContoh Penggunaan
API CallMembuat web request menggunakan HTTP ke sebuah URLn8n memanggil ElevenLabs API
EndpointURL yang dituju saat melakukan API callhttps://api.elevenlabs.io/v1/...
WebhookURL yang kamu sediakan agar pihak lain bisa memanggil-mun8n menyediakan URL untuk dipanggil 11Labs
HTTP GETJenis request untuk mengambil data (response: JSON)Mengambil daftar produk
HTTP POSTJenis request untuk mengirim data, dengan body berisi JSONMengirim pertanyaan ke n8n
BodyBagian dari HTTP POST yang berisi data JSON yang dikirim{"question": "Berapa harga..."}
Method/VerbJenis HTTP request (GET, POST, PUT, DELETE, dll.)Dipilih dari dropdown di webhook/tool

Cara Menggunakan dalam Kalimat ​

"Saya memanggil API (calling an API) dengan membuat HTTP request
 ke sebuah endpoint (URL)."

"Saya sudah menyiapkan webhook β€” silakan buat HTTP request
 ke sana untuk memberi tahu saya tentang sebuah event."

"Saya menggunakan HTTP POST untuk mengirim pertanyaan dalam body
 berupa JSON ke webhook n8n."

πŸ”§ Node Generik: HTTP Request & Webhook ​

Selain node-node spesifik (Slack node, Telegram node, dll.), n8n memiliki node generik untuk berintegrasi dengan platform apapun.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚           Node Integrasi di n8n                      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Spesifik        β”‚  Generik                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Slack Node       β”‚ HTTP Request Node                 β”‚
β”‚ Telegram Node    β”‚  β†’ Panggil URL endpoint apapun    β”‚
β”‚ Google Sheets    β”‚  β†’ Output = response JSON         β”‚
β”‚ Supabase Node    β”‚                                   β”‚
β”‚ ElevenLabs Node  β”‚ Webhook Node                      β”‚
β”‚ dll.             β”‚  β†’ Terima panggilan dari luar      β”‚
β”‚                  β”‚  β†’ Test URL + Production URL       β”‚
β”‚                  β”‚  β†’ Respond segera / via node lain  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ’‘ Kapan menggunakan node generik? Saat platform target belum memiliki node spesifik di n8n, atau saat kamu ingin interaksi yang lebih fleksibel.


πŸ”¨ Pendekatan 1: n8n Orchestrates ​

Setup ElevenLabs API Key ​

  1. Masuk ke ElevenLabs β†’ Developers β†’ API Keys
  2. Buat key baru dengan monthly limit 500 credits
  3. Berikan akses ke semua service (read access)
  4. Simpan key dengan aman

Workflow n8n ​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Webhook  │───▢│ 11Labs    │───▢│ AI Agent  │───▢│ 11Labs    │───▢│ Respond   β”‚
β”‚ (POST)   β”‚    β”‚ STT       β”‚    β”‚ (Gemini)  β”‚    β”‚ TTS       β”‚    β”‚ Webhook   β”‚
│          │    │ Audio→Text│    │           │    │ Text→Audio│    │ (binary)  │
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Langkah-langkah Build ​

  1. Webhook Node β€” Menerima audio via HTTP POST
  2. ElevenLabs Speech-to-Text β€” Konversi audio menjadi teks
    • Install node ElevenLabs (community node)
    • Hubungkan credential (API key)
  3. AI Agent (Gemini 3 Flash) β€” Proses teks, hasilkan jawaban
    • Set input: {{ $json.text }} (dari STT output)
    • Konfigurasi: "Define below" (bukan connected chat trigger)
  4. ElevenLabs Text-to-Speech β€” Konversi jawaban menjadi audio
    • Voice: Miss Walker atau Jason
    • Text: {{ $json.output }} (expression dari agent output)
  5. Respond to Webhook β€” Kirim file audio kembali ke pemanggil

Halaman Test: voice.html ​

File HTML sederhana (dibuat ChatGPT) untuk menguji webhook:

  • Masukkan URL webhook n8n
  • Tekan "Start Recording" β†’ bicara β†’ "Stop" β†’ "Send to n8n"
  • Audio dikirim via POST, respons dimainkan otomatis

Troubleshooting Build ​

MasalahPenyebabSolusi
"Cannot read properties of undefined"Node cari field data, tapi audio masuk sebagai audioUbah field input menjadi audio
"Connected chat trigger node"AI Agent masih expect chat inputUbah ke "Define below", gunakan {{ $json.text }}

⭐ Pendekatan 2: ElevenLabs Orchestrates (Direkomendasikan) ​

Arsitektur ​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    ElevenLabs                                β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                           β”‚
β”‚  β”‚  Voice Agent  │──── Bicara dengan pengguna               β”‚
β”‚  β”‚  (Russell)    β”‚                                          β”‚
β”‚  β”‚               β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”‚
β”‚  β”‚  Tool:        │────▢│  Webhook POST ke n8n       β”‚       β”‚
β”‚  β”‚  "Equity      β”‚     β”‚  Body: { question: "..." } β”‚       β”‚
β”‚  β”‚   Portfolio   │◀────│  Response: JSON jawaban     β”‚       β”‚
β”‚  β”‚   Question"   β”‚     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜       β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚       n8n           β”‚
                    β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”‚
                    β”‚  β”‚ Webhook   β”‚      β”‚
                    β”‚  β”‚ (POST)    β”‚      β”‚
                    β”‚  β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜      β”‚
                    β”‚  β”Œβ”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”      β”‚
                    β”‚  β”‚ AI Agent  β”‚      β”‚
                    β”‚  β”‚ (Gemini)  β”‚      β”‚
                    β”‚  β”‚ + Google  β”‚      β”‚
                    β”‚  β”‚   Sheets  β”‚      β”‚
                    β”‚  β”‚   Tool    β”‚      β”‚
                    β”‚  β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜      β”‚
                    β”‚  β”Œβ”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”      β”‚
                    β”‚  β”‚ Respond   β”‚      β”‚
                    β”‚  β”‚ Webhook   β”‚      β”‚
                    β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Konfigurasi di ElevenLabs ​

  1. Buat Agent Baru β†’ "Blank Agent" β†’ nama: "n8n Agent"
  2. System Prompt: "You are a helpful assistant"
  3. Voice: Russell (outgoing, excited)
  4. Buat Tool Webhook:
ParameterNilai
Namaequity_portfolio_question_tool (tanpa spasi!)
Deskripsi"Use this tool to ask any question about the user's equity portfolio to a specialist assistant"
MethodPOST
URLURL webhook dari n8n (test/production)
Timeout60 detik
Pre-tool speechForce (agar agent bicara sebelum tool dieksekusi)
  1. Body Parameters:
FieldTypeIdentifierRequiredFilled ByDeskripsi
questionStringquestionYaLLMPertanyaan tentang equity portfolio user

Konfigurasi di n8n ​

  1. Webhook (POST) β†’ terima panggilan dari ElevenLabs
  2. AI Agent (Gemini 3 Flash):
    • Input: {{ $json.body.question }} (pertanyaan dari body POST)
    • Tool: Google Sheets (baca portfolio saham)
    • Tanpa memory (setiap panggilan independen)
  3. Respond to Webhook β†’ kirim JSON jawaban kembali ke ElevenLabs

Perbedaan Kunci pada AI Agent ​

Pendekatan 1 (n8n orchestrates):
  Input = {{ $json.text }}         ← dari transcription

Pendekatan 2 (11Labs orchestrates):
  Input = {{ $json.body.question }} ← dari webhook POST body

Mengapa Tanpa Memory? ​

Pada pendekatan 2, n8n dipanggil sebagai "backend tool" β€” setiap panggilan independen. Memory ada di sisi ElevenLabs yang mengelola percakapan secara keseluruhan.


πŸš€ Deploy ke Production ​

Langkah Deploy ​

  1. Di n8n:

    • Salin Production URL dari Webhook node
    • Klik Publish (workflow aktif di production)
  2. Di ElevenLabs:

    • Update URL tool: ganti Test URL β†’ Production URL
    • Klik Save (jangan lupa!)
    • Klik Publish β†’ agent live
    • Copy Shareable Link β†’ buka di browser baru

Test vs Production ​

AspekTest ModeProduction Mode
URLTest URLProduction URL
EksekusiSatu kali per "Execute Workflow"Terus-menerus, otomatis
Multi-questionTidak bisa (satu webhook call)Bisa (berulang kali)
Kapan pakaiSaat development & debuggingSaat agent siap digunakan

Hasil Testing Production ​

Agent berhasil menjawab pertanyaan berturut-turut tentang portfolio saham:

  • "How many shares of SPY do I have?" β†’ "You currently have 2 shares of SPY"
  • "What other stocks do I have?" β†’ "BND, iShares Core Allocation ETF, iShares Core Aggressive Allocation ETF"

πŸ“Š Rangkuman ​

Poin-Poin Utama ​

#KonsepDeskripsi
1Dua pola integrasin8n orchestrates vs ElevenLabs orchestrates
2Latency = faktor kunci11Labs orchestration menghasilkan latency jauh lebih rendah
3Webhook tool di 11LabsLLM mengisi body JSON β†’ POST ke n8n webhook
4Generic nodes di n8nHTTP Request Node + Webhook Node untuk integrasi apapun
5voice.htmlHalaman test sederhana untuk menguji audio webhook
6Gemini sebagai chat modelGemini 3 Flash digunakan sebagai alternatif OpenAI
7Test β†’ Production deployUbah URL webhook, publish kedua platform

Teknologi Yang Digunakan Hari Ini ​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Platform    β”‚ Peran                           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ ElevenLabs  β”‚ Voice agent + STT/TTS API      β”‚
β”‚ n8n         β”‚ Business logic & orchestration  β”‚
β”‚ Gemini      β”‚ Chat model (AI Agent)           β”‚
β”‚ Google Sheetsβ”‚ Data tool (equity portfolio)   β”‚
β”‚ voice.html  β”‚ Test page untuk audio webhook   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ† Pencapaian ​

╔══════════════════════════════════════════════════════════╗
β•‘  βœ… Memahami dua pola integrasi 11Labs + n8n           β•‘
β•‘  βœ… Membangun Pendekatan 1 (n8n orchestrates)          β•‘
β•‘  βœ… Membangun Pendekatan 2 (11Labs orchestrates) β˜…     β•‘
β•‘  βœ… Menggunakan generic Webhook + Respond to Webhook   β•‘
β•‘  βœ… Konfigurasi webhook tool di ElevenLabs             β•‘
β•‘  βœ… Deploy kedua platform ke production                β•‘
β•‘                                                          β•‘
β•‘  πŸ“Š Progress Kursus: 47% β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘            β•‘
β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

Selanjutnya: Memahami RAG (Retrieval-Augmented Generation) β€” teknik paling populer untuk memberikan LLM pengetahuan domain spesifik.

Rangkuman kursus Udemy β€” AI Builder: Create Agents, Voice Agents & Automations in n8n