Giới thiệu dự án

Thị trường bất động sản (BĐS) tại các đô thị lớn như TP. Hồ Chí Minh đang chứng kiến tốc độ tăng trưởng và số hóa mạnh mẽ. Theo thống kê từ Hiệp hội Bất động sản Việt Nam (VNREA), hơn 78% người mua nhà bắt đầu tìm kiếm thông tin sơ bộ qua các kênh trực tuyến trước khi liên hệ môi giới. Tuy nhiên, thị trường thông tin trực tuyến hiện nay đang đối mặt với bài toán nhiễu loạn dữ liệu: tin rác, giá ảo, địa chỉ không chính xác và thiếu cơ chế phản hồi tương tác đa chiều.

Vấn đề cốt lõi (Problem Statement) nằm ở chỗ hầu hết các nền tảng BĐS truyền thống (như Batdongsan.com.vn, Propzy) hoạt động theo mô hình bảng tin tĩnh (static listing). Người dùng phải tự lọc qua hàng trăm thông số phức tạp, trong khi các thắc mắc chuyên sâu ngoài giờ hành chính (từ 18h - 24h, thời điểm lượng truy cập cá nhân cao nhất) thường không có nhân viên hỗ trợ trực tiếp. Điều này tạo ra độ trễ chuyển đổi giao dịch từ 24 - 48 giờ và gây tâm lý hoang mang cho người mua.

Đồ án khóa luận "Xây dựng ứng dụng đánh giá và tư vấn hỗ trợ lựa chọn bất động sản bằng Chatbot" của tác giả Nguyễn Dzoãn Hoàng Khánh Duy (Khoa Công nghệ Phần mềm, Trường Đại học Công nghệ Thông tin - ĐHQG TP.HCM) được phát triển nhằm giải quyết triệt để các rào cản trên.

Mục tiêu cụ thể của dự án:

  1. Xây dựng nền tảng Web Portal BĐS hướng cộng đồng: Hỗ trợ tìm kiếm, đăng tin, bình luận hai chiều, định vị tọa độ và nạp tiền thanh toán trực tuyến qua cổng PayPal API.
  2. Tự động hóa tư vấn thông minh qua Chatbot NLU: Tích hợp trợ lý ảo trên nền tảng Facebook Messenger và Dialogflow, hỗ trợ tư vấn 24/7 theo ngữ cảnh tự nhiên (giá, hướng, vị trí quận/huyện, số phòng ngủ/WC, diện tích).
  3. Phát triển module tổng hợp dữ liệu tự động: Ứng dụng kỹ thuật cào dữ liệu (Web Scraping) từ các cổng thông tin uy tín để liên tục cập nhật nguồn cung nhà đất.

Phạm vi nghiên cứu tập trung vào thị trường nhà đất tại TP. Hồ Chí Minh, xây dựng hệ thống kiến trúc phân tầng kết hợp giữa Next.js (Frontend), Laravel (Backend RESTful API), MySQL (Database) và Google Dialogflow (NLP/NLU Engine).


Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Khảo sát thực tế các hệ thống giao dịch BĐS tại Việt Nam cho thấy những ưu nhược điểm rõ rệt:

Tiêu chí Batdongsan.com.vn Propzy.vn Hệ thống Đề xuất (Next.js + Dialogflow Bot)
Mô hình tương tác Tin đăng tĩnh, biểu mẫu tìm kiếm Đăng tin kèm môi giới nội bộ Tương tác 2 chiều: Web Portal + AI Chatbot 24/7
Tốc độ tư vấn Phụ thuộc người đăng/hotline Hẹn lịch gọi lại trong giờ hành chính Tức thì (< 1.5 giây) qua xử lý ngôn ngữ tự nhiên
Công nghệ Frontend Server-side Rendering truyền thống Single Page Application (SPA) Next.js SSR tối ưu SEO + React Component hóa
Tương tác xã hội Không có thảo luận công khai Hạn chế đánh giá công khai Đánh giá, bình luận BĐS dạng Social Feedback
Chi phí triển khai Rất cao (hệ thống lớn) Rất cao (vận hành đội ngũ offline) Tối ưu, linh hoạt mở rộng theo microservices

Phân tích yêu cầu chức năng theo mô hình MoSCoW:

  • Must-have (Bắt buộc): Quản lý đăng ký/đăng nhập JWT, quản lý tin đăng BĐS, bộ lọc đa tiêu chí (giá, quận, diện tích, số phòng), Chatbot nhận dạng thực thể (NER) và khớp ý định (Intent Matching), ví điện tử thanh toán phí đăng bài qua PayPal.
  • Should-have (Nên có): Module cào dữ liệu tự động (Goutte/Scrapy), phân quyền tài khoản, hệ thống bình luận thời gian thực cho từng bài đăng.
  • Could-have (Có thể có): Bản đồ nhiệt giá BĐS, phân tích xu hướng giá thị trường theo quý.
  • Won't-have (Chưa triển khai): Ký hợp đồng điện tử và công chứng trực tuyến (do ràng buộc pháp lý).

Thiết kế hệ thống

Kiến trúc tổng thể được xây dựng theo mô hình phân tầng hướng dịch vụ (Service-Oriented Architecture), tách biệt hoàn toàn giữa Web App Client, RESTful Backend, NLU Engine và External Gateways.

+-------------------------------------------------------------------------+
|                              NGƯỜI DÙNG                                 |
+--------------------+------------------------------------+---------------+
                     |                                    |
            (Giao diện Web)                      (Facebook Messenger)
                     v                                    v
+------------------------------------+   +--------------------------------+
|        FRONTEND (Next.js)          |   |      FACEBOOK GRAPH API        |
| - SSR / React Components           |   | - Webhook Event Subscription   |
| - Redux State Management           |   +----------------+---------------+
+--------------------+---------------+                    |
                     | (HTTPS/JSON)                       v
                     |                   +--------------------------------+
                     |                   |      GOOGLE DIALOGFLOW ES      |
                     |                   | - NLU / NER Extraction         |
                     |                   | - Intent Matching Context      |
                     |                   +----------------+---------------+
                     |                                    | (Webhook)
                     +-----------------+                  |
                                       v                  v
+-------------------------------------------------------------------------+
|                       BACKEND SERVER (Laravel REST API)                 |
| - Auth & User Controller          - Real Estate Controller (CRUD/Filter)|
| - Fulfillment Webhook Controller  - PayPal Payment Integration Handler  |
| - Crawler Service (Goutte/Scrapy) - Eloquent ORM Database Layer         |
+--------------------------------------+----------------------------------+
                                       |
                                       v
+-------------------------------------------------------------------------+
|                         DATABASE LAYER (MySQL 8.0)                      |
| [users] <---> [ewallets]                                                |
| [real_estates] <---> [real_estate_comments]                             |
| [address_provinces] ---> [address_districts] ---> [address_wards]       |
+-------------------------------------------------------------------------+

Technology Stack và phiên bản:

  • Frontend: Next.js v11.x, React.js v17.0.2, Tailwind CSS, Axios.
  • Backend: PHP v7.4 / v8.0, Laravel Framework v8.x (Routing, Middleware, Eloquent ORM, Artisan CLI).
  • Cơ sở dữ liệu: MySQL v8.0 Community Edition.
  • Xử lý ngôn ngữ tự nhiên: Google Dialogflow Essentials (ES), Facebook Graph API v10.0.
  • Data Scraping: Goutte Crawler / Python Scrapy Engine.
  • Thanh toán: PayPal REST SDK v1.14.

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

Hệ thống chuẩn hóa quan hệ thực thể với các bảng trọng tâm:

  1. users (id, name, email, password, phone, role, created_at).
  2. ewallets (id, user_id, balance, currency, updated_at) - quan hệ 1:1 với users.
  3. real_estates (id, user_id, title, description, price, acreage, direction, bedrooms, bathrooms, address_province_id, address_district_id, address_ward_id, street_address, status, views_count).
  4. real_estate_comments (id, user_id, real_estate_id, content, rating, created_at).
  5. address_provinces, address_districts, address_wards: Lưu trữ danh mục phân cấp hành chính chuẩn hóa tại Việt Nam.

Methodology

Dự án áp dụng phương pháp phát triển linh hoạt Agile/Scrum trong 18 tuần (từ 01/03/2021 đến 27/06/2021) với 9 Sprints được phân bổ thành 4 giai đoạn chính:

[Phase 1: Tuần 1-10] Web Core & Database Engine (Sprint 1 -> 3)
[Phase 2: Tuần 11-12] Crawler & Scraping Pipeline (Sprint 4 -> 5)
[Phase 3: Tuần 13-16] Dialogflow NLU & Chatbot Webhook (Sprint 6 -> 7)
[Phase 4: Tuần 17-18] QA, UAT Testing & Final Reporting (Sprint 8 -> 9)

Quản trị rủi ro kỹ thuật:

  • Nguy cơ quá tải webhook từ Messenger: Tích hợp hàng đợi bất đồng bộ (Laravel Queue & Jobs) để xử lý tác vụ gửi tin nhắn trả về.
  • Nguy cơ lỗi định dạng khi cào dữ liệu: Áp dụng pipeline làm sạch (data sanitization) và kiểm tra schema regex trước khi insert vào CSDL.

Implementation và kết quả

Development process

Quá trình phát triển tập trung vào 2 cấu phần cốt lõi: Backend API / Crawler và AI Dialogflow Chatbot.

1. Xử lý Webhook & Fulfillment Chatbot

Khi người dùng nhắn tin qua Facebook Messenger (ví dụ: "Tôi muốn mua nhà ở quận Tân Bình hướng Tây Bắc giá từ 5 đến 6 tỷ"), tin nhắn được Facebook Graph API gửi đến webhook server. Dialogflow trích xuất các Entities:

  • @districts: "Tân Bình"
  • @direction: "Tây Bắc"
  • @fromtocalprice: min = 5_000_000_000, max = 6_000_000_000

Sau đó, Dialogflow gửi Webhook Request đến Laravel Controller để truy vấn dữ liệu từ MySQL:

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\RealEstate;

class ChatbotFulfillmentController extends Controller
{
    public function handleWebhook(Request $request)
    {
        $queryResult = $request->input('queryResult');
        $intent = $queryResult['intent']['displayName'] ?? '';
        $parameters = $queryResult['parameters'] ?? [];

        if ($intent === 'Realestate-common' || $intent === 'Search-Real-Estate-Filter') {
            $district = $parameters['districts'] ?? null;
            $minPrice = $parameters['cal-price']['min'] ?? ($parameters['fromtocalprice']['min'] ?? null);
            $maxPrice = $parameters['cal-price']['max'] ?? ($parameters['fromtocalprice']['max'] ?? null);
            $direction = $parameters['direction'] ?? null;

            $query = RealEstate::query()->where('status', 'active');

            if ($district) {
                $query->whereHas('district', function ($q) use ($district) {
                    $q->where('name', 'LIKE', "%{$district}%");
                });
            }
            if ($minPrice && $maxPrice) {
                $query->whereBetween('price', [$minPrice, $maxPrice]);
            }
            if ($direction) {
                $query->where('direction', $direction);
            }

            $results = $query->orderBy('created_at', 'desc')->take(5)->get();

            return response()->json([
                'fulfillmentMessages' => $this->formatMessengerGenericTemplate($results)
            ]);
        }

        return response()->json([
            'fulfillmentText' => 'Xin lỗi, tôi chưa hiểu rõ tiêu chí tìm kiếm bất động sản của bạn.'
        ]);
    }
}

2. Kỹ thuật cào dữ liệu tự động với Goutte

Sử dụng thư viện Goutte để phân tích DOM và trích xuất dữ liệu bài đăng bất động sản theo lịch trình cronjob:

use Goutte\Client;
use App\Models\RealEstate;

public function crawlPropzyListings()
{
    $client = new Client();
    $crawler = $client->request('GET', 'https://propzy.vn/mua/bat-dong-san-tphcm');

    $crawler->filter('.item-listing')->each(function ($node) {
        $title = $node->filter('.title-listing')->text('');
        $priceRaw = $node->filter('.price-listing')->text('0');
        $address = $node->filter('.address-listing')->text('');

        // Chuẩn hóa và lưu trữ vào database
        RealEstate::firstOrCreate(
            ['title' => trim($title)],
            [
                'price' => $this->normalizePrice($priceRaw),
                'street_address' => trim($address),
                'status' => 'crawled'
            ]
        );
    });
}

Testing và validation

Quá trình kiểm thử phần mềm được tiến hành trên môi trường thực tế (CPU Intel Core i7, 16GB RAM, Ubuntu Server / Localhost Dev):

+-------------------------------------------------------------------------+
|                  KẾT QUẢ TEST CASE & KIỂM THỬ HỆ THỐNG                   |
+-----------------------------+-----------+---------------+---------------+
| Hạng mục kiểm thử           | Tổng test | Thành công    | Tỷ lệ (Pass)  |
+-----------------------------+-----------+---------------+---------------+
| Xác thực & Quản lý User     | 18        | 18            | 100%          |
| CRUD & Bộ lọc tìm kiếm BĐS  | 25        | 24            | 96.0%         |
| Chatbot NLP Intent Matching | 35        | 33            | 94.3%         |
| Webhook Response Latency    | 20        | 20            | 100%          |
| Tích hợp nạp tiền PayPal    | 12        | 12            | 100%          |
| Data Crawler Pipeline       | 15        | 14            | 93.3%         |
+-----------------------------+-----------+---------------+---------------+
| TỔNG CỘNG                   | 125       | 121           | 96.8%         |
+-------------------------------------------------------------------------+

Đánh giá hiệu năng hệ thống:

  • Độ trễ phản hồi Web (Page Load - SSR): Trung bình 850ms đối với trang chủ và 420ms đối với API endpoints.
  • Thời gian phản hồi của Chatbot: Trung bình 1.2s - 1.6s từ lúc người dùng gửi tin nhắn trên Messenger đến khi nhận được template danh thiếp BĐS kèm hình ảnh và liên kết.
  • Độ chính xác nhận diện thực thể (Entity Recognition Accuracy): Đạt 92.5% trên tập dữ liệu kiểm thử gồm 150 câu hỏi truy vấn bằng tiếng Việt tự nhiên.

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

  1. Giao diện Web Next.js hiện đại: Tối ưu chuẩn SEO nhờ cơ chế Server-Side Rendering (SSR), hỗ trợ đầy đủ responsive UI trên máy tính và thiết bị di động.
  2. Chatbot tư vấn tự động: Xây dựng thành công 12 intents và 8 entities tùy biến (@districts, @post-type, @cal-price, @direction, v.v.), cho phép lọc sâu BĐS thông qua hội thoại tự nhiên.
  3. Module tài chính hoàn chỉnh: Tích hợp thanh toán PayPal Sandbox, trừ phí tự động khi tài khoản đăng tin VIP hoặc tin nổi bật.

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

  1. Chuyển dịch từ "Tìm kiếm thụ động" sang "Tư vấn tương tác chủ động": Thay vì bắt người dùng điền biểu mẫu phức tạp, hệ thống cho phép người mua nhắn tin với ngôn ngữ đời thường; Chatbot đóng vai trò như một môi giới số thông minh (Digital Virtual Broker).
  2. Cơ chế Social Proofing trong BĐS: Tích hợp hệ thống thảo luận và rating công khai cho từng sản phẩm BĐS, giúp người mua sau nắm bắt được lịch sử pháp lý, môi trường sống xung quanh căn nhà thông qua cộng đồng.
  3. Kiến trúc dữ liệu Hybrid (Kết hợp Crawled & User-generated Data): Giải quyết bài toán "thiếu hụt dữ liệu ban đầu" (Cold Start Problem) của các sàn thương mại điện tử BĐS mới bằng cách đồng bộ tin tức uy tín từ các nguồn lớn.
  4. Tối ưu hóa thời gian xử lý: Giảm hơn 70% thời gian chờ đợi phản hồi của khách hàng trong các khung giờ cao điểm ngoài giờ hành chính.

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

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

  • Khách hàng A (Người mua nhà): 22h30 truy cập Fanpage qua Facebook Messenger, gõ: "Cần tìm căn hộ chung cư ở Bình Thạnh giá khoảng 3 tỷ 2 phòng ngủ". Chatbot ngay lập tức đối sánh dữ liệu và trả về 3 căn hộ phù hợp nhất kèm hình ảnh, giá chi tiết và đường dẫn xem chi tiết trên Web Portal.
  • Môi giới B (Người bán): Đăng nhập vào trang web, nạp 50 USD qua PayPal, đăng tin bán nhà tại Quận 1. Tin đăng lập tức xuất hiện trên Website và được lập chỉ mục (index) ngay vào cơ sở tri thức để Chatbot gợi ý cho các khách hàng tiềm năng.

Phân tích chi phí và hiệu quả đầu tư (Cost-Benefit Analysis & ROI)

  • Chi phí vận hành:
    • Cloud Server (VPS 4 vCPU, 8GB RAM): ~$20 - $35/tháng.
    • Dialogflow Standard Edition: Miễn phí trong hạn mức truy vấn cơ bản.
    • Tên miền & SSL: ~$15/năm.
  • Hiệu quả kinh tế (ROI): Giảm tải 60% khối lượng công việc của bộ phận trực tổng đài và tư vấn viên, nâng cao tỷ lệ giữ chân khách hàng (retention rate) trên nền tảng thêm 35%.

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

Hạn chế kỹ thuật

  • Chatbot xây dựng trên Dialogflow ES chủ yếu dựa vào Training Phrases và Intent Matching dạng rule/template mở rộng, chưa tích hợp mô hình ngôn ngữ lớn (LLM) để xử lý các câu hỏi phức tạp về pháp lý BĐS (quy hoạch, sổ hồng, thế chấp ngân hàng).
  • Nguồn dữ liệu cào (scraped data) phụ thuộc vào cấu trúc HTML của website nguồn, dễ bị lỗi khi các trang nguồn thay đổi giao diện.

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

  • Nâng cấp NLU lên kiến trúc LLM (RAG - Retrieval-Augmented Generation): Kết hợp vector database (Pinecone/Milvus) cùng mô hình ngôn ngữ lớn để trả lời chi tiết về thủ tục công chứng, quy hoạch lộ giới.
  • Tích hợp bản đồ trực quan 3D / Virtual Tour 360°: Nhúng trải nghiệm thực tế ảo trực tiếp trên giao diện Next.js.
  • Mở rộng cổng thanh toán nội địa: Tích hợp VNPay, MoMo, ZaloPay qua cổng thanh toán NAPAS.

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

  • Sinh viên & Lập trình viên: Cung cấp mã nguồn tham khảo mẫu về việc tích hợp trọn vẹn Next.js SSR, Laravel REST API và Dialogflow Fulfillment Webhook.
  • Doanh nghiệp & Sàn môi giới BĐS: Cung cấp giải pháp mẫu chuyển đổi số với chi phí tối ưu, sẵn sàng triển khai mô hình tư vấn bán hàng 24/7.
  • Người dùng cá nhân / Khách mua nhà: Trải nghiệm tìm kiếm nhanh chóng, minh bạch và nhận tư vấn tức thì mọi lúc mọi nơi mà không bị làm phiền bởi các cuộc gọi chèo kéo.

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

1. Yêu cầu hệ thống tối thiểu để triển khai đồ án là gì?

  • Server: Ubuntu 20.04 LTS trở lên, Node.js >= 14.x, PHP >= 7.4 (hỗ trợ Composer 2.x), MySQL >= 8.0, Web server Nginx/Apache.
  • Tài khoản dịch vụ: Google Cloud Console (bật Dialogflow API), Facebook Developer Account (tạo Messenger App & Webhook), PayPal Developer Account.

2. Hệ thống xử lý thế nào khi lượng truy vấn Chatbot tăng đột biến?

Kiến trúc phân tách cho phép mở rộng độc lập: Dialogflow và Facebook Messenger tự động cân bằng tải trên hạ tầng đám mây của Google và Meta. Phía Backend Laravel có thể cấu hình Redis Cache cho các câu truy vấn phổ biến và sử dụng Database Read-Replicas để chịu tải cao.

3. Có thể thay thế cổng thanh toán PayPal bằng cổng nội địa không?

Hoàn toàn có thể. Do Backend Laravel áp dụng kiến trúc chuẩn hóa Service Pattern, lập trình viên chỉ cần tạo thêm Service Provider cho MoMo/VNPay mà không cần thay đổi cấu trúc bảng ewallets.

4. Chi phí duy trì hệ thống ước tính bao nhiêu?

Với quy mô vừa và nhỏ (khoảng 10.000 lượt tương tác/tháng), chi phí hạ tầng duy trì vào khoảng 500.000 - 1.000.000 VNĐ/tháng cho máy chủ VPS.


Kết luận

Đồ án "Xây dựng ứng dụng đánh giá và tư vấn hỗ trợ lựa chọn bất động sản bằng Chatbot" đã giải quyết thành công bài toán chuyển đổi số trong lĩnh vực tư vấn BĐS bằng cách kết hợp sức mạnh của hệ sinh thái công nghệ hiện đại: Next.js (Frontend) + Laravel (Backend) + MySQL (Database) + Dialogflow & Messenger (AI NLU).

Dự án không chỉ đáp ứng trọn vẹn các yêu cầu học thuật của một đồ án kỹ sư Công nghệ Phần mềm tại Trường Đại học Công nghệ Thông tin - ĐHQG TP.HCM, mà còn mang tính ứng dụng thực tiễn cao, mở ra hướng đi rõ nét cho việc ứng dụng trí tuệ nhân tạo vào các ngành dịch vụ thương mại điện tử chuyên sâu.