n8n + AI Agents: Automasi Workflow dengan Kecerdasan Buatan
Pendahuluan
n8n adalah platform workflow automation yang bersifat open-source dan dapat di-self-host, memungkinkan Anda menghubungkan berbagai aplikasi dan layanan secara visual tanpa menulis banyak kode. Dengan hadirnya fitur AI Agent di n8n, platform ini menjadi lebih powerful karena mampu mengintegrasikan kemampuan Large Language Model (LLM) seperti OpenAI dan Anthropic langsung ke dalam workflow Anda.
Dalam tutorial ini, kita akan mempelajari cara menggunakan n8n mulai dari instalasi, konsep dasar workflow, hingga membangun pipeline customer support otomatis yang didukung oleh AI. Tutorial ini cocok untuk developer, data engineer, dan siapa saja yang ingin mengotomasi proses bisnis dengan kecerdasan buatan.
Prasyarat
Sebelum memulai, pastikan Anda memiliki:
- Docker dan Docker Compose terinstal (untuk self-hosted)
- Node.js v18+ (untuk instalasi via npm)
- API key dari OpenAI atau Anthropic
- Pemahaman dasar tentang REST API dan JSON
Instalasi n8n
Metode 1: Docker Self-Hosted (Rekomendasi)
Docker adalah cara paling mudah dan reliable untuk menjalankan n8n di server Anda sendiri.
# Buat direktori untuk n8n
mkdir n8n-docker && cd n8n-docker
Buat file docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
n8n:
image: docker.n8n.io/n8nio/n8n
restart: always
ports:
- "5678:5678"
environment:
- N8NBASICAUTHACTIVE=true
- N8NBASICAUTHUSER=admin
- N8NBASICAUTHPASSWORD=securepassword
- N8NHOST=localhost
- N8NPORT=5678
- N8NPROTOCOL=http
- GENERICTIMEZONE=Asia/Jakarta
volumes:
- n8ndata:/home/node/.n8n
volumes:
n8ndata:
EOF
Jalankan n8n
docker compose up -d
Setelah container berjalan, buka browser dan akses http://localhost:5678. Anda akan melihat halaman setup awal n8n.
Metode 2: Instalasi via npm
Jika Anda lebih suka menjalankan n8n secara langsung tanpa Docker:
# Instal n8n secara global
npm install -g n8n
Jalankan n8n
n8n start
Atau jalankan dengan tunnel untuk testing webhook
n8n start --tunnel
Untuk menjalankan n8n sebagai background service di Linux, Anda bisa menggunakan pm2:
npm install -g pm2
pm2 start n8n
pm2 save
pm2 startup
Konsep Dasar Workflow
Nodes
Node adalah unit dasar dalam n8n. Setiap node melakukan satu tugas spesifik, seperti mengirim HTTP request, memproses data, atau berinteraksi dengan layanan eksternal. Ada beberapa jenis node:
- Trigger Nodes: Memulai workflow (misalnya Webhook, Schedule, Email Trigger)
- Regular Nodes: Memproses data (misalnya HTTP Request, Code, IF)
- AI Nodes: Berinteraksi dengan model AI (misalnya AI Agent, LLM Chain)
Connections
Connections menghubungkan output dari satu node ke input node lainnya. Data mengalir melalui connections dalam bentuk JSON items. Setiap item adalah satu unit data yang diproses.
[
{
"json": {
"name": "John",
"email": "john@example.com",
"message": "Saya butuh bantuan dengan pesanan saya"
}
}
]
Triggers
Trigger menentukan kapan workflow dijalankan. Beberapa trigger yang umum digunakan:
- Webhook Trigger: Menjalankan workflow saat menerima HTTP request
- Schedule Trigger: Menjalankan workflow pada jadwal tertentu (cron)
- Email Trigger: Menjalankan workflow saat email baru diterima
- Manual Trigger: Menjalankan workflow secara manual dari editor
Setup AI Agent Node
Menambahkan Credentials
Sebelum menggunakan AI nodes, Anda perlu menambahkan credentials untuk provider LLM. Buka menu Settings > Credentials dan tambahkan:
Untuk OpenAI:Credentials Management Best Practices
Beberapa tips penting untuk mengelola credentials di n8n:
- Gunakan environment variables untuk menyimpan API key di production
- Jangan pernah hard-code API key di dalam Code node
- Rotasi API key secara berkala
- Batasi akses ke halaman credentials hanya untuk admin
Anda juga bisa mengatur credentials melalui environment variables:
# Di docker-compose.yml, tambahkan:
environment:
- CREDENTIALSOVERWRITEDATA={"openAiApi":{"apiKey":"sk-your-key"}}
Menghubungkan ke OpenAI dan Anthropic
OpenAI Chat Model Node
Untuk menggunakan model OpenAI di workflow Anda:
{
"model": "gpt-4o",
"temperature": 0.7,
"maxTokens": 2048,
"topP": 1
}
Anthropic Chat Model Node
Untuk menggunakan model Anthropic:
{
"model": "claude-sonnet-4-20250514",
"temperature": 0.7,
"maxTokens": 2048
}
Tool Nodes
Tool nodes memungkinkan AI agent Anda berinteraksi dengan dunia luar. Berikut beberapa tool node penting:
HTTP Request Tool
Memungkinkan AI agent membuat HTTP request ke API eksternal:
{
"name": "Customer API",
"description": "Mengambil data pelanggan berdasarkan ID",
"url": "https://api.example.com/customers/{{ $json.customerId }}",
"method": "GET",
"headers": {
"Authorization": "Bearer {{ $credentials.apiToken }}"
}
}
Code Tool
Menjalankan kode JavaScript atau Python untuk memproses data:
// Code Tool - Contoh menganalisis sentimen sederhana
const message = $input.first().json.message;
const positiveWords = ['bagus', 'senang', 'terima kasih', 'puas', 'excellent'];
const negativeWords = ['buruk', 'kecewa', 'marah', 'lambat', 'gagal'];
let sentiment = 'neutral';
const lowerMessage = message.toLowerCase();
if (positiveWords.some(word => lowerMessage.includes(word))) {
sentiment = 'positive';
} else if (negativeWords.some(word => lowerMessage.includes(word))) {
sentiment = 'negative';
}
return [{ json: { message, sentiment } }];
Database Tool
Memungkinkan AI agent mengakses database untuk membaca atau menulis data:
-- Contoh query untuk Database Tool (PostgreSQL)
SELECT orderid, status, createdat
FROM orders
WHERE customeremail = '{{ $json.email }}'
ORDER BY createdat DESC
LIMIT 5;
AI Chains
Basic LLM Chain
Basic LLM Chain adalah cara paling sederhana untuk menggunakan LLM di n8n. Chain ini menerima prompt dan mengembalikan respons:
Kamu adalah asisten customer support yang ramah dan profesional.
Analisis pesan pelanggan berikut dan berikan klasifikasi:
Pesan: {{ $json.message }}
Klasifikasikan ke dalam salah satu kategori berikut:
- billing: Pertanyaan tentang tagihan atau pembayaran
- technical: Masalah teknis dengan produk
- general: Pertanyaan umum
- complaint: Keluhan pelanggan
Berikan respons dalam format JSON:
{"category": "...", "priority": "high/medium/low", "summary": "..."}
Conversational Chain
Conversational Chain mempertahankan konteks percakapan melalui memory:
Kamu adalah asisten virtual untuk toko online "TokoMaju".
Kamu membantu pelanggan dengan:
- Informasi produk dan ketersediaan stok
- Status pengiriman pesanan
- Proses pengembalian barang
- Pertanyaan umum tentang layanan
Selalu bersikap ramah dan gunakan bahasa Indonesia yang baik.
Jika kamu tidak tahu jawabannya, arahkan pelanggan ke tim support manusia.
Integrasi Vector Store
Vector store memungkinkan AI agent Anda mencari informasi dari dokumen knowledge base menggunakan semantic search.
Setup dengan Pinecone
{
"vectorStore": "Pinecone",
"indexName": "knowledge-base",
"namespace": "customer-support",
"embedding": {
"model": "text-embedding-3-small",
"dimensions": 1536
}
}
Setup dengan Qdrant (Self-Hosted)
Untuk opsi self-hosted, Anda bisa menggunakan Qdrant:
# Tambahkan ke docker-compose.yml
services:
qdrant:
image: qdrant/qdrant
ports:
- "6333:6333"
volumes:
- qdrantdata:/qdrant/storage
Kemudian di n8n:
http://qdrant:6333Retrieval Workflow
Berikut contoh workflow untuk retrieval dari vector store:
Webhook Trigger → Extract Question → Vector Store Retriever → AI Agent → Response
AI Agent akan menggunakan hasil dari vector store sebagai konteks tambahan untuk menjawab pertanyaan pelanggan.
Webhook Triggers
Webhook adalah cara paling umum untuk menerima data dari aplikasi eksternal secara real-time.
Membuat Webhook Endpoint
{
"httpMethod": "POST",
"path": "customer-support",
"authentication": "headerAuth",
"headerName": "X-API-Key",
"headerValue": "{{ $credentials.webhookApiKey }}"
}
https://your-n8n-domain.com/webhook/customer-supportTesting Webhook
curl -X POST http://localhost:5678/webhook/customer-support \
-H "Content-Type: application/json" \
-H "X-API-Key: your-secret-key" \
-d '{
"customerid": "C001",
"name": "Budi Santoso",
"email": "budi@example.com",
"message": "Pesanan saya belum sampai sudah 5 hari",
"channel": "web"
}'
Error Handling
n8n menyediakan beberapa mekanisme untuk menangani error dalam workflow:
Error Trigger Node
Node ini menangkap error dari workflow lain dan memungkinkan Anda membuat logic penanganan error:
// Di Code node setelah Error Trigger,const errorData = $input.first().json;
const notification = {
text:
Workflow Error Alert!Workflow: ${errorData.workflow.name}
Node: ${errorData.execution.error.node}
Message: ${errorData.execution.error.message}
Time: ${new Date().toISOString()}
channel: "#alerts"
};
return [{ json: notification }];
Try-Catch Pattern
Gunakan IF node untuk memeriksa apakah operasi berhasil:
// Periksa apakah API response valid
const statusCode = $input.first().json.statusCode;
if (statusCode >= 200 && statusCode < 300) {
// Success path
return [{ json: { success: true, data: $input.first().json.body } }];
} else {
// Error path - kirim ke fallback
return [{ json: { success: false, error: $input.first().json.body } }];
}
Retry Logic
Setiap node di n8n dapat dikonfigurasi untuk retry otomatis:
{
"retry": {
"enabled": true,
"maxRetries": 3,
"waitBetweenRetries": 1000
}
}
Contoh Praktis: Automated Customer Support Pipeline
Sekarang kita akan membangun pipeline customer support otomatis yang lengkap. Pipeline ini menerima pesan pelanggan melalui webhook, mengklasifikasikan intent menggunakan AI, mengarahkan ke handler yang sesuai, dan merespons melalui API.
Arsitektur Pipeline
Webhook (Terima Pesan)
↓
AI Agent (Klasifikasi Intent)
↓
Switch Node (Routing)
├── billing → Billing Handler → Response
├── technical → Technical Handler → Response
├── complaint → Complaint Handler + Escalation → Response
└── general → General Handler → Response
↓
HTTP Request (Kirim Response via API)
Langkah 1: Setup Webhook Trigger
Buat workflow baru dan tambahkan Webhook node:
{
"node": "Webhook",
"parameters": {
"httpMethod": "POST",
"path": "support-inbox",
"responseMode": "responseNode",
"options": {
"rawBody": false
}
}
}
Langkah 2: AI Classification Agent
Tambahkan AI Agent node yang terhubung ke OpenAI Chat Model:
System Prompt:
Kamu adalah sistem klasifikasi pesan customer support.
Analisis pesan pelanggan dan kembalikan hasil klasifikasi dalam format JSON.
Kategori yang tersedia:
billing - Pertanyaan tagihan, pembayaran, refund, invoice
technical - Masalah teknis, bug, error, tidak bisa akses
complaint - Keluhan, ketidakpuasan, pengaduan
general - Pertanyaan umum, informasi produk, jam operasional
Level prioritas:
- high: Membutuhkan penanganan segera (keluhan serius, layanan down)
- medium: Perlu ditangani dalam 24 jam
- low: Bisa ditangani dalam waktu normal
Format output:
{
"category": "billing|technical|complaint|general",
"priority": "high|medium|low",
"summary": "ringkasan singkat masalah",
"suggestedresponse": "saran respons untuk pelanggan"
}
Langkah 3: Switch Node untuk Routing
Tambahkan Switch node untuk mengarahkan pesan berdasarkan kategori:
// Routing rules di Switch node
// Rule 1: Billing
$json.category === "billing"
// Rule 2: Technical
$json.category === "technical"
// Rule 3: Complaint
$json.category === "complaint"
// Rule 4: General (fallback)
true
Langkah 4: Handler untuk Setiap Kategori
Billing Handler (Code Node):const classification = $input.first().json;
const originalMessage = $('Webhook').first().json;
const response = {
customerid: originalMessage.customerid,
category: "billing",
response: classification.suggestedresponse,
metadata: {
priority: classification.priority,
handledby: "ai-agent",
timestamp: new Date().toISOString()
}
};
// Jika prioritas tinggi, tandai untuk eskalasi
if (classification.priority === "high") {
response.escalate = true;
response.escalationteam = "billing-senior";
}
return [{ json: response }];
Technical Handler (Code Node):
const classification = $input.first().json;
const originalMessage = $('Webhook').first().json;
const response = {
customerid: originalMessage.customerid,
category: "technical",
response: classification.suggestedresponse,
metadata: {
priority: classification.priority,
handledby: "ai-agent",
timestamp: new Date().toISOString()
},
createticket: true,
ticketdata: {
title: classification.summary,
priority: classification.priority,
assignedteam: "engineering"
}
};
return [{ json: response }];
Complaint Handler (Code Node):
const classification = $input.first().json;
const originalMessage = $('Webhook').first().json;
const response = {
customerid: originalMessage.customerid,
category: "complaint",
response: classification.suggestedresponse,
metadata: {
priority: "high", // Keluhan selalu prioritas tinggi
handledby: "ai-agent",
timestamp: new Date().toISOString()
},
escalate: true,
escalationteam: "customer-relations",
notification: {
channel: "slack",
message: Keluhan baru dari ${originalMessage.name}: ${classification.summary}
}
};
return [{ json: response }];
Langkah 5: Kirim Response via API
Tambahkan HTTP Request node di akhir setiap handler:
{
"node": "HTTP Request",
"parameters": {
"method": "POST",
"url": "https://api.example.com/support/responses",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer {{ $credentials.supportApiToken }}"
},
"body": {
"customerid": "{{ $json.customerid }}",
"responsetext": "{{ $json.response }}",
"category": "{{ $json.category }}",
"metadata": "{{ JSON.stringify($json.metadata) }}"
}
}
}
Langkah 6: Respond to Webhook
Tambahkan "Respond to Webhook" node untuk mengembalikan respons ke pemanggil:
const result = $input.first().json;
return [{
json: {
success: true,
message: "Pesan berhasil diproses",
category: result.category,
priority: result.metadata.priority,
response: result.response,
escalated: result.escalate || false
}
}];
Testing Pipeline
# Test dengan pesan billing
curl -X POST http://localhost:5678/webhook/support-inbox \
-H "Content-Type: application/json" \
-d '{
"customerid": "C001",
"name": "Ani Wijaya",
"email": "ani@example.com",
"message": "Saya sudah bayar tapi invoice masih menunjukkan belum lunas"
}'
Test dengan pesan technical
curl -X POST http://localhost:5678/webhook/support-inbox \
-H "Content-Type: application/json" \
-d '{
"customerid": "C002",
"name": "Rudi Hartono",
"email": "rudi@example.com",
"message": "Aplikasi error 500 ketika saya coba upload file PDF"
}'
Test dengan keluhan
curl -X POST http://localhost:5678/webhook/support-inbox \
-H "Content-Type: application/json" \
-d '{
"customerid": "C003",
"name": "Siti Nurhaliza",
"email": "siti@example.com",
"message": "Saya sangat kecewa dengan layanan kalian, sudah 3 kali komplain tidak ada solusi"
}'
Tips Deployment Production
Keamanan
# Gunakan HTTPS dengan reverse proxy (nginx)
server {
listen 443 ssl;
servername n8n.yourdomain.com;
sslcertificate /etc/ssl/certs/your-cert.pem;
sslcertificatekey /etc/ssl/private/your-key.pem;
location / {
proxypass http://localhost:5678;
proxysetheader Host $host;
proxysetheader X-Real-IP $remoteaddr;
proxysetheader X-Forwarded-For $proxyaddxforwardedfor;
proxysetheader X-Forwarded-Proto $scheme;
# WebSocket support
proxyhttpversion 1.1;
proxysetheader Upgrade $httpupgrade;
proxysetheader Connection "upgrade";
}
}
Monitoring
Aktifkan logging dan monitoring untuk production:
# Environment variables untuk logging
N8NLOGLEVEL=info
N8NLOGOUTPUT=console,file
N8NLOGFILELOCATION=/var/log/n8n/
EXECUTIONSDATASAVEONERROR=all
EXECUTIONSDATASAVEONSUCCESS=all
Backup
# Backup n8n data secara berkala
#!/bin/bash
BACKUPDIR="/backups/n8n"
DATE=$(date +%Y%m%d%H%M%S)
Export semua workflows
n8n export:workflow --all --output="$BACKUPDIR/workflows$DATE.json"
Export credentials (terenkripsi)
n8n export:credentials --all --output="$BACKUPDIR/credentials$DATE.json"
Backup database
docker exec n8n-db pgdump -U n8n n8n > "$BACKUPDIR/db$DATE.sql"
Kesimpulan
n8n dengan fitur AI Agent memberikan kemampuan luar biasa untuk mengotomasi proses bisnis yang kompleks. Dalam tutorial ini, kita telah mempelajari:
- Cara menginstal n8n menggunakan Docker dan npm
- Konsep dasar workflow: nodes, connections, dan triggers
- Setup AI Agent dengan model OpenAI dan Anthropic
- Penggunaan tool nodes untuk interaksi dengan sistem eksternal
- AI Chains untuk pemrosesan bahasa alami
- Integrasi vector store untuk knowledge base
- Error handling dan best practices
- Membangun pipeline customer support otomatis end-to-end
Dengan fondasi ini, Anda bisa membangun berbagai automasi yang lebih kompleks, seperti lead scoring otomatis, content moderation, document processing, dan banyak lagi. Kekuatan n8n terletak pada kemampuannya menggabungkan visual workflow builder dengan kekuatan AI, membuatnya accessible untuk developer maupun non-developer.