Awalnya saya sudah pernah membuat workflow pengingat absensi menggunakan n8n. Tapi jujur saja, waktu itu proses bikinnya cukup banyak dibantu AI. Jadi meskipun workflow-nya jalan, saya tidak benar-benar paham alurnya.
Workflow lama yang saya buat kurang lebih seperti ini:
Cron ↓ Baca daftar pegawai ↓ Loop satu per satu ↓ Generate pesan ↓ Kirim WhatsApp personal
Karena pesannya dikirim ke masing-masing nomor pegawai, workflow-nya jadi lumayan panjang.
Nah, beberapa waktu lalu saya kepikiran untuk menyederhanakan semuanya.
Daripada kirim satu-satu ke seluruh pegawai, kenapa tidak kirim sekali saja ke grup WhatsApp kantor?
Selain lebih sederhana, proses maintenance-nya juga jauh lebih mudah.
Kondisi yang saya gunakan
Beberapa catatan setup yang saya pakai:
n8n
Self-hosted.
WhatsApp Gateway
Saya menggunakan:
GOWA
Repository:
https://github.com/aldinokemal/go-whatsapp-web-multidevice
Keamanan
Dashboard GOWA saya amankan menggunakan Cloudflare Access.
Jadi orang luar tidak bisa sembarangan membuka halaman login.
Sedangkan untuk n8n, saya tidak menggunakan URL Cloudflare.
Saya langsung mengakses GOWA menggunakan IP lokal:
http://IP_LOKAL_SERVER:PORT
Tujuannya supaya request dari n8n tidak terhalang proteksi Cloudflare.
Rencana Workflow
Targetnya sederhana:
Pagi
Senin - Jumat 07:45
Kirim ke grup kantor:
Jangan lupa absensi masuk
Sore
Senin - Kamis 16:45
Kirim:
Jangan lupa absensi pulang
Jumat
Jamnya berbeda.
Karena jam kerja kantor berbeda dengan hari biasa.
Membuat Schedule Trigger
Di node pertama saya menggunakan:
Schedule Trigger
Lalu memilih:
Trigger Interval = Weeks
Kemudian memilih hari:
Monday Tuesday Wednesday Thursday Friday
dan mengatur waktu sesuai kebutuhan.
Contoh:
Hour : 07 Minute: 45
Awalnya saya sempat bingung antara menggunakan:
Days
atau
Weeks
Ternyata yang lebih pas adalah:
Weeks
karena kita bisa memilih hari tertentu dan mengecualikan Sabtu-Minggu.
Membuat Isi Pesan
Node kedua saya menggunakan:
Edit Fields
atau yang dulu dikenal sebagai:
Set
Saya membuat field baru bernama:
message
Isi contohnya:
🌞 Selamat pagi. Jangan lupa melakukan absensi masuk. Terima kasih.
Sederhana saja.
Yang penting pesannya tersampaikan.
Mengirim Pesan ke Grup WhatsApp
Bagian ini yang awalnya membuat saya agak bingung.
Karena sebelumnya saya mengirim ke nomor pribadi.
Sedangkan sekarang tujuannya grup WhatsApp.
Ternyata yang dibutuhkan adalah:
Group ID
Formatnya bukan nomor HP.
Kurang lebih seperti ini:
120363xxxxxxxxxxxx@g.us
Yang penting ada akhiran:
@g.us
HTTP Request ke GOWA
Node berikutnya:
HTTP Request
Konfigurasinya:
Method: POST
URL:
http://IP_LOKAL_SERVER:PORT/send/message
Body JSON:
{
"phone": "120363xxxxxxxxxxxx@g.us",
"message": "{{ $json.message }}"
}
Untuk memilih device WhatsApp yang digunakan:
device_id = device_contoh
Karena di server saya ada beberapa device WhatsApp yang terhubung.
Saya ingin workflow ini menggunakan device:
device_contoh
Sempat Bingung Soal Basic Auth
Workflow lama saya menggunakan:
Basic Auth
Sedangkan workflow baru saya mencoba:
Authentication = None
Setelah dicoba ternyata tetap berjalan normal.
Karena request berasal dari jaringan lokal dan endpoint memang bisa diakses dari LAN.
Akhirnya saya memilih yang lebih sederhana:
None
Eksperimen Mention Semua Anggota Grup
Saya juga sempat mencoba:
@everyone
dengan harapan seluruh anggota grup akan terkena mention.
Pesan memang berhasil terkirim:
@everyone
tetapi tidak benar-benar menjadi mention WhatsApp.
Masih tampil sebagai teks biasa.
Untuk sementara saya biarkan saja karena tujuan utama workflow ini hanyalah pengingat absensi.
Tidak terlalu penting harus melakukan mention ke seluruh anggota grup.
Menambahkan Sistem "Hansip Lapor Error"
Sambil belajar, saya juga sekalian membuat workflow khusus untuk menangkap error.
Kalau ada workflow yang gagal, saya ingin mendapatkan laporan otomatis.
Kurang lebih seperti ini:
Error Trigger ↓ Kirim Telegram
Pesan yang saya kirim ke Telegram:
🚨 HANSIP JAGA MELAPOR! Workflow: ... Node: ... Error: ... Link: ...
Awalnya saya sempat bingung.
Workflow dibuat.
Sudah publish.
Tapi Telegram tidak masuk.
Ternyata ada satu hal yang saya pelajari:
Error Trigger tidak selalu aktif ketika saya hanya menekan tombol:
Execute Workflow
di editor.
Supaya benar-benar teruji, saya membuat workflow yang sengaja error menggunakan kode:
throw new Error("TEST HANSIP PRODUCTION")
Setelah workflow dijalankan sebagai production execution, akhirnya notifikasi Telegram berhasil masuk.
Lumayan puas juga waktu melihat "Hansip" pertama kali berhasil melapor. 😆
Hal Yang Saya Pelajari
Kalau dipikir-pikir, workflow pengingat absensi grup ternyata jauh lebih sederhana daripada workflow pengingat ke nomor personal.
Dari yang awalnya:
Cron ↓ Baca Data ↓ Loop ↓ Generate Pesan ↓ Send WA
menjadi:
Schedule Trigger ↓ Edit Fields ↓ HTTP Request
Lebih pendek.
Lebih mudah dipahami.
Dan lebih gampang dirawat kalau nanti suatu saat perlu diubah.
Penutup
Belajar n8n buat saya menarik karena sering kali yang sulit bukan menambahkan node, tetapi memahami alur datanya.
Kadang workflow bisa jalan, tetapi kita sendiri belum tentu paham kenapa bisa jalan.
Makanya saya mulai menulis catatan-catatan seperti ini.
Selain untuk dokumentasi pribadi, juga sebagai pengingat kalau beberapa bulan lagi saya lupa settingannya dan harus mengulang dari awal.
Disclaimer
Tulisan ini lebih merupakan catatan belajar daripada tutorial resmi.
Proses pembuatan workflow di atas banyak saya lakukan dengan bantuan Microsoft Copilot dan diskusi bolak-balik selama proses troubleshooting.
Jadi jangan dibayangkan saya sudah benar-benar paham semuanya. 😄
Saya masih belajar.
Kalau ada bagian yang menurut teman-teman kurang tepat, sangat mungkin memang ada yang bisa diperbaiki.
Yang penting buat saya, setiap kali mencoba sesuatu, ada catatan yang bisa dibaca lagi saat lupa, dan semoga bermanfaat juga untuk teman-teman yang sedang belajar n8n dari nol seperti saya.


Posting Komentar