JIPRAKS Classroom

Cara Bangun AI Agent untuk Automasi Invoice Reconciliation di n8n + GPT (MVP 2 Hari)

· 4 menit baca

Cara Bangun AI Agent untuk Automasi Invoice Reconciliation di n8n + GPT (MVP 2 Hari)

Pain point: Tim finance sering terjebak memeriksa ribuan invoice tiap bulan, mencocokkan angka antara sistem billing, bank statement, dan purchase order. Proses manual bikin error, delay cash‑flow, dan bikin tim sales frustrasi.

Kenapa n8n + GPT?

n8n adalah orchestration engine low‑code yang bisa menghubungkan hampir semua API tanpa menulis server. GPT (ChatGPT atau model OpenAI) menyelesaikan "pemahaman bahasa" – meng‑extract nilai, menormalkan istilah, bahkan menilai anomali. Kombinasi keduanya memberi AI Agent yang meng‑automasi siklus reconciliasi penuh: ingest, extract, match, alert, dan close.

Arsitektur Workflow (High‑level)

  1. Trigger: Cron (setiap hari pukul 02:00) atau webhook dari sistem billing (misal Stripe) untuk invoice baru.
  2. Ingest: Ambil file CSV/Excel dari S3 atau Google Drive + ambil bank statement via API (Papara, Midtrans, atau CSV).
  3. Extract dengan GPT: Node HTTP Request → OpenAI men‑prompt GPT untuk mengekstrak invoice_number, amount, due_date, vendor_name dari teks bebas (misal PDF OCR hasil).
  4. Normalize & Enrich: Mapping vendor aliases menggunakan Set node + lookup ke Google Sheets master list.
  5. Match Engine: Gunakan Function node (JS) untuk mencocokkan invoice vs payment berdasarkan invoice_number atau fuzzy amount (+‑5%).
  6. Decision: Jika match berhasil → buat entry di database (PostgreSQL). Jika tidak → kirim notifikasi Slack + email dengan ringkasan yang di‑generate GPT ("Tidak ditemukan pembayaran untuk INV‑2024‑0012 …").
  7. Auto‑Close: Untuk match berhasil, kirim webhook ke ERP (SAP, Odoo) untuk men‑update status "Paid".
  8. Logging & Observability: Simpan log JSON ke Elasticsearch + alert jika error rate > 5%.

Langkah‑per‑Langkah Implementasi

1. Siapkan lingkungan n8n

  • Deploy n8n via Docker (docker run -p 5678:5678 n8nio/n8n) atau gunakan cloud n8n.io.
  • Pasang credential untuk OpenAI, S3, Slack, PostgreSQL di menu Credentials.

2. Buat workflow baru “Invoice Reconciliation”

  • Tambahkan node Cron – schedule = 0 2 * * *.
  • Node AWS S3 – Download untuk folder /invoices/daily/.
  • Node HTTP Request ke API bank untuk CSV statement (auth via API key).

3. Prompt GPT untuk ekstraksi

Prompt contoh:

Extract the following fields from the invoice text: invoice_number, vendor_name, issue_date (YYYY-MM-DD), due_date (YYYY-MM-DD), total_amount (numeric). Return JSON.
Invoice Text:
{{ $json["content"] }}

Gunakan OpenAI node, model gpt-4o-mini, temperature 0. Simpan output ke Set node dengan return JSON.parse($json["choices"][0]["message"]["content"]).

4. Normalisasi vendor

Upload vendors.csv ke Google Sheet (col: alias, master_name). Buat node Google Sheets – Lookup untuk mengganti alias menjadi master_name.

5. Matching Logic (JS)

const invoices = $json["invoices"];
const payments = $json["payments"];
let matches = [];
invoices.forEach(inv => {
  const cand = payments.find(p => p.invoice_number === inv.invoice_number && Math.abs(p.amount - inv.amount) < inv.amount*0.05);
  if (cand) {
    matches.push({invoice: inv, payment: cand});
  } else {
    // fallback fuzzy on amount only
    const fuzzy = payments.find(p => Math.abs(p.amount - inv.amount) < inv.amount*0.05);
    if (fuzzy) matches.push({invoice: inv, payment: fuzzy, warning: "fuzzy_match"});
  }
});
return [{matches}];

6. Decision & Notifikasi

  • Gunakan If node: matches.length > 0 → branch matched, else → unmatched.
  • Branch matched: Loop MatchesPostgreSQL – Insert + Webhook – ERP.
  • Branch unmatched: Buat summary via GPT:
    Summarize the unmatched invoices in a short bullet list for finance team.
    Kirim ke Slack (Slack – Send Message) dan email (SMTP – Send).

7. Logging

Set node JSON.stringify($json)Elasticsearch – Index Document. Tambahkan Error Catch untuk meng‑alert ke Slack jika ada exception.

Contoh Use Case Real

PT FinTech Indonesia mengelola 3.200 invoice/bulan lewat Stripe, Midtrans, dan bank BCA. Sebelum otomasi, tim finance memerlukan 2‑3 hari kerja untuk reconciliasi. Setelah menerapkan workflow di atas (2‑hari MVP), proses selesai dalam 30 menit dengan error rate turun 92%. Finance kini fokus pada analisis cash‑flow, bukan data entry.

Insight & Strategi Penting

  • Prompt Engineering Matters: Ringkas dan beri contoh format output (JSON). Tanpa ini, GPT sering mengembalikan teks bebas yang susah di‑parse.
  • Hybrid Matching: Kombinasi exact‑match + fuzzy amount meminimalkan false negative tanpa menambah false positive.
  • Human‑in‑the‑Loop (HITL) pada unmatched: Biarkan GPT generate ringkasan, tim hanya klik “Approve” di Slack, mengurangi interaksi manual.
  • Cost Control: Gunakan model gpt-4o-mini (≈$0.0004 per 1k token) hanya untuk ekstraksi; untuk summarization gunakan same model – total biaya < $5/bulan untuk 10k invoice.
  • Observability: Simpan metrics (matched, unmatched, latency) ke Grafana via Prometheus exporter n8n. Deteksi regresi prompt dengan alert.

Penutup & Call to Action

Dengan kombinasi n8n sebagai orkestrator dan GPT sebagai AI Agent, kamu bisa meng‑transformasi proses invoice reconciliation yang biasanya memakan waktu berhari‑hari menjadi otomatis dalam hitungan menit. Mulai dari langkah di atas, deploy workflow pertama dalam 2 hari, lalu iterasi prompt serta matching logic untuk menyesuaikan dengan domain kamu.

👉 Challenge: Buat workflow serupa untuk purchase order matching atau expense claim reconciliation. Share hasilnya di komunitas JIPRAKS Classroom, dan dapatkan feedback langsung dari para AI Engineer lainnya!

Artikel terkait