trong.
Mobile app2026

Tú Quyên Spa

Đặt lịch bằng Zalo Mini App, đồng bộ hai chiều với KiotViet POS.

Năm
2026
Khách hàng
Tú Quyên Spa
Vai trò
Làm một mình
Thời gian
3 tháng

Tính năng

Đồng bộ hai chiều với POS

Lịch đặt trong app hiện lên KiotViet; lễ tân sửa gì trên POS thì webhook đẩy ngược về.

Gói dịch vụ và voucher

Gói của khách, khuyến mãi và voucher được mô hình hoá đàng hoàng, nên app tính tiền một lịch hẹn giống hệt cách quầy tính.

Nhắc lịch có người đọc

ZNS rơi vào Zalo, nơi khách vốn đã ở đó, thay vì một tin SMS không ai mở.

Tổng quan

Đề bài

Tú Quyên Spa vốn đã chạy trên KiotViet — khách hàng, dịch vụ, hoá đơn, tồn kho đều nằm ở đó. Họ muốn đưa việc đặt lịch vào Zalo Mini App mà không bỏ cái POS nhân viên dùng cả ngày. Nghĩa là app không thể là nguồn sự thật; nó phải đồng ý với một nguồn khác.

Cách làm

Một backend Express + MongoDB + Redis đứng giữa Mini App và KiotViet, đồng bộ cả hai chiều. Lịch hẹn và đơn tạo trong app được đẩy sang KiotViet; lễ tân sửa gì trên POS thì webhook mang về và cập nhật lại app. Hai mươi model phủ hết nghiệp vụ — lịch hẹn, chi nhánh, gói khách hàng, hoá đơn, voucher, khuyến mãi, đánh giá.

Zalo OA nằm cạnh đó: follower được theo dõi, và ZNS mang xác nhận cùng nhắc lịch vào thẳng Zalo của khách, thay vì một tin SMS họ sẽ bỏ qua.

Chỗ khó

Đồng bộ hai chiều thực chất là bài toán giải quyết xung đột khoác áo truyền dữ liệu. Cả hai bên đều có thể sửa cùng một lịch hẹn, webhook đến không đúng thứ tự, và thỉnh thoảng KiotViet gửi lại một cái đã gửi. Mọi webhook đi vào đều được ghi log và xử lý idempotent, còn app thì không bao giờ coi bản sao của mình là chuẩn cho những gì POS sở hữu — nó hiển thị thứ nhận về, không phải thứ nó hy vọng đã xảy ra.

Stack

  • React
  • zmp-ui
  • Express
  • MongoDB
  • Redis
  • KiotViet API
  • Zalo OA
  • Zalo ZNS
  • Docker