تريد الاختبار أولاً؟ لا يوجد مفتاح اختبار منفصل بعد. كل المفاتيح حيّة، فقد يطلق حدث ترسله حملة حقيقية. ابنِ على نشاط ثانٍ تنشئه للاختبار، وبدّل المفتاح حين تطلق.
تبني بأداة مثل Lovable أو v0 أو Bolt لشخص ليس لديه حساب في حملة؟ ابدأ بالتثبيت القابل للاستلام في hamla.io/developers، ثم عُد إلى هنا بعد أن يستلم صاحب النشاط التثبيت، فالمفتاح السري لا يصدر قبل ذلك.
كيف تتكامل القطع
وسم السكربت يرى المتصفح، وخادمك يعرف الوقائع. أرسل الاثنين فترى حملة الشخص كاملاً.
1
أضف وسم السكربت
انسخ المقتطف من الإعدادات ← الموقع وضعه في كل صفحة، قبل يسجّل الزيارات ومن أين جاءت، ويعرض النوافذ، ويعطي كل متصفح معرّف زائر. والتطبيق الجوّال الذي لا صفحات ويب له يستطيع تخطّي هذه الخطوة.
</head>:2
أنشئ مفتاحاً سرياً
الإعدادات ← مفاتيح API ← أنشئ مفتاحاً سرياً. يبدأ بـ وأي لغة أخرى تعمل عبر HTTP عادي. الحزمة تضيف الطابور وإعادة المحاولة فقط.
sk_live_.خزّنه باسم HAMLA_API_KEY في بيئة خادمك. فهو يستطيع كتابة بيانات العملاء، فعامله ككلمة مرور قاعدة البيانات: لا تضعه أبداً في صفحة ويب، ولا في تطبيق جوّال، ولا في متغيّر بيئة يرسله إطار عملك إلى المتصفح (NEXT_PUBLIC_… وVITE_…).على Node.js، ثبّت الحزمة:3
عرّف الناس عند تسجيلهم
هذه الخطوة هي أكثر ما تتخطّاه عمليات الربط، وهي التي تقرّر إن كانت حملة تستطيع مراسلة الشخص يوماً.استدعِ ماذا يفعل:
identify من خادمك عند التسجيل، ومرة أخرى عند تسجيل الدخول:- ينشئ جهة الاتصال، أو يُثري الموجودة. الأسماء والموقع تملأ الناقص ولا تستبدل شيئاً أبداً.
- يسجّل أنك أنت من أدخل هذا الشخص إلى حملة، وهذا ما يتيح للحملات مراسلته بالبريد. وبتعريفك الشخص تؤكد أن لديك إذناً بالتسويق له، كما تشترط شروط حملة.
- يربط زياراته المجهولة السابقة، ومنها الإعلان الذي جاء به، حين تمرّر ملف تعريف
visitorIdأو تستدعيه من الصفحة بـhamla.identify({ email }).
4
أرسل الأحداث من مكان حدوثها
في الكود الذي لديك أصلاً، مثل إشعار الدفع أو تأكيد الحجز أو بدء التجربة، أضف استدعاءً واحداً:
eventاسمك أنت للحظة، بأي لغة. والمحفّزات والشرائح تطابقه حرفياً.typeيقول ماذا يعني الحدث (purchaseوrefundوbookingوsignupوtrial…)، فيُحتسب الدفع إيراداً. انظر القائمة كاملة.idempotencyKeyرقم فاتورتك أو طلبك. فإشعار الدفع المُعاد يُحتسب مرة واحدة.traitsتصف الشخص الآن (خطته وحالته). والحدث هو ما فعله.
track وidentify أخطاءً ولا يعطّلان شيئاً أبداً، فلا يستطيع استدعاء تسويقي أن يكسر عملية دفع. وعلى المنصات الخالية من الخوادم، استدعِ await hamla.flush() قبل أن تعيد الدالة، كي يُرسَل الطابور.5
تأكد من وصوله
استخدم تخبرك النتيجة إن كان الحدث قد وصل، وبماذا قرّرت حملة:وحين يكون
trackNow مرة واحدة، لتقرأ الجواب:ok هو false، يقول reason لماذا (config أو invalid_input أو http أو network أو timeout)، ويحمل status رمز HTTP. وعبر HTTP العادي تحصل على data نفسها داخل { "success": true, "data": … }.ثم افتح ذلك الشخص في جهات الاتصال: الحدث في سجله مع وقت حدوثه. ويسرد warnings ما لم تستطع حملة تطبيقه، مثل سمة من نوع خاطئ، ولا يظهر إلا حين يكون هناك ما يقال. اقرأه في أول طلب. وإن قال campaigns will not reach this contact فالشخص لم يُعرَّف قط: عُد إلى الخطوة الثالثة.6
حوّل الحدث إلى رسالة
سلّمه لصاحب النشاط، أو افعلها بنفسك:
- اطلب من حملة: «حين يُطلق أحد
subscription_started، أرسل له بريد ترحيب بأفضل ثلاث نصائح لدينا.» - أو ابنِها: افتح حملة ← متى تبدأ الحملة؟ ← حدث في تطبيق ← أحداث تطبيقك ← اكتب اسم الحدث.
أحضر تاريخك
أرسل التسجيلات والمدفوعات السابقة عبرPOST /api/sdk/track/batch، حتى 500 في الطلب الواحد، كلٌّ بوقته الحقيقي occurredAt ومفتاح idempotencyKey. التاريخ يملأ الملفات والإيرادات والشرائح، ولا يرسل رسالة أبداً. التفاصيل في مرجع الأحداث.
قبل الإطلاق
- المفتاح السري على خادمك فقط.
-
identifyيعمل عند التسجيل وتسجيل الدخول، قبل أولtrackأو معه. - كل حدث فيه مال له
typeوidempotencyKey. - الدوال الخالية من الخوادم تستدعي
await hamla.flush()قبل أن تعيد. - بدّلت مفتاح نشاط الاختبار بالمفتاح الحقيقي.
حين لا يسير شيء كما يجب
كل حقل وحد وخطأ في مرجع الأحداث. والشرح الأطول للأحداث، مع مثالين لعيادة ولمنتج SaaS، في أحداث حملة.