أنشئ تكاملات موثوقة مع Giftpack من خلال إرشادات واضحة حول المصادقة والأخطاء وWebhook ومسارات العمل الشائعة.
تتيح واجهات Giftpack البرمجية لنظامك الخلفي إنشاء وتشغيل مسارات عمل المكافآت والحوافز والمنتجات الترويجية وخيارات المستلمين. تتولى Giftpack إدارة توفر الكتالوج وتجارب المستلمين والتنفيذ وتحديثات التسليم، بينما يظل نظامك مسؤولًا عن محفزات الأعمال وبيانات العملاء.
عنوان URL الأساسي لبيئة الإنتاج هو:
https://developer.giftpack.ai
استخدم مرجع API للاطلاع على مخططات الطلبات والاستجابات كاملة. واستخدم هذا الدليل لاختيار مجموعة الموارد المناسبة وفهم كيفية انتقال الموارد بين مراحلها بعد إنشائها.
| الهدف | الموارد الأساسية | أحداث دورة الحياة |
|---|---|---|
| Smart Gifting أو المكافآت المجدولة أو برامج التقدير المؤتمتة | Campaigns وGiftees | giftee.* |
| الطلبات المباشرة من Gift Mall أو Merchandise Catalog | Marketplace Orders وMarketplace Order Receivers | marketplace_order_receiver.* |
| الاحتفاظ برصيد مكافآت للأعضاء | Point Recipients وPoint Histories | تتبع طلب Marketplace الناتج عند استبدال النقاط |
يستخدم Smart Gifting الحملة بوصفها حاوية البرنامج، ويستخدم giftee لتمثيل دورة الحياة الخاصة بكل مستلم:
Campaign -> Giftee -> Redemption -> Fulfillment -> Delivery
تستخدم طلبات الكتالوج المباشرة Marketplace Order بوصفه حاوية الطلب، وMarketplace Order Receiver لتمثيل دورة الحياة الخاصة بكل مستلم:
Marketplace Order -> Receiver -> Claim or Selection -> Fulfillment -> Delivery
لا تتعامل مع giftee وmarketplace_order_receiver على أنهما مورد واحد قابل للتبادل. فأسماء أحداثهما تحدد مجموعتين مختلفتين من الطلبات، حتى عندما تبدو حالات التنفيذ متشابهة.
تعيد طلبات الإنشاء والتحديث الحالة الراهنة للمورد. وتستمر إجراءات المستلم والتنفيذ والشحن والتسليم بصورة غير متزامنة.
لبناء تكامل موثوق:
id الخاص بحدث Webhook بوصفه مفتاح إزالة التكرار.بعد إنشاء مفتاح API في Giftpack، تحقق من إمكانية الوصول باستخدام كتالوج أحداث Webhook:
curl https://developer.giftpack.ai/v1/webhookeventtypes \
--header 'Accept: application/json' \
--header 'X-API-KEY: YOUR_API_KEY'
تسرد الاستجابة أنواع أحداث Webhook التي تدعمها API حاليًا. تمثل نقطة النهاية هذه كتالوج الأحداث المرجعي، وليس قائمة ثابتة مضمنة في العميل.

تصف هذه التعريفات كائنات المجال الأساسية المستخدمة في تكاملات Giftpack API. فهم العلاقة بين هذه الكائنات ضروري قبل بناء سير العمل. تعمل Giftpack عبر ثلاث طبقات رئيسية:
طبقة التفاعل (Engagement Layer)طبقة التجارة (Commerce Layer)طبقة الإمداد والعمليات (Supply & Operations Layer)تقوم هذه الطبقة بنمذجة دورة العلاقة بين المُرسل والمستلم. وهي قائمة على الأحداث (event-driven) وغالباً ما تكون غير متزامنة.
شخص حقيقي (موظف أو عميل أو شريك) قد يتلقى هدية أو مكافأة. في منطق API، يمثل Recipient هوية دائمة داخل مساحة عمل Giftpack. يمكن أن يوجد Recipient بشكل مستقل عن الحملات وقد يشارك في عدة حملات بمرور الوقت.
مجموعة منطقية من المستلمين تُستخدم للاستهداف والتعيين الجماعي. المجموعات هي بنى تنظيمية ولا تمثل معاملات.
تمثل Campaign نية تفاعل واحدة.
وتحدد:
الحملة ليست طلباً. الحملة تعمل كحاوية دورة حياة تحدث داخلها أحداث redemption وfulfillment.
يصبح Recipient عبارة عن Giftee عند ربطه بـ Campaign. ويمثل Giftee حالة المشاركة الخاصة بالحملة لذلك المستلم. وهذا الفرق مهم:
Recipient = هويةGiftee = حالة مرتبطة بالحملةيحدد طبقة العرض للحملة، بما في ذلك:
القوالب تؤثر على التواصل، لا على منطق fulfillment.
يمثل Redemption إجراء المستلم للمطالبة بالهدية. وقد يحدث عبر:
ينقل Redemption الحالة من “invited” إلى “claimed”.
رابط URL فريد يسمح لـ Giftee بالمطالبة بهديته.
بريد إلكتروني يرسل رابط redemption باستخدام campaign template.
تتعامل هذه الطبقة مع العمليات المعاملاتية وما يتعلق بـ fulfillment. وقد تعمل بشكل مستقل عن سير عمل الحملات.
عنصر ثابت ومُنتقى يختاره المُرسل مباشرة. غالباً ما يتم fulfilled مباشرة بعد إنشاء الطلب.
معاملة شراء مباشرة لمستلم واحد أو أكثر. قد تتجاوز Marketplace Orders نمط redemption الخاص بالحملات وتنتقل مباشرة إلى fulfillment. Marketplace Order ≠ Campaign.
مستلم مُعيّن كهدف fulfillment لطلب Marketplace.
منتج قابل للتخصيص يُدار عبر نظام المخزون والمستودعات في Giftpack. وقد يتطلب:
كائن حاوية قابل للبيع داخل كتالوجات marketplace أو swag.
تهيئة محددة قابلة للشراء من المنتج، مثل:
تحدث المعاملات دائماً على مستوى Product Variant.
تشغّل هذه الطبقة عمليات fulfillment وإدارة vendors. وغالباً ما تكون مجردة في معظم التكاملات، لكنها تظل مهمة لفهم انتقالات الحالة.
طبقة تشغيلية مسؤولة عن:
Vendor يزوّد منتجات إلى منظومة Giftpack.
Provider يخضع لإشراف Procurement Office لضمان جودة الكتالوج وonboarding والتحكم التشغيلي.
معرّف فريد يُستخدم للإشارة إلى Provider في عمليات API.
يبين الهيكل التالي كيفية ارتباط هذه الكيانات ببعضها:
Recipient
└─ may belong to Recipient Group
└─ becomes Giftee when attached to Campaign
Campaign (Engagement Container)
├─ defines Redemption rules
├─ manages Giftee states
└─ may generate Fulfillment Orders
Commerce Layer
├─ Marketplace Order (direct transaction)
└─ Swag Order (inventory-based transaction)
Redemption
├─ Link-based
├─ Email-based
└─ Transitions state before fulfillment
تستخدم عمليات Giftpack الأساسية ضمن /v1 مفتاح API مرتبطًا بمساحة العمل في الترويسة X-API-KEY. يجب ألا تستخدم مفاتيح API إلا تطبيقات موثوقة تعمل على جانب الخادم.
تتوفر إدارة مفاتيح API من إعدادات المطور. يجب أن تتمتع مساحة العمل والمستخدم الحالي بإمكانية الوصول إلى ميزة Giftpack Open API وبأذونات إعدادات المطور المطلوبة.
إذا لم تكن صفحة Developer متاحة، فاطلب من مسؤول مساحة العمل التحقق من خطة مساحة العمل ودورك قبل البدء ببناء التكامل.
لا تضع مفتاح API مطلقًا في JavaScript يعمل في المتصفح، أو تطبيق جوال، أو السجلات، أو لقطات الشاشة، أو تذاكر الدعم، أو نظام التحكم في المصدر.
استخدم بيانات اعتماد منفصلة لبيئتي الاختبار المرحلي والإنتاج. ألغِ المفتاح فورًا إذا كان من المحتمل أن يكون قد انكشف.
curl https://developer.giftpack.ai/v1/webhookeventtypes \
--header 'Accept: application/json' \
--header 'X-API-KEY: YOUR_API_KEY'
يحدد مفتاح API مساحة العمل. ويُفرض التفويض على الموارد من جانب الخادم، لذلك لا يمنح معرّف مأخوذ من مساحة عمل أخرى حق الوصول إلى ذلك المورد.
https://developer.giftpack.ai.تستخدم بعض عمليات الموصلات في مرجع API رموز Bearer أو آليات مصادقة خاصة بمزوّد الخدمة. اتبع مخطط الأمان الموضح لكل عملية؛ ولا تفترض أن مفتاح Giftpack API يمكنه استدعاء نقطة نهاية خاصة بموصل.
X-API-KEY من سجلات الطلبات والأخطاء.لا يضمن العقد العام حدًا موحدًا لمعدل الطلبات أو سياسة واحدة لإعادة المحاولة لجميع العمليات. استخدم الترويسات الخاصة بكل نقطة نهاية ومرجع API عندما تكون متاحة، وتواصل مع Giftpack قبل التخطيط لدفعات طلبات كبيرة الحجم.
تستخدم عمليات Giftpack رموز حالة HTTP القياسية. وتستخدم استجابات الأخطاء الموثقة في مرجع API نوع المحتوى application/problem+json.
{
"type": "about:blank",
"title": "Bad Request",
"status": 400,
"detail": "Property email is required but is missing.",
"instance": "https://developer.giftpack.ai/errors/example",
"errors": [
{
"location": "body.email",
"message": "The email field is required.",
"value": null
}
]
}
type: عنوان URI يحدد نوع المشكلة. وقد تكون قيمته about:blank.title: ملخص ثابت للمشكلة ومقروء للبشر.status: حالة HTTP المرتبطة بهذه الاستجابة.detail: شرح لهذا الإخفاق تحديدًا.instance: عنوان URI يحدد واقعة المشكلة، عند توفيره.errors: تفاصيل اختيارية على مستوى الحقول، وتتضمن location وmessage وvalue.ليس مضمونًا وجود كل حقل في كل خطأ. اكتب محللات تتحمل غياب الحقول الاختيارية وظهور حقول غير معروفة مستقبلًا.
| فئة الحالة | المعنى | الإجراء الموصى به |
|---|---|---|
2xx | نجحت عملية HTTP | احفظ المعرّفات المُعادة، واستخدم Webhooks لتغييرات دورة الحياة اللاحقة |
400 | طلب غير صالح أو فشل في التحقق | صحح الطلب قبل إعادة المحاولة |
401 | المصادقة مفقودة أو غير صالحة | تحقق من مفتاح API على جانب الخادم ومن البيئة |
403 | تمت المصادقة، لكن الإذن غير متوفر | تحقق من ملكية مساحة العمل وإمكانية الوصول ضمن الخطة وأذونات المستخدم |
404 | لم يُعثر على المورد أو المسار | تحقق من نقطة النهاية ومعرّف المورد |
409 | يتعارض الطلب مع الحالة الراهنة | اقرأ المورد مجددًا وحدد ما إذا كانت العملية لا تزال صالحة |
5xx | تعذر على Giftpack أو خدمة خارجية يعتمد عليها النظام إكمال الطلب | احتفظ بالحالة الراهنة ولا تعِد المحاولة إلا عندما تكون العملية آمنة |
مرجع API هو المصدر المعتمد للاستجابات الموثقة لكل عملية.
يمكن عادةً إعادة طلبات GET باستخدام تراجع أُسّي محدود. أما الطلبات التي تغيّر الحالة فتتطلب عناية أكبر:
يعني انتهاء مهلة النقل أن العميل لم يتلق استجابة؛ ولا يثبت أن الخادم لم يكمل الطلب.
عند تصعيد مشكلة، قدّم نقطة النهاية والطريقة والطابع الزمني بتوقيت UTC وحالة HTTP ومعرّفات الموارد ذات الصلة واستجابة المشكلة بعد حجب البيانات الحساسة. لا تضمّن أبدًا مفتاح API أو بيانات مستلمين لم تُحجب منها المعلومات الحساسة.
تبلّغ Webhooks عن انتقالات المستلمين والتنفيذ التي تحدث بعد أن يعيد طلب API استجابته. استخدمها بوصفها الإشارة الأساسية لدورة الحياة، واستخدم عمليات GET لتسوية الحالة.
استرجع الكتالوج الحالي بدلًا من تضمين قائمة قديمة وثابتة في الكود:
curl https://developer.giftpack.ai/v1/webhookeventtypes \
--header 'Accept: application/json' \
--header 'X-API-KEY: YOUR_API_KEY'
يحتوي الكتالوج الحالي على مجموعتين من الموارد.
giftee
أحداث دورة حياة المستلم لطلبات Smart Gifting، بما فيها الحملات التي تبدأ عبر عمليات التكامل والبرامج المجدولة ومسارات عمل المكافآت المؤتمتة.
giftee.createdgiftee.launchedgiftee.preparinggiftee.shippedgiftee.deliveredgiftee.failedgiftee.returnedgiftee.reviewedgiftee.cancelgiftee.resumegiftee.deletemarketplace_order_receiver
أحداث دورة حياة المستلم للطلبات المقدمة مباشرةً عبر Gift Mall أو Merchandise Catalog، خارج مسارات عمل حملات Smart Gifting.
marketplace_order_receiver.createdmarketplace_order_receiver.launchedmarketplace_order_receiver.shippedmarketplace_order_receiver.deliveredmarketplace_order_receiver.failedmarketplace_order_receiver.returnedmarketplace_order_receiver.reviewedmarketplace_order_receiver.deleteكل عملية تسليم هي كائن JSON. تمثل data لقطة منظّمة للمورد، وليست سلسلة JSON مُفلتة.
{
"id": "123e4567-e89b-12d3-a456-426655440000",
"type": "giftee.shipped",
"data": {
"id": "23e4567-e89b-12d3-a456-426655440000",
"type": "giftee",
"email": "recipient@example.com",
"status": 12,
"delivery_status": 2,
"budget": 100,
"campaign": {
"id": "323e4567-e89b-12d3-a456-426655440000"
},
"recipient": {
"id": "423e4567-e89b-12d3-a456-426655440000"
},
"delivery_tracking_code": "TRACKING-CODE"
},
"created_at": "2026-09-01 15:23:33"
}
id هو المعرّف الدائم لواقعة الحدث، وينبغي استخدامه مفتاحًا لإزالة التكرار.type مجموعة الموارد والانتقال.data حالة المورد عند وقوع الحدث. وتختلف الحقول باختلاف مجموعة الموارد ومرحلة دورة الحياة.created_at وقت وقوع الحدث. وقد تصل عمليات التسليم بترتيب مختلف، لذا استخدم هذه القيمة عند ترتيب الانتقالات.ترسل Giftpack ملخص HMAC-SHA256 السداسي العشري المكتوب بأحرف صغيرة لجسم الطلب الخام في X-Giftpack-Signature.
const crypto = require('crypto');
function verifyGiftpackWebhook(rawBody, signature, secret) {
if (!signature) return false;
const expected = crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
const actualBuffer = Buffer.from(signature, 'utf8');
const expectedBuffer = Buffer.from(expected, 'utf8');
return (
actualBuffer.length === expectedBuffer.length &&
crypto.timingSafeEqual(actualBuffer, expectedBuffer)
);
}
تحقق من التوقيع قبل تحليل الحمولة أو معالجتها. وخزّن أسرار Webhook في مخزن أسرار على جانب الخادم.
POST يتضمن جسم JSON.2xx عملية التسليم ناجحة.id بطريقة آمنة من التكرار.أعِد استجابة 2xx بسرعة بعد التحقق من الحدث وقبوله في تخزين دائم. وانقل العمل المكلف إلى قائمة انتظار.
تستخدم سجلات أحداث وطلبات Webhook الحالات الرقمية التالية:
-1: فشل0: قيد المعالجة1: نجاحتتضمن استجابة تفاصيل الحدث webhook_event_data المنظّمة وعدد المحاولات وسجلات الطلبات المنفردة لاستكشاف الأخطاء وإصلاحها.
X-Giftpack-Signature مقابل الجسم الخام غير المعدّل.id الخاص بالحدث.created_at واسمح بوصول الأحداث بترتيب مختلف.2xx إلا بعد قبول الحدث بأمان.اختر مجموعة الموارد التي تتوافق مع طريقة تلقي المستلم للمكافأة. يظل مرجع API المصدر المعتمد لكل حقل مطلوب ونموذج استجابة.
استخدم مسار العمل هذا لتكامل أو برنامج مجدول أو عملية مؤتمتة تنشئ تجربة مستلم قائمة على حملة.
POST /v1/campaigns.POST /v1/giftees.POST /v1/giftees/{gifteeId}/redemptionlink.giftee.*.استخدم معرّف giftee المُعاد للعمليات اللاحقة. لا تنشئ عنوان URL للاسترداد بنفسك.
ابدأ بالأحداث giftee.created وgiftee.launched وgiftee.preparing وgiftee.shipped وgiftee.delivered وgiftee.failed وgiftee.returned. وأضف أحداث الإلغاء والاستئناف والحذف والمراجعة عندما يحتاج تكاملك إلى هذه الانتقالات.
استخدم Marketplace Order عندما ينشأ الطلب مباشرةً من Gift Mall أو Merchandise Catalog بدلًا من حملة Smart Gifting.
curl https://developer.giftpack.ai/v1/marketplaceorders \
--request POST \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: YOUR_API_KEY' \
--data '{
"marketplace_order_name": "September employee rewards",
"marketplace_order_start_date": "2026-09-01",
"marketplace_order_end_date": "2026-09-30",
"marketplace_order_type": "Normal",
"submit": false,
"receivers": [
{
"member_id": "9a1232aa-238f-421c-82e7-45693d1b25b4",
"country": "US",
"gift_message": "Thank you for your contribution.",
"email_notification": true,
"sms_notification": false,
"marketplace_feature": false,
"donation_feature": false,
"products": [
{
"marketplace_product_id": "961be65a-88d8-4040-8808-843ccf5da624",
"marketplace_product_variant_id": "961be65a-a96a-412d-b22a-325f07d85647",
"product_quantity": 1
}
]
}
]
}'
أنشئ الطلب كمسودة عندما يحتاج تطبيقك إلى مراجعته أو تحديثه. وأرسله باستخدام POST /v1/marketplaceorders/{marketplaceOrderId}/submit عندما يصبح جاهزًا.
تابع كل مستلم باستخدام أحداث marketplace_order_receiver.*. هذه الأحداث منفصلة عن giftee.* لأن المستلم ينتمي إلى Marketplace Order، لا إلى حملة.
استخدم النقاط عندما ينبغي للعضو الاحتفاظ برصيد مكافآت واستبداله لاحقًا.
POST /v1/pointrecipients/{memberId}/enablepointfeature.PATCH /v1/pointrecipients/{memberId}/points.يتطلب تحديث الرصيد كلًا من credits وpoints:
curl https://developer.giftpack.ai/v1/pointrecipients/MEMBER_ID/points \
--request PATCH \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: YOUR_API_KEY' \
--data '{
"credits": 1,
"points": 100,
"expired_at": "2027-09-01",
"notes": "Annual recognition allocation"
}'
لا تحذف credits حتى عندما يُعبّر منطق أعمالك أساسًا بالنقاط. تحقق من مستلم النقاط وسجل النقاط في الاستجابة قبل إصدار تحديث آخر للرصيد بعد انتهاء المهلة.