Quay lại dự án
Zalo Mini App

Zalo Mini App: Trình diễn Alpharice

Zalo API Geolocation Laravel 12 GPS Admin Panel

Phát triển hệ sinh thái phần mềm (Zalo Mini App và Admin Dashboard) phục vụ công tác thực địa tại CÔNG TY CỔ PHẦN ALPHARICE. Hệ thống tự động hóa quy trình trích xuất dữ liệu người dùng, phân luồng đăng ký mới và quản lý lịch sử chăm sóc (feedback) theo từng hồ sơ nông dân, tích hợp tọa độ GPS và Zalo OA.

Hình 1: Giao diện Zalo mini app trình diễn Alphairce

1. Công nghệ sử dụng

Frontend (Zalo Mini App): React, TypeScript, TailwindCSS, Bootstrap, Zalo Mini App SDK.

Backend & Dashboard: PHP, Laravel 12.

Cơ sở dữ liệu & Giao tiếp: MySQL, RESTful API, Zalo OA API.

2. Giải pháp kỹ thuật và Luồng xử lý nghiệp vụ

Với vai trò là lập trình viên chính, tôi đã thiết kế kiến trúc cơ sở dữ liệu cho phép quan hệ 1-N phức tạp (1 nông dân - nhiều lần đăng ký - nhiều feedback) nhằm đáp ứng đúng thực tế nghiệp vụ nông nghiệp. Dữ liệu được xử lý qua các bước cốt lõi sau:

Bước 1: Trích xuất định danh và Phân luồng dữ liệu

Đây là bước tối ưu hóa UX, giúp nhân viên hiện trường linh hoạt xử lý dữ liệu cho cả nông dân mới và cũ.

Luồng xử lý: Khi nhân viên mở Mini App, hệ thống gọi Zalo OAuth để tự động lấy số điện thoại, tên Zalo và tọa độ GPS hiện tại. Một request được gửi qua RESTful API để kiểm tra số điện thoại này trong cơ sở dữ liệu MySQL.

Phân luồng linh hoạt:

- Trường hợp chưa tồn tại: Ứng dụng điều hướng thẳng sang màn hình form "Đăng ký hồ sơ mới".

- Trường hợp đã tồn tại: Ứng dụng hiển thị màn hình "Lịch sử đăng ký". Tại giao diện này, nhân viên có toàn quyền quyết định:

+ Nhấn vào nút "Đăng ký thêm" để tạo một hồ sơ cấp phát/trình diễn hoàn toàn mới cho chính nông dân đó (ví dụ: áp dụng cho mùa vụ mới hoặc thửa ruộng khác).

+ Chọn vào một mốc đăng ký cũ trong danh sách để xem thông tin và tiến hành "Cập nhật Feedback" tình trạng cây trồng hiện tại.

Hình 1: Sơ đồ thuật toán kiểm tra Số điện thoại và rẽ nhánh linh hoạt giữa Đăng ký mới/Lịch sử

Bước 2: Luồng Đăng ký hồ sơ mới (Dành cho nông dân lần đầu)

Luồng này giúp nhân viên tạo mới hồ sơ nông dân và tự động hóa khâu xác nhận.

Thu thập dữ liệu: Nhân viên điền các thông tin nghiệp vụ vào form động (React) bao gồm: Tên thường gọi của nông dân, Tỉnh/Xã, Đại lý mua thuốc, Ngày nhận, Ngày sạ, Loại cây trồng, Diện tích, Sản phẩm quan tâm và Ghi chú.

Xác thực & Chuyển đổi: Nhân viên chụp ảnh minh chứng đính kèm tọa độ thực tế. Trước khi submit, hệ thống yêu cầu xác nhận quyền sử dụng dữ liệu (Nội bộ hoặc Quảng bá). Khi ấn "Đăng ký", hệ thống lưu mới một bản ghi (Registration ID) và kích hoạt popup yêu cầu "Quan tâm Zalo OA" của công ty.

Thông báo tự động (Zalo OA): Ngay khi backend ghi nhận dữ liệu đăng ký thành công, hệ thống tự động gọi Zalo OA API để gửi một tin nhắn xác nhận "Đăng ký thành công" trực tiếp vào ứng dụng Zalo của người nông dân. Luồng xử lý khép kín này giúp người dùng an tâm và khẳng định sự chuyên nghiệp của dịch vụ.

 

Hình 3: Giao diện form điền thông tin trình diễn

 

Hình 4: Yêu cầu quyền để lấy thông tin từ zalo

Hình 5: Tin nhắn đăng ký thành công khi đăng ký trình diễn và nhắc hẹn phun thuốc

Bước 3: Luồng Cập nhật Feedback (Dành cho hồ sơ đã tồn tại)

Luồng này giải quyết bài toán theo dõi tiến độ phát triển của cây trồng qua nhiều giai đoạn khác nhau trên cùng một thửa ruộng.

Truy xuất lịch sử: Khi nhận diện số điện thoại cũ, Mini App gọi API trả về danh sách toàn bộ các lần đăng ký/cấp thuốc trước đó của nông dân này.

Ghi nhận Feedback: Nhân viên chọn vào một mốc đăng ký cụ thể trong danh sách. Hệ thống mở ra form Feedback chuyên biệt. Tại đây, nhân viên nhập text mô tả tình trạng cây trồng hiện tại và chụp ảnh minh chứng trực tiếp tại ruộng.

Đồng bộ dữ liệu: Khi ấn "Lưu", API sẽ đính kèm chính xác Registration ID của lần đăng ký đó cùng với dữ liệu hình ảnh và tọa độ gửi về server. Backend Laravel xử lý lưu vào cơ sở dữ liệu, đảm bảo chuỗi dữ liệu chăm sóc được móc nối chính xác theo dòng thời gian.

Hình 6: Giao diện màn hình Lịch sử danh sách các lần đăng ký và form nhập Feedback

Bước 4: Tự động hóa lịch nhắc hẹn nông dân theo Ngày sạ

Đây là tính năng mang lại giá trị vận hành lớn nhất, chuyển đổi dữ liệu tĩnh thành các hành động chăm sóc chủ động.

Xử lý logic thời gian: Dựa trên trường dữ liệu "Ngày sạ" thu thập ở Bước 2, tôi thiết lập các tiến trình chạy ngầm (cron jobs) trên server Laravel để tính toán chu kỳ sinh trưởng của cây trồng (ví dụ: giai đoạn đẻ nhánh, làm đòng).

Thực thi tự động: Khi đến các mốc thời gian cần sử dụng sản phẩm hoặc kiểm tra đồng ruộng, hệ thống tự động gọi Zalo OA API gửi tin nhắn nhắc nhở đến Zalo của nông dân. Đồng thời, lịch hẹn này được đẩy lên Admin Dashboard để thông báo cho nhân viên thực địa chủ động sắp xếp xuống ruộng kiểm tra (thực hiện Bước 3).

Bước 5: Quản trị trung tâm và Báo cáo (Admin Dashboard)

Toàn bộ dữ liệu được quản lý tập trung trên Admin Dashboard (Laravel 12). Quản trị viên có thể xem chi tiết hồ sơ nông dân, đối chiếu tọa độ GPS bản đồ giữa lần đăng ký gốc và các lần feedback sau này để chống gian lận vị trí.

Hệ thống cung cấp công cụ theo dõi tiến độ của các lịch nhắc hẹn tự động, giúp ban quản lý điều phối nhân sự thực địa hiệu quả.

[Hình: Màn hình Admin Laravel hiển thị timeline chi tiết các lần feedback và danh sách lịch nhắc hẹn]

3. Vai trò và Kết quả thực tế

Trong dự án này, tôi chịu trách nhiệm thiết kế toàn bộ kiến trúc Database, xây dựng RESTful API cho các luồng logic phức tạp, lập trình giao diện Mini App và trang quản trị Admin.

Kết quả đạt được khi triển khai production:

Hệ thống phân luồng thông minh giúp nhân viên hiện trường giảm đáng kể thời gian thao tác với các hồ sơ cũ.

Tổ chức và liên kết thành công chuỗi dữ liệu từ lúc xuống giống (đăng ký) đến các giai đoạn phát triển (feedback) của 402 hồ sơ nông dân thực tế.

Tự động hóa hoàn toàn luồng giao tiếp với khách hàng thông qua Zalo OA API, tăng tỷ lệ tương tác và theo dõi trang OA của công ty.

Đảm bảo tính toàn vẹn và minh bạch của cơ sở dữ liệu nông nghiệp nhờ cơ chế ràng buộc ID và xác thực tọa độ GPS nhiều lớp.

 

 

Tính năng nổi bật

Xác thực vị trí chính xác của nông dân khi đăng ký
Lịch sử đăng ký & Feedback kèm hình ảnh
Thông báo nhắc lịch sử dụng thuốc
Admin Panel (Laravel 12): Báo cáo thống kê