Local API
Kendalikan Q-Booth yang sedang berjalan dari aplikasi Anda lewat HTTP, di PC yang sama atau jaringan lokal: mulai event, ambil foto, cetak, tampilkan QR, dan baca status booth.
Local API memungkinkan aplikasi Anda sendiri mengendalikan Q-Booth yang sedang berjalan lewat HTTP — dari PC yang sama atau perangkat lain di jaringan lokal. Mulai event, bawa tamu melewati sesi foto, cetak, tampilkan kode QR, dan baca posisi booth kapan saja.
Halaman ini mendokumentasikan API versi 1. Booth melaporkan versi yang dijalankannya di status → app.apiVersion. API ini hanya bekerja di jaringan lokal — tidak bisa diakses lewat internet.
Memulai
- Buka jendela Pengaturan Aplikasi, masuk ke Lanjutan → Local API, lalu nyalakan Aktifkan Local API. (Jika Lanjutan tidak terlihat, aktifkan dulu Tampilkan semua pengaturan.)
- Biarkan Kata sandi kosong agar dibuatkan otomatis, atau ketik sendiri. Port bawaan adalah
8730. - Untuk memanggilnya dari perangkat lain, nyalakan Izinkan perangkat lain di jaringan. Windows mungkin sekali meminta izin agar Q-Booth bisa melewati firewall — izinkan.
- Klik Simpan Pengaturan, lalu Buka halaman uji. Halaman uji berisi tombol untuk setiap perintah, plus salinan referensi ini dari booth itu sendiri.
Alamatnya http://<pc-booth>:8730 (http://localhost:8730 di PC booth itu sendiri). Semua perintah ada di bawah /api/v1/.
curl http://localhost:8730/api/v1/status -H "Authorization: Bearer KATA_SANDI_ANDA"
Kata sandi
Setiap panggilan kecuali GET /api/v1/commands membutuhkan kata sandi. Kirim dengan salah satu cara berikut:
Authorization: Bearer <kata sandi>(disarankan)X-QBooth-Key: <kata sandi>?key=<kata sandi>di URL, untuk alat yang hanya bisa membuka tautan
Kata sandi salah atau tidak ada akan dijawab 401. Sepuluh percobaan salah dalam satu menit dari satu alamat akan diblokir selama satu menit (429). Kata sandi ini adalah kunci operator — siapa pun yang memilikinya bisa mengendalikan booth, jadi jaga kerahasiaannya.
Balasan
Pembacaan memakai GET dan dijawab 200 beserta datanya:
{ "ok": true, "data": { ... } }
Aksi memakai POST dengan body JSON (atau query string). GET juga bisa, untuk alat pemicu yang hanya bisa mengirim GET. Aksi yang diterima dijawab 202 begitu booth menerimanya — tidak menunggu foto, cetakan, atau tamu:
{ "ok": true, "accepted": "camera/capture" }
Panggilan yang ditolak menyebutkan alasannya, dengan kode yang bisa Anda tindak lanjuti:
{ "ok": false, "error": { "code": "wrong_page", "message": "The booth is on the welcome page. This needs the Camera page." } }
API tidak pernah mengantrekan perintah untuk nanti. Jika booth tidak dalam kondisi yang mengizinkan, perintah langsung ditolak. Pesan error selalu dalam bahasa Inggris; gunakan code untuk logika aplikasi Anda.
Status
GET /api/v1/status memberi tahu posisi booth. Panggil berkala untuk mengikuti apa yang terjadi setelah sebuah aksi — setiap 300 sampai 1000 ms sudah cukup. Jika panggilan sama sekali tidak bisa terhubung, Q-Booth tidak berjalan (atau Local API mati).
{
"app": { "name": "QBooth", "version": "5.9.1.0", "apiVersion": "1" },
"event": { "id": "1781706869_H5A4", "name": "Wedding" },
"page": "camera",
"session": { "active": true, "templateId": "…", "templateName": "Strip 3" },
"camera": { "phase": "review", "shot": 3, "shots": 3, "captured": 3, "feed": "live", "retakesLeft": 1 },
"result": null,
"busy": { "dialog": false, "processing": false },
"available": ["camera/retake", "camera/process", "session/end", "event/stop"]
}
| Field | Arti |
|---|---|
event | Event yang sedang berjalan, atau null jika booth tidak menjalankan event. |
page | none, welcome, survey, categoryPicker, templatePicker, input, camera atau result. |
session | active setelah tamu memulai (dan membayar, jika event berbayar), serta template yang sudah dipilih. |
camera | Hanya di halaman Kamera. phase berisi liveIdle, counting, recording, capturing, reveal, shotDelay atau review. retakesLeft bernilai null jika tidak dibatasi. |
result | Hanya di halaman Hasil: hasil mana yang tampil, dari berapa. |
busy | Ada dialog di layar (pembayaran, PIN, QR, pemberitahuan) atau foto sedang diproses. Aksi ditolak selama salah satunya aktif. |
available | Aksi yang saat ini akan diterima booth — dihitung dengan pemeriksaan yang sama dengan aksinya, jadi bisa Anda pakai untuk mengaktifkan atau meredupkan tombol di aplikasi Anda. |
Satu tamu, langkah demi langkah
Alur umum, setiap langkah menunggu halaman atau fase yang tertera di status:
| Panggilan | Lalu tunggu |
|---|---|
POST event/start {"id": "…"} | page: welcome |
POST session/start | page: templatePicker (atau categoryPicker / survey, tergantung event) |
POST template/select {"index": 1} | page: camera, camera.phase: liveIdle, camera.feed: live |
POST camera/capture | camera.phase: review |
POST camera/process | page: result |
POST result/print | — |
POST session/end | page: welcome |
API mengikuti aturan yang sama dengan tamu. Survei, formulir, pembayaran, atau PIN muncul di layar booth persis seperti setelah ketukan, dan API tidak mengisinya untuk tamu. Batas cetak dan PIN cetak juga berlaku.
Perintah
Semua path diawali /api/v1/. index dimulai dari 1, sesuai urutan kartu yang dilihat tamu (galeri kiri atas lebih dulu). Kirim id atau index, bukan keduanya; kalau keduanya dikirim, yang dipakai id.
| Perintah | Berlaku saat | Fungsi |
|---|---|---|
GET status | Selalu | Posisi booth dan aksi yang akan diterimanya. Lihat Status. |
GET commands | Selalu, tanpa kata sandi | Daftar perintah beserta versi API — dasar halaman uji. |
GET events | Selalu | Semua event di PC: id, name, archived, templateCount, running. |
POST event/start{"id": "…"} | Tidak ada event berjalan, tidak ada dialog, editor event tidak terbuka di event lain atau dengan perubahan belum disimpan | Memulai event, seperti tombol Launch-nya. Peringatan template, jika ada, muncul dulu di layar booth. |
POST event/stop | Event berjalan, tidak ada dialog, tidak sedang memproses | Mengakhiri sesi booth dan kembali ke aplikasi. PIN keluar tidak ditanyakan. |
GET templates?eventId=… (opsional) | Selalu dengan eventId; tanpa itu, event harus berjalan | Template yang bisa dipilih tamu. Dengan eventId: event tersimpan mana pun, berjalan atau tidak. Tanpa itu: event yang sedang berjalan, dan di Template Picker-nya (atau halaman Welcome yang punya galeri template) onScreen dan index menunjukkan kartu yang tampil. |
GET categories?eventId=… (opsional) | Selalu dengan eventId; tanpa itu, event harus berjalan | Kategori yang aktif di event, dengan aturan eventId yang sama. Di Category Picker event yang berjalan, onScreen dan index menunjukkan kartu yang tampil. |
POST session/start | Halaman Welcome | Tombol Start. PIN Start atau pembayaran, jika event memakainya, muncul di layar booth. |
POST session/end | Halaman mana pun setelah Welcome | Tombol Home: menutup sesi tamu dan kembali ke Welcome. |
POST category/select{"id": "…"} atau {"index": n} | Halaman Category Picker | Memilih kategori seperti mengetuk kartunya, lalu membuka Template Picker. |
POST template/select{"id": "…"} atau {"index": n} | Halaman Welcome (template mana pun di event), atau halaman Template Picker dengan template tampil di sana | Di Template Picker: memilih template seperti mengetuk kartunya lalu mengonfirmasinya (tombol Next ditekan untuk Anda). Di Welcome: memulai sesi dengan template itu, seperti mengetuk kartu di galeri template halaman Welcome. PIN Start atau pembayaran tampil dulu di layar booth, lalu halaman picker dilewati. Di Welcome, index menghitung kartu galeri Welcome; kalau tidak ada galeri di sana, pilih dengan id. |
POST camera/capture | Halaman Kamera, live view siaga (atau menunggu di antara foto), kamera aktif | Tombol Capture: memulai hitung mundur dan pemotretan. Di antara foto multi-shot manual, mengambil foto berikutnya. |
POST camera/retake | Halaman Kamera, sedang meninjau foto, masih ada jatah ulang | Tombol Retake untuk foto yang tampil, mengikuti pengaturan after-tap tombol itu. |
POST camera/process | Halaman Kamera, sedang meninjau foto | Tombol Process: mengirim foto ke template. |
POST result/print | Halaman Hasil, printer sudah diatur, cetak diizinkan | Tombol Print untuk hasil yang tampil. PIN cetak, batas, dan jeda setelah cetak berlaku; jika cetak tambahan dijual, membuka pembelian. |
POST result/qr{"type": "web"} atau "local" | Halaman Hasil, jenis QR itu sudah diatur di Pengaturan | Menampilkan kode QR untuk hasil yang tampil, seperti tombol QR Web / QR Local. Bawaan web. |
Error
| HTTP | Kode | Arti |
|---|---|---|
| 400 | bad_request | Parameter tidak ada atau tidak valid. |
| 401 | unauthorized | Tanpa kata sandi, atau kata sandi salah. |
| 404 | not_found | Path atau perintah tidak dikenal. |
| 404 | unknown_event, unknown_template, unknown_category | Tidak ada event, template, atau kategori dengan id atau index itu. |
| 405 | method_not_allowed | POST dikirim ke perintah baca. |
| 409 | no_event | Perintah ini butuh event yang berjalan. |
| 409 | event_running | Sudah ada event yang berjalan. |
| 409 | editor_open | Editor event terbuka di PC booth (event lain, atau ada perubahan belum disimpan). |
| 409 | no_templates | Event tidak punya template. |
| 409 | wrong_page | Tidak berlaku di halaman yang sedang tampil. |
| 409 | wrong_phase | Di halaman Kamera, tetapi belum di tahap yang memungkinkan. |
| 409 | dialog_open | Ada dialog terbuka di layar booth. |
| 409 | processing | Foto sedang diproses. |
| 409 | busy | Booth masih menyelesaikan aksi sebelumnya. Coba lagi sebentar. |
| 409 | not_allowed | Diblokir aturan: jatah ulang habis, batas cetak tercapai, jeda setelah cetak. |
| 409 | not_configured | Tidak ada printer, atau jenis QR itu belum diatur di Pengaturan. |
| 429 | too_many_attempts | Terlalu banyak kata sandi salah. Tunggu satu menit. |
| 503 | busy | Q-Booth tidak menjawab tepat waktu. Coba lagi. |
Log
Setiap panggilan dicatat di folder log aplikasi, log\local_api\, satu file per hari: alamat pemanggil, perintah dan parameternya, jawaban, serta alasan penolakan. Kata sandi tidak pernah dicatat. Pemanggilan status yang berhasil tidak dicatat.
Riwayat versi
| Versi API | Versi Q-Booth | Perubahan |
|---|---|---|
| 1 | Segera hadir | Rilis pertama: status, commands, events, event start / stop, templates, categories, session start / end, pemilihan kategori dan template, camera capture / retake / process, result print dan QR. |
Masih butuh bantuan?
Tim kami siap membantu lewat WhatsApp. Sebutkan versi Q-Booth dan apa yang muncul di layar.