Cetak struk dari web app ke printer Bluetooth.
Web app kasir Anda tidak bisa menjangkau printer thermal Bluetooth milik toko. Aplikasi Android gratis di tablet yang sama bisa. Berikut setup dan kodenya.
Toko punya printer struk Bluetooth yang sudah dipasangkan dengan tablet di meja kasir. Tetapi aplikasi kasirnya berjalan di browser, dan Chrome tidak bisa melihat printer itu. Web Bluetooth hanya bisa bicara dengan printer jenis baru, dan di Indonesia hampir tidak ada yang punya. Safari di iPad bahkan sama sekali tidak bisa memakai Bluetooth.
Jalan keluar yang biasa ditawarkan: aplikasi jembatan berbayar dengan watermark, printer berkabel jaringan yang tidak dimiliki toko, atau "cetak saja dari laptop kasir". Masalah ini terlalu sering kami temui di proyek ritel klien kami. Jadi kami membuat Cleanter: aplikasi Android gratis yang menjembatani browser dan printer.
Cleanter berjalan di tablet itu sendiri.
Web app Anda mengirim struk ke Cleanter di tablet Android yang sama, lalu Cleanter mencetaknya lewat Bluetooth. Tanpa cloud, tanpa driver, tanpa akun.
Setup cukup tiga langkah, sekali per tablet.
- Pasangkan printer di pengaturan Bluetooth Android, sama seperti memasangkan headphone.
- Instal Cleanter dari Google Play, lalu buka.
- Pilih printer dari daftar, lalu ketuk Start Server. Setelah itu, Cleanter menyala sendiri setiap kali tablet dihidupkan.
Selesai. Staf toko tidak perlu membuka aplikasinya lagi.
Satu request, satu struk.
Struk berupa daftar blok: teks, baris dua kolom, garis pemisah, kode QR, barcode, gambar, atau feed kertas. Aplikasi Anda mengirim daftar itu sebagai JSON:
await fetch("http://localhost:9100/print", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
content: [
{ type: "text", text: "KOPI SUDIRMAN", align: "center", bold: true, size: "large" },
{ type: "text", text: "Jl. Sudirman 123, Medan", align: "center" },
{ type: "divider" },
{ type: "row", left: "Nasi Goreng x2", right: "50.000" },
{ type: "row", left: "Es Teh x2", right: "10.000" },
{ type: "divider" },
{ type: "row", left: "TOTAL", right: "60.000", bold: true },
{ type: "qr", data: "https://example.com/inv/123" },
{ type: "feed", lines: 3 },
],
}),
});
Itulah seluruh integrasinya. Cleanter mengubah blok-blok itu menjadi perintah bawaan printer, menyesuaikan lebar kertas (80 mm atau 58 mm), lalu memotong kertasnya.
Nasi Goreng x250.000Es Teh x210.000
TOTAL60.000
Titik hijau menandakan printer siap.
Saat kasir membuka shift, cek apakah Cleanter berjalan dan tersambung:
const res = await fetch("http://localhost:9100/health", {
signal: AbortSignal.timeout(1500),
});
const status = await res.json();
Tampilkan hasilnya sebagai titik hijau atau abu-abu di layar kasir. Dalam sehari, staf sudah percaya pada titik itu. Di halaman https, jalankan pengecekan ini dari ketukan, jangan saat halaman dimuat, dan beri waktu lebih dari 1,5 detik untuk pertama kalinya: kasir mungkin sedang menjawab pertanyaan izin dari Chrome.
GET /healthTiga hal ini sering menjebak.
Aplikasi Anda berjalan di https. Mulai Chrome 150, halaman https butuh izin dari kasir untuk menjangkau localhost. Kirim permintaan pertama dari sebuah ketukan, misalnya tombol Cetak: Chrome bertanya sekali, dan struk tercetak begitu kasir mengetuk Izinkan. Di Android, pertanyaannya berbunyi bahwa situs ingin mengakses aplikasi dan layanan lain di perangkat ini. Permintaan saat halaman dimuat ditolak tanpa bertanya, dan penolakan itu menetap. Sisa prosesnya diurus Cleanter.
Listrik padam. Tablet menyala ulang, Bluetooth kembali, dan printer tersambung lagi saat cetakan pertama masuk. Tidak ada yang perlu membuka apa pun.
Halaman yang bukan milik Anda. Cleanter juga muncul sebagai printer di dialog print Chrome. Halaman invoice dari supplier pun bisa dicetak di kertas 80 mm, tanpa kode sama sekali.
Kasir berbasis web milik klien kami mencetak lewat Cleanter, dan kini lebih dari 2.000 orang memakainya. Pertanyaan "printer apa yang harus kami beli?" pun berubah menjadi "pakai saja yang sudah ada". Kalau aplikasi kasir Anda perlu mencetak dan Anda belum yakin caranya, tanyakan pada kami. Biasanya jawabannya cukup lima menit.
