Skip to content

πŸš€ Day 5 β€” Proyek Akhir: Agentic RAG + Voice Agent + Twilio ​

Minggu 2 Β· Hari 5 β€” Green Day (Proyek) Topik: Agentic RAG Agent (Gemini + Supabase), Voice Agent ElevenLabs, Integrasi Webhook, Deployment Produksi, Twilio Phone Number


πŸ“‹ Daftar Isi ​

  1. Recap & Game Plan
  2. Fase 2: Question-Answering Agent
  3. Mengubah ke Webhook untuk Voice
  4. Integrasi ElevenLabs + n8n
  5. Deploy ke Produksi
  6. Twilio Phone Number (Opsional)
  7. Rangkuman & Poin Penting

πŸ”„ Recap & Game Plan ​

Progress dari Kemarin ​

Kemarin kita menyelesaikan Fase 1 β€” Data Ingest Pipeline:

βœ… Google Sheets (60 produk) β†’ Edit Fields β†’ Chunk β†’ OpenAI Embeddings β†’ Supabase Vector Store

Hari ini kita membangun Fase 2 β€” Question Answering plus integrasi suara!

Rencana Hari Ini ​

╔════════════════════════════════════════════════════════════════╗
β•‘  Step 1: Bangun Chat-Based RAG Agent  (teks)                 β•‘
β•‘  Step 2: Konversi ke Webhook Endpoint  (API)                 β•‘
β•‘  Step 3: Hubungkan dengan ElevenLabs   (suara)               β•‘
β•‘  Step 4: Deploy ke Produksi            (live)                 β•‘
β•‘  Step 5: (Bonus) Twilio Phone Number   (telepon)             β•‘
β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

πŸ€– Fase 2: Question-Answering Agent ​

Arsitektur Agentic RAG ​

         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
         β”‚            AI AGENT (Gemini)              β”‚
         β”‚                                          β”‚
         β”‚  System Prompt:                          β”‚
         β”‚  "You are a product expert..."           β”‚
         β”‚                                          β”‚
         β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
         β”‚  β”‚  LLM Model   β”‚   β”‚     Tool:      β”‚  β”‚
         β”‚  β”‚  Gemini 2.0  β”‚   β”‚  Supabase      β”‚  β”‚
         β”‚  β”‚  Flash       β”‚   β”‚  Vector Store  β”‚  β”‚
         β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚  (Retrieval)   β”‚  β”‚
         β”‚         β–²           β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
         β”‚         β”‚                   β”‚            β”‚
         β”‚    Answers with          Searches        β”‚
         β”‚    retrieved context     for relevant    β”‚
         β”‚                          products        β”‚
         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                      β–²         β”‚
                      β”‚         β–Ό
               User Question   Answer with
               "What keyboard  product data
                is best for    from Supabase
                gaming?"

Langkah Membangun ​

1. Trigger: On Chat Message ​

Kita mulai dengan trigger Chat (bawaan n8n) untuk testing cepat.

2. AI Agent Node ​

ParameterNilai
Agent TypeTools Agent
System Prompt"You are a product expert for a computer accessories store. Use the provided tools to look up product information."
Input{{ $json.chatInput }} (default dari Chat trigger)

3. Sub-node: LLM (Gemini) ​

ParameterNilai
ProviderGoogle Gemini
Modelgemini-2.0-flash
CredentialsGoogle AI API key (gratis)

4. Sub-node: Tool β€” Supabase Vector Store ​

ParameterNilai
OperationRetrieve documents (as tool)
Tableknowledge_base
CredentialsSupabase (sama seperti kemarin)
Top K (Limit)10 (ambil 10 dokumen paling relevan)
Tool Description"Use this tool to look up any product information"

πŸ’‘ Tool Description sangat penting. Ini yang dibaca LLM untuk memutuskan kapan harus menggunakan tool ini. Deskripsi yang baik = penggunaan tool yang tepat.

Sub-node di Dalam Tool: Embedding Model ​

ParameterNilai
ProviderOpenAI Embeddings
Modeltext-embedding-3-small

⚠️ Model harus SAMA dengan yang digunakan saat data ingest! Jika ingest pakai text-embedding-3-small, retrieval juga harus pakai model yang sama.

Testing Chat Agent ​

User:  "What keyboard do you have?"
Agent: "We have several keyboards:
        1. NovaKey Tactile Keyboard ($129.99) - Premium mechanical...
        2. ProType Slim Keyboard ($89.99) - Ultra-slim wireless...
        3. ..."

User:  "Which one is best for gaming?"
Agent: "For gaming, I'd recommend the NovaKey Tactile Keyboard
        because of its mechanical switches and low latency..."

Agen berhasil:

  • βœ… Menerima pertanyaan
  • βœ… Menggunakan tool Supabase untuk cari produk
  • βœ… Mendapat 10 dokumen relevan
  • βœ… Menjawab berdasarkan data produk nyata

πŸ”€ Mengubah ke Webhook untuk Voice ​

Mengapa Perlu Webhook? ​

Chat trigger hanya untuk testing. Untuk integrasi dengan ElevenLabs, kita butuh HTTP endpoint yang bisa dipanggil dari luar.

Perubahan Arsitektur ​

SEBELUM (Chat-based):                    SESUDAH (Webhook-based):
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Chat Message│──▢ AI Agent ──▢ Chat     β”‚ Webhook (POST) │──▢ AI Agent
β”‚ Trigger     β”‚                          β”‚ /rag-agent      β”‚       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜       β”‚
                                                                    β–Ό
                                                          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                                          β”‚ Respond to      β”‚
                                                          β”‚ Webhook         β”‚
                                                          β”‚ (JSON response) β”‚
                                                          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Langkah Konversi ​

  1. Ganti trigger dari "Chat Message" β†’ Webhook (POST)
  2. Sesuaikan input AI Agent: {{ $json.chatInput }} β†’ {{ $json.body.question }}
  3. Hapus Memory node β€” setiap panggilan dari ElevenLabs adalah request independen, tidak perlu konteks percakapan sebelumnya
  4. Tambahkan "Respond to Webhook" di akhir flow β€” return jawaban agent sebagai JSON response

Konfigurasi Webhook ​

ParameterNilai
MethodPOST
Pathrag-agent
ResponseRespond to Webhook node

Konfigurasi Respond to Webhook ​

ParameterNilai
Respond WithText
Response Body{{ $json.output }}

πŸ’‘ Mengapa hapus memory? Setiap request dari ElevenLabs adalah independent call. ElevenLabs menangani konteks percakapan di sisi mereka. Backend n8n cukup menjawab pertanyaan satuan.


πŸŽ™οΈ Integrasi ElevenLabs + n8n ​

Setup ElevenLabs Agent ​

  1. Buat agent baru: "Electronics E-commerce Sales Expert"
  2. System prompt: Expert di aksesoris komputer, ramah, helpful

Konfigurasi Webhook Tool di ElevenLabs ​

ParameterNilai
Tool TypeWebhook
Tool NameProduct Lookup
URLn8n Webhook URL (test URL dulu, production nanti)
MethodPOST
Body Parameterquestion (type: string)
Timeout60 detik (beri waktu cukup)
Pre-tool Speechβœ… Enable
Typing Soundβœ… Enable

Pre-tool Speech ​

Saat agent memanggil tool (yang butuh waktu), daripada diam saja β†’
Agent akan bilang sesuatu seperti:
"Let me check our product catalog for you..."

Ini membuat pengalaman lebih natural β€” user tidak merasa ditinggalkan.

Alur Lengkap (Round-trip) ​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   User   │───▢│  ElevenLabs  │───▢│   n8n   │───▢│  AI Agent    β”‚
β”‚  "What   β”‚    β”‚  Voice Agent β”‚    β”‚ Webhook β”‚    β”‚  (Gemini +   β”‚
β”‚  keyboardβ”‚    β”‚  (STT)       β”‚    β”‚  /rag   β”‚    β”‚   Supabase)  β”‚
β”‚  is best β”‚    β”‚              β”‚    β”‚         β”‚    β”‚              β”‚
β”‚  for     β”‚    β”‚              β”‚    β”‚         β”‚    β”‚              β”‚
β”‚  gaming?"β”‚    β”‚              β”‚    β”‚         β”‚    β”‚              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
                       β”‚                                    β”‚
                       β”‚           β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”              β”‚
                       β”‚           β”‚Supabase β”‚β—€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                       β”‚           β”‚ Vector  β”‚  Tool call:
                       β”‚           β”‚ Search  β”‚  "gaming keyboard"
                       β”‚           β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜
                       β”‚                β”‚ Returns 10 relevant products
                       β”‚                β–Ό
                       β”‚         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                       β”‚         β”‚  Gemini LLM  β”‚
                       β”‚         β”‚  Generates   β”‚
                       │◀────────│  Answer      β”‚
                       β”‚         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                       β”‚
                β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”
                β”‚  ElevenLabs  β”‚
                β”‚  (TTS)       │───▢ πŸ”Š "For gaming, I'd recommend..."
                β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

🌐 Deploy ke Produksi ​

Langkah Deploy ​

n8n Side ​

  1. Activate workflow (toggle ON)
  2. Catat Production URL (berbeda dari Test URL!)
  3. Pastikan workflow sudah di-publish

ElevenLabs Side ​

  1. Update Webhook URL di tool config β†’ ganti Test URL dengan Production URL
  2. Test agent sekali lagi untuk memastikan production URL berfungsi
  3. Publish agent β†’ dapatkan shareable link

Testing Produksi ​

User (suara):  "Hey, can you tell me about your webcams?"
Agent (suara): "Absolutely! We have several webcams available..."
               [data real dari Supabase via n8n]

βœ… Berhasil! Agent suara menjawab pertanyaan produk secara real-time dengan data dari vector database.


πŸ“ž Twilio Phone Number (Opsional) ​

Mengapa Twilio? ​

Sampai sekarang, voice agent hanya bisa dimainkan di widget web. Twilio memungkinkan user menelepon nomor telepon sungguhan dan berbicara dengan agent.

Setup ​

1. Beli Nomor Twilio ​

DetailNilai
Platformtwilio.com
Biaya nomor~$1.25/bulan
TipePhone number (US/International)
Per menit~$0.0085/menit inbound

2. Import ke ElevenLabs ​

  1. ElevenLabs β†’ Agent β†’ Phone Numbers tab
  2. Klik Import from Twilio
  3. Masukkan:
    • Account SID (dari Twilio dashboard)
    • Auth Token (dari Twilio dashboard)
  4. Pilih nomor β†’ Import
  5. Assign nomor ke agent

Testing via Telepon ​

πŸ“± Telepon nomor Twilio
    ↓
πŸ”Š ElevenLabs menerima panggilan
    ↓
πŸ—£οΈ User: "Do you have any good microphones?"
    ↓
🌐 ElevenLabs β†’ n8n Webhook β†’ Gemini + Supabase β†’ Response
    ↓
πŸ”Š Agent: "Yes! We carry three excellent microphones..."
    ↓
πŸ“± User mendengar jawaban via telepon

πŸŽ‰ Full round-trip berhasil! User menelepon nomor biasa β†’ jawaban AI tentang produk dikirim via suara β€” semuanya otomatis.

Biaya Estimasi ​

KomponenBiaya
Twilio number~$1.25/bulan
Twilio minutes~$0.0085/menit (inbound)
ElevenLabsTergantung plan (free tier ada)
OpenAI embed~$0.02 per 1M tokens
SupabaseFree tier cukup
n8n CloudTergantung plan

πŸ“Š Rangkuman ​

Proyek Lengkap Week 2: End-to-End Stack ​

╔══════════════════════════════════════════════════════════════════════╗
β•‘                                                                      β•‘
β•‘  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”             β•‘
β•‘  β”‚ Twilio  β”‚  β”‚ElevenLabs β”‚  β”‚  n8n   β”‚  β”‚ Supabase  β”‚             β•‘
β•‘  β”‚ Phone # │─▢│Voice Agent│─▢│Webhook │─▢│ Vector DB β”‚             β•‘
β•‘  β”‚         β”‚  β”‚(STT + TTS)β”‚  β”‚+ Agent β”‚  β”‚(pgvector) β”‚             β•‘
β•‘  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚+ Geminiβ”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜             β•‘
β•‘                               β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜                             β•‘
β•‘                                                                      β•‘
β•‘  Data Pipeline:  Sheets β†’ Edit Fields β†’ Embed β†’ Supabase            β•‘
β•‘  Query Flow:     Phone β†’ STT β†’ Webhook β†’ Agent β†’ DB β†’ TTS β†’ Phone  β•‘
β•‘                                                                      β•‘
β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

Poin-Poin Utama ​

#KonsepPenjelasan
1Agentic RAGAI Agent + Vector Store tool = agent yang bisa cari data
2Tool DescriptionDeskripsi yang jelas β†’ agent tahu kapan pakai tool
3Webhook konversiChat trigger β†’ Webhook + Respond to Webhook
4Hapus memory untuk APISetiap webhook call independen, tidak perlu history
5Pre-tool speechUX trick: agent bicara sambil menunggu tool
6Production URLHARUS ganti dari test URL sebelum deploy
7Twilio integrationImport nomor ke ElevenLabs via Account SID + Auth Token

Teknologi Stack Minggu Ini ​

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Layer           β”‚ Teknologi                              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Voice I/O       β”‚ ElevenLabs (STT + TTS)                β”‚
β”‚ Phone           β”‚ Twilio (opsional)                      β”‚
β”‚ Orchestration   β”‚ n8n (workflow + webhook)               β”‚
β”‚ AI/LLM          β”‚ Gemini 2.0 Flash (gratis)             β”‚
β”‚ Embedding       β”‚ OpenAI text-embedding-3-small (1536d) β”‚
β”‚ Vector DB       β”‚ Supabase (PostgreSQL + pgvector)       β”‚
β”‚ Data Source      β”‚ Google Sheets (60 produk)             β”‚
β”‚ Transform       β”‚ Edit Fields node (n8n)                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ† Pencapaian ​

╔══════════════════════════════════════════════════════════════╗
β•‘  βœ… Membangun Agentic RAG agent (Gemini + Supabase tool)   β•‘
β•‘  βœ… Konversi chat β†’ webhook endpoint                       β•‘
β•‘  βœ… Integrasi ElevenLabs Voice Agent + n8n backend         β•‘
β•‘  βœ… Deploy ke produksi (kedua platform)                    β•‘
β•‘  βœ… Twilio phone number β€” agent bisa dihubungi via telepon β•‘
β•‘  βœ… Full round-trip: telepon β†’ STT β†’ RAG β†’ TTS β†’ suara    β•‘
β•‘                                                              β•‘
β•‘  πŸ“Š Progress Kursus: 67% β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘              β•‘
β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

Week 2 Selesai! Selanjutnya: Week 3 β€” Multi-Agent Systems & MCP β€” menuju kemampuan tingkat lanjut.

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