Kategori: Programming | Perkiraan waktu baca: 9 menit
Salah satu proyek yang paling sering saya rekomendasikan ke teman-teman yang kerja di operasional/HR kecil-menengah: sistem absensi QR Code yang jalan 100% gratis pakai Google Sheets dan Google Apps Script. Nggak perlu beli aplikasi absensi berbayar, nggak perlu server sendiri, cukup akun Google biasa.
Saya sendiri pernah bikin versi serupa untuk keperluan monitoring driver di tempat kerja — dan ternyata cukup reliable untuk skala puluhan sampai ratusan orang. Di artikel ini saya share cara bikin versi dasarnya.
Kenapa Google Apps Script + Sheets?
- Gratis — selama masih dalam kuota wajar akun Google biasa
- Nggak perlu hosting — semuanya jalan di infrastruktur Google
- Gampang di-maintain — data langsung di Spreadsheet, gampang di-export, gampang dibikin laporan/pivot table
- Cocok untuk skala kecil-menengah — kalau kebutuhan kamu belum sampai ribuan absensi per hari, ini solusi paling efisien dari segi biaya
Gambaran Arsitektur
Sistemnya sederhana:
- Setiap karyawan/device punya kode QR unik (bisa berupa ID karyawan)
- Ada halaman web sederhana (dibuat dari Apps Script Web App) yang bisa scan atau input kode QR
- Setiap scan otomatis tercatat ke Google Sheets sebagai baris baru — nama, waktu, status (masuk/pulang)
Langkah 1: Siapkan Google Sheets
Buat spreadsheet baru dengan struktur kolom seperti ini di sheet "Absensi":
| Timestamp | ID Karyawan | Nama | Status | Lokasi |
|---|---|---|---|---|
Buat juga sheet kedua "Master Karyawan" untuk data referensi:
| ID Karyawan | Nama | Departemen |
|---|---|---|
| EMP001 | Budi Santoso | Produksi |
| EMP002 | Siti Aminah | Admin |
Langkah 2: Buka Apps Script Editor
Di spreadsheet kamu, klik Extensions > Apps Script. Ini akan buka editor kode terpisah yang terhubung langsung ke spreadsheet kamu.
Langkah 3: Bikin Fungsi untuk Mencatat Absensi
function recordAttendance(employeeId, status) {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const attendanceSheet = ss.getSheetByName('Absensi');
const masterSheet = ss.getSheetByName('Master Karyawan');
// Cari nama karyawan berdasarkan ID
const masterData = masterSheet.getDataRange().getValues();
let employeeName = 'Tidak Ditemukan';
for (let i = 1; i < masterData.length; i++) {
if (masterData[i][0] === employeeId) {
employeeName = masterData[i][1];
break;
}
}
// Catat ke sheet Absensi
attendanceSheet.appendRow([
new Date(),
employeeId,
employeeName,
status,
'Kantor Pusat'
]);
return { success: true, name: employeeName };
}
Langkah 4: Bikin Web App untuk Interface Scan
Ini bagian yang bikin sistemnya bisa diakses lewat browser (HP karyawan misalnya). Tambahkan fungsi doGet dan doPost:
function doGet() {
return HtmlService.createHtmlOutputFromFile('index')
.setTitle('Sistem Absensi QR')
.addMetaTag('viewport', 'width=device-width, initial-scale=1');
}
function doPost(e) {
const data = JSON.parse(e.postData.contents);
const result = recordAttendance(data.employeeId, data.status);
return ContentService
.createTextOutput(JSON.stringify(result))
.setMimeType(ContentService.MimeType.JSON);
}
Lalu buat file HTML baru (klik ikon + di editor, pilih HTML), namai index, isi dengan form sederhana untuk scan/input:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<style>
body { font-family: Arial, sans-serif; padding: 20px; text-align: center; }
input, button { padding: 12px; font-size: 16px; margin: 8px 0; width: 100%; box-sizing: border-box; }
button { background: #2F6FED; color: white; border: none; border-radius: 8px; }
</style>
</head>
<body>
<h2>Absensi Karyawan</h2>
<input type="text" id="employeeId" placeholder="Scan atau ketik ID Karyawan" autofocus>
<button onclick="submitAttendance('Masuk')">Absen Masuk</button>
<button onclick="submitAttendance('Pulang')">Absen Pulang</button>
<p id="result"></p>
<script>
function submitAttendance(status) {
const employeeId = document.getElementById('employeeId').value;
if (!employeeId) return;
google.script.run
.withSuccessHandler(function(res) {
document.getElementById('result').innerText = 'Absen ' + status + ' berhasil: ' + res.name;
document.getElementById('employeeId').value = '';
})
.recordAttendance(employeeId, status);
}
</script>
</body>
</html>
Langkah 5: Deploy sebagai Web App
- Klik Deploy > New deployment
- Pilih tipe Web app
- Set "Execute as" ke Me, dan "Who has access" sesuai kebutuhan (misal Anyone kalau mau diakses semua karyawan tanpa login)
- Klik Deploy, copy URL yang muncul
URL ini yang nanti dibuka lewat HP/tablet di pintu masuk kantor, atau dijadikan link di HP masing-masing karyawan.
Langkah 6: Generate QR Code untuk Tiap Karyawan (Opsional)
Kalau mau versi scan QR beneran (bukan cuma ketik manual), kamu bisa generate QR Code yang isinya ID karyawan pakai Google Charts API langsung dari Apps Script:
function generateQRCode(employeeId) {
const url = 'https://chart.googleapis.com/chart?cht=qr&chs=300x300&chl=' + employeeId;
return url;
}
Lalu tambahkan library scanner QR di sisi HTML (misalnya pakai library open-source seperti html5-qrcode) supaya kamera HP bisa langsung scan dan otomatis isi field ID karyawan.
Bonus: Bikin Rekap Otomatis
Salah satu enaknya data di Google Sheets — kamu bisa bikin rekap bulanan otomatis pakai formula, atau bikin trigger Apps Script yang jalan tiap akhir bulan:
function createMonthlyReport() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const attendanceSheet = ss.getSheetByName('Absensi');
const data = attendanceSheet.getDataRange().getValues();
// Logic hitung total hadir per karyawan bisa ditambahkan di sini
// Misalnya pakai objek untuk counting per ID Karyawan
Logger.log('Laporan bulanan berhasil dibuat');
}
Kamu bisa set trigger otomatis lewat menu Triggers di Apps Script supaya fungsi ini jalan sendiri setiap tanggal tertentu.
Keterbatasan yang Perlu Kamu Tahu
Supaya ekspektasinya realistis, sistem seperti ini punya batasan:
- Kuota Google Apps Script — ada limit eksekusi harian untuk akun gratis, biasanya cukup untuk skala puluhan-ratusan karyawan, tapi perlu dicek kalau organisasi lebih besar
- Bukan pengganti sistem HR enterprise — nggak ada fitur approval cuti, payroll, dll — ini murni pencatat kehadiran
- Keamanan sederhana — kalau butuh validasi lokasi (GPS) atau anti-titip-absen, perlu tambahan logic khusus (saya pernah implementasikan validasi GPS di proyek serupa, bisa jadi topik artikel terpisah)
Penutup
Sistem seperti ini cocok banget untuk bisnis kecil-menengah yang belum butuh (atau belum sanggup bayar) sistem HR enterprise, tapi tetap butuh pencatatan kehadiran yang rapi dan terpusat. Total biaya: Rp0, selama masih dalam kuota gratis Google.
Kalau kamu butuh sistem serupa yang lebih custom — misalnya dengan validasi GPS, integrasi WhatsApp notifikasi, atau dashboard admin yang lebih lengkap — saya buka jasa untuk itu. Cek portofolio saya di april-portfolio-pearl.vercel.app atau hubungi lewat halaman Contact.
Ada bagian yang mau ditanyakan atau butuh disesuaikan dengan kebutuhan spesifik kamu? Tulis di komentar.

Tidak ada komentar:
Posting Komentar