2026-10-19 | Pausi |

Catat Pengeluaran Cukup Lewat Chat WhatsApp

Catat Pengeluaran Cukup Lewat Chat WhatsApp
Hallo, kali ini saya mau cerita soal kebiasaan yang dari dulu susah sekali saya jaga: mencatat pengeluaran.

1. Masalahnya: bukan di Notion, tapi di cara ngisinya

Sebenarnya saya sudah punya database pengeluaran di Notion, lengkap dengan kolom tanggal, nominal, kategori, merchant, metode pembayaran, dan lain-lain.
Masalahnya, setiap habis bayar sesuatu saya harus:
  1. buka Notion,
  2. cari database-nya,
  3. tambah baris baru,
  4. isi kolom satu per satu, pilih kategori, pilih metode bayar…
Untuk transaksi kecil seperti beli kopi, prosesnya lebih lama dari transaksinya sendiri. Akhirnya ditunda, lalu lupa, lalu database-nya bolong berhari-hari. Ujung-ujungnya tidak konsisten.
Jadi kesimpulan saya: yang bikin gagal bukan alatnya, tapi gesekan saat input.

2. Solusinya: kirim pesan seadanya, AI yang merapikan

Sekarang alurnya jadi begini: setiap habis bayar, saya cukup kirim pesan WhatsApp ke nomor bot, dengan bahasa seenaknya. Bot yang memahami isinya, mengisi kolom-kolom di Notion, lalu membalas ringkasan.
Yang saya pakai:
  • Hermes Agent dari Nous Research, agent AI open-source yang bisa dihubungkan ke WhatsApp, Telegram, Discord, dll.
  • OpenRouter sebagai penyedia model AI: DeepSeek V4 Flash untuk mengolah teks (murah, nanti saya bahas biayanya), plus satu model terpisah untuk membaca gambar.
  • Notion API untuk menulis ke database.
  • Sebuah VPS Ubuntu untuk menjalankan semuanya 24 jam.
Alur: WhatsApp → Hermes Agent di VPS → model di OpenRouter → database Spending di Notion
Alur satu pesan, dari WhatsApp sampai tercatat di Notion. Dua model dipakai untuk tugas berbeda — kenapa begitu, saya ceritakan di bagian berikutnya.

3. Contohnya

Sore itu saya jajan kopi, lalu memotret struknya dan mengirimkannya ke nomor bot — tanpa teks tambahan sama sekali:
Foto struk dikirim ke bot WhatsApp, bot membalas ringkasan TRX-26
Satu foto struk masuk, satu ringkasan keluar. Nama dan foto profil kontak saya sensor.
Bot membaca struknya, mengisi kolom-kolom di Notion, lalu membalas ringkasan: nomor transaksi TRX-26, tanggal, total Rp56.000, rincian item, merchant, kategori, dan metode pembayaran. Baris “File asli dihapus” artinya foto struk tadi sudah di-upload ke kolom Attachment di Notion, dan salinannya di server ikut dibuang.
Hasilnya langsung terlihat di database:
Baris TRX-26 di database Spending di Notion
Database “Spending” di Notion. Baris teratas, TRX-26, lahir dari foto struk di atas.
Tidak harus pakai struk. Kalau cuma beli sesuatu tanpa bukti cetak, saya ketik apa adanya — misalnya kopi susu 28rb di kopi kenangan, gopay qris — dan kolom yang sama ikut terisi. Kalau ada yang salah tebak, cukup balas TRX-26 ganti Metode jadi Kartu Kredit, dan bot memperbaiki baris itu.

Bagaimana bot sebenarnya membaca struk itu

Bagian ini yang paling mengejutkan saya waktu mengecek lognya: DeepSeek V4 Flash sama sekali tidak menerima input gambar. Model itu hanya membaca teks.
Yang terjadi sebenarnya begini. Foto masuk, Hermes mencoba menganalisanya lebih dulu lewat vision_analyze, dan gagal — saya memang belum pernah mengatur model khusus untuk tugas vision:
ERROR tools.vision_tools: Error analyzing image:
No LLM provider configured for task=vision provider=auto. Run: hermes setup
Setelah gagal, Hermes tidak menyerah. Ia meneruskan lokasi file-nya ke agent dengan catatan apa adanya, kira-kira "user mengirim gambar tapi saya tidak bisa melihatnya; coba lihat sendiri di image_url: ...". Agent lalu memutuskan sendiri untuk tidak memakai model sama sekali, dan menjalankan OCR lewat terminal:
tesseract img_5b81d92fd68b.jpg stdout -l ind+eng --psm 6
Hasil OCR-nya jauh dari rapi:
BE TOMORO
COFFEE
Taman Ubud Karawaci
Date: 18:17 19 Oct 2026
Banana Muffin
22,000 1 22,000
2 | Breve Latte Iced Medium g
N 34,000 1 34,000
SUBTOTAL: 50,08 | N
j~4 Tax: 5.0)
[~ | TOW: hr 6,00
LY OCBC ORIS 56,000
Berantakan, tapi cukup. Dari teks acak-acakan itu bot menyusun ringkasan yang rapi tadi. Jadi yang membaca struk saya bukan AI yang canggih melihat gambar, melainkan OCR biasa yang dipanggil sendiri oleh agent sebagai jalan keluar — dan saya tidak pernah menyuruhnya melakukan itu.
Kelemahannya juga langsung terasa. Beberapa jam sebelumnya, struk yang sama terbaca 58.000 padahal totalnya 56.000. Lihat sendiri hasil OCR di atas: baris totalnya keluar sebagai [~ | TOW: hr 6,00. Saya koreksi lewat chat ("totalnya 56.000, anda salah membacanya"), bot menghapus entri yang salah, dan screenshot di atas adalah kiriman ulang setelah koreksi itu.

Memberi bot mata beneran

Setelah tahu penyebabnya, saya minta bot mengaktifkan vision — lewat chat, bukan lewat SSH. Ternyata Hermes punya slot model tambahan (auxiliary) khusus untuk tugas-tugas sampingan seperti analisa gambar, terpisah dari model utama. Sekarang isinya:
auxiliary:
  vision:
    provider: openrouter
    model: google/gemini-3-flash-preview
Jadi yang “melihat” tetap bukan model utama. Alurnya sekarang: Gemini membaca gambarnya dan menuliskan apa yang ia lihat, lalu deskripsi teks itu yang diserahkan ke DeepSeek untuk diolah jadi baris Notion. Dua model, dua tugas.
Saya tes ulang dengan struk yang sama persis, dan kali ini hasilnya benar tanpa perlu dikoreksi — termasuk Subtotal Rp50.909, Pajak Rp5.091, Total Rp56.000, dan metode OCBC QRIS. Angka yang bikin OCR tersandung terbaca utuh.

4. Kuncinya ada di “skill”

Di Hermes ada konsep skill: file instruksi (markdown) yang mengajari agent cara mengerjakan tugas tertentu. Skill pencatatan pengeluaran saya berisi:
  • Skema database: 14 kolom (ID TRX-N, Item, Date, Total Amount, Currency, Kategori, Merchant, Metode, Catatan, dll.).
  • Aturan sesuai kebiasaan saya, misalnya:
    • kalau data kurang, tebak yang wajar dan tandai di kolom Catatan,
    • judul Item tidak perlu tanggal (sudah ada kolom Date),
    • Metode diisi nama aplikasi dulu, lalu cara bayarnya: “GoPay + QRIS”, bukan “QRIS + GoPay”,
    • setelah mencatat, selalu kirim ringkasan.
  • Catatan teknis Notion API, misalnya database Notion punya dua ID berbeda (database_id untuk membuat baris, data_source_id untuk query), dan upload file wajib menyertakan header Notion-Version.
Yang menarik: skill ini sebagian besar tidak saya tulis sendiri. Saya hanya ngobrol dengan bot, mengoreksi hasilnya (“jangan pakai tanggal di judul”, “app dulu baru metode”), dan Hermes menuliskan koreksi itu ke dalam skill-nya. Setelah itu fitur curator di Hermes merapikan skill tersebut di belakang layar. Dari catatan di server, dalam dua hari pertama saja skill ini diperbarui 5 kali oleh agent dan 12 kali oleh curator.
Contoh paling jelas: pada 17 Oktober saya cuma nyeletuk di chat, “kalau nanti saya lupa dan mengirimkan dua kali image yang sama, anda cek ya apakah sudah pernah disimpan di Notion-nya”. Dua hari kemudian kalimat itu sudah berdiri sendiri sebagai aturan bernomor di dalam file skill — padahal saya tidak pernah membuka file-nya:
Cek duplikat lampiran — jika user mengirim image/attachment yang terlihat sama dengan entri sebelumnya, cek dulu apakah sudah pernah dilampirkan di Notion (bandingkan merchant + tanggal + nominal); jika mendekati duplikat, konfirmasi ke user sebelum upload.
Di WhatsApp, satu-satunya tanda bahwa itu terjadi cuma sebaris pesan pendek: “Self-improvement review: Skill ‘notion-purchase-order-logging’ patched”.
Skill-nya saya taruh di GitHub supaya bisa dipakai orang lain: pausii/hermes-notion-spending

5. Cara pasangnya (singkat)

Install Hermes di server:
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
source ~/.bashrc
hermes model        # pilih OpenRouter, masukkan API key, pilih model
Hubungkan WhatsApp (scan QR dari HP nomor bot di Linked Devices):
hermes whatsapp
Batasi siapa yang boleh chat ke bot di ~/.hermes/.env:
WHATSAPP_ALLOWED_USERS=628xxxxxxxxxx
NOTION_API_KEY=ntn_xxx
Pasang skill dari repo, lalu jalankan gateway sebagai service supaya tetap hidup setelah reboot:
cp -r skills/notion-purchase-order-logging ~/.hermes/skills/
sudo hermes gateway install --system
Supaya foto struk dibaca model vision dan bukan OCR, atur juga model tambahannya lewat hermes setup — bagian 3 menjelaskan kenapa ini penting.
Detail lengkapnya ada di README repo.

6. Biayanya

Saya pakai DeepSeek V4 Flash lewat OpenRouter. Harga yang tercantum saat tulisan ini dibuat (Oktober 2026):
Jenis token Harga per 1 juta token
Input (instruksi + isi chat) $0.09
Output (jawaban bot) $0.18
Harga model di OpenRouter berubah-ubah, jadi cek halaman modelnya untuk angka terbaru.
Daripada menebak, saya ambil angka pemakaian sebenarnya dari database Hermes di server. Satu sesi, 16–19 Oktober, 71 pesan dari saya, 26 transaksi tercatat:
Jumlah
Token input 30.040.219 (86% dilayani dari cache)
Token output 125.250
Panggilan API 320
Angka input-nya terlihat mengada-ada untuk 71 pesan, dan memang begitu kenyataannya: setiap panggilan mengirim ulang instruksi sistem + isi skill + seluruh riwayat percakapan. Rata-rata ~94 ribu token per panggilan, dan menjelang akhir sesi sudah menyentuh ~200 ribu.
Kalau semua token input ditagih penuh, biayanya $2,73 — sekitar Rp49.000 untuk 3,5 hari itu, atau ~Rp690 per pesan. Tapi 86% input dilayani dari cache, dan harga cache jauh lebih murah dari tarif input normal, jadi tagihan sebenarnya ada di bawah itu — kalau cache ditagih 10% dari tarif normal, angkanya turun ke kisaran Rp11.000.
Model vision-nya sendiri nyaris tidak terasa: 2.208 token input dan 582 token output untuk dua kali analisa gambar.
Pelajaran yang menurut saya lebih berguna daripada angka rupiahnya: yang mahal bukan banyaknya pesan, tapi panjangnya riwayat percakapan. Sesi yang dibiarkan hidup berhari-hari membuat setiap pesan baru makin mahal. Memulai sesi baru secara berkala lebih berpengaruh ke tagihan daripada sibuk memilih model termurah.
Sebelumnya saya pakai Gemini 3.8 Flash sebagai model utama, yang sekitar 10x lebih mahal untuk pekerjaan yang sama.

7. Risiko yang perlu diketahui

Supaya adil, ada beberapa hal yang perlu diperhatikan:
  • Nomor WhatsApp bisa diblokir. Hermes login sebagai “Linked Device” (cara tidak resmi). Pakai nomor terpisah, jangan nomor utama.
  • Agent punya akses terminal ke server. Ini bukan teori: perintah OCR dan curl ke Notion di atas benar-benar dijalankan agent di shell, sebagian lolos lewat auto-approve. Batasi WHATSAPP_ALLOWED_USERS hanya untuk nomor sendiri, dan sebaiknya jangan jalankan sebagai root — saya sendiri masih melanggar yang terakhir.
  • AI bisa salah tebak. Kategori atau merchant kadang meleset, makanya ringkasan balasan dan fitur revisi TRX-N penting.
  • Jaga API key. Pasang limit pengeluaran di OpenRouter, dan jangan pernah commit file .env.
  • Ringkasan tidak selalu muncul di WhatsApp Web. Di setup saya, balasan ringkasan hanya tampil di aplikasi HP, sementara pesan bot yang lain tetap muncul di web. Jadi jangan jadikan WhatsApp Web sebagai arsip — Notion yang jadi catatan sebenarnya.

8. Kesimpulan

Buat saya, perubahan terbesarnya bukan soal AI-nya pintar atau tidak, tapi gesekan input jadi hampir nol. Mencatat pengeluaran sekarang sama mudahnya dengan kirim chat, dan karena itu akhirnya saya bisa konsisten.
Terimakasih sudah membaca…