Bỏ qua, tới nội dung chính

Changelog

Changelog

Những gì đã thật sự chạy trên Chat Tự Động, ghi theo từng đợt phát triển. Chúng tôi cố tình không ghi ngày cụ thể — thà không có ngày còn hơn có một ngày sai.

Cách đọc trang này

Mỗi mục dưới đây là một đợt tính năng đã lên và đang chạy. Đợt sau xây trên đợt trước, nên đọc từ dưới lên nếu bạn muốn biết mới nhất có gì, hoặc từ trên xuống nếu muốn hiểu hệ thống được dựng theo thứ tự nào.

Đợt 1 — Nền móng

Phần không ai nhìn thấy nhưng quyết định mọi thứ về sau: tách dữ liệu giữa các tổ chức, bảo vệ bí mật và một hợp đồng lỗi ổn định.

  • Tách dữ liệu theo tổ chức ở tầng cơ sở dữ liệu — mọi truy vấn đều đi qua ngữ cảnh tenant, không dựa vào việc lập trình viên nhớ thêm điều kiện WHERE.
  • Mã hoá envelope AES-256-GCM cho mọi bí mật của khách: token nền tảng, khoá BYOK, secret webhook. Mỗi bản ghi một data key riêng, ciphertext buộc vào đúng bản ghi.
  • Bộ mã lỗi công khai dùng chung cho toàn hệ thống, kèm bộ lọc lỗi toàn cục để mọi phản hồi lỗi có cùng hình dạng và luôn có requestId.
  • Đăng nhập bằng phiên cho dashboard và bằng API key cho tích hợp; API key chỉ lưu SHA-256, key thô hiện đúng một lần.
  • Nhật ký kiểm toán cho các thao tác nhạy cảm: tạo/thu hồi khoá, thêm/xoá khoá BYOK.

Đợt 2 — Gateway LLM, ví và thanh toán

Gọi được model, và biết chính xác mỗi lần gọi tốn bao nhiêu. Đây là lúc sản phẩm bắt đầu tính được tiền.

  • GET /v1/models và POST /v1/chat/completions tương thích OpenAI, hỗ trợ cả streaming SSE lẫn không stream.
  • Adapter cho nhóm endpoint tương thích OpenAI (OpenAI, xAI, Google, model local) và adapter riêng cho Anthropic.
  • Ví trả trước với vòng đời giữ trước rồi quyết toán: ước tính chi phí tối đa trước khi gọi, trừ đúng số thật sau khi có kết quả. Hết tiền thì trả 402 chứ không ghi nợ.
  • Bảng giá theo model, ghi lại từng lần gọi kèm token vào/ra và số tiền đã trừ.
  • BYOK: dán khoá provider riêng, gửi header x-chatly-use-byok để dùng khoá đó và không bị trừ credits.
  • Nạp tiền qua chuyển khoản với đối soát tự động theo nội dung chuyển khoản.
  • Giới hạn tần suất theo tổ chức, hạn mức lấy từ gói đang dùng; hỏng hạ tầng phụ thì cho qua chứ không đánh sập API.

Đợt 3 — Trợ lý và kho kiến thức

Từ “gọi được model” thành “bot trả lời đúng dữ liệu của bạn”. Đây là phần khiến bot hết bịa.

  • Trợ lý cấu hình được: model, chỉ dẫn hệ thống, nhiệt độ, trần token, kho kiến thức gắn kèm.
  • Kho kiến thức nạp từ văn bản dán trực tiếp hoặc từ link website; hệ thống tự tải, bóc nội dung, cắt đoạn và lập chỉ mục.
  • Xử lý tài liệu chạy nền qua hàng đợi, có trạng thái từng tài liệu và nút nạp lại khi lỗi — không im lặng bỏ qua link chết.
  • Trả lời kèm trích dẫn nguồn, để người dùng và bạn đều kiểm chứng được câu trả lời đến từ tài liệu nào.

Đợt 4 — Kênh đầu tiên — Telegram và web widget

Bot rời khỏi màn hình thử nghiệm và bắt đầu nói chuyện với khách thật.

  • Kênh Telegram với webhook riêng cho từng kênh, xác thực bằng secret token đặt lúc đăng ký.
  • API công khai cho web widget: gửi tin, nhận trả lời, và bản streaming SSE để chữ hiện dần.
  • Chặn nhúng theo danh sách domain của từng kênh, xử lý CORS riêng cho widget tách khỏi CORS của dashboard.
  • Hàng đợi tin nhắn vào với mã việc dựng từ mã kênh và mã tin nhắn — nền tảng gửi lặp cũng không khiến bot trả lời hai lần.
  • Worker xử lý nền tách khỏi tiến trình API, nên webhook luôn phản hồi nhanh.
  • Hộp thư hội thoại hợp nhất, có chuyển tiếp cho nhân viên khi bot không chắc hoặc khách yêu cầu.

Đợt 5 — Nhóm Meta — Messenger, Instagram DM, WhatsApp

Ba kênh, một webhook cấp ứng dụng. Phần khó nằm ở định tuyến chứ không ở việc nhận tin.

  • Webhook chung cho cả ứng dụng, xác thực X-Hub-Signature-256 trên raw body.
  • Bắt tay xác minh webhook theo chuẩn hub.challenge của Meta.
  • Định tuyến sự kiện về đúng tổ chức: theo page_id cho Messenger và Instagram, theo phone_number_id cho WhatsApp.
  • Adapter riêng cho từng kênh để bóc đúng phần nội dung tin nhắn của từng định dạng payload.

Đợt 6 — Zalo OA

Kênh quan trọng nhất với thị trường Việt Nam, và cũng là kênh khó giữ kết nối nhất.

  • Webhook cấp ứng dụng, xác thực X-ZEvent-Signature có tham gia của timestamp trong payload.
  • Định tuyến theo oa_id về đúng kênh của từng tổ chức.
  • Tự xoay token định kỳ — refresh token của Zalo dùng một lần nên phải lưu lại cặp mới sau mỗi lần đổi, sai một nhịp là mất kết nối.
  • Kênh hỏng xác thực báo lỗi rõ ràng trên trang chi tiết kênh thay vì im lặng ngừng trả lời.

Đợt 7 — Shopee và TikTok Shop

Trả lời khách ngay trong chat của sàn — nơi người mua hỏi nhiều nhất trước khi bấm đặt hàng.

  • Webhook Shopee, xác thực Authorization = HMAC-SHA256 tính trên chuỗi ghép URL callback với raw body.
  • Webhook TikTok Shop, xác thực Authorization = HMAC-SHA256 tính trên app key ghép với raw body.
  • Định tuyến theo shop_id cho cả hai sàn.
  • Xoay token theo chu kỳ riêng của từng sàn, và buộc kết nối lại khi lỗi lặp nhiều lần liên tiếp.

Đợt 8 — Dashboard

Mọi thứ ở trên, nhưng bấm chuột là xong — không cần đụng tới API.

  • Quản lý trợ lý: tạo, sửa cấu hình, gắn kho kiến thức.
  • Quản lý kho kiến thức và tài liệu, xem trạng thái xử lý từng tài liệu.
  • Kết nối kênh theo từng loại, xem địa chỉ webhook và lỗi gần nhất của kênh.
  • Hộp thư hội thoại: đọc lại toàn bộ trao đổi, xem trích dẫn, chuyển cho nhân viên.
  • Ví: số dư, lịch sử giao dịch, chi phí từng lần gọi model, nạp tiền.
  • Cài đặt: thông tin tổ chức, thành viên và vai trò, khoá API, khoá BYOK.

Đang làm

Danh sách ngắn và không kèm cam kết thời gian. Chúng tôi chỉ ghi những thứ đã bắt tay vào làm, không ghi ý tưởng.

  • Script nhúng widget dựng sẵn cho website — hiện đã có API công khai, phần script đang hoàn thiện.
  • Thêm kênh theo nhu cầu thực tế của người dùng.

Thiếu thứ bạn cần? Nhu cầu thật của người dùng quyết định thứ tự ưu tiên tốt hơn phỏng đoán của chúng tôi — gửi cho chattudongcskh@gmail.com hoặc qua trang liên hệ.