Kiosk in ảnh tự phục vụ: khách chọn khung, quét QR, chỉnh ảnh trên điện thoại, in tại kiosk bằng mã in. Tài liệu này chỉ cho KTV tại sự kiện: setup, vận hành, theo dõi để xử lý sớm, sự cố.
Ảnh minh họa chụp trước M8, có thể khác chi tiết nhỏ; lời văn bên cạnh là đúng.
s.fotokio.com, không cài app. Mở bằng QR hoặc gõ mã 3 ký tự.app.fotokio.com (mở được trên điện thoại). Sự kiện, khung ảnh, màn hình kiosk, kiosk, báo cáo, sức khỏe.Môi trường thử (demo) có tiền tố demo-; dùng để tập, không tính vào báo cáo sự kiện thật.
| Thứ cần có | Lấy ở đâu |
|---|---|
| Tài khoản Console | Đăng nhập bằng nút "Đăng nhập Google" với đúng email được cấp. Báo "Email này chưa được cấp quyền": liên hệ Owner để cấp email. |
| PIN cá nhân (4–8 số) | Tự đặt ở Console → Tài khoản của tôi (mục 2.1). Chưa đặt PIN thì không được gán kiosk. |
| Điện thoại đăng nhập sẵn Console | Để quét QR mở khóa nhân viên tại kiosk (mục 4.1). |
| Mã kiosk (ví dụ K001) | Tự tạo ở Console → Kiosk. Khóa kiosk không bao giờ hiện cho người; chỉ có mã cài đặt một lần. |
| Gói print-agent | GitHub Actions → lần chạy CI gần nhất trên main → artifact print-agent-<sha>. Chưa có thì liên hệ Owner. |
| Việc KTV tự làm được | Tạo sự kiện, chọn Client, khung ảnh, 4 màn hình kiosk, tạo kiosk, mã cài đặt, máy in, PIN cá nhân. |
| Việc phải liên hệ Owner | Cấp email, "Xoay khóa" kiosk, hạn mức dịch vụ, gán sự kiện cho người khác. |
app.fotokio.com → Đăng nhập Google bằng email được cấp.
Chào, chọn khung, hàng chờ, hoàn thành. Xem trước bên phải đúng như kiosk hiện. Nhớ bấm Lưu: kiosk chỉ nhận thay đổi sau khi lưu (cập nhật trong 30 giây).




dist\, scripts\, node_modules\).powershell -ExecutionPolicy Bypass -File install.ps1 -KioskCode K001 -Env prod -AgentDir .\print-agent -PrinterName "DS-RX1"
Script hỏi mã cài đặt (hoặc thêm -InstallCode <mã>), tự ghi khóa vào print-agent.env, cài print-agent vào C:\Fotokio\print-agent, tạo tác vụ "Fotokio Print Agent", đặt Chrome kiosk tự mở, tắt ngủ / tắt màn hình. Bạn không bao giờ thấy hay dán khóa kiosk.
| Báo lỗi | Làm |
|---|---|
| "Ma da dung hoac het han" | Mã đã dùng hoặc quá 15 phút. Tạo mã mới. |
| "Sai ma kiosk" | Sai -KioskCode, sai -Env (demo / prod) hoặc gõ sai mã cài đặt. |



-PrinterName đúng như Windows → Printers. Không thấy máy in thì script cảnh báo và bật máy in ảo (ảnh ra file ở C:\Fotokio\prints): chỉ để thử, không in thật.PRINT_DRY_RUN=0 trong print-agent.env khi in thật.







| Khách nói | KTV làm |
|---|---|
| "Không quét được QR" | Bảo khách mở s.fotokio.com và gõ mã 3 ký tự dưới QR (không phân biệt hoa thường). Mã chỉ dùng 3479ACDEFHJKMNPQRTWXY; sống 2 phút. Gõ sai nhiều lần liên tục trên cả sự kiện thì tạm chỉ nhận QR (khách chạm khung mới). |
| "QR tắt mất rồi" | QR hiện 20 giây. Chạm lại khung lấy QR mới. QR và mã chỉ dùng một lần, ảnh chụp QR không vào được. |
| "Nút Lưu bị mờ" | Còn ô bắt buộc chưa có ảnh. Dòng "Còn N ô chưa có ảnh" ngay trên nút. Chạm ô trống thêm ảnh. |
| "Lưu rồi mà kiosk không thấy" | Gõ 4 số mã in vào ô Tìm theo mã in. Không thấy: mục 6.6. |
| "Quên mã in" / "hết pin" | Chạm ảnh → Nhân viên → Mở khóa bằng QR Google hoặc Dùng PIN cá nhân → In (mục 4.1). |
| "Muốn in thêm" / "in lại" | Khách tự in đúng số bản cho phép (mặc định 1). KTV: Nhân viên → chọn số bản → In. |
| "Muốn sửa sau khi Lưu" | Chưa in: bấm Chỉnh lại trên màn mã in rồi Lưu lại. Đã in: làm phiên mới. |
| "Mở link báo mã đã dùng / phiên hết hạn" | Phiên chỉ sống trong trình duyệt đã quét QR. Đổi trình duyệt / điện thoại thì chạm khung mới trên kiosk. |
| "Nhập mã bị khóa" | Sai mã in 3 lần thì ảnh khóa 1 phút. Chờ, hoặc KTV in qua Nhân viên. |




Chạm ảnh trong hàng chờ → Nhân viên → chọn một cách:
| Cách | Làm | Ghi chú |
|---|---|---|
| Mở khóa bằng QR | Quét QR trên kiosk (sống 2 phút) bằng điện thoại đã đăng nhập Console → xác nhận trên điện thoại. | Cần mạng. Kiosk vào chế độ nhân viên 10 phút và hiện email của bạn; trong 10 phút in, in lại, in nhiều bản, xóa ảnh khỏi hàng chờ không phải nhập thêm. |
| Dùng PIN | Chọn tên mình trong danh sách → nhập PIN cá nhân → Xác nhận. | Làm được cả khi mất mạng. Danh sách chỉ có người được gán kiosk này. |
Mọi lần in của nhân viên ghi email người làm và số bản vào nhật ký, lịch sử in, báo cáo Excel. Không thấy tên mình trong danh sách PIN: kiosk chưa tải cấu hình, thử "Tải lại cấu hình" (mục 6.10) hoặc liên hệ Owner.
Mục tiêu: thấy dấu hiệu trước khi khách thấy. Làm theo thứ tự: kiểm tra trước sự kiện, biết các dấu hiệu sớm, kiểm tra định kỳ.
Console → sự kiện → Tổng quan → Kiểm tra ngay. Hệ thống tự chạy 24 giờ và 2 giờ trước giờ mở; mục đỏ báo qua Telegram. Kết quả hiện "Đạt hết" hoặc "N mục chưa đạt" kèm ✓ / ✗ từng mục. Chạy tay lại sau khi sửa.
| Mục | Nghĩa là | Khi ✗ làm gì |
|---|---|---|
| Kiosk <mã> trực tuyến | Kiosk gửi nhịp tim trong 2 phút gần nhất | Kiểm tra PC bật, Chrome kiosk mở, mạng. Mục 6.2. |
| Print-agent <mã> trực tuyến | Print-agent trên PC báo nhịp tim (60 giây một lần) | Khởi động tác vụ "Fotokio Print Agent". Mục 6.4. |
| Máy in <mã> có giấy | Máy in báo còn giấy / ribbon | Nạp giấy, gỡ kẹt, bật máy in; đợi 60 giây rồi chạy lại. |
| Render thử "<tên khung>" | Hệ thống dựng thử một ảnh thành phẩm từ từng khung của sự kiện | Mở khung trong trình sửa, sửa cảnh báo, Lưu. Còn ✗: liên hệ Owner. |
| Hạn mức đủ cho sự kiện | Dịch vụ miễn phí còn đủ cho sự kiện | Liên hệ Owner ngay. |
| Cơ sở dữ liệu (Supabase thức) | Truy cập được cơ sở dữ liệu | Chạy lại sau 1 phút; vẫn ✗ thì liên hệ Owner. |
| Lưu trữ ảnh R2 đã cấu hình | Truy cập được kho ảnh | Chạy lại sau 1 phút; vẫn ✗ thì liên hệ Owner. |
| Có kiosk được gán | Sự kiện có ít nhất một kiosk | Tab Kiosk → gán kiosk theo mã (mục 2.5). |
| Có template | Sự kiện có ít nhất một khung ảnh | Tab Khung ảnh → tạo hoặc sao chép khung (mục 2.3). |
| Nơi xem | Dấu hiệu sớm | Ý nghĩa | Làm ngay |
|---|---|---|---|
| Console → sự kiện → tab Kiosk | Kiosk offline | Mất 2 nhịp tim (hơn 2 phút không báo). PC tắt, Chrome đóng hoặc mất mạng. | Nhờ người tại site nhìn màn kiosk. Mục 6.2. |
| Tab Kiosk | Print-agent offline | Khách bấm In sẽ lỗi. | Mục 6.4, làm ngay khi chưa có khách xếp hàng. |
| Tab Kiosk | Giấy báo không OK (hoặc hiện trạng thái máy in) | Sắp hoặc đã hết giấy / ribbon / kẹt. | Nạp giấy, gỡ kẹt trước khi khách bấm In. Mục 6.3. |
| Tab Kiosk / trang Sức khỏe | "Lần cuối" (heartbeat) cũ hơn 60 giây | Nhịp tim gửi 60 giây một lần; quá 2 nhịp là mất kết nối. | Làm mới trang; nếu vẫn cũ thì xử lý như offline. |
| Console → Sức khỏe, thanh hạn mức | Vàng (60–85%) / đỏ (trên 85%, kèm ngày dự báo hết) | Dịch vụ miễn phí sắp hết. | Báo Owner. Vẫn vận hành bình thường. |
| Trang Sức khỏe | Dải "giảm tải" (mức 1 hoặc 2) | Hệ thống tạm tắt thumbnail thư viện (mức 1), thêm xuất báo cáo và in lại từ xa (mức 2). Upload, render, in vẫn chạy. | Báo Owner; hoãn việc xuất báo cáo / in lại từ xa. |
| Trang Sức khỏe | Cảnh báo đang mở (vàng / đỏ, kèm dòng hành động "→") | Hệ thống phát hiện sự cố. | Đọc dòng hành động và làm theo; báo Owner đóng cảnh báo. |
| Trên kiosk | Dải đỏ "Mất kết nối mạng" | PC mất mạng hoặc API không tới. | Mục 6.2. |
| Trên kiosk | Cảnh báo "Máy in lỗi N lần liên tiếp" (từ lần thứ 2) | Máy in hoặc print-agent đang hỏng. | Mục 6.3. |
| Điện thoại / Telegram | Tin cảnh báo (nhãn demo / prod, mức vàng / đỏ, một dòng hành động) | Hệ thống tự báo: kiểm tra trước sự kiện, in thất bại 2 lần, render quá 10 giây, lỗi upload, trễ kết nối. | Làm theo dòng hành động. Chưa nhận được Telegram thì hỏi Owner. |
PC kiosk: http://127.0.0.1:17877/status | Không mở được, hoặc paperOk là false | Không mở được: print-agent không chạy. paperOk:false: máy in báo hết giấy / lỗi. | Mục 6.4 hoặc 6.3. |
PC kiosk: C:\Fotokio\print-log.jsonl | Nhiều dòng ok:false, hoặc có offline:true | Mỗi dòng một lệnh in. ok:false là in lỗi; offline:true là in lúc mất mạng. | Đối chiếu giờ, tìm nguyên nhân (giấy, mạng). Dùng đối chiếu số bản với báo cáo. |


ok:true trong print-log.jsonl. Lệch nhiều thì kiểm tra giấy kẹt hoặc in lỗi.Thứ tự ưu tiên: 1) khách vẫn in được (chuyển sang in qua Nhân viên nếu cần); 2) tìm đúng thông báo trên màn hình; 3) làm theo mục dưới; 4) quá 5 phút chưa hết thì giữ khách in qua Nhân viên và báo Owner kèm ảnh chụp màn hình, mã kiosk, giờ xảy ra.
| Triệu chứng | Mục |
|---|---|
| Màn "Cài đặt kiosk" / "Khóa kiosk đã được thay" | 6.1 |
| Mất kết nối mạng | 6.2 |
| Máy in lỗi | 6.3 |
| Print-agent offline | 6.4 |
| Sai mã in / ảnh bị khóa | 6.5 |
| Khách Lưu mà kiosk không thấy ảnh | 6.6 |
| Đổi màn hình mà kiosk không đổi | 6.7 |
| Kiosk tự về màn chào | 6.8 |
| Khách thấy "Mã không đúng" / "Phiên hết hạn" | 6.9 |
| Thoát kiosk thao tác Windows | 6.10 |
| Sức khỏe vàng / đỏ | 6.11 |
| Gọi Owner | 6.12 |

Dấu hiệu: thay vì màn chào, kiosk hỏi mã kiosk và mã cài đặt.
Xử lý: Console → Kiosk → Tạo mã cài đặt. Nếu print-agent cũng báo mất khóa (6.4): chạy lại install.ps1 -KioskCode ... -InstallCode <mã> rồi mở lại trang kiosk. Chỉ khi print-agent không chạy mới nhập mã ở màn "Cài đặt kiosk". Mỗi mã dùng một lần, đừng dùng hai mã cho một lần cài. "Mã đã dùng hoặc hết hạn": tạo mã mới. "Sai mã": kiểm tra mã kiosk trong URL. "Khóa kiosk đã được thay" (khóa bị đổi khi PC đang tắt): xử lý như trên.

Dấu hiệu: dải trên cùng; ảnh đang chờ vẫn hiện; QR mới không tạo được.
Xử lý: (1) Cắm lại dây / Wi-Fi của PC. (2) Khi mất mạng khách không tự in được: chạm ảnh → Nhân viên → Dùng PIN → chọn tên, nhập PIN cá nhân → In. Print-agent in từ ảnh đã tải sẵn và tự gửi số lần in lên hệ thống khi có mạng lại. (3) Ảnh báo "chưa được tải về máy kiosk" là ảnh Lưu sau khi mất mạng: phải có mạng mới in. (4) Có mạng lại, dải tự ẩn, không cần tải lại. Mở khóa bằng QR không dùng được khi mất mạng. Báo "Kiosk chưa có PIN dự phòng khi mất mạng": chỉ còn cách khôi phục mạng.
Dấu hiệu: bấm In hiện lỗi "nhờ nhân viên"; sau 2 lần lỗi liên tiếp kiosk hiện dải cảnh báo (chạm để ẩn).
Nguyên nhân theo thứ tự: hết giấy / ribbon, kẹt giấy, máy in tắt hoặc tuột USB, driver treo, print-agent không chạy (6.4), mạng.
Xử lý: (1) Nhìn đèn / màn máy in, nạp giấy, gỡ kẹt, bật lại. (2) Tab Kiosk xem cột máy in / giấy (cập nhật 60 giây). (3) Chạm ảnh → Nhân viên → In lại; lệnh lỗi không tính vào báo cáo. (4) Vẫn lỗi: Windows → Printers, xóa hàng đợi in, in thử một trang. (5) Driver treo: khởi động lại PC; kiosk và print-agent tự mở lại. Lệnh đang treo được gửi lại trong 15 phút, không in trùng.
Dấu hiệu: tab Kiosk không thấy nhịp tim agent; Kiểm tra ngay ✗ print-agent.
Xử lý trên PC kiosk (thoát kiosk, mục 6.10):
http://127.0.0.1:17877/status: phải ra JSON có tên máy in và paperOk.C:\Fotokio\print-agent\print-agent.env (quyền Administrator): API_BASE_URL đúng môi trường, KIOSK_CODE đúng, KIOSK_SECRET không trống (không sửa tay), PRINTER_NAME đúng, PRINT_DRY_RUN=0.C:\Fotokio\print-agent chạy node --env-file=print-agent.env dist\index.js. "Đã kết nối API" là tốt; "mất kết nối API, đang thử lại" là mạng; "khóa kiosk không còn hợp lệ ... chạy lại install.ps1 với mã cài đặt mới" là phải cài lại bằng mã mới (6.1).C:\Fotokio\print-log.jsonl.
Mã in là 4 số trên màn "Đã vào hàng chờ" của điện thoại khách, chỉ gồm 2 3 4 5 7 9. Sai 3 lần thì khóa 1 phút. Khách chỉ in được số bản đã cho phép.
Xử lý: đối chiếu mã trên điện thoại khách; hoặc "In bằng QR" rồi khách quét bằng chính điện thoại đã chỉnh ảnh; hoặc KTV in qua Nhân viên. Muốn khách tự in nhiều bản: tăng "số bản khách tự in" trong cấu hình kiosk.
Kiểm tra: (1) Khách có thấy màn "Đã vào hàng chờ + mã in" chưa? Chưa thì Lưu chưa thành công, bảo khách bấm Lưu lại. (2) Gõ mã in vào ô tìm. (3) Có dải mất mạng không (6.2). (4) Hàng chờ là của cả sự kiện nên in được ở kiosk nào của sự kiện đó; khác sự kiện thì không. (5) Giữ góc trên trái 3 giây → PIN cá nhân → Tải lại cấu hình.
Bình thường cập nhật trong 30 giây. Không đổi: kiểm tra đã bấm Lưu, đúng sự kiện, kiosk không mất mạng (6.2); rồi Tải lại cấu hình (6.10).
Đó là thời gian chờ không thao tác (mặc định 3 phút). Ảnh khách vẫn trong hàng chờ: chạm màn chào → Hàng chờ in.
Mã 3 ký tự sai / đã dùng / hết hạn, phiên hết hạn hoặc mở bằng trình duyệt khác: chạm khung mới trên kiosk. Ảnh đã in: không chỉnh lại được; in thêm qua Nhân viên. "In bằng QR" phải quét bằng chính điện thoại đã chỉnh ảnh.




Giữ góc trên trái 3 giây → chọn tên, nhập PIN cá nhân → bảng quản trị: Tải lại cấu hình · Gỡ cài đặt kiosk này · Đóng. Ra Windows: cắm bàn phím, bấm Alt+F4. Xong thì đăng xuất / đăng nhập lại Windows: Chrome kiosk và print-agent tự mở. Không bấm "Gỡ cài đặt kiosk này" trừ khi Owner yêu cầu (phải cài lại bằng mã mới).


Xanh dưới 60%, vàng 60–85%, đỏ trên 85%. Hệ thống tự giảm tải và báo Telegram. KTV không xử lý tại chỗ: báo Owner, tiếp tục vận hành.
C:\Fotokio\print-log.jsonl nếu số bản có tranh cãi; lần in lúc mất mạng có "offline": true và đã được cộng vào báo cáo khi có mạng lại.
