Bỏ qua, tới nội dung
Tài liệu APIv1

Nền tảng

Bản quyền và hai bản

Bản cộng đồng và bản doanh nghiệp khác gì, cách nạp token bản quyền, hoạt động ngoại tuyến, trạng thái token và bảng giá tóm tắt.

Trong trang này

O3O Office Online có hai bản chạy trên cùng một bộ cài: bản cộng đồng miễn phí và bản doanh nghiệp tính theo số kết nối. Không cần cài lại khi nâng cấp: chỉ cần nạp token bản quyền.

Hai bản khác nhau thế nào#

Hạng mụcBản cộng đồngBản doanh nghiệp
GiáMiễn phíTheo số kết nối, xem bảng giá bên dưới
Token bản quyềnkhông
Kết nối soạn thảo đồng thời50Đúng bằng conns trong token, kể cả khi nhỏ hơn 50; đơn mua tối thiểu 50
Nhúng trình soạn thảo và callback lưu
Endpoint DocBuilder10 endpoint, không có điền mẫuĐủ 11 endpoint (token có api_full)
Tần suất DocBuilder10/phút, 200/ngày60–3.000/phút theo số kết nối, không giới hạn ngày
Cỡ tệp DocBuilder tối đa10 MB300 MB
Callback khi job xongkhôngcó (token có callback)
Nhãn trắngkhôngSắp có, chỉ với image O3O dựng từ nguồn
Vượt mềmkhôngSắp có

Chi tiết từng hạn mức: Hạn mức theo gói. Cách đếm kết nối: Kết nối được đếm thế nào.

Nạp token bản quyền#

Gate và DocBuilder cùng đọc token theo thứ tự: biến O3O_LICENSE_TOKEN nếu khác rỗng, rồi tới tệp O3O_LICENSE_FILE (mặc định /etc/o3o/license.token) nếu tồn tại, cuối cùng là không có token (bản cộng đồng). Khoảng trắng và xuống dòng ở đầu và cuối bị cắt. Tệp được đọc lại mỗi 60 giây, nên thay tệp không cần khởi động lại; đổi biến môi trường thì cần tạo lại container.

  1. Đặt token

    Hoặc dán vào O3O_LICENSE_TOKEN trong online/.env, hoặc lưu thành tệp và gắn vào cả o3o-gate lẫn o3o-docbuilder tại /etc/o3o/license.token.
  2. Nạp

    Với biến môi trường: docker compose ... up -d. Với tệp: chờ tối đa 60 giây.
  3. Kiểm

    GET /o3o/status phải báo license.state = "valid", edition = "enterprise"connections.limit bằng số kết nối đã mua; GET /v1/limits phải báo edition = "enterprise".
Hai cách nạp token
# Cách 1: biến môi trường trong online/.env (token rút gọn cho dễ đọc)
O3O_LICENSE_TOKEN=eyJ2IjoxLCJrZXkiOiJPT1NZLTdLMk05LVE0WEJDLUQ4SEpOLVIzVFdaIiwicGxhbiI6InllYXIiLCJwcm9kIjoibzNvLW9ubGluZSIs...base64...==.W2m7...base64...==

# Cách 2: tệp; để trống O3O_LICENSE_TOKEN
O3O_LICENSE_TOKEN=
O3O_LICENSE_FILE=/etc/o3o/license.token

# Kiểm sau khi nạp
curl -s http://localhost:8080/o3o/status | jq '{edition, license: .license.state, limit: .connections.limit}'
curl -s http://localhost:8080/v1/limits -H "Authorization: Bearer O3O_DEMO_KEY" | jq .edition
# docker/compose.license.yml, dùng kèm: -f docker/compose.dev.yml -f docker/compose.license.yml
# ./license.token tính từ thư mục của tệp compose đầu tiên (online/docker/)
services:
  o3o-gate:
    volumes:
      - ./license.token:/etc/o3o/license.token:ro
  o3o-docbuilder:
    volumes:
      - ./license.token:/etc/o3o/license.token:ro

Định dạng token#

Token là base64(payload_json) + "." + base64(chữ_ký): Base64 chuẩn có đệm = (bảng chữ +/), đúng một dấu chấm, chữ ký Ed25519 trên đúng chuỗi byte của payload. Gate và DocBuilder kiểm bằng khoá công khai của máy chủ bản quyền O3O (O3O_LICENSE_PUBKEY). Trường lạ trong payload bị bỏ qua.

JSONPayload mẫu (đã giải Base64)
{
  "v": 1,
  "key": "OOSY-7K2M9-Q4XBC-D8HJN-R3TWZ",
  "plan": "year",
  "prod": "o3o-online",
  "mid": "",
  "cust": "Công ty TNHH An Phát",
  "exp": "2027-09-30",
  "upd": "2027-10-07",
  "iat": 1790000000,
  "lid": 123,
  "kind": "enterprise",
  "conns": 200,
  "feat": [
    "api_full",
    "callback"
  ]
}

Trường của payload

  • vnumberbắt buộc
    Phiên bản định dạng: 1 hoặc 2.
  • prodstringbắt buộc
    Phải là o3o-online.
  • kindstringbắt buộc
    enterprise hoặc community; chỉ enterprise mới nâng gói.
  • connsintegerbắt buộc
    Số kết nối đã mua, từ 1 trở lên. Với token doanh nghiệp hợp lệ, trần kết nối đúng bằng số này, kể cả khi nhỏ hơn 50 của bản cộng đồng.
  • planstringbắt buộc
    year (thuê bao năm) hoặc life (vĩnh viễn).
  • expstringtuỳ chọn
    YYYY-MM-DD, bắt buộc với year; có hiệu lực tới HẾT ngày đó theo giờ UTC+7.
  • updstringtuỳ chọn
    YYYY-MM-DD: hết quyền nhận cập nhật. Image dựng sau ngày này không nhận token. Với gói năm, máy chủ bản quyền đặt upd = exp + 7 ngày (bằng thời gian ân hạn, khớp với gate).
  • featarraytuỳ chọnMặc định: []
    Tính năng: whitelabel, api_full (DocBuilder đầy đủ), callback (callback của DocBuilder).
  • midstringtuỳ chọn
    Mã instance được gắn; rỗng, vắng hoặc * là không gắn.
  • keystringbắt buộc
    Mã bản quyền, dạng OOSY-XXXXX-XXXXX-XXXXX-XXXXX (thuê bao năm) hoặc OOSL-… (vĩnh viễn). Gate không kiểm dạng mã; /o3o/status chỉ hiện 5 ký tự cuối (key_hint).
  • custstringtuỳ chọn
    Tên khách hàng.
  • iatnumberbắt buộc
    Thời điểm ký, giây Unix.
  • lidnumbertuỳ chọn
    Mã nội bộ của máy chủ bản quyền; gate và DocBuilder bỏ qua.
  • aidnumbertuỳ chọn
    Mã lần kích hoạt nội bộ, chỉ có khi token gắn với một lần kích hoạt; gate và DocBuilder bỏ qua.

Trạng thái token#

license.stateNghĩaGói hiệu lực
noneKhông có token.cộng đồng
validChữ ký đúng, còn hạn.doanh nghiệp (khi kind = enterprise)
graceGói năm đã qua exp không quá 7 ngày; grace_days_left là số ngày còn lại.doanh nghiệp
expiredQuá 7 ngày sau exp.cộng đồng
invalidHỏng định dạng, sai chữ ký, sai trường bắt buộc, hoặc khoá THỬ khi không ở chế độ DEV.cộng đồng
wrong_productprod khác o3o-online.cộng đồng
update_expiredImage dựng sau ngày upd.cộng đồng
instance_mismatchToken gắn với instance khác (mid).cộng đồng

Hoạt động khi không có mạng#

  • Token được xác minh hoàn toàn NGOẠI TUYẾN bằng khoá công khai Ed25519 có sẵn trong cấu hình; máy chủ O3O của bạn không gọi về office.o3o.vn và không gửi số liệu sử dụng đi đâu.
  • Máy chủ trong mạng kín vẫn nhận đủ bản doanh nghiệp cho tới exp, cộng 7 ngày ân hạn với gói năm.
  • Bản vĩnh viễn không hết hạn; quyền nhận cập nhật kết thúc ở upd: các image dựng trước ngày đó tiếp tục dùng token mãi mãi.
  • Muốn gắn token vào đúng một máy chủ, yêu cầu token có mid bằng instance_id trong /o3o/status. Khi dùng token gắn instance, đặt O3O_GATE_INSTANCE_ID tường minh trong .env để gate và DocBuilder cùng một mã; scripts/gen-secrets.sh (hoặc gen-secrets.ps1) sinh sẵn mã này khi tạo .env mới.
Sắp có

Kích hoạt trực tuyến bằng mã bản quyền, báo nhịp và thu hồi bản quyền qua máy chủ office.o3o.vn. v1 chỉ xác minh ngoại tuyến.

Gia hạn và mua thêm kết nối#

O3O ký và giao token mới khi đơn hàng hoàn tất. Thay token theo đúng cách đã nạp; gate nhận token mới trong vòng 60 giây (tệp) hoặc sau khi tạo lại container (biến môi trường). Phiên đang mở không bị ảnh hưởng.

Bảng giá tóm tắt#

Giá niêm yết bằng USD. Đơn giá áp cho TOÀN BỘ số kết nối của đơn (không luỹ tiến theo bậc). Tối thiểu 50 kết nối mỗi đơn. Bản vĩnh viễn kèm 3 năm cập nhật.

Số kết nốiThuê bao năm (USD/kết nối/năm)Vĩnh viễn kèm 3 năm cập nhật (USD/kết nối)
50 – 2005 USD10 USD
201 – 5004,5 USD9 USD
từ 5013,5 USD8 USD

Quy tắc không bao giờ đắt hơn#

tiền_thu(n) = min(m × đơn_giá(m)) với mọi m ≥ nm ≥ 50. Khi giá rẻ nhất rơi vào m > n, khách trả tiền của mốc m và ĐƯỢC CẤP m kết nối. Nhờ vậy mua nhiều hơn không bao giờ phải trả nhiều hơn tại ranh giới bậc.

Hoá đơn ghi và token cấp đúng số kết nối của mốc được tính, không phải số khách nhập. Ví dụ thuê bao năm: chọn 190 kết nối thì hoá đơn tính 201 kết nối × 4,5 USD = 904,5 USD, và token có conns = 201.

GóiKhoảng số kết nốiSố tiền thuTính và cấp theo
Thuê bao năm181 – 200904,5 USD201
Thuê bao năm390 – 5001.753,5 USD501
Vĩnh viễn181 – 2001.809 USD201
Vĩnh viễn446 – 5004.008 USD501
Kết nốiNăm: niêm yếtNăm: thuNăm: cấpVĩnh viễn: niêm yếtVĩnh viễn: thuVĩnh viễn: cấp
50250 USD250 USD50500 USD500 USD50
120600 USD600 USD1201.200 USD1.200 USD120
190950 USD904,5 USD2011.900 USD1.809 USD201
2001.000 USD904,5 USD2012.000 USD1.809 USD201
201904,5 USD904,5 USD2011.809 USD1.809 USD201
3001.350 USD1.350 USD3002.700 USD2.700 USD300
4502.025 USD1.753,5 USD5014.050 USD4.008 USD501
5002.250 USD1.753,5 USD5014.500 USD4.008 USD501
5011.753,5 USD1.753,5 USD5014.008 USD4.008 USD501
8002.800 USD2.800 USD8006.400 USD6.400 USD800

Thanh toán bằng VNĐ: tỷ giá USD sang VNĐ được chốt và lưu lúc TẠO đơn; mã QR thanh toán giữ đúng số tiền đó. Đơn hết hạn mà chưa thanh toán thì tạo đơn mới, tính theo tỷ giá tại thời điểm tạo đơn mới.