Giới thiệu dự án
Trong kỷ nguyên chuyển đổi số và bùng nổ dữ liệu lớn, việc thu thập dữ liệu sơ cấp đóng vai trò nền tảng cho các quyết định chiến lược trong mọi lĩnh vực từ nghiên cứu khoa học, khoa học xã hội, giáo dục đến tối ưu hóa kinh doanh. Đối với các doanh nghiệp, tổ chức và chuỗi dịch vụ (nhà hàng, khách sạn, bán lẻ), nghiên cứu thị trường định tính và định lượng cung cấp thông tin sống còn về nhu cầu khách hàng. Tuy nhiên, theo các báo cáo phân tích thị trường kỹ thuật số tại Việt Nam (tiêu biểu từ Báo cáo Thị trường ứng dụng di động của Appota Group), trung bình mỗi người Việt Nam dành hơn 6,5 giờ mỗi ngày để truy cập Internet, trong đó hơn 3 giờ 18 phút thông qua thiết bị di động thông minh. Trái ngược với xu hướng số hóa này, phần lớn hoạt động khảo sát truyền thống vẫn phụ thuộc vào phương thức thủ công (bảng hỏi giấy, phỏng vấn trực tiếp tại điểm).
Phương pháp truyền thống bộc lộ những điểm nghẽn nghiêm trọng:
- Tỷ lệ từ chối cao và tâm lý bị làm phiền: Khách hàng tiếp cận trong trạng thái bị động, thiếu động lực phản hồi, dẫn đến dữ liệu thiếu chính xác hoặc tỷ lệ bỏ dở lên tới 75–80%.
- Chi phí nhân sự và vận hành lớn: Doanh nghiệp phải phân bổ ngân sách cho nhân sự khảo sát tại hiện trường, in ấn tài liệu và đào tạo thu thập viên.
- Thời gian trễ trong nhập liệu và phân tích: Dữ liệu từ giấy tờ phải nhập thủ công vào bảng tính, kéo dài từ vài tuần đến hàng tháng và phát sinh sai số cơ học từ 5–12%.
- Thiếu cơ chế xác thực danh tính: Không thể kiểm soát việc một người trả lời nhiều lần để lấy quà hoặc nhân viên khảo sát tự điền thông tin giả mạo.
Để giải quyết triệt để bài toán này, đề tài "Xây dựng ứng dụng khảo sát có thưởng Osurvey" được nghiên cứu và phát triển bởi sinh viên Nguyễn Hữu Phước dưới sự hướng dẫn của TS. Phan Ngọc Hoàng tại Khoa Công nghệ Kỹ thuật - Nông nghiệp Công nghệ cao, Trường Đại học Bà Rịa – Vũng Tàu (BVU). Đồ án tập trung thiết lập một nền tảng cầu nối đa bên (Multi-sided Platform) giữa hai nhóm thực thể: Người khảo sát (cá nhân/doanh nghiệp có nhu cầu thu thập dữ liệu) và Người tham gia khảo sát (người dùng di động đóng góp ý kiến để nhận phần thưởng tài chính/quà may mắn).
graph LR
A[Survey Creator / Business] -->|1. Create Survey & Fund Event| B(Osurvey Platform)
B -->|2. Push Notification via FCM| C[Target Mobile Users]
C -->|3. Complete Survey & eKYC| B
B -->|4. Real-time Analytics & CSV Export| A
B -->|5. Automated Reward via PayPal| C
Mục tiêu cụ thể của dự án:
- Thiết kế và triển khai ứng dụng di động đa nền tảng: Phát triển client di động bằng Flutter & Dart với giao diện trực quan, hỗ trợ song ngữ (Tiếng Việt - Tiếng Anh), tương thích đồng thời Android và iOS.
- Xây dựng hệ thống Backend RESTful API chuẩn hóa: Triển khai web server bằng Flask micro-framework (Python) xử lý logic nghiệp vụ, quản lý dữ liệu tập trung qua cơ sở dữ liệu quan hệ SQLite.
- Tích hợp xác thực danh tính điện tử (eKYC): Ứng dụng FPT.AI Reader sử dụng công nghệ nhận dạng ký tự quang học (OCR) và Deep Learning để xác thực thông tin Căn cước công dân (CCCD)/Chứng minh thư nhân dân (CMT), ngăn chặn tài khoản ảo.
- Tích hợp cổng thanh toán trực tuyến quốc tế: Kết nối cổng thanh toán PayPal API để tự động hóa quy trình nạp ngân sách sự kiện và chi trả phần thưởng minh bạch.
- Cơ chế gửi nhận thông báo thời gian thực: Triển khai Firebase Cloud Messaging (FCM) nhằm đẩy thông báo mời khảo sát tự động đến đúng nhóm đối tượng mục tiêu.
- Module trích xuất dữ liệu tự động: Cung cấp khả năng phân tích biểu đồ thống kê cơ bản và xuất dữ liệu thô định dạng CSV (Comma-Separated Values) phục vụ các phần mềm xử lý chuyên sâu như SPSS, R, Python Pandas.
Phạm vi và giới hạn của đề tài: Hệ thống tập trung tối ưu hóa các dạng câu hỏi trắc nghiệm một lựa chọn, nhiều lựa chọn, câu hỏi mở; xác thực danh tính áp dụng cho tài liệu định danh tại Việt Nam; hệ thống thanh toán và giải ngân qua cổng PayPal REST API trên môi trường máy chủ tiêu chuẩn.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Khảo sát các giải pháp thu thập dữ liệu hiện có trên thị trường cho thấy sự phân mảnh giữa công cụ tạo biểu mẫu đơn thuần và các nền tảng khảo sát trả thưởng trực tuyến:
| Tiêu chí so sánh |
Khảo sát giấy truyền thống |
Biểu mẫu trực tuyến (Google Forms, SurveyMonkey Free) |
Mạng khảo sát trực tuyến (InfoQ, VinaResearch) |
Hệ sinh thái Osurvey |
| Chi phí triển khai |
Rất cao (in ấn, nhân sự hiện trường) |
Miễn phí / Phí gói SaaS định kỳ |
Trung bình - Cao (phí dịch vụ trung gian) |
Tối ưu (trả theo số lượng phản hồi thực tế) |
| Tốc độ thu thập |
Rất chậm (1–4 tuần) |
Phụ thuộc vào kênh tự phân phối |
Trung bình (2–7 ngày) |
Thời gian thực (đẩy qua FCM trong vài phút) |
| Xác thực danh tính |
Kiểm tra thủ công (dễ gian lận) |
Không có (dễ bị spam bot/fake accounts) |
Xác thực email/SĐT cơ bản |
eKYC tự động với FPT.AI OCR (CCCD/CMT) |
| Động lực tham gia |
Quà tặng trực tiếp rời rạc |
Hầu như không có |
Điểm thưởng đổi thẻ cào |
Tiền thưởng ví điện tử trực tiếp + Lucky Draw |
| Kiểm soát mục tiêu |
Thấp, dễ sai lệch đối tượng |
Kém (phụ thuộc vào link chia sẻ) |
Trung bình (lọc theo profile cơ bản) |
Cao (lọc chính xác theo Tag & Demographic) |
Yêu cầu hệ thống được phân rã theo mô hình MoSCoW:
- Must-Have (Bắt buộc): Đăng ký/đăng nhập kèm xác thực OCR CCCD/CMT; Tạo, sửa, xóa biểu mẫu khảo sát; Thiết lập sự kiện khảo sát kèm ngân sách thưởng; Tham gia trả lời khảo sát trên di động; Xử lý thanh toán qua PayPal Gateway; Phân phối thông báo đẩy qua FCM; Xuất dữ liệu báo cáo dạng CSV.
- Should-Have (Nên có): Chuyển đổi giao diện đa ngôn ngữ (Tiếng Việt/Tiếng Anh); Lọc danh sách khảo sát theo trạng thái (chờ duyệt, đang diễn ra, hoàn thành); Trực quan hóa kết quả khảo sát bằng biểu đồ trực tiếp trên ứng dụng.
- Could-Have (Có thể có): Cơ chế quay số may mắn (Giveaway/Lucky Draw) tự động cho người tham gia; Hỗ trợ câu hỏi đính kèm hình ảnh Base64.
- Won't-Have (Chưa triển khai trong phiên bản này): Tích hợp cổng thanh toán nội địa (MoMo, VNPay, ZaloPay); Trình tạo khảo sát kéo thả trên trình duyệt Web.
Thiết kế hệ thống
Kiến trúc tổng thể của hệ thống Osurvey tuân theo mô hình Client-Server nhiều lớp (Multi-tier Architecture) với giao thức kết nối chuẩn RESTful Web API truyền tải định dạng JSON:
graph TD
subgraph Client Layer [Client Layer - Mobile App]
FlutterApp[Flutter Native Engine 2.5+]
DartUI[Dart Material UI Widgets]
FCMClient[FCM Client Listener]
end
subgraph API Gateway / Web Server Layer [Web Server Layer]
FlaskServer[Flask Micro-framework 2.0.x / Python 3.9+]
AuthModule[Auth & eKYC Controller]
SurveyModule[Survey & Event Manager]
PaymentModule[PayPal Webhook/Payment Handler]
NotificationModule[FCM Push Dispatcher]
end
subgraph Third Party Services Layer [External Cloud Services]
FPTAI[FPT.AI Vision OCR API]
PayPalAPI[PayPal REST Payment Gateway]
FCMService[Firebase Cloud Messaging Service]
end
subgraph Data Persistence Layer [Database Layer]
SQLiteDB[(SQLite Database 3.35+)]
end
FlutterApp <-->|HTTP/HTTPS REST API JSON| FlaskServer
FlutterApp <-->|Register Token / Receive Message| FCMService
FlaskServer <-->|OCR Verification Request| FPTAI
FlaskServer <-->|Order & Capture API| PayPalAPI
FlaskServer -->|Send Push Payload| FCMService
FlaskServer <-->|ORM / SQL Queries| SQLiteDB
Bảng định dạng Technology Stack của hệ thống:
| Thành phần |
Công nghệ / Thư viện |
Phiên bản |
Vai trò kỹ thuật |
| Mobile Frontend |
Flutter Framework |
2.5.x |
Xây dựng giao diện đa nền tảng, quản lý state và render widget |
| Ngôn ngữ Mobile |
Dart |
2.14.x |
Ngôn ngữ hướng đối tượng, biên dịch AOT/JIT, Type-safe |
| Backend Server |
Flask Framework |
2.0.x |
Micro-framework xây dựng RESTful API endpoint, định tuyến URL |
| Ngôn ngữ Server |
Python |
3.9.x |
Xử lý logic backend, thao tác dữ liệu, tương tác dịch vụ ngoài |
| Cơ sở dữ liệu |
SQLite |
3.35.x |
Hệ quản trị cơ sở dữ liệu quan hệ nhúng, lưu trữ phi tập trung |
| AI / OCR Engine |
FPT.AI Reader API |
v1.0 |
Trích xuất thông tin tự động từ ảnh chụp CCCD/CMT qua Deep Learning |
| Payment Gateway |
PayPal REST SDK |
v2 |
Khởi tạo giao dịch, thanh toán bảo mật, quản lý checkout token |
| Push Notification |
Firebase FCM SDK |
v1 |
Quản lý vòng đời device token, gửi thông báo đẩy real-time |
Thiết kế Cơ sở dữ liệu (Database Schema)
Hệ thống triển khai 16 bảng dữ liệu quan hệ chuẩn hóa nhằm quản trị toàn diện người dùng, phân loại đối tượng, biểu mẫu, sự kiện và giao dịch:
-- DDL tham chiếu các thực thể cốt lõi của Osurvey
CREATE TABLE User (
user_id INTEGER PRIMARY KEY AUTOINCREMENT,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
id_recognition VARCHAR(20) UNIQUE NOT NULL, -- Số CCCD/CMT trích xuất từ FPT.AI
nationality VARCHAR(50),
dob DATETIME
);
CREATE TABLE Survey (
survey_id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
name VARCHAR(255) NOT NULL,
base64 TEXT, -- Ảnh đại diện dạng chuỗi mã hóa
status_id INTEGER DEFAULT 1,
desc TEXT,
FOREIGN KEY (user_id) REFERENCES User(user_id)
);
CREATE TABLE Question (
question_id INTEGER PRIMARY KEY AUTOINCREMENT,
survey_id INTEGER NOT NULL,
content TEXT NOT NULL,
image TEXT,
allow_diffent_answer BOOLEAN DEFAULT 0,
type INTEGER NOT NULL, -- 1: Đơn lựa chọn, 2: Nhiều lựa chọn, 3: Ý kiến tự do
FOREIGN KEY (survey_id) REFERENCES Survey(survey_id)
);
CREATE TABLE Event (
event_id INTEGER PRIMARY KEY AUTOINCREMENT,
survey_id INTEGER NOT NULL,
start DATETIME NOT NULL,
end DATETIME NOT NULL,
price FLOAT NOT NULL, -- Đơn giá trả thưởng cho mỗi lượt hoàn thành
give_away FLOAT DEFAULT 0.0, -- Quỹ thưởng người may mắn
limit_user INTEGER NOT NULL, -- Giới hạn số lượng phản hồi
time_stamp DATETIME DEFAULT CURRENT_TIMESTAMP,
status_id INTEGER DEFAULT 1, -- 1: Chờ duyệt/Thanh toán, 2: Đang chạy, 3: Đã kết thúc
FOREIGN KEY (survey_id) REFERENCES Survey(survey_id)
);
CREATE TABLE Payment (
payment_id INTEGER PRIMARY KEY AUTOINCREMENT,
event_id INTEGER NOT NULL,
total FLOAT NOT NULL,
state BOOLEAN DEFAULT 0,
paypal_pay_id VARCHAR(100),
checkout_token VARCHAR(255),
time_stamp DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (event_id) REFERENCES Event(event_id)
);
Thiết kế API Endpoints
Hệ thống giao tiếp qua các RESTful API chính:
POST /api/v1/auth/register: Đăng ký tài khoản, gửi kèm ảnh CCCD đến FPT.AI OCR để trích xuất id_recognition và tạo người dùng.
POST /api/v1/auth/login: Xác thực thông tin người dùng, trả về mã trạng thái và phiên làm việc.
POST /api/v1/surveys/create: Khởi tạo biểu mẫu khảo sát, bao gồm danh sách câu hỏi và tùy chọn trả lời.
POST /api/v1/events/create: Tạo chiến dịch khảo sát, tính toán tổng ngân sách và gọi PayPal API để lấy checkout_token.
POST /api/v1/events/payment/verify: Webhook tiếp nhận callback thanh toán từ PayPal để kích hoạt trạng thái sự kiện sang Active.
POST /api/v1/surveys/submit: Gửi câu trả lời của người dùng tham gia sự kiện, ghi nhận trạng thái và cộng thưởng.
GET /api/v1/events/<event_id>/export-csv: Truy xuất toàn bộ dữ liệu phản hồi thô và định dạng thành tệp CSV tải về máy.
Methodology
Quy trình phát triển phần mềm áp dụng mô hình Agile/Scrum kết hợp quy trình phát triển lặp (Iterative Development) với 5 sprint chính trong thời gian 12 tuần:
gantt
title Kế hoạch triển khai dự án Osurvey (12 tuần)
dateFormat YYYY-MM-DD
section Sprint 1
Phân tích nghiệp vụ & Thiết kế CSDL :done, des1, 2021-08-01, 2021-08-14
section Sprint 2
Backend REST API & Tích hợp FPT.AI Reader :done, des2, 2021-08-15, 2021-08-28
section Sprint 3
Flutter Client UI & Khởi tạo Khảo sát :done, des3, 2021-08-29, 2021-09-11
section Sprint 4
Tích hợp PayPal Gateway & Firebase FCM :done, des4, 2021-09-12, 2021-09-25
section Sprint 5
Kiểm thử hệ thống, Tối ưu hóa & Đóng gói :done, des5, 2021-09-26, 2021-10-15
Quản trị rủi ro kỹ thuật:
- Rủi ro chất lượng ảnh chụp eKYC: Khắc phục bằng tiền xử lý kiểm tra dung lượng, định dạng ảnh tại client trước khi gửi đến FPT.AI API.
- Rủi ro gián đoạn giao dịch thanh toán: Sử dụng cơ chế kiểm tra token hai chiều (Two-way Token Handshake) với PayPal REST API trước khi cập nhật trạng thái
Payment.state = 1.
- Rủi ro xung đột dữ liệu đồng thời trên SQLite: Áp dụng cơ chế transaction lock và cô lập truy vấn đọc/ghi thông qua tầng ORM của Flask.
Implementation và kết quả
Development process
Quá trình phát triển tập trung vào việc hiện thực hóa các thuật toán xử lý luồng dữ liệu phức tạp giữa client di động, web server và các microservices bên thứ ba.
1. Xử lý Backend API với Flask (Python)
Đoạn mã dưới đây minh họa quá trình tiếp nhận yêu cầu tạo sự kiện, tính toán chi phí, tạo đơn hàng qua PayPal SDK và lưu trữ thông tin giao dịch:
# Backend Controller: Khởi tạo sự kiện khảo sát và liên kết thanh toán PayPal
from flask import Flask, request, jsonify
import datetime
@app.route('/api/v1/events/create', methods=['POST'])
def create_survey_event():
data = request.get_json()
survey_id = data.get('survey_id')
price_per_user = float(data.get('price'))
give_away = float(data.get('give_away', 0.0))
limit_user = int(data.get('limit'))
start_date = datetime.datetime.strptime(data.get('start'), '%Y-%m-%d %H:%M:%S')
end_date = datetime.datetime.strptime(data.get('end'), '%Y-%m-%d %H:%M:%S')
# Tính toán tổng chi phí sự kiện
total_budget = (price_per_user * limit_user) + give_away
try:
# Khởi tạo bản ghi sự kiện ở trạng thái chờ thanh toán (status_id = 1)
event_id = db_manager.insert_event(
survey_id, start_date, end_date, price_per_user, give_away, limit_user, status_id=1
)
# Tạo giao dịch thanh toán qua PayPal Payment API
payment_payload = {
"intent": "sale",
"payer": {"payment_method": "paypal"},
"transactions": [{
"amount": {"total": str(total_budget), "currency": "USD"},
"description": f"Osurvey Event Funding #{event_id}"
}],
"redirect_urls": {
"return_url": "osurvey://payment/success",
"cancel_url": "osurvey://payment/cancel"
}
}
paypal_response = paypal_gateway.create_payment(payment_payload)
# Lưu bản ghi Payment liên kết checkout_token
checkout_token = paypal_response.get('token')
db_manager.insert_payment(
event_id=event_id, total=total_budget, state=False,
paypal_pay_id=paypal_response.get('id'), checkout_token=checkout_token
)
return jsonify({
"status": "SUCCESS",
"event_id": event_id,
"approval_url": paypal_response.get('approval_url'),
"checkout_token": checkout_token
}), 201
except Exception as e:
return jsonify({"status": "ERROR", "message": str(e)}), 500
2. Xử lý Client với Flutter & Dart
Đoạn mã phía client xử lý việc gửi phản hồi câu hỏi khảo sát và đồng bộ hóa với hệ thống:
// Dart Service: Đóng gói và gửi phản hồi khảo sát người dùng
import 'dart:convert';
import 'package:http/http.dart' as http;
class SurveySubmissionService {
final String baseUrl = "https://api.osurvey.local/api/v1";
Future<bool> submitSurveyAnswers({
required int userEventId,
required List<Map<String, dynamic>> answers,
}) async {
final Uri url = Uri.parse('$baseUrl/surveys/submit');
final Map<String, dynamic> payload = {
'user_event_id': userEventId,
'answers': answers.map((a) => {
'question_id': a['question_id'],
'answer': a['answer_text'],
'is_different': a['is_custom_input'] ?? false,
}).toList(),
'submitted_at': DateTime.now().toIso8601String(),
};
final response = await http.post(
url,
headers: {'Content-Type': 'application/json'},
body: jsonEncode(payload),
);
if (response.statusCode == 200) {
final resData = jsonDecode(response.body);
return resData['status'] == 'SUCCESS';
} else {
throw Exception('Lỗi gửi kết quả khảo sát: ${response.statusCode}');
}
}
}
3. Thuật toán trích xuất báo cáo CSV
Dữ liệu câu trả lời của sự kiện được trích xuất động từ cấu trúc cơ sở dữ liệu quan hệ sang bảng phẳng dạng ma trận phản hồi $N \times M$ (với $N$ là số người tham gia, $M$ là danh sách câu hỏi) với độ phức tạp thuật toán $O(N \cdot M)$, tối ưu hóa tốc độ ghi file trực tiếp vào bộ nhớ thiết bị.
Testing và validation
Quá trình kiểm thử được tiến hành toàn diện qua các cấp độ: Unit Testing, Integration Testing và User Acceptance Testing (UAT).
| Kịch bản kiểm thử |
Dữ liệu đầu vào / Thao tác |
Kết quả kỳ vọng |
Trạng thái thực tế |
| Xác thực eKYC CCCD |
Tải lên 50 mẫu ảnh chụp thẻ CCCD (ánh sáng tốt, góc nghiêng, bóng mờ) |
Trích xuất chính xác id_recognition, họ tên, ngày sinh |
Đạt độ chính xác 96.0% (48/50 mẫu hợp lệ) |
| Bảo mật đăng ký |
Đăng ký tài khoản với số CCCD đã tồn tại |
Hệ thống từ chối và báo lỗi trùng lặp định danh |
100% trường hợp chặn thành công |
| Thanh toán PayPal |
Khởi tạo sự kiện 50 người, đơn giá 0.5 USD, thưởng may mắn 5 USD |
Tạo lệnh 30.0 USD, điều hướng checkout, cập nhật DB |
Giao dịch thành công, callback webhook phản hồi < 1.5s |
| Phân phối Push FCM |
Kích hoạt sự kiện mới tới nhóm UserTag mục tiêu |
Thiết bị nhận thông báo đẩy kèm tiêu đề và nội dung |
Tỷ lệ nhận tin 98.8%, độ trễ trung bình 2.1s |
| Xuất dữ liệu CSV |
Trích xuất sự kiện khảo sát 10 câu hỏi, 200 lượt phản hồi |
Tệp CSV đầy đủ cấu trúc cột, không lỗi font UTF-8 |
Xuất file hoàn tất trong 320ms |
Hiệu năng hệ thống được đo lường cụ thể:
- Thời gian phản hồi API trung bình: 165ms đối với các tác vụ đọc (Read) và 245ms đối với các tác vụ ghi (Write/Update).
- Độ chính xác nhận diện FPT.AI Reader: Đạt 96.0% trên tập mẫu thử nghiệm chuẩn.
- Thời gian khởi động ứng dụng (Cold Start): 1.2s trên thiết bị Android tầm trung nhờ cơ chế biên dịch AOT của Flutter Engine.
Kết quả đạt được
Đồ án đã hoàn thành toàn bộ 100% các chức năng đề ra trong mục tiêu ban đầu:
- Hoàn thiện ứng dụng di động native trên nền tảng Flutter với cấu trúc giao diện Material Design chuẩn mực, hỗ trợ mượt mà hai ngôn ngữ Việt - Anh.
- Xây dựng backend RESTful API hoàn chỉnh với Flask, quản trị nhất quán 16 bảng thực thể quan hệ.
- Tích hợp thành công 3 dịch vụ điện toán đám mây cao cấp: FPT.AI Reader OCR, PayPal Payment Gateway và Firebase Cloud Messaging.
- Triển khai trọn vẹn quy trình tạo sự kiện, thanh toán trực tuyến, làm bài khảo sát, nhận thưởng và xuất dữ liệu báo cáo chuyên nghiệp.
Đổi mới và đóng góp
Technical Innovations
- Kiến trúc bảo mật định danh kép (Double Identity Verification): Khác với các ứng dụng khảo sát truyền thống chỉ xác thực qua Email hoặc Số điện thoại (dễ bị giả mạo bằng SIM rác và botnet tự động), Osurvey ứng dụng công nghệ Deep Learning OCR từ FPT.AI Reader để trích xuất số CCCD/CMT độc bản. Cơ chế này loại bỏ hoàn toàn tình trạng "gian lận cày thưởng" (Reward Farming).
- Mô hình kinh tế chia sẻ dữ liệu vi mô (Micro-incentive Data Economy): Kết nối trực tiếp dòng tiền từ doanh nghiệp tới người tiêu dùng mà không qua các khâu trung gian phân phối tốn kém. Tích hợp thanh toán quốc tế PayPal đảm bảo tính minh bạch, hỗ trợ quy đổi ngân sách linh hoạt.
- Phân phối khảo sát theo ngữ cảnh đối tượng (Contextual Targeted Delivery): Thông qua hệ thống thẻ phân loại (
Tag, UserTag, EventTag), hệ thống chỉ gửi thông báo qua Firebase Cloud Messaging đến đúng tập người dùng có nhân khẩu học phù hợp, giảm tỷ lệ tin rác (spam rate) xuống dưới 2%.
Bảng so sánh đóng góp giải pháp
| Đặc điểm kỹ thuật |
Google Forms |
SurveyMonkey |
Khảo sát truyền thống |
Đồ án Osurvey |
| Công nghệ xây dựng |
Web Application |
Web / Mobile SaaS |
Giấy / Bảng hỏi |
Flutter (Dart) + Flask (Python) |
| Cơ chế xác thực |
Tài khoản Google |
Tài khoản Email |
Cảm quan người hỏi |
FPT.AI Reader OCR CCCD |
| Tích hợp thanh toán |
Không hỗ trợ |
Add-on bên thứ 3 |
Tiền mặt / Quà rời |
PayPal REST API trực tiếp |
| Kênh tương tác |
Link thụ động |
Email / Link Web |
Trực tiếp gặp mặt |
Mobile Push Notification (FCM) |
| Thời gian thu thập |
Thụ động |
Thụ động |
1–4 tuần |
Thời gian thực (vài giờ - vài ngày) |
| Mức độ giảm chi phí |
0% (tự triển khai) |
Thu phí tháng cao |
Mức cơ sở (100%) |
Giảm 60–75% ngân sách thu thập |
Ứng dụng thực tế và triển khai
Kịch bản ứng dụng thực tiễn
- Kịch bản 1: Nghiên cứu thị trường F&B và Bán lẻ: Chuỗi nhà hàng muốn khảo sát ý kiến khách hàng về menu mới tại khu vực Bà Rịa - Vũng Tàu. Doanh nghiệp tạo sự kiện khảo sát 5 câu hỏi, ngân sách 1.0 USD/người cho 300 khách hàng trong độ tuổi 18–35. Hệ thống đẩy thông báo FCM tới các thiết bị phù hợp, thu về 300 mẫu dữ liệu sạch đã xác thực CCCD trong vòng 48 giờ.
- Kịch bản 2: Khóa luận và Đề tài nghiên cứu khoa học: Sinh viên, giảng viên cần thu thập dữ liệu định lượng phục vụ đề tài nghiên cứu hành vi người tiêu dùng. Thay vì phát phiếu giấy, tác giả tạo khảo sát trên Osurvey, thiết lập quỹ thưởng may mắn (Giveaway) 20 USD để khuyến khích sinh viên toàn trường tham gia phản hồi nhanh chóng.
Chiến lược triển khai và Tính mở rộng
graph LR
subgraph Giai đoạn Hiện tại
A1[Flask Local Server]
A2[SQLite Embedded DB]
A3[PayPal Gateway]
end
subgraph Giai đoạn Mở rộng Doanh nghiệp
B1[Gunicorn + Nginx Load Balancer]
B2[PostgreSQL Multi-node + Redis Cache]
B3[Thêm MoMo / VNPay / ZaloPay]
B4[Cloud Storage AWS S3 / GCP Storage]
end
A1 --> B1
A2 --> B2
A3 --> B3
- Yêu cầu hạ tầng triển khai:
- Backend: Máy chủ Linux (Ubuntu Server 20.04 LTS), Python 3.9+, Gunicorn WSGI Server, Nginx Reverse Proxy, chứng chỉ SSL/TLS.
- Client: Thiết bị di động chạy Android 5.0 (API level 21) trở lên hoặc iOS 11.0 trở lên.
- Phân tích hiệu quả tài chính (ROI): Đối với một chiến dịch 1.000 mẫu khảo sát:
- Khảo sát truyền thống: Chi phí in ấn + nhân sự hiện trường khoảng 15.000.000 – 20.000.000 VNĐ, thời gian 15 ngày.
- Ứng dụng Osurvey: Chi phí thưởng trực tiếp (10.000 VNĐ/người) + vận hành khoảng 11.000.000 VNĐ, thời gian hoàn thành dưới 3 ngày, tiết kiệm 45% chi phí và rút ngắn 80% thời gian thực hiện.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Cơ sở dữ liệu SQLite: Mặc dù gọn nhẹ và phù hợp cho giai đoạn thử nghiệm, SQLite có hạn chế về cơ chế ghi đồng thời (Concurrency Lock) khi lượng người dùng đồng thời (CCU) vượt quá ngưỡng 1.000 kết nối.
- Lưu trữ hình ảnh Base64: Việc lưu trữ ảnh đại diện khảo sát dưới dạng chuỗi Base64 trực tiếp trong cơ sở dữ liệu làm tăng kích thước bản ghi, ảnh hưởng đến tốc độ truy vấn khi dữ liệu phình to.
- Phương thức thanh toán đơn nhất: Việc chỉ hỗ trợ PayPal gây khó khăn cho người dùng phổ thông tại Việt Nam chưa sở hữu tài khoản thanh toán quốc tế.
Hướng phát triển tương lai
- Nâng cấp kiến trúc cơ sở dữ liệu và lưu trữ: Chuyển đổi sang hệ quản trị cơ sở dữ liệu PostgreSQL kết hợp Redis Caching; lưu trữ hình ảnh trên các dịch vụ lưu trữ đám mây như AWS S3 hoặc Cloudinary.
- Mở rộng phương thức thanh toán nội địa: Tích hợp các cổng thanh toán phổ biến tại Việt Nam gồm MoMo, VNPay, ZaloPay và VietQR để tối ưu hóa trải nghiệm người dùng nội địa.
- Xây dựng hệ thống phát hiện gian lận bằng AI (AI Anti-Fraud): Ứng dụng thuật toán phân tích hành vi để phát hiện người dùng trả lời ngẫu nhiên (chọn cùng một đáp án liên tục trong thời gian siêu ngắn) hoặc phân tích độ nhất quán logic giữa các câu trả lời đối ứng.
- Đa nền tảng toàn diện: Tận dụng tối đa ưu thế của Flutter để biên dịch sản phẩm chạy trực tiếp trên nền tảng Web Dashboard và Desktop (macOS/Windows).
Đối tượng hưởng lợi
mindmap
root((Osurvey Value Ecosystem))
Students & Academic
Học tập kiến trúc Flutter & Flask
Nguồn dữ liệu nghiên cứu nhanh chóng
Mẫu triển khai eKYC và Payment API
Software Developers
Mô hình tích hợp Mobile-Cloud RESTful
Mẫu thiết kế CSDL quan hệ chuẩn hóa
Kỹ thuật tối ưu hóa UI Flutter
Enterprises & Surveyors
Cắt giảm 60% chi phí khảo sát
Dữ liệu sạch xác thực danh tính
Báo cáo xuất CSV phân tích ngay
Mobile Users / Respondents
Tận dụng thời gian rảnh tạo thu nhập
Bảo mật thông tin cá nhân
Trải nghiệm khảo sát mượt mà
- Sinh viên chuyên ngành CNTT: Cung cấp tài liệu tham khảo hoàn chỉnh về kiến trúc ứng dụng di động kết nối đa dịch vụ đám mây (Flutter, Flask, OCR, PayPal, FCM).
- Lập trình viên (Developers): Cung cấp mẫu thiết kế chuẩn hóa cho việc kết nối mobile client với REST API, giải quyết bài toán đồng bộ hóa trạng thái giao dịch thanh toán và thông báo đẩy.
- Doanh nghiệp và Tổ chức khảo sát: Tiếp cận công cụ thu thập thông tin thị trường tốc độ cao, loại bỏ sai lệch dữ liệu do khảo sát viên tạo ra.
- Người dùng di động: Biến thời gian nhàn rỗi thành thu nhập minh bạch thông qua việc đóng góp ý kiến có giá trị cho cộng đồng.
Câu hỏi thường gặp
1. Yêu cầu kỹ thuật tối thiểu để triển khai và chạy hệ thống Osurvey là gì?
Hệ thống yêu cầu máy chủ chạy hệ điều hành Linux (khuyến nghị Ubuntu 20.04+), cài đặt môi trường Python 3.9+ cùng các gói phụ thuộc (Flask, requests, paypalrestsdk). Về phía người dùng cuối, ứng dụng tương thích với mọi thiết bị Android từ phiên bản 5.0 trở lên và iOS từ 11.0 trở lên, yêu cầu kết nối Internet (3G/4G/Wi-Fi) và quyền truy cập camera để chụp ảnh xác thực CCCD.
2. Hệ thống xử lý vấn đề mở rộng (Scalability) như thế nào khi lượng người dùng tăng cao?
Để đáp ứng từ 10.000 đến 100.000 người dùng hoạt động cùng lúc, hệ thống cần thay thế SQLite bằng PostgreSQL Cluster có phân chia Read/Write Replicas. Đồng thời, web server Flask có thể triển khai dưới dạng các Docker Container được điều phối bởi Kubernetes hoặc đặt phía sau Nginx Load Balancer, kết hợp Redis Cache để lưu tạm phiên làm việc và danh sách khảo sát đang hoạt động.
3. Việc tích hợp với các hệ thống quản trị dữ liệu hiện có (như CRM, ERP) có khả thi không?
Hoàn toàn khả thi. Do Osurvey được thiết kế theo kiến trúc chuẩn RESTful API, các hệ thống bên ngoài có thể kết nối thông qua các API endpoints bảo mật bằng khóa API (API Keys) hoặc OAuth2 để tự động khởi tạo chiến dịch khảo sát và đồng bộ dữ liệu phản hồi về hệ thống quản trị nội bộ mà không cần can thiệp vào mã nguồn lõi.
4. Chi phí duy trì và yêu cầu bảo trì định kỳ của hệ thống gồm những gì?
Chi phí vận hành định kỳ bao gồm: Thuê máy chủ Cloud VPS (khoảng 10–30 USD/tháng cho giai đoạn ban đầu), phí dịch vụ FPT.AI Reader API (tính theo số lượt gọi API quét ảnh thực tế), phí giao dịch của cổng thanh toán PayPal (tính theo phần trăm trên mỗi giao dịch nạp quỹ). Công tác bảo trì định kỳ bao gồm sao lưu cơ sở dữ liệu, gia hạn chứng chỉ SSL và cập nhật các gói bản vá bảo mật của Flask/Flutter.
5. Khả năng hoàn vốn (ROI) của doanh nghiệp khi đầu tư sử dụng Osurvey được tính toán ra sao?
Đối với một đơn vị nghiên cứu thị trường thực hiện trung bình 10 chiến dịch khảo sát mỗi năm (mỗi chiến dịch 1.000 mẫu), việc chuyển đổi sang nền tảng Osurvey giúp tiết kiệm khoảng 80.000.000 – 120.000.000 VNĐ chi phí nhân sự và in ấn mỗi năm. Thời gian hoàn vốn đầu tư nền tảng ước tính đạt được chỉ sau 3 đến 5 tháng vận hành thực tế.
Kết luận
Đề tài "Xây dựng ứng dụng khảo sát có thưởng Osurvey" đã giải quyết xuất sắc bài toán tối ưu hóa quy trình thu thập dữ liệu nghiên cứu thị trường trong kỷ nguyên số. Bằng sự kết hợp chặt chẽ giữa framework di động hiện đại Flutter (Dart), nền tảng web service linh hoạt Flask (Python) cùng các dịch vụ công nghệ tiên tiến (FPT.AI Reader OCR, PayPal Payment Gateway, Firebase Cloud Messaging), đồ án đã tạo nên một giải pháp hoàn chỉnh từ thiết kế kiến trúc, cơ sở dữ liệu quan hệ chuẩn hóa đến giao diện trải nghiệm người dùng.
Thành công của đồ án không chỉ nằm ở việc hoàn thành toàn diện các yêu cầu kỹ thuật của một khóa luận tốt nghiệp ngành Công nghệ thông tin mà còn mở ra tiềm năng thương mại hóa và ứng dụng thực tiễn to lớn. Giải pháp mang lại giá trị gia tăng rõ rệt: giảm thiểu 60% chi phí vận hành, loại bỏ 100% gian lận định danh và rút ngắn thời gian thu thập dữ liệu về mức thời gian thực. Đây chính là tiền đề vững chắc để phát triển Osurvey thành một nền tảng nghiên cứu thị trường và kinh tế dữ liệu vi mô hàng đầu trong tương lai.