UCall App — Bảng Routes & Đề xuất cải thiện
Khảo sát tại:
https://dev.app.ucall.vn
Tài khoản:hieuhoang@ucall.asia
Thực hiện: 2026-05-18
1. Phân tích vấn đề hiện tại
1.1 Các vấn đề được phát hiện
| Vấn đề | Ví dụ hiện tại | Mức độ |
|---|---|---|
| Version lộ trong URL | call_v3, callbot_template_v4 |
🔴 Cao |
| Prefix sai ngữ nghĩa | /script/ cho module Thư viện |
🔴 Cao |
| Trùng lặp từ | /history/historycall |
🟡 Trung bình |
| Không nhất quán số ít/số nhiều | telesales vs messages |
🟡 Trung bình |
| Tên UI và route lệch nhau | billing_info hiển thị “Hồ sơ khách hàng” |
🟡 Trung bình |
| Quá chung chung | /settings/general/profile |
🟡 Trung bình |
| UUID lộ trên URL mặc định | /contacts/contact/{uuid} |
🟠 Cần xem xét |
| Sub-module lồng không nhất quán | ticket/ vs work/tasks/ |
🟡 Trung bình |
Tất cả settings dưới general/ |
/settings/general/* cho mọi thứ |
🟡 Trung bình |
2. Đề xuất cải thiện Route
2.1 Nguyên tắc thiết kế
Nguyên tắc RESTful + Domain-Driven:
/{workspace}/{domain}/{resource}/{action?}
Quy tắc:
✅ Dùng kebab-case (gạch ngang), không dùng snake_case hay camelCase
✅ Dùng danh từ số nhiều cho collections
✅ Không để version vào route người dùng thấy
✅ Route phản ánh đúng tên UI hiển thị
✅ Nhóm sub-module theo domain rõ ràng
2.2 Bảng so sánh Before / After
📊 Reports
| Trước | Sau | Lý do |
|—|—|—|
| /report/dashboard/{uuid} | /reports/overview | report sang số nhiều; bỏ UUID khỏi route mặc định |
| /report/kpi | /reports/kpi | Nhất quán số nhiều |
👥 Contacts (CRM)
| Trước | Sau | Lý do |
|—|—|—|
| /contacts/contact/{uuid} | /contacts/people | Bỏ /contact/ lồng thừa, UUID nên là param |
| /contacts/enterprise/{uuid} | /contacts/companies | enterprise sang companies (rõ hơn, phổ biến hơn) |
| /contacts/list | /contacts/segments | list quá chung; segments rõ nghĩa hơn |
| /contacts/ulead | /contacts/leads | Bỏ prefix brand u-, dùng leads chuẩn CRM |
🛒 Sales
| Trước | Sau | Lý do |
|—|—|—|
| /sales/products | /sales/products | OK, giữ nguyên |
| /sales/order/view/0 | /sales/orders | Bỏ /view/0 không cần thiết |
| /sales/deal/{uuid} | /sales/deals | Số nhiều cho collection view |
⚙️ Operations
| Trước | Sau | Lý do |
|—|—|—|
| /ticket/{uuid} | /operations/tickets | Đưa vào namespace operations |
| /work/tasks/{uuid} | /operations/tasks | Thống nhất namespace |
| /work/meetings/{uuid} | /operations/meetings | Thống nhất namespace |
| /work/calendar | /operations/calendar | Thống nhất namespace |
📣 Campaigns
| Trước | Sau | Lý do |
|—|—|—|
| /campaigns/call_v3 | /campaigns/callbot | Bỏ version; dùng tên tính năng |
| /campaigns/telesales | /campaigns/telesale | Thống nhất số ít |
| /campaigns/messages | /campaigns/messages | OK, giữ nguyên |
📚 Library
| Trước | Sau | Lý do |
|—|—|—|
| /script/callbot_template | /library/callbot | Đổi prefix script sang library |
| /script/callbot_template_v4 | /library/call-agent | Bỏ version; đổi tên thành tính năng |
| /script/sample_template | /library/messages | sample_template sang messages |
| /script/email_template | /library/email | Bỏ _template suffix |
📞 History
| Trước | Sau | Lý do |
|—|—|—|
| /history/historycall | /history/calls | Bỏ trùng lặp từ history trong sub-route |
🔧 Settings
| Trước | Sau | Lý do |
|—|—|—|
| /settings/general/user_info | /settings/account/profile | Nhóm theo account thay vì general |
| /settings/general/billing_info | /settings/account/billing | Khớp với tên UI |
| /settings/general/api_key | /settings/account/api-keys | kebab-case + số nhiều |
| /settings/general/change_password | /settings/account/security | Mở rộng hơn cho tương lai |
| /settings/general/permissionset | /settings/team/permission-sets | Tách nhóm team; kebab-case |
| /settings/general/profilegroup | /settings/team/groups | profilegroup sang groups |
| /settings/general/profile | /settings/team/members | profile sang members |
| /settings/general/work_shift | /settings/team/work-shifts | kebab-case |
| /settings/general/personal | /settings/preferences | Tách ra khỏi general |
| /settings/general/routing | /settings/pbx/routing | Nhóm theo pbx |
| /settings/general/integration | /settings/integrations | Nâng lên cấp cao hơn |
| /settings/general/customer | /settings/property/contacts | Nhóm property; nhất quán suffix |
| /settings/general/enterprise_property | /settings/property/companies | |
| /settings/general/product_property | /settings/property/products | |
| /settings/general/deal_property | /settings/property/deals | |
| /settings/general/order_property | /settings/property/orders | |
| /settings/general/ticket_property | /settings/property/tickets | |
| /settings/general/crmtask_property | /settings/property/tasks | Bỏ prefix crm |
| /settings/general/crmmeeting_property | /settings/property/meetings | Bỏ prefix crm |
2.3 Cấu trúc Route mới (tổng thể)
/dashboard/{workspace_id}/
│
├── reports/
│ ├── overview # Dashboard tổng quan
│ └── kpi # KPI
│
├── contacts/
│ ├── people # Liên hệ
│ ├── companies # Công ty
│ ├── segments # Danh sách/Phân khúc
│ └── leads # ULead
│
├── sales/
│ ├── products # Sản phẩm
│ ├── orders # Đơn hàng
│ └── deals # Cơ hội
│
├── operations/
│ ├── tickets # Phiếu ghi
│ ├── tasks # Công việc
│ ├── meetings # Lịch hẹn
│ └── calendar # Lịch
│
├── campaigns/
│ ├── callbot # Chiến dịch Callbot
│ ├── telesale # Chiến dịch Telesale
│ └── messages # Chiến dịch Tin nhắn
│
├── library/
│ ├── callbot # Template Callbot
│ ├── call-agent # Template Call Agent (v4)
│ ├── messages # Template Tin nhắn
│ └── email # Template Email
│
├── history/
│ └── calls # Lịch sử cuộc gọi
│
└── settings/
├── account/
│ ├── profile # Thông tin tài khoản
│ ├── billing # Hồ sơ thanh toán
│ ├── api-keys # API Key
│ └── security # Đổi mật khẩu / Bảo mật
├── team/
│ ├── permission-sets # Nhóm quyền
│ ├── groups # Nhóm nhân viên
│ ├── members # Tài khoản nhân viên
│ └── work-shifts # Ca làm việc
├── preferences # Cài đặt cá nhân
├── pbx/
│ └── routing # Định tuyến PBX
├── integrations # Tích hợp
└── property/
├── contacts # Thuộc tính Khách hàng
├── companies # Thuộc tính Công ty
├── products # Thuộc tính Sản phẩm
├── deals # Thuộc tính Cơ hội
├── orders # Thuộc tính Đơn hàng
├── tickets # Thuộc tính Ticket
├── tasks # Thuộc tính Công việc
└── meetings # Thuộc tính Lịch hẹn
3. Tóm tắt lợi ích khi áp dụng
| Tiêu chí | Hiện tại | Sau cải thiện |
|---|---|---|
| Đoán được URL | Khó (version, UUID lộ) | Dễ đoán, nhất quán |
| Nhất quán | snake_case lẫn camelCase lẫn lộn | Toàn bộ kebab-case |
| SEO-friendly | /historycall, /call_v3 |
/calls, /callbot |
| Mở rộng được | general/ chứa tất cả |
Nhóm theo domain rõ ràng |
| Khớp UI vs Route | billing_info != “Hồ sơ khách hàng” |
Đồng bộ hoàn toàn |
| Ẩn technical detail | Version v3, v4 lộ rõ | Dùng tên tính năng |