M
MiliPortal

Customer Management & Relationship

CMR

Chăm sóc khách hàng đa nguồn trên một nền tảng

CMR là hệ thống chăm sóc khách hàng đa nguồn: thu thập dữ liệu khách từ nhiều ứng dụng, lưu dữ liệu phẳng, group khi cần để hình thành một khách hàng, tổng hợp hồ sơ mới nhất và quản lý các nhu cầu, lịch sử và kế hoạch chăm sóc trên một nền tảng SQL dùng chung cho từng tenant.

CMR là gì?

CMR là ứng dụng quản lý và chăm sóc khách hàng độc lập của Milisoft — không phải module nằm riêng trong Sales, Pharmacy, Clinic hay các app nghiệp vụ khác.

CMR được thiết kế như ứng dụng dùng chung, có thể nhúng vào nhiều app của Milisoft khi được bật tính năng.

Mục tiêu

Thu thập thông tin khách hàng từ nhiều nguồn, gom nhóm thành từng khách hàng và quản lý toàn bộ nhu cầu, lịch sử và kế hoạch chăm sóc khách hàng.

Mô hình đa nguồn

Khách hàng có thể xuất hiện ở nhiều hệ thống. CMR không yêu cầu các nguồn dùng chung một danh mục Customer — mỗi nguồn cung cấp dữ liệu theo cách riêng, CMR tiếp nhận và lưu lại để phục vụ chăm sóc.

SalesPharmacyClinicRestaurantWebsiteImportNguồn khác
Sales ──────────┐
Pharmacy ───────┤
Clinic ─────────┤
Restaurant ─────┤
Website ────────┤
Import ─────────┤
Nguồn khác ─────┘
                  ↓
                 CMR
                  ↓
            SQL Connect

Nguyên tắc dữ liệu

Lưu dữ liệu trước, group khách hàng khi cần. Dữ liệu được lưu theo dạng phẳng, gần giống một sheet Excel lớn — CMR không cần merge vật lý các dòng ngay khi nhận dữ liệu.

NguồnMã nguồnTênSĐTĐịa chỉMSTZaloThời gian
Sales123Nguyễn Văn A090…Hà Nội01/08
Pharmacy456Nguyễn Văn A090…Hà Nội05/08
Clinic789Nguyễn Văn A090…A12310/08
Dữ liệu nguồn  →  Query  →  Group  →  1 Group = 1 khách hàng

                 GROUP #001
              Nguyễn Văn A
                     │
        ┌────────────┼────────────┐
        ↓            ↓            ↓
      Sales       Pharmacy      Clinic
      123           456           789

Hồ sơ khách hàng

Hồ sơ được tổng hợp từ dữ liệu trong group. Nguyên tắc quan trọng: hồ sơ lấy thông tin mới nhất — từng thuộc tính được lấy theo giá trị mới nhất có dữ liệu, không nhất thiết lấy nguyên bản ghi mới nhất.

Tên
MST
Số điện thoại
Email
Địa chỉ
Zalo
Facebook
Ngày sinh
Người liên hệ
Các thông tin khác

Ví dụ: lấy giá trị mới nhất theo thuộc tính

  • Tên: Sales (01/08), Clinic (10/08) → lấy tên ngày 10/08
  • SĐT: Pharmacy (12/08) → lấy SĐT ngày 12/08
  • Địa chỉ: Sales (15/08) → lấy địa chỉ ngày 15/08

Nếu dữ liệu mới không có một thuộc tính thì không làm mất giá trị cũ đã biết.

Chăm sóc theo nhu cầu

Mỗi dữ liệu đưa vào CMR có thể đại diện cho một nhu cầu hoặc kế hoạch chăm sóc. Một khách hàng có thể có nhiều nhu cầu và nhiều kế hoạch CSKH đồng thời.

Từ Sales

Khách vừa mua hàng

Nhu cầu: Chăm sóc sau bán

Kế hoạch: Gọi lại sau 3 ngày

Từ Pharmacy

Khách mua sản phẩm định kỳ

Nhu cầu: Nhắc mua lại

Kế hoạch: Liên hệ khi đến chu kỳ

Từ Clinic

Khách cần tái khám

Nhu cầu: Nhắc lịch

Kế hoạch: Gọi trước ngày tái khám

Từ Website

Khách để lại thông tin tư vấn

Nhu cầu: Tư vấn sản phẩm

Kế hoạch: Liên hệ trong ngày làm việc

Nguyễn Văn A
│
├── Sales      → Chăm sóc sau bán
├── Pharmacy   → Nhắc mua lại
├── Clinic     → Nhắc tái khám
└── Website    → Tư vấn sản phẩm

Ứng dụng độc lập, nhúng khi cần

CMR không thuộc riêng Sales. CMR được phát triển và nâng cấp một lần — các app nghiệp vụ chỉ nhúng CMR khi được bật tính năng, tránh phình code CMR trong từng app.

Milisoft SalesMilisoft PharmacyMilisoft ClinicMilisoft RestaurantMilisoft DistributionMilisoft Work
                    CMR
                     ↑
          ┌──────────┼──────────┐
          │          │          │
        Sales      Pharmacy    Clinic
          │          │          │
          └──────────┼──────────┘
                     ↓
              Customer Care Plan

Kiến trúc & bảo mật

CMR sử dụng SQL Connect làm nền tảng dữ liệu. Browser không kết nối trực tiếp đến SQL — credential chỉ tồn tại ở phía server.

Cloud Run

CMR Backend qua HTTPS, không lộ connection string

Tenant SQL

Mỗi tenant có cấu hình kết nối SQL riêng

SharedConfig

Tài nguyên dùng chung toàn tenant trên CENTRAL

CMR Web

Nhúng vào app nghiệp vụ, một góc nhìn khách hàng

CMR Web  →  HTTPS  →  CMR Backend / Cloud Run
                              ↓
                    Tenant Resource Resolver
                              ↓
                          SqlConnect
                              ↓
                         Tenant SQL

SharedConfig

Các tài nguyên dùng chung toàn tenant tại CustomerApi/{mst}/Apps/SharedConfig — không lưu branchId/branchCode.

  • CustomerCarecấu hình CMR
  • ElectronicBillhóa đơn điện tử
  • ProductMappingánh xạ sản phẩm
  • SqlConnectkết nối SQL tenant
  • BigQueryphân tích/dữ liệu lớn

BigQuery

SQL phù hợp truy vấn linh hoạt cho dữ liệu CMR. BigQuery phù hợp với phân tích và lịch sử lớn — cùng nguyên tắc tenant → SharedConfig → Cloud Run.

  • Dữ liệu lịch sử lớn
  • Phân tích
  • Báo cáo
  • Hành vi khách hàng
  • Thống kê CSKH
  • Dữ liệu phát sinh dài hạn

Triết lý thiết kế

1

Đa nguồn

Khách hàng có thể đến từ bất kỳ hệ thống nào.

2

Lưu phẳng

Dữ liệu nhận được thì lưu lại, không ép merge ngay.

3

Group khi cần

Một group đại diện cho một khách hàng.

4

Hồ sơ lấy mới nhất

Mỗi thông tin trong hồ sơ được xác định từ dữ liệu mới nhất có giá trị.

5

Chăm sóc theo nhu cầu

Khách hàng không chỉ là một bản ghi; mỗi dữ liệu phát sinh có thể tạo ra nhu cầu và kế hoạch chăm sóc.

Kiến trúc tổng thể

CENTRAL

  • Tenant SharedConfig

Tenant SharedConfig

CustomerApi/{mst}/Apps/SharedConfig

  • CustomerCare
  • SqlConnect
  • BigQuery
  • ElectronicBill
  • ProductMapping

CMR Backend

  • Cloud Run
  • Tenant Resource Resolver

CMR SQL

  • Customer
  • Care Plans

CMR Web

  • Sales
  • Pharmacy
  • Clinic

Tóm tắt

CMR là hệ thống chăm sóc khách hàng đa nguồn: thu thập dữ liệu khách từ nhiều ứng dụng, lưu dữ liệu phẳng, group khi cần để hình thành một khách hàng, tổng hợp hồ sơ mới nhất và quản lý các nhu cầu, lịch sử và kế hoạch chăm sóc trên một nền tảng SQL dùng chung cho từng tenant.