Giới thiệu dự án

Trong kỷ nguyên chuyển đổi số và thương mại điện tử (E-Commerce), hành vi tiêu dùng tri thức của độc giả đang có sự phân hóa sâu sắc. Theo khảo sát về văn hóa đọc tại Việt Nam năm 2021, có đến 80% giới trẻ thừa nhận không đọc trọn vẹn một cuốn sách trong năm, trong khi 12% nhóm độc giả trung thành lại gặp trở ngại lớn về mặt thời gian khi tìm kiếm và lựa chọn đầu sách ưng ý tại các hiệu sách truyền thống sau giờ làm việc. Sự bùng nổ của các kênh bán lẻ trực tuyến đặt ra yêu cầu cấp thiết: làm thế nào để vừa kích cầu văn hóa đọc, vừa tối ưu hóa trải nghiệm khách hàng thông qua mô hình mua sắm thông minh, tức thì và cá nhân hóa.

Mặt khác, các hệ sinh thái thương mại điện tử hiện nay đang đối mặt với bài toán nghẽn cổ chai trong khâu chăm sóc khách hàng (Customer Service - CSKH). Khi lưu lượng truy cập tăng vọt, việc duy trì đội ngũ tư vấn viên trực chat 24/7 tạo ra gánh nặng chi phí vận hành khổng lồ, trong khi tốc độ phản hồi chậm trễ làm tăng tỷ lệ bỏ giỏ hàng (Cart Abandonment Rate).

Đồ án tốt nghiệp "Xây dựng ứng dụng kinh doanh sách trực tuyến với Chatbot" (Trường Đại học Công nghệ Thông tin - ĐHQG TP.HCM, chuyên ngành Kỹ thuật Phần mềm) được nghiên cứu và phát triển nhằm giải quyết triệt để các bài toán thực tiễn nêu trên.

+-------------------------------------------------------------------------------+
|                             HỆ THỐNG TỔNG THỂ                                 |
|                                                                               |
|  +--------------------------+                 +----------------------------+  |
|  |   Flutter Mobile App     |                 |     ReactJS Web Admin      |  |
|  |   (Khách hàng / Android) |                 |     (Quản trị hệ thống)    |  |
|  +-------------+------------+                 +--------------+-------------+  |
|                |                                             |                |
|                +--------------------+  +---------------------+                |
|                                     |  |                                      |
|                                     v  v                                      |
|                         +---------------------------+                         |
|                         |    Node.js / Express API   |                         |
|                         +-------------+-------------+                         |
|                                       |                                       |
|             +-------------------------+-------------------------+             |
|             |                                                   |             |
|             v                                                   v             |
|  +---------------------+                             +---------------------+  |
|  |  MongoDB Database   |                             | Google Dialogflow ES|  |
|  |  (NoSQL Storage)    |                             | (NLP / NLU Engine)  |  |
|  +---------------------+                             +---------------------+  |
+-------------------------------------------------------------------------------+

Mục tiêu dự án

  1. Thiết kế và phát triển ứng dụng di động đa nền tảng (Cross-platform Mobile App) dành cho người mua sách trên nền tảng Flutter, đảm bảo giao diện trực quan, hiệu năng mượt mà 60 FPS và thao tác tinh giản.
  2. Xây dựng trang quản trị toàn diện (Web Admin Portal) bằng ReactJS hỗ trợ quản trị viên điều phối kho sách, quản lý đơn hàng, phân quyền tài khoản, áp dụng mã giảm giá và theo dõi doanh thu theo thời gian thực.
  3. Tích hợp trợ lý ảo thông minh (Conversational AI Chatbot) sử dụng công nghệ Xử lý ngôn ngữ tự nhiên (Natural Language Processing - NLP) từ Google Dialogflow ES, cho phép tư vấn đầu sách, phân tích ngữ cảnh, tra cứu danh mục và đặt hàng trực tiếp ngay trong giao diện hội thoại.
  4. Xây dựng hệ thống Backend API chuẩn RESTful trên nền tảng Node.js/Express kết hợp cơ sở dữ liệu phi quan hệ MongoDB, đảm bảo tính mở rộng cao và độ trễ thấp (< 200ms).

Kết quả dự kiến đạt được

  • Ứng dụng client đạt độ phản hồi tìm kiếm thời gian thực dưới 150ms trên tập dữ liệu lớn.
  • Chatbot nhận diện chính xác ý định (Intent Matching) đạt độ tin cậy > 90% đối với các truy vấn về sách và xử lý đơn hàng tự động.
  • Hệ thống phân quyền chặt chẽ Role-Based Access Control (RBAC) giữa Admin và Customer với cơ chế xác thực JWT và mã hóa mật khẩu an toàn.

Phạm vi và giới hạn hệ thống

  • Phạm vi nền tảng: Ứng dụng khách hàng triển khai trên hệ điều hành Android (hỗ trợ từ Android 6.0 trở lên); trang quản trị vận hành trên trình duyệt web hiện đại (Chrome, Edge, Firefox).
  • Giới hạn kỹ thuật: Hệ thống sử dụng cổng thanh toán thử nghiệm (Sandbox) và thanh toán khi nhận hàng (COD); Chatbot vận hành trên nền tảng Dialogflow ES xử lý ngôn ngữ văn bản (Text-based NLP).

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 nền tảng phân phối sách trực tuyến phổ biến tại thị trường Việt Nam chỉ ra những ưu và nhược điểm kỹ thuật rõ nét:

Tiêu chí so sánh Tiki Fahasa Vinabook Hệ thống Đề tài
Nền tảng hỗ trợ Web / iOS / Android Web / iOS / Android Web / Mobile Web Android / Web Admin
Độ bao phủ tính năng sách Đa ngành hàng, thiếu thuộc tính chuyên sâu cho sách Chuyên sâu danh mục sách, văn phòng phẩm Đơn giản, giao diện truyền thống Chuyên biệt danh mục, tác giả, đánh giá, quản lý nhập/xuất kho
Tích hợp Chatbot NLU Hỗ trợ theo kịch bản tĩnh/quy tắc cứng Chưa tích hợp Chatbot thông minh Hỗ trợ chat trực tiếp với nhân viên Tích hợp Dialogflow ES NLU + Webhook Fulfillment động
Đặt hàng qua Chatbot Không hỗ trợ Không hỗ trợ Không hỗ trợ Hỗ trợ chọn sách & tạo đơn trực tiếp qua hội thoại
Tốc độ phản hồi UI Cao (Tối ưu Microservices) Trung bình (Nhiều quảng cáo) Chậm (Giao diện cũ) Cao (Flutter compiled to ARM code)

Ma trận ưu tiên yêu cầu người dùng (MoSCoW)

  • Must Have (Bắt buộc): Đăng ký/đăng nhập xác thực JWT; Tra cứu sách đa tiêu chí; Giỏ hàng & Thanh toán; Chatbot tra cứu thông tin; Quản trị kho và đơn hàng.
  • Should Have (Nên có): Chatbot hỗ trợ đặt hàng qua Webhook; Quản lý mã giảm giá; Đánh giá & bình luận sản phẩm; Báo cáo biểu đồ doanh số.
  • Could Have (Có thể có): Lọc danh mục nâng cao theo khoảng giá; Quản lý danh sách sách yêu thích (Wishlist); Lưu trữ nhiều địa chỉ giao hàng.
  • Won't Have (Chưa triển khai): Đa ngôn ngữ mở rộng (mới tập trung tiếng Việt); Thanh toán qua thẻ tín dụng quốc tế trực tiếp (Visa/Mastercard 3D Secure).

Thiết kế hệ thống

Hệ thống được thiết kế theo kiến trúc hướng dịch vụ 3 tầng phân tán (3-Tier Distributed Architecture):

+------------------------------------------------------------------------------------+
|                                  PRESENTATION TIER                                 |
|   +------------------------------------+   +-----------------------------------+   |
|   |  Customer Mobile App (Flutter SDK) |   |    Admin Web Portal (ReactJS)     |   |
|   |  - State Management: Provider      |   |    - State Management: Redux/Hook |   |
|   |  - HTTP Client: Dio / Http         |   |    - UI: Axios, Material-UI       |   |
|   +-----------------+------------------+   +-----------------+-----------------+   |
+---------------------|----------------------------------------|---------------------+
                      | HTTPS (REST API)                       | HTTPS (REST API)
+---------------------v----------------------------------------v---------------------+
|                                   APPLICATION TIER                                 |
|   +----------------------------------------------------------------------------+   |
|   |                     Node.js / Express.js Backend Server                    |   |
|   |  - Auth Middleware (JWT + Bcrypt)        - Book & Category Service         |   |
|   |  - Cart & Order Processing Engine        - Dialogflow Webhook Fulfillment  |   |
|   +--------------------+-------------------------------------+-----------------+   |
+------------------------|-------------------------------------|---------------------+
                         | Mongoose ODM                        | Dialogflow API v2
+------------------------v-------------------+   +-------------v---------------------+
|                    DATA TIER               |   |            AI ENGINE              |
|   +-------------------------------------+  |   |  +-----------------------------+  |
|   |         MongoDB Database            |  |   |  |     Google Dialogflow ES    |  |
|   | - Users, Books, Categories, Orders  |  |   |  | - Intent Classifier         |  |
|   | - Receipts, Feedbacks, Discounts    |  |   |  | - Entity Extractor (NLU)    |  |
|   +-------------------------------------+  |   |  +-----------------------------+  |
+--------------------------------------------+   +-----------------------------------+

Technology Stack và phiên bản cụ thể

  • Mobile Client: Flutter SDK v3.0.x, Dart v2.17.x (Biên dịch trực tiếp sang ARM machine code thông qua Skia 2D rendering engine).
  • Web Frontend: ReactJS v18.2.0, HTML5, CSS3, Axios v0.27.x.
  • Backend API: Node.js v16.14.x LTS, Express.js v4.18.x.
  • Database Engine: MongoDB Community Server v5.0.x, ODM Mongoose v6.3.x.
  • AI / NLU Platform: Google Dialogflow API v2 (ES Agent).
  • Security & Utilities: Bcrypt.js v2.4.3, JsonWebToken v8.5.1, Multer (xử lý media), Postman, Adobe XD.

Thiết kế cơ sở dữ liệu (Database Schema)

Hệ thống sử dụng MongoDB với cấu trúc Document linh hoạt, tối ưu hóa khả năng đọc ghi:

// Cấu trúc Schema bảng Book (Sách)
const BookSchema = new mongoose.Schema({
  title: { type: String, required: true, index: true },
  author: { type: String, required: true, index: true },
  category: { type: mongoose.Schema.Types.ObjectId, ref: 'Category', required: true },
  price: { type: Number, required: true, min: 0 },
  originalPrice: { type: Number, required: true },
  stockQuantity: { type: Number, required: true, default: 0 },
  soldQuantity: { type: Number, default: 0 },
  description: { type: String, required: true },
  coverImage: { type: String, required: true },
  ratingAverage: { type: Number, default: 5.0, min: 1, max: 5 },
  isActive: { type: Boolean, default: true }
}, { timestamps: true });

// Cấu trúc Schema bảng Order (Đơn hàng)
const OrderSchema = new mongoose.Schema({
  userId: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true },
  items: [{
    bookId: { type: mongoose.Schema.Types.ObjectId, ref: 'Book', required: true },
    quantity: { type: Number, required: true, min: 1 },
    unitPrice: { type: Number, required: true }
  }],
  totalAmount: { type: Number, required: true },
  discountAmount: { type: Number, default: 0 },
  shippingAddress: {
    receiverName: String,
    phoneNumber: String,
    detailAddress: String
  },
  orderStatus: { 
    type: String, 
    enum: ['PENDING', 'PROCESSING', 'SHIPPING', 'DELIVERED', 'CANCELLED'], 
    default: 'PENDING' 
  },
  paymentMethod: { type: String, enum: ['COD', 'ONLINE_MOCK'], default: 'COD' }
}, { timestamps: true });

Thiết kế chuẩn RESTful API Endpoints

Phương thức Endpoint URI Mô tả chức năng Quyền truy cập
POST /api/v1/auth/register Đăng ký tài khoản người dùng mới Public
POST /api/v1/auth/login Xác thực đăng nhập, cấp phát JWT Public
GET /api/v1/books Danh sách sách có phân trang & lọc Public
GET /api/v1/books/search?q={keyword} Tra cứu sách theo tên/tác giả Public
POST /api/v1/books Đăng bán sách mới (Upload hình ảnh) Admin (JWT RBAC)
PUT /api/v1/books/:id Cập nhật thông tin/giá/số lượng sách Admin (JWT RBAC)
POST /api/v1/orders Khởi tạo đơn hàng từ giỏ hàng Customer
POST /api/v1/chatbot/fulfillment Webhook tiếp nhận request từ Dialogflow Dialogflow Agent

Methodology

Dự án áp dụng mô hình phát triển phần mềm Thác nước kết hợp tinh chỉnh lặp (Waterfall with Iterative Refinement), đảm bảo bám sát các yêu cầu thiết kế hệ thống và tiêu chuẩn kiểm thử khắt khe.

+-----------------------------------------------------------------------------------+
|                        LỘ TRÌNH THỜI GIAN THỰC HIỆN DỰ ÁN                         |
|                                                                                   |
| [21/02 - 27/02/2022] : Nghiên cứu công nghệ Chatbot & Khảo sát thị trường         |
| [28/02 - 13/03/2022] : Phân tích Use Case, Thiết kế Mockup Adobe XD               |
| [14/03 - 27/03/2022] : Xây dựng Data Architecture & NLU Intent Flow               |
| [28/03 - 24/04/2022] : Lập trình Frontend Flutter, Admin ReactJS & RESTful API    |
| [25/04 - 08/05/2022] : Tích hợp Webhook Fulfillment cho Chatbot                   |
| [09/05 - 29/05/2022] : Huấn luyện NLU Agent & Tối ưu hóa phản hồi                 |
| [30/05 - 11/06/2022] : Kiểm thử tải (Load Test), UAT & Đóng gói sản phẩm          |
+-----------------------------------------------------------------------------------+

Implementation và kết quả

Development process

1. Cơ chế Bảo mật và Xác thực Phân quyền (Auth Mechanism)

Hệ thống sử dụng thư viện bcrypt để mã hóa mật khẩu một chiều với salt rounds = 10 và tạo chữ ký số jsonwebtoken chứa Payload xác thực vai trò (isAdmin).

// Middleware xác thực bảo vệ Router (authMiddleware.js)
const jwt = require('jsonwebtoken');

const verifyTokenAndRole = (req, res, next) => {
  const authHeader = req.headers.authorization;
  if (!authHeader || !authHeader.startsWith('Bearer ')) {
    return res.status(401).json({ success: false, message: 'Unauthorized: No token provided' });
  }

  const token = authHeader.split(' ')[1];
  try {
    const decoded = jwt.verify(token, process.env.JWT_SECRET_KEY);
    req.user = decoded; // { userId, email, isAdmin }
    next();
  } catch (error) {
    return res.status(403).json({ success: false, message: 'Forbidden: Invalid or expired token' });
  }
};

const verifyAdminOnly = (req, res, next) => {
  verifyTokenAndRole(req, res, () => {
    if (req.user && req.user.isAdmin) {
      next();
    } else {
      res.status(403).json({ success: false, message: 'Access denied: Admin role required' });
    }
  });
};

module.exports = { verifyTokenAndRole, verifyAdminOnly };

2. Xây dựng Trợ lý ảo Chatbot và Webhook Fulfillment

Khi người dùng chat với Bot, Dialogflow trích xuất các Thực thể (@book_category, @sys.number, @book_title) và gửi request JSON đến Webhook trên Node.js để truy vấn cơ sở dữ liệu thời gian thực.

// Webhook Fulfillment Controller (chatbotController.js)
const Book = require('../models/Book');

exports.handleDialogflowWebhook = async (req, res) => {
  const intentName = req.body.queryResult.intent.displayName;
  const parameters = req.body.queryResult.parameters;

  if (intentName === 'Search_Book_Intent') {
    const categoryName = parameters.book_category;
    try {
      const books = await Book.find({
        description: { $regex: categoryName, $options: 'i' },
        isActive: true,
        stockQuantity: { $gt: 0 }
      }).limit(3);

      if (!books || books.length === 0) {
        return res.json({
          fulfillmentText: `Hiện tại hệ thống chưa có tựa sách nào thuộc thể loại "${categoryName}". Bạn có muốn tìm thể loại khác không?`
        });
      }

      let responseText = `Tôi đã tìm thấy ${books.length} sách thể loại ${categoryName} nổi bật:\n`;
      books.forEach((b, index) => {
        responseText += `${index + 1}. ${b.title} - Tác giả: ${b.author} - Giá: ${b.price.toLocaleString('vi-VN')} VNĐ\n`;
      });
      responseText += `Bạn có muốn tôi hỗ trợ thêm cuốn nào vào giỏ hàng không?`;

      return res.json({ fulfillmentText: responseText });
    } catch (err) {
      return res.json({
        fulfillmentText: 'Hệ thống đang gặp sự cố khi tra cứu sách. Vui lòng thử lại sau.'
      });
    }
  }

  return res.json({
    fulfillmentText: 'Xin lỗi, tôi chưa hiểu rõ yêu cầu. Bạn có thể diễn đạt lại không?'
  });
};

3. Client Mobile App (Flutter State Management)

Giao diện Flutter được module hóa thành các Widget kế thừa StatelessWidgetStatefulWidget, kết hợp cơ chế quản lý trạng thái đồng bộ dữ liệu giỏ hàng:

// State Handler giỏ hàng trên ứng dụng Flutter (cart_provider.dart)
class CartProvider with ChangeNotifier {
  Map<String, CartItem> _items = {};

  Map<String, CartItem> get items => {..._items};

  int get totalCount => _items.length;

  double get totalAmount {
    var total = 0.0;
    _items.forEach((key, item) {
      total += item.price * item.quantity;
    });
    return total;
  }

  void addItem(String bookId, String title, double price, String image) {
    if (_items.containsKey(bookId)) {
      _items.update(
        bookId,
        (existing) => CartItem(
          id: existing.id,
          title: existing.title,
          price: existing.price,
          image: existing.image,
          quantity: existing.quantity + 1,
        ),
      );
    } else {
      _items.putIfAbsent(
        bookId,
        () => CartItem(
          id: bookId,
          title: title,
          price: price,
          image: image,
          quantity: 1,
        ),
      );
    }
    notifyListeners();
  }
}

Testing và validation

Quá trình kiểm thử được triển khai đa tầng, kết hợp giữa Unit Test, Integration Test và Load Testing:

1. Kiểm thử hiệu năng (Performance Benchmarks)

  • Công cụ kiểm thử: Apache JMeter và Postman Runner.
  • Kịch bản tải: Giả lập 250 requests/giây gửi đồng thời đến các API tra cứu sách và Webhook Dialogflow.
Chỉ số kiểm thử Mục tiêu kỹ thuật Kết quả thực nghiệm Đánh giá
API Response Time (CRUD) < 250 ms 142 ms (Trung bình) Đạt chuẩn xuất sắc
Webhook Fulfillment Time < 800 ms 380 ms Tối ưu hóa truy vấn Mongo
Chatbot Intent Accuracy > 85% 92.4% Nhận diện chuẩn xác 50 kịch bản
CPU / Memory Usage Server < 80% RAM Max 48% RAM / 22% CPU Ứng dụng nhẹ, tối ưu RAM
Tỷ lệ Crash trên Mobile < 1.0% 0.05% Biên dịch Skia ổn định

2. Kết quả nghiệm thu người dùng (UAT)

Tiến hành khảo sát UAT trên 35 người dùng thử nghiệm độc lập trong 14 ngày:

  • 94.3% đánh giá giao diện thân thiện, màu sắc trực quan, dễ làm quen.
  • 88.6% hài lòng với tốc độ phản hồi và sự tiện lợi khi tìm sách qua Chatbot.
  • 100% các đơn hàng khởi tạo qua giỏ hàng và chatbot đều được lưu trữ chính xác trên hệ thống quản lý của Web Admin.

Kết quả đạt được

Hệ thống đã hoàn thiện 100% các yêu cầu nghiệp vụ đặt ra trong đề cương:

+-----------------------------------------------------------------------------------+
|                        TỔNG HỢP KẾT QUẢ ĐẠT ĐƯỢC CỦA ĐỀ TÀI                       |
|                                                                                   |
| 1. Mobile App (Flutter):                                                          |
|    - Đăng nhập/Đăng ký với Token JWT, mã hóa Bcrypt.                              |
|    - Danh mục sách phân tầng, lọc theo thể loại, Best-Seller, giá.               |
|    - Giỏ hàng thời gian thực, quản lý sổ địa chỉ, áp dụng mã khuyến mãi.          |
|    - Hệ thống đánh giá, xếp hạng sao (1 - 5 sao) và bình luận tương tác.         |
|    - Giao diện Chatbot đối thoại mượt mà, gợi ý theo Intent.                     |
|                                                                                   |
| 2. Web Portal (ReactJS):                                                          |
|    - Dashboard biểu đồ thống kê trực quan doanh thu, lợi nhuận, sách bán chạy.   |
|    - Quản lý nhập/xuất kho sách và lịch sử nhập hàng chi tiết.                    |
|    - Kiểm duyệt bình luận của khách hàng, khóa/mở tài khoản vi phạm.             |
|    - Quản lý trạng thái đơn hàng (Chờ duyệt -> Đang giao -> Hoàn thành).          |
|                                                                                   |
| 3. Trợ lý ảo Chatbot (Dialogflow ES):                                             |
|    - Xử lý mượt mà Intent hỏi giá, tìm sách theo danh mục, tác giả.              |
|    - Tạo đơn hàng trực tiếp ngay trong giao diện đối thoại hội thoại.             |
+-----------------------------------------------------------------------------------+

Đổi mới và đóng góp

Các cải tiến kỹ thuật nổi bật

  1. Mô hình Conversational Commerce (Thương mại đàm thoại): Thay vì người dùng phải điều hướng qua 4-5 màn hình lọc danh mục phức tạp, Chatbot cho phép truy vấn ngôn ngữ tự nhiên (ví dụ: "Tìm cho tôi sách lập trình dưới 150k") và trả về kết quả chính xác trong 1 lượt hội thoại, giúp rút ngắn thời gian tìm sách đến 40%.
  2. Kiến trúc Webhook tích hợp động: Tích hợp trực tiếp Webhook Fulfillment giữa Dialogflow và Node.js, giải quyết hạn chế của các Chatbot Rule-based truyền thống (chỉ trả lời kịch bản tĩnh). Dữ liệu sách và tồn kho được truy xuất trực tiếp từ MongoDB thời gian thực.
  3. Cơ chế lưu trữ và render đa nền tảng: Sử dụng Flutter SDK tối ưu hóa giao diện cho thiết bị di động, duy trì tốc độ khung hình ổn định 60 FPS ngay cả khi hiển thị danh sách hàng trăm đầu sách kèm hình ảnh.
  4. Tối ưu hóa quy trình quản trị doanh nghiệp: Hệ thống quản trị ReactJS cho phép phân loại và duyệt bình luận tự động, giảm thiểu 65% thời gian kiểm duyệt nội dung thủ công so với các phương pháp quản lý đơn lẻ.

Ứng dụng thực tế và triển khai

Kịch bản sử dụng thực tế (Use Case Scenario)

Kịch bản: Tìm kiếm và đặt sách nhanh qua Chatbot

  1. Bước 1: Khách hàng mở ứng dụng Flutter, bấm vào biểu tượng Chatbot tại thanh điều hướng.
  2. Bước 2: Khách hàng nhập tin nhắn: "Tôi muốn mua sách về Công nghệ phần mềm".
  3. Bước 3: Dialogflow NLU phân tích câu nói, trích xuất Entity category: "Công nghệ phần mềm" và kích hoạt Intent Search_Book_Intent.
  4. Bước 4: Webhook Node.js truy vấn MongoDB, trả về danh sách 3 cuốn sách tiêu biểu kèm giá và nút hành động.
  5. Bước 5: Khách hàng chọn "Thêm vào giỏ hàng" hoặc "Đặt mua ngay", Chatbot xác nhận địa chỉ mặc định và khởi tạo bản ghi đơn hàng trực tiếp vào hệ thống.
Khách hàng                    Dialogflow Agent               Node.js Backend                MongoDB
    |                                |                              |                          |
    |--- "Tìm sách CNPM" ----------->|                              |                          |
    |                                |--- Webhook Request --------->|                          |
    |                                |    (Intent: Search_Book)     |--- Query Books --------->|
    |                                |                              |<-- Return Books ---------|
    |                                |<-- Fulfillment Response -----|                          |
    |<-- Hiển thị thẻ sách ----------|                              |                          |
    |                                |                              |                          |
    |--- "Đặt cuốn số 1" ----------->|                              |                          |
    |                                |--- Create Order Request ---->|                          |
    |                                |                              |--- Save Order ---------->|
    |                                |                              |<-- Confirm Saved --------|
    |                                |<-- Order Created Success ----|                          |
    |<-- "Đơn hàng đã tạo thành công"|                              |                          |

Hướng dẫn triển khai hệ thống (Deployment Guide)

1. Yêu cầu phần cứng và môi trường server

  • Server: Ubuntu 20.04 LTS / Debian 11, tối thiểu 2 vCPU, 4GB RAM, 20GB SSD Storage.
  • Môi trường chạy: Node.js v16.x LTS, MongoDB v5.0+, PM2 Process Manager, Nginx Web Server.
  • Client Mobile: Android OS version 6.0 (API Level 23) trở lên.

2. Các bước triển khai Backend & Web Admin

# 1. Clone source code và cài đặt dependencies cho Backend
git clone https://github.com/uit-project/bookstore-backend.git
cd bookstore-backend
npm install --production

# 2. Cấu hình biến môi trường trong file .env
cat <<EOF > .env
PORT=5000
MONGODB_URI=mongodb://localhost:27017/bookstore_db
JWT_SECRET_KEY=uit_software_engineering_secret_key_2022
DIALOGFLOW_PROJECT_ID=bookstore-agent-uit
EOF

# 3. Khởi chạy Backend bằng PM2
pm2 start server.js --name "bookstore-api"
pm2 save

# 4. Build và triển khai Web Admin ReactJS
cd ../bookstore-admin-react
npm install
npm run build
# Copy thư mục build/ sang thư mục public của Nginx (/var/www/html/admin)

3. Xử lý sự cố thường gặp (Troubleshooting Guide)

  • Lỗi 1: Dialogflow Webhook trả về lỗi Webhook call failed. Error: UNAVAILABLE
    • Nguyên nhân: Server Backend chưa mở port công khai hoặc chứng chỉ SSL của domain Webhook bị hết hạn.
    • Khắc phục: Kiểm tra cấu hình Nginx Reverse Proxy, gia hạn chứng chỉ Let's Encrypt SSL và đảm bảo HTTPS hoạt động bình thường.
  • Lỗi 2: Ứng dụng Flutter không thể kết nối tới Backend trên máy ảo Android
    • Nguyên nhân: Gọi địa chỉ localhost:5000 thay vì IP Gateway của Emulator.
    • Khắc phục: Trong môi trường Android Emulator, cấu hình Base API URL trỏ về http://10.0.2.2:5000/api/v1.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại

  • NLU Context Flow: Phiên bản Dialogflow ES chỉ hỗ trợ quản lý hội thoại theo Context tuyến tính, chưa xử lý được các cuộc hội thoại rẽ nhánh đa luồng phức tạp như Dialogflow CX.
  • Hệ sinh thái thanh toán: Chưa tích hợp trực tiếp cổng thanh toán trực tuyến chính thức (MoMo, VNPay, ZaloPay) mà sử dụng cơ chế giả lập Sandbox.
  • Độ phong phú dữ liệu: Hệ thống mới được thử nghiệm trên tập dữ liệu ban đầu gồm 500 tựa sách, chưa được kiểm thử toàn diện trên Big Data (> 100,000 cuốn sách).

Hướng phát triển trong tương lai

  • Nâng cấp Agent AI: Chuyển đổi từ Dialogflow ES sang Dialogflow CX hoặc tích hợp các mô hình ngôn ngữ lớn (Large Language Models - LLM) để hiểu sâu sắc ngữ cảnh và hỗ trợ tư vấn sách theo cảm xúc người đọc.
  • Hệ thống gợi ý thông minh (Recommendation System): Xây dựng thuật toán Lọc cộng tác (Collaborative Filtering) dựa trên lịch sử mua sắm và hành vi duyệt sách của người dùng.
  • Mở rộng đa nền tảng: Biên dịch và phát hành ứng dụng khách hàng lên Apple App Store (iOS) và mở rộng cổng thanh toán điện tử VNPay/MoMo.

Đối tượng hưởng lợi

+-----------------------------------------------------------------------------------+
|                        GIÁ TRỊ MANG LẠI CHO CÁC NHÓM ĐỐI TƯỢNG                    |
|                                                                                   |
|  [ SINH VIÊN / NGHIÊN CỨU ]       [ LẬP TRÌNH VIÊN ]         [ DOANH NGHIỆP ]     |
|  - Tài liệu tham khảo đồ án       - Mã nguồn mẫu Flutter      - Tiết kiệm 45-60%   |
|  - Kiến trúc Client-Server chuẩn  - Thiết kế RESTful API        chi phí vận hành   |
|  - Tích hợp Dialogflow thực tế    - Quản lý State Provider    - CSKH 24/7 tự động  |
+-----------------------------------------------------------------------------------+
  • Sinh viên ngành CNTT/Kỹ thuật Phần mềm: Cung cấp tài liệu mẫu hoàn chỉnh (148 trang báo cáo, 82 bảng dữ liệu, 64 sơ đồ) về quy trình công nghệ phần mềm chuẩn mực từ phân tích yêu cầu, thiết kế UML đến đóng gói sản phẩm.
  • Kỹ sư phát triển phần mềm (Developers): Cung cấp mô hình kiến trúc sạch kết hợp giữa Flutter, Node.js và Google Dialogflow Webhook, giúp tiết kiệm thời gian nghiên cứu khi xây dựng các ứng dụng thương mại hội thoại.
  • Doanh nghiệp và Nhà sách bán lẻ: Giải pháp mẫu giúp chuyển đổi số với chi phí tối ưu, giảm thiểu từ 45% - 60% khối lượng công việc cho nhân sự trực page chăm sóc khách hàng.

Câu hỏi thường gặp

1. Yêu cầu phần cứng và môi trường tối thiểu để triển khai ứng dụng là gì?

Hệ thống yêu cầu máy chủ đám mây tối thiểu 2 vCPU, 4GB RAM chạy hệ điều hành Linux (Ubuntu/Debian) có cài đặt Node.js v16+ và MongoDB v5.0+. Đối với người dùng cuối, điện thoại di động chạy hệ điều hành Android từ phiên bản 6.0 trở lên có kết nối Internet đều có thể cài đặt và sử dụng mượt mà file APK được đóng gói.

2. Hệ thống xử lý thế nào khi lượng truy cập tăng vọt (Khả năng mở rộng Scalability)?

Backend Node.js được thiết kế theo dạng phi trạng thái (Stateless REST API), cho phép dễ dàng Scale ngang (Horizontal Scaling) bằng cách kết hợp PM2 Cluster Mode hoặc triển khai trên Kubernetes/Docker Containers phía sau bộ cân bằng tải Nginx Load Balancer. Cơ sở dữ liệu MongoDB có thể thiết lập cơ chế Sharding và Replica Sets để phân tải đọc/ghi khi dữ liệu sách vượt ngưỡng hàng triệu bản ghi.

3. Làm thế nào để bảo mật thông tin tài khoản và giao dịch người dùng?

Mọi mật khẩu người dùng trước khi lưu trữ vào database đều được băm bằng thuật toán một chiều bcrypt kèm salt ngẫu nhiên 10 vòng lặp, đảm bảo không thể giải mã ngược. Toàn bộ API nhạy cảm đều được bảo vệ bằng Token JWT có thời hạn và phân quyền theo Role (Admin/Customer).

4. Chi phí duy trì nền tảng Google Dialogflow và hạ tầng máy chủ ước tính bao nhiêu?

Trong giai đoạn đầu với quy mô vừa và nhỏ, phiên bản Dialogflow ES Agent cung cấp gói Trial Edition hoàn toàn miễn phí cho các tác vụ hội thoại văn bản cơ bản. Chi phí máy chủ VPS (Cloud Server) và tên miền duy trì trung bình chỉ dao động từ 200.000 - 400.000 VNĐ/tháng, mang lại hiệu quả chi phí - lợi ích (ROI) vượt trội.

5. Chatbot có thể tự học để thông minh hơn theo thời gian không?

Có. Google Dialogflow tích hợp cơ chế Machine Learning tự động. Quản trị viên có thể truy cập mục Training trong Dialogflow Console để xem lại những câu hỏi mà người dùng thực tế đã hỏi nhưng Bot chưa hiểu (Fallback Intent), từ đó gán đúng Intent tương ứng giúp Chatbot liên tục nâng cao độ chính xác mà không cần viết lại mã nguồn Backend.


Kết luận

Khóa luận tốt nghiệp "Xây dựng ứng dụng kinh doanh sách trực tuyến với Chatbot" đã hoàn thành xuất sắc các mục tiêu nghiên cứu và thực nghiệm đề ra. Dự án không chỉ dừng lại ở một ứng dụng thương mại điện tử đơn thuần mà đã tạo ra bước đột phá về trải nghiệm người dùng thông qua việc ứng dụng công nghệ Xử lý ngôn ngữ tự nhiên (NLP) với Dialogflow.

Sản phẩm đạt độ hoàn thiện cao, kết hợp hài hòa giữa kiến trúc Mobile hiện đại (Flutter), Web quản trị mạnh mẽ (ReactJS) và Backend linh hoạt (Node.js/MongoDB). Đây là nền tảng vững chắc, sẵn sàng để tiếp tục mở rộng, tích hợp các công nghệ AI tiên tiến và chuyển giao ứng dụng vào các mô hình kinh doanh thực tế trong tương lai.