منح الاستحقاق
الحمولة المرسلة إلى نقطة نهاية الويب هوك الخاصة بك عند إنشاء أو تسليم أو فشل أو إلغاء منحة الاستحقاق.
أحداث منح الاستحقاق عبر webhook
يتم إطلاق هذه الأحداث كلما تغيرت حالة منحة استحقاق العميل، على سبيل المثال عند إنشاء مفتاح ترخيص، أو تعيين دور Discord، أو توفير رابط تنزيل، أو سحب الوصول. اشترك في هذه الأحداث للحفاظ على توافق تطبيقك مع ما يمكن لكل عميل الوصول إليه.EntitlementGrantResponse الموثقة في المخطط أدناه.
محفزات الأحداث
entitlement_grant.created
تم إدخال صف المنحة للتو. يكون للمنحة دائمًاid ثابت من هذه النقطة فصاعدًا، حتى لو تغيرت حالتها. استخدم هذا الحدث لتسجيل أن الإنجاز قيد التقدم.
بالنسبة إلى مفاتيح الترخيص التي يتم تنفيذها تلقائيًا، يُدرج الصف مباشرةً مع تعبئة status: "Delivered" وdelivered_at، لذلك يتبع حدث created واحد فقط، من دون أي تغييرات لاحقة في الحالة، ما لم يتم إلغاء المنح لاحقًا.
بالنسبة إلى مفاتيح الترخيص التي يتم تنفيذها يدويًا (الاستحقاقات التي تحتوي على fulfillment_mode: manual)، يصل الصف مع status: "Pending" ومن دون كائن license_key — إذ لا يوجد مفتاح بعد. يشير هذا الحدث إلى أن مفتاحًا بانتظار التنفيذ؛ وفّره عبر POST /grants/{grant_id}/license-key، ما يؤدي بعد ذلك إلى إطلاق entitlement_grant.delivered. راجع التنفيذ اليدوي.
بالنسبة إلى كل عمليات التكامل الأخرى، يصل الصف مع status: "Pending". يتبع ذلك حدث delivered أو failed عند اكتمال التسليم:
- عمليات التكامل المستندة إلى OAuth (Discord وGitHub وNotion) تتضمن
oauth_urlيجب على العميل زيارته لإكمال الموافقة. يظل المنح في حالةPendingحتى يمنح العميل التفويض. - عمليات التكامل المباشرة مع المنصة (Telegram وFramer وDigital Files) تبقى في حالة
Pendingلفترة وجيزة فقط أثناء تنفيذ استدعاء المنصة، ثم تنتقل إلىDelivered.
entitlement_grant.delivered
انتقل المنح منPending إلى Delivered. أصبح لدى العميل الآن الوصول الموضح في الاستحقاق. استخدم هذا الحدث لفتح الميزات التابعة في أنظمتك، مثل تجهيز مساحة عمل أو إرسال رسالة ترحيب مخصصة أو وضع علامة “fulfilled”.
يسجل الحقل delivered_at في الحمولة وقت اكتمال التسليم. بالنسبة إلى المنح التي وصلت بحالة Delivered عند الإنشاء، ستتلقى حدثي created وdelivered متتاليين.
entitlement_grant.failed
تمت محاولة التسليم وفشلت مع خطأ غير ممكن إعادة المحاولة. يوضح الحقلerror_code وerror_message الفشل. تشمل الأسباب الشائعة إلغاء رمز OAuth، أو رفض إذن منصة، أو هدف مفقود (مثل، تم حذف خادم Discord).
entitlement_grant.revoked
تم سحب الوصول على مستوى المنصة: تم إزالة دور Discord، تم إزالة المتعاون في GitHub، تم تعطيل مفتاح الترخيص، لم يعد يتم إصدار روابط تحميل الملفات. يسجل حقلrevocation_reason المُحرك.
أنواع الحمولة
يكون الحقلdata دائمًا كائنًا من نوع EntitlementGrantResponse. تحمل الحمولة حقل integration_type (مثل license_key وdigital_files وdiscord) حتى تتمكن من التعرّف مباشرةً على نوع المنح. كما تُرفق ثلاثة أنواع من عمليات التكامل كائنات متداخلة إضافية:
- يُضمَّن
license_keyعندما يكونintegration_typeهوlicense_keyويكون قد تم إصدار مفتاح. ويحتوي على المفتاح المُنشأ وتاريخ الانتهاء واستخدام التفعيل. وبالنسبة إلى منح يتم تنفيذها يدويًا ولا تزال في حالةPending، يكون هذا الكائنnullإلى أن تنفذ المنح. - يُضمَّن
digital_product_deliveryعندما يكونintegration_typeهوdigital_files. ويحتوي على عناوين URL لتنزيلات موقعة مسبقًا، وinstructionsالاختياري، وexternal_urlالاختياري. - يُضمَّن
featureعندما يكونintegration_typeهوfeature_flag. ويحتوي علىfeature_typeوfeature_idللقدرة التي يمنحها المنح.
null؛ إذ يتم تسجيل الإعدادات ذات الصلة في الاستحقاق نفسه، وليس في المنح.
عينات الحمولة
مفتاح الترخيص المسُلم (entitlement_grant.delivered)
مفتاح الترخيص قيد التفعيل اليدوي (entitlement_grant.created)
يتم إطلاقه عندما يشتري العميل منتجًا يستخدم استحقاق مفتاح الترخيص الخاص به fulfillment_mode: manual. يكون المنح في حالة Pending ومن دون كائن license_key بعد — يجب على التاجر توفير المفتاح.
الملفات الرقمية المسلمة (entitlement_grant.delivered)
تم إنشاء دور Discord وعالق (entitlement_grant.created)
منح مُلغى بسبب إلغاء اشتراك (entitlement_grant.revoked)
فشلت عملية التسليم (entitlement_grant.failed)
نصائح للتكامل
- انتظر
entitlement_grant.deliveredقبل فتح الميزات التابعة. يخبرك حدثpayment.succeededبأن الدفعة قد تمت تسويتها؛ لكنه لا يخبرك بأن العميل لديه مستودع GitHub أو دور Discord بعد. يُعد حدثdeliveredمصدر الحقيقة بالنسبة إلى التنفيذ. - اربط
revocation_reasonبتدفقات الاحتفاظ. يعني إلغاءsubscription_on_holdعادةً أن بطاقة العميل فشلت، وأن التجديد التالي سيمنح الوصول من جديد. أما إلغاءmanualأوsubscription_cancelledفيكون مقصودًا. تعامل معها بشكل مختلف في رسائل العملاء. - استخدم
idالخاص بالمنح كمفتاح idempotency. يطلق المنح الواحد حدثcreatedواحدًا كحد أقصى، وحدثًا نهائيًا واحدًا كحد أقصى (deliveredأوfailed)، وحدثrevokedواحدًا كحد أقصى. يمكن أن تؤدي عمليات إعادة التسليم من نظام webhook إلى تكرار الأحداث؛ أزل التكرار باستخدامidالخاص بالمنح بالإضافة إلىtype. - اقرأ
integration_typeللتعرّف على نوع المنح. تحمل الحمولةintegration_typeمباشرةً (مثلlicense_keyوdigital_filesوdiscord). تتم تعبئة الكائنين المتداخلينlicense_keyوdigital_product_deliveryبعد تسليم المنح الخاص بهما؛ بينما يظل منح مفتاح الترخيص الذي يتم تنفيذه يدويًا في حالةPendingمعintegration_type: "license_key"وnulllicense_keyإلى أن تنفذه. - بالنسبة إلى المنح المستندة إلى OAuth، اعرض
oauth_urlللعميل. يتضمن حدثentitlement_grant.createdلتدفقات المشتركين في Discord أو GitHub أو Notion كلاً منoauth_urlوoauth_expires_at. أرسله إلى العميل عبر البريد الإلكتروني أو اعرضه في تطبيقك لتمكين التسليم.
Detailed view of a single entitlement grant: who it's for, its lifecycle state, and any integration-specific delivery payload.
Brand id this grant belongs to.
Identifier of the business that owns the grant.
Timestamp when the grant was created.
Identifier of the customer the grant was issued to.
Identifier of the entitlement this grant was issued from.
Unique identifier of the grant.
The integration type of the grant's entitlement (e.g. license_key).
discord, telegram, github, figma, framer, notion, digital_files, license_key, feature_flag Arbitrary key-value metadata recorded on the grant.
Lifecycle status of the grant.
Pending, Delivered, Failed, Revoked Timestamp when the grant was last modified.
Timestamp when the grant transitioned to delivered, when applicable.
Digital-product-delivery payload, present when the entitlement
integration is digital_files.
Machine-readable code reported when delivery failed, when applicable.
Human-readable message reported when delivery failed, when applicable.
Typed feature payload, present only when the entitlement integration is
feature_flag; null for every other integration type.
License-key delivery payload, present when the entitlement integration
is license_key.
Timestamp when oauth_url stops being valid, when applicable.
Customer-facing OAuth URL for OAuth-style integrations. Populated
during the customer-portal accept flow; null until the customer
completes that step, and on grants for non-OAuth integrations.
Identifier of the payment that triggered this grant, when applicable.
Reason recorded when the grant was revoked, when applicable.
Timestamp when the grant transitioned to revoked, when applicable.
Identifier of the subscription that triggered this grant, when applicable.