Agus Wira.
← Kembali ke project
DiscontinuedWhatsApp BotTypeScriptAutomation

Eling — WhatsApp Reminder Bot

Bot WhatsApp untuk mencatat deadline, menyimpan link tugas, dan membantu pembagian kerja kelompok langsung dari chat. Eling sempat dipakai di satu grup privat, tetapi sekarang tidak lagi digunakan atau dikembangkan.

Role
Solo developer. Saya membuat alur command dan AI, penyimpanan per chat, scheduler WITA, serta integrasi WhatsApp melalui Baileys.
Timeline
16–25 Juni 2026 untuk pengembangan awal, lalu dipakai secara terbatas selama beberapa minggu sebelum dihentikan.

Stack

  • Node.js 18+
  • TypeScript
  • Baileys
  • node-cron
  • JSON
  • OpenAI-compatible API

Problem

Ide Eling muncul dari percakapan di grup kelompok yang berisi saya dan beberapa teman. Pertanyaan seperti “Apa saja tugasnya?” dan “Kapan terakhir dikumpulkan?” sering ditanyakan kembali. Saya kemudian berpikir bahwa bot di dalam grup dapat menjawab pertanyaan tersebut dan mengirim reminder setiap hari.

Eling dibuat untuk menyimpan tiga jenis informasi:

  • deadline beserta mata kuliah, tanggal, jam, dan detail;
  • link tugas yang dapat diberi label dan dicari kembali;
  • pembagian tugas kelompok untuk setiap anggota.

Bot ini tidak ditujukan untuk penggunaan publik. Eling awalnya dipasang di grup untuk menguji apakah alurnya bekerja, lalu sempat dipakai untuk mencatat tugas dan deadline kuliah yang benar-benar ada.

Approach

Eling memiliki command mode dan AI mode. Command mode menggunakan perintah seperti !deadline, !link, dan !grouptask. Mode ini tidak memerlukan AI API dan tetap dapat digunakan ketika API key tidak diisi.

AI mode menerima pertanyaan dengan bahasa natural. Di grup, bot hanya merespons ketika di-mention atau ketika pengguna membalas pesannya. Di chat pribadi, pesan dapat dikirim langsung.

Model tidak menulis ke file secara langsung. Eling menyediakan 11 function tools untuk menambah, membaca, menyelesaikan, mencari, dan menghapus data. Hasil function call dikirim kembali ke model sebelum bot membuat jawaban akhir. Loop tool dibatasi lima putaran, sedangkan memory percakapan menyimpan maksimal 12 pesan per chat.

Setiap grup menggunakan JID WhatsApp sebagai scope. Deadline dan link dari grup lain tidak muncul dalam hasil pencarian. Data hanya dapat dihapus oleh orang yang menambahkannya atau nomor admin yang sudah dikonfigurasi.

Scheduler berjalan setiap menit dalam zona waktu WITA. Reminder sebelum deadline dikirim satu kali per hari mulai pukul 07.00. Setelah deadline lewat, bot mengirim satu notifikasi terlambat dan mempertahankan item di dalam list selama 24 jam.

Architecture

Pesan WhatsApp
      |
      v
Baileys socket
      |
      v
message handler
      |
      +-- awalan "!" ----------> command handler --------+
      |                                               |
      +-- mention / chat pribadi -> OpenAI-compatible  |
                                  function calling ----+
                                                      |
                                                      v
                         deadline / link / group-task stores
                                                      |
                                                      v
                                               file JSON lokal

node-cron --> baca seluruh deadline --> kirim reminder ke chat asal

src/index.ts menangani sesi Baileys, QR login, reconnect, pesan masuk, dan scheduler. handlers/message.ts membaca pesan lalu memilih command mode atau AI mode. Operasi deadline, link, dan tugas kelompok berada di modul terpisah dalam src/storage.

Eling menyimpan data dalam file JSON lokal di mesin tempat bot di-deploy. Saat menulis data, Eling membuat temporary file lalu me-rename-nya menjadi file utama. Cara ini cukup untuk satu proses, tetapi belum mendukung beberapa instance yang menulis data secara bersamaan.

Base URL, API key, dan model AI dibaca dari environment. Provider OpenAI-compatible dapat diganti tanpa mengubah alur pesan. Seluruh fitur command tetap tersedia ketika AI mode dinonaktifkan.

Outcome

Eling sempat dipakai selama beberapa minggu di satu grup privat bersama beberapa teman. Setelah fase testing awal, bot digunakan untuk menyimpan tugas dan deadline kuliah yang nyata. Pemakaiannya tetap terbatas pada grup tersebut dan tidak pernah menjadi bot publik.

Saya tidak menyimpan screenshot percakapannya. Grup tersebut bersifat privat dan bot sudah tidak dijalankan, jadi source code dan README menjadi dokumentasi yang masih tersedia. Eling juga belum memiliki automated test atau data penggunaan yang lebih rinci.

Menjalankan bot membutuhkan VPS yang terus aktif dan mengeluarkan biaya. AI mode juga memakai external API dari provider, sehingga menambah biaya operasional. Data tetap berada di local storage pada mesin deployment.

Dalam penggunaan nyata, jawaban AI belum selalu konsisten dengan data yang tersimpan. Ada kondisi ketika deadline masih ada di dalam list, tetapi AI menjawab bahwa data tersebut tidak ditemukan setelah bot lama tidak diajak berinteraksi. Saya belum mengetahui apakah penyebabnya berada pada context, pemilihan function tool, memory, atau provider.

Lessons

Dari pemakaian selama beberapa minggu, saya melihat perbedaan antara fitur yang bekerja saat testing dan sistem yang cukup stabil untuk terus dijalankan. Eling sempat mencatat tugas nyata, tetapi masih memiliki masalah pada biaya, penyimpanan, dan jawaban AI.

Bot harus selalu aktif agar reminder dapat dikirim. Penyimpanan lokal perlu dipindahkan jika proses berjalan di mesin lain, dan AI API menambah biaya serta hasil yang belum selalu konsisten. Baileys juga bukan client resmi WhatsApp, sehingga perubahan protokol dapat memengaruhi bot.

Sekarang saya lebih membutuhkan tempat untuk menyimpan informasi secara terpusat dan terstruktur. Saya memakai Obsidian untuk materi kuliah, tugas, deadline, ide, serta catatan project dan kompetisi. Obsidian tidak menggantikan fitur reminder Eling, tetapi lebih sesuai dengan kebutuhan saya saat ini.

Mengembangkan Eling lebih lanjut berarti memperbaiki penyimpanan, monitoring, stabilitas integrasi WhatsApp, biaya operasional, dan konsistensi AI mode. Saya belum memiliki waktu untuk mengerjakan bagian-bagian tersebut, sehingga Eling tidak saya lanjutkan.