n8n + AI Agents: Automasi Workflow dengan Kecerdasan Buatan

# 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...

By Ruby Abdullah · · tutorial
n8nWorkflow AutomationAI AgentNo-CodeIntegration

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:
  • Klik "Add Credential"
  • Pilih "OpenAI API"
  • Masukkan API key Anda
  • Klik "Save"
  • Untuk Anthropic:
  • Klik "Add Credential"
  • Pilih "Anthropic API"
  • Masukkan API key Anda
  • Klik "Save"
  • 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:

  • Tambahkan node "OpenAI Chat Model"
  • Pilih credential OpenAI yang sudah dibuat
  • Konfigurasi parameter:
  • {
    

    "model": "gpt-4o",

    "temperature": 0.7,

    "maxTokens": 2048,

    "topP": 1

    }

    Anthropic Chat Model Node

    Untuk menggunakan model Anthropic:

  • Tambahkan node "Anthropic Chat Model"
  • Pilih credential Anthropic yang sudah dibuat
  • Konfigurasi parameter:
  • {
    

    "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:

  • Tambahkan node "Basic LLM Chain"
  • Hubungkan ke Chat Model node (OpenAI atau Anthropic)
  • Tulis prompt template:
  • 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:

  • Tambahkan node "Conversational Agent"
  • Hubungkan ke Chat Model node
  • Tambahkan "Window Buffer Memory" node
  • Konfigurasi system prompt:
  • 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:

  • Tambahkan node "Qdrant Vector Store"
  • Konfigurasi URL: http://qdrant:6333
  • Tambahkan node "Document Loader" untuk memasukkan dokumen
  • Hubungkan ke "Embeddings" node untuk mengubah teks menjadi vector
  • Retrieval 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

  • Tambahkan node "Webhook" sebagai trigger
  • Konfigurasi:
  • {
    

    "httpMethod": "POST",

    "path": "customer-support",

    "authentication": "headerAuth",

    "headerName": "X-API-Key",

    "headerValue": "{{ $credentials.webhookApiKey }}"

    }

  • URL webhook akan tersedia di: https://your-n8n-domain.com/webhook/customer-support
  • Testing 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.

    Artikel Terkait

    Tutorial Browser-Use: Automasi Browser dengan AI Agent

    Tutorial Browser-Use: Automasi Browser dengan AI Agent Pendahuluan Browser-Use adalah library Python open-source yang me...

    Smolagents: Framework AI Agent Ringan dari HuggingFace

    Smolagents: Framework AI Agent Ringan dari HuggingFace Pendahuluan Smolagents adalah framework AI agent yang ringan dan ...

    Tutorial Phidata (Agno): Framework AI Agent yang Simpel dan Powerful

    Tutorial Phidata (Agno): Framework AI Agent yang Simpel dan Powerful Membangun AI agent yang cerdas dan otonom kini sema...

    Tutorial CrewAI: Membangun Multi-Agent AI Framework

    CrewAI - Framework AI Multi-Agen Daftar Isi Pendahuluan Prasyarat Instalasi dan Pengaturan Konsep Dasar 5...