Skip to main content
Quyền cấp feature flag biến Dodo Payments thành một kho feature flag nhận biết thông tin thanh toán. Gắn một flag như advanced_reports vào một sản phẩm, và mọi khách hàng thanh toán đều nhận được một grant mà ứng dụng của bạn có thể kiểm tra qua API hoặc đồng bộ qua webhooks. Không cần nền tảng bên ngoài, không cần OAuth, không có bước phân phối — chính grant là capability.

Nội dung được cung cấp

Không có gì rời khỏi Dodo Payments — grant chính là nội dung được cung cấp:
  • Khi mua hàng, grant được tạo và chuyển thẳng sang Delivered. Không có giai đoạn Pending, không cần khách hàng thực hiện thao tác nào và cũng không có khả năng delivery thất bại.
  • Grant chứa payload có kiểu feature: { "feature_type": "boolean", "feature_id": "advanced_reports" }. Ứng dụng của bạn đọc feature_id để quyết định cần mở khóa tính năng nào.
  • Khi hủy, hoàn tiền hoặc revoke thủ công, grant được chuyển sang Revoked và ứng dụng của bạn nhận thấy flag biến mất.
Các trường hợp sử dụng phổ biến gồm kiểm soát tính năng theo plan (Pro mở khóa analytics), capability bổ sung (nâng cấp “API access”) và các chương trình truy cập sớm được bán dưới dạng giao dịch mua một lần.
feature_id là một mã định danh do merchant lựa chọn, không có tính duy nhất giữa các entitlement. Hai entitlement có thể cấp cùng một feature_id — ví dụ: plan Pro hàng tháng và hàng năm đều cấp advanced_reports.

Tạo feature flag

1

Open Entitlements

Trong dashboard Dodo Payments của bạn, đi đến Entitlements và nhấp vào + để bắt đầu tạo entitlement mới, sau đó chọn Feature Flags.
2

Name the flag

Đặt Display Name cho flag để hiển thị trong dashboard, một Feature ID để ứng dụng kiểm tra (dashboard sẽ đề xuất ID dựa trên tên) và một Description để đội ngũ của bạn biết flag kiểm soát điều gì.
Biểu mẫu New Feature Flag với display name, feature ID, description và các mục key-value của metadata

Creating a feature flag. The Feature ID is what your application checks; Meta Data attaches limits alongside the flag.

3

Optionally add metadata

Bật Meta Data để đính kèm cấu hình key-value — giới hạn, tên tier, quota — được cung cấp cho ứng dụng của bạn cùng với flag. Xem Đính kèm giới hạn bằng metadata.
4

Confirm

Nhấp vào Confirm. Flag sẽ xuất hiện trong danh sách entitlements, sẵn sàng để đính kèm vào các sản phẩm.
Dashboard Entitlements hiển thị feature flag Advanced Reports cùng khung hoạt động grant của flag

The created feature flag. The right pane tracks every customer grant issued from it.

Đính kèm vào sản phẩm

Mở một sản phẩm (hoặc tạo sản phẩm mới), tìm thẻ Entitlements và nhấp vào + để đính kèm các entitlement hiện có. Chọn feature flag của bạn và nhấp vào Done.
Bảng đính kèm Entitlements với feature flag Advanced Reports được chọn

Attaching the feature flag to a product. One product can deliver multiple entitlements.

Flag đã đính kèm sẽ hiển thị trên biểu mẫu sản phẩm, và bản xem trước checkout sẽ liệt kê flag bên dưới Includes.
Biểu mẫu sản phẩm với feature flag Advanced Reports được đính kèm trong thẻ Entitlements

The product now includes the feature flag. Every successful purchase or active subscription grants it.

Cấu hình bắt buộc

Tạo qua API


Đính kèm giới hạn bằng metadata

Một flag boolean trả lời câu hỏi “khách hàng này có feature không?”. Metadata trả lời câu hỏi “với cấu hình nào?”. Metadata của entitlement chấp nhận các giá trị string, integer, number và boolean, đồng thời mỗi grant nhận một ảnh chụp cố định của metadata entitlement tại thời điểm được tạo. Cơ chế ảnh chụp đó giúp metadata an toàn khi dùng cho các giới hạn của plan:
  • Việc chỉnh sửa metadata của entitlement sau đó chỉ ảnh hưởng đến các grant trong tương lai. Khách hàng vẫn giữ các giới hạn đã mua.
  • Ảnh chụp được trả về trên mỗi grant dưới dạng trường metadata, nên một lần gọi API cung cấp cả flag và cấu hình của flag.
Ví dụ, một flag advanced_reports với { "tier": "pro", "monthly_report_limit": 100 } cho phép ứng dụng mở khóa dashboard thực thi quota 100 báo cáo mà không cần tra cứu lần thứ hai. Nếu sau đó bạn tăng giới hạn lên 250, khách hàng hiện tại vẫn giữ giới hạn 100 cho đến khi nhận grant mới (ví dụ sau khi thay đổi plan).
Dùng metadata cho giới hạn và cấu hình; chỉ dùng feature_id cho mục đích nhận diện. Việc mã hóa giới hạn trong id (advanced_reports_100) buộc bạn phải tạo flag mới cho mỗi lần thay đổi giới hạn và làm hỏng các kiểm tra của ứng dụng.

Kiểm tra các feature của khách hàng

Liệt kê các grant feature flag đã được cung cấp cho khách hàng và xây dựng tập hợp các feature đã bật. Endpoint trả về một dòng cho mỗi grant trên tất cả entitlement, có thể lọc theo integration_typestatus.
Payload feature chỉ được điền trên các grant feature_flag; với mọi loại integration khác, payload là null. Xem tài liệu tham khảo API List Customer Grants để biết đầy đủ cấu trúc response.
Kiểm tra API trong mỗi request sẽ làm tăng độ trễ trên đường dẫn xử lý chính. Hãy cache tập hợp feature theo từng khách hàng với TTL ngắn (tính bằng phút, không phải giờ), và vô hiệu hóa cache từ webhook handler khi trạng thái grant thay đổi — sự kết hợp này giúp các lần kiểm tra nhanh và việc thu hồi gần như tức thì.

Vòng đời

Grant của feature flag tuân theo vòng đời grant tiêu chuẩn với một điểm đơn giản hóa: không có bước delivery, vì vậy grant không bao giờ ở trạng thái Pending và cũng không bao giờ chuyển sang Failed. Grant có tính idempotent theo từng entitlement và khách hàng: khi khách hàng đang có grant chưa bị thu hồi cho một flag, các giao dịch mua lặp lại và các lần gia hạn sẽ không tạo bản sao.

Webhooks

Đăng ký các sự kiện entitlement_grant.* để phản ánh các flag vào cơ sở dữ liệu riêng thay vì polling:
  • entitlement_grant.created — đã ở trạng thái Delivered và đi kèm payload feature. Bật tính năng.
  • entitlement_grant.delivered — được kích hoạt khi một grant trước đó đã bị revoke được khôi phục. Bật lại tính năng.
  • entitlement_grant.revoked — quyền truy cập bị thu hồi. Tắt tính năng và kiểm tra revocation_reason để quyết định nội dung thông báo.
TypeScript
Không có entitlement_grant.failed cho feature flag — việc phân phối diễn ra hoàn toàn bên trong Dodo Payments và không thể thất bại.

Ví dụ: plan Pro mở khóa báo cáo nâng cao

  1. Tạo flag. feature_id: advanced_reports với metadata { "tier": "pro", "monthly_report_limit": 100 }.
  2. Gắn flag vào sản phẩm subscription Pro Plan.
  3. Khách hàng đăng ký subscription. Dodo Payments tạo grant Delivered và kích hoạt entitlement_grant.created; webhook handler của bạn bật advanced_reports cho khách hàng với giới hạn là 100.
  4. Ứng dụng kiểm soát quyền truy cập tính năng. Khi tải dashboard, kiểm tra tập tính năng đã lưu trong cache (hoặc gọi listEntitlementGrants) và chỉ render tab báo cáo khi advanced_reports hiện diện.
  5. Khách hàng hủy subscription. Dodo Payments revoke grant và kích hoạt entitlement_grant.revoked; handler của bạn tắt tính năng. Nếu sau đó khách hàng khôi phục subscription thông qua dunning, entitlement_grant.delivered sẽ khôi phục tính năng — không cần thay đổi code.

Thực hành tốt nhất

  • Sử dụng feature id ổn định, theo snake_case. Code ứng dụng của bạn kiểm tra các chuỗi này; việc đổi tên một feature id là breaking change ở cả hai phía.
  • Mỗi capability một flag. Nên dùng advanced_reports + api_access làm hai entitlement thay vì một pro_bundle duy nhất — việc revoke và kết hợp các plan sẽ rõ ràng hơn.
  • Điều khiển state từ webhook, xác minh bằng API. Webhook giúp database của bạn luôn cập nhật; endpoint list là nguồn dữ liệu chính xác để các job reconciliation và xử lý cache miss sử dụng.
  • Xử lý Revoked ngay lập tức. Một flag đã bị revoke nghĩa là khách hàng không còn trả phí cho tính năng đó. Kiểm soát quyền truy cập ở request tiếp theo, không phải session tiếp theo.
  • Đặt giới hạn trong metadata, không đặt trong code. Khi thay đổi quota, bạn chỉ cần chỉnh sửa entitlement — khách hàng mới sẽ tự động nhận giá trị này, trong khi các grant hiện có vẫn giữ snapshot đã mua.
Lần sửa đổi cuối 21 tháng 8, 2026