تخطّ إلى المحتوى الرئيسي

الأحداث المخصصة

تمثل الأحداث الإجراءات التي يتخذها المستخدمون في تطبيقك. تتبّع الأحداث المخصصة لإنشاء الشرائح وتشغيل الحملات وتحليل سلوك المستخدمين.

ما هي الأحداث؟

الأحداث سجلات مؤرخة لإجراءات المستخدم:

{
"userId": "user_123",
"eventName": "Order Completed",
"timestamp": "2024-01-20T14:30:00Z",
"properties": {
"orderId": "order_456",
"total": 99.99,
"currency": "USD",
"items": 3,
"paymentMethod": "credit_card"
}
}

تتبع الأحداث

عبر SDK، من جانب العميل

import JoryioSDK from '@joryio/web-sdk';

const joryio = new JoryioSDK({ sdkKey: 'jry_sdk_web_...' });

// Simple event
joryio.track('Button Clicked');

// Event with properties
joryio.track('Order Completed', {
orderId: 'order_456',
total: 99.99,
currency: 'USD',
items: 3
});

// Page view
joryio.track('Page Viewed', {
page: '/pricing',
category: 'Marketing',
title: 'Pricing Page'
});

عبر API، من جانب الخادم

fetch('https://api-eu1.joryio.com/track', {
method: 'POST',
headers: {
'Authorization': 'Bearer jry_live_your_api_key',
'Content-Type': 'application/json'
},
body: JSON.stringify({
userId: 'user_123',
eventName: 'Order Completed',
properties: {
orderId: 'order_456',
total: 99.99,
currency: 'USD'
}
})
});

التتبع على دفعات

يجمع SDK الأحداث تلقائياً لتحسين الأداء. توضع الأحداث في قائمة انتظار وتُرسل ضمن مجموعات:

// SDK automatically batches these events
joryio.track('Product Viewed', { productId: '123' });
joryio.track('Added To Cart', { productId: '123', price: 49.99 });
joryio.track('Cart Viewed', { itemCount: 1 });

// Events are sent together after 10 seconds or 20 events (configurable)

// To send immediately:
joryio.flush();

// API: POST /track with a bare array body (max 500)
POST /track
[
{
"userId": "user_123",
"eventName": "Product Viewed",
"properties": { "productId": "123" }
},
{
"userId": "user_123",
"eventName": "Added To Cart",
"properties": { "productId": "123", "price": 49.99 }
}
]

تسمية الأحداث

أفضل الممارسات

استخدم أسماء واضحة ومتسقة.

جيد، كائن + إجراء:

joryio.track('Product Viewed');
joryio.track('Cart Abandoned');
joryio.track('Order Completed');
joryio.track('Trial Started');

غير جيد:

joryio.track('view_product');      // Inconsistent case
joryio.track('clicked'); // Too generic
joryio.track('user_action_123'); // Not descriptive

اصطلاح التسمية

نوصي بالصيغة: الكائن + فعل بصيغة الماضي.

Product Viewed
Order Completed
Account Created
Feature Enabled
Video Watched
Form Submitted

خصائص الحدث

توفر الخصائص سياقاً للحدث.

أحداث التجارة الإلكترونية

// Product Viewed
joryio.track('Product Viewed', {
productId: 'prod_123',
productName: 'Premium Plan',
category: 'Subscription',
price: 99.99,
currency: 'USD',
inStock: true
});

// Order Completed
joryio.track('Order Completed', {
orderId: 'order_456',
total: 249.99,
currency: 'USD',
itemCount: 3,
discount: 25.00,
shippingCost: 10.00,
paymentMethod: 'credit_card',
products: [
{ id: 'prod_1', name: 'Item 1', price: 99.99 },
{ id: 'prod_2', name: 'Item 2', price: 149.99 }
]
});

// Cart Abandoned
joryio.track('Cart Abandoned', {
cartValue: 149.99,
itemCount: 2,
cartAge: '2h 30m'
});

أحداث SaaS

// Trial Started
joryio.track('Trial Started', {
plan: 'premium',
trialDays: 14,
source: 'pricing_page'
});

// Feature Used
joryio.track('Feature Used', {
featureName: 'export',
exportFormat: 'csv',
recordCount: 1500,
duration: 3.5 // seconds
});

// Subscription Upgraded
joryio.track('Subscription Upgraded', {
fromPlan: 'starter',
toPlan: 'professional',
billingCycle: 'monthly',
mrr: 199,
effectiveDate: '2024-02-01'
});

أحداث المحتوى والوسائط

// Video Watched
joryio.track('Video Watched', {
videoId: 'vid_123',
videoTitle: 'Product Demo',
duration: 120, // seconds
percentWatched: 85,
quality: '1080p',
platform: 'web'
});

// Article Read
joryio.track('Article Read', {
articleId: 'article_456',
title: '10 Tips for Better Marketing',
category: 'Marketing',
author: 'John Doe',
readTime: 5, // minutes
scrollDepth: 90
});

أمثلة لأحداث شائعة

دورة حياة المستخدم

// Signup flow
joryio.track('Signup Started');
joryio.track('Signup Completed', {
method: 'email',
source: 'homepage_cta'
});
joryio.track('Email Verified');
joryio.track('Onboarding Completed', {
stepsCompleted: 5,
timeSpent: '8m 30s'
});

// Engagement
joryio.track('Session Started');
joryio.track('Feature Discovered', {
featureName: 'advanced_filters'
});
joryio.track('Help Article Viewed', {
articleId: 'help_123',
query: 'how to export data'
});
joryio.track('Session Ended', {
duration: '15m 20s',
pagesViewed: 8
});

مسار التجارة الإلكترونية

// Browse
joryio.track('Product Searched', {
query: 'wireless headphones',
results: 45
});
joryio.track('Product Viewed', {
productId: 'prod_123',
price: 199.99
});
joryio.track('Product Compared', {
productIds: ['prod_123', 'prod_456']
});

// Cart
joryio.track('Added To Cart', {
productId: 'prod_123',
quantity: 1,
price: 199.99
});
joryio.track('Cart Viewed');
joryio.track('Coupon Applied', {
code: 'SAVE20',
discount: 39.99
});

// Checkout
joryio.track('Checkout Started', {
value: 159.99
});
joryio.track('Payment Info Entered');
joryio.track('Order Completed', {
orderId: 'order_789',
revenue: 159.99
});

مقاييس SaaS

// Activation
joryio.track('Trial Started');
joryio.track('Integration Connected', {
integration: 'salesforce'
});
joryio.track('First Report Created');
joryio.track('Team Member Invited');

// Engagement
joryio.track('Daily Active', {
loginCount: 45
});
joryio.track('API Call Made', {
endpoint: '/users',
method: 'GET'
});

// Revenue
joryio.track('Subscription Created', {
plan: 'professional',
mrr: 199
});
joryio.track('Subscription Renewed', {
plan: 'professional'
});
joryio.track('Subscription Cancelled', {
reason: 'too_expensive'
});

أنواع بيانات الخصائص

الأنواع المدعومة

joryio.track('Event Name', {
// String
name: "John Doe",
plan: "premium",

// Number
age: 30,
price: 99.99,
quantity: 5,

// Boolean
isActive: true,
emailVerified: false,

// Date (ISO 8601 string)
createdAt: "2024-01-20T10:30:00Z",
expiresAt: "2024-02-20T23:59:59Z",

// Array
tags: ["vip", "early-access"],
categories: ["electronics", "accessories"],

// Object
address: {
city: "San Francisco",
state: "CA",
zip: "94102"
},
metadata: {
source: "web",
campaign: "summer_sale"
}
});

أسماء الخصائص المحجوزة

الخصائص التي تبدأ بـ $ محجوزة:

  • $app_id - معرّف التطبيق
  • $app_name - اسم التطبيق
  • $platform - المنصة، مثل web أو ios أو android
  • $session_id - معرّف الجلسة
  • $anonymous_id - معرّف المستخدم المجهول
  • $is_identified - ما إذا كان المستخدم معروفاً

لا تستخدم هذه الأسماء لخصائص مخصصة.

استخدام الأحداث للتقسيم

أنشئ شرائح بناءً على سلوك الأحداث.

حدث تم تنفيذه

Segment: Active users
Filter: Performed "Session Started" within last 7 days

حدث لم يتم تنفيذه

Segment: Users who haven't upgraded
Filter: Has NOT performed "Subscription Upgraded"

عدد الأحداث

Segment: Power users
Filter: Performed "Feature Used" >= 50 times within last 30 days

خصائص الأحداث

Segment: High-value customers
Filter: Performed "Order Completed"
WHERE properties.total >= 500
within last 90 days

شرائح سلوكية معقدة

Segment: At-risk users
Filter Group 1 (AND):
- Performed "Login" within last 90 days
- Has NOT performed "Login" within last 14 days
- Performed "Order Completed" at least 1 time

Use for: Re-engagement campaign

حملات تشغّلها الأحداث

شغّل الحملات بناءً على الأحداث.

مثال 1: التخلي عن السلة

Trigger: "Cart Abandoned" event
Wait: 1 hour
Condition: Has NOT performed "Order Completed"
Action: Send recovery email with discount

مثال 2: التهيئة

Trigger: "Signup Completed" event
Flow:
→ Welcome email (immediate)
→ Wait 2 days
→ Getting started guide
→ Wait 5 days
→ Check: Performed "First Report Created"?
- Yes: Advanced tips email
- No: Help offer email

حدود الأحداث والأداء

حدود المعدل

الخطةالأحداث/الثانيةالأحداث اليومية
Free10/ث100,000
Starter50/ث500,000
Pro100/ث2,000,000
Enterpriseمخصصغير محدود

أفضل ممارسات الأداء

  1. يجمع SDK الأحداث تلقائياً:

    // SDK automatically batches these for you
    joryio.track(event1);
    joryio.track(event2);
    joryio.track(event3);
    // All three sent together after batchFlushInterval (default 5s) or batchSize (default 50) reached

    // For critical events that need immediate sending:
    joryio.track('Order Completed', {...});
    joryio.flush(); // Send immediately
  2. لا تتبع بوتيرة عالية جداً:

    // Bad: Tracking every scroll
    window.addEventListener('scroll', () => {
    joryio.track('Page Scrolled');
    });

    // Good: Track scroll depth milestones
    joryio.track('Page Scrolled', {
    depth: 75 // %
    });
  3. أبقِ الخصائص معقولة الحجم:

    • 50 خاصية كحد أقصى لكل حدث.
    • 10KB كحد أقصى للحجم الكلي للحدث.
    • تجنب السلاسل النصية الطويلة جداً.

تصحيح أخطاء الأحداث

تفعيل وضع التصحيح

const joryio = new JoryioSDK({
sdkKey: 'jry_sdk_web_...',
enableDebug: true // See all events in console
});

التحقق من الأحداث في لوحة التحكم

  1. انتقل إلى المستخدمون ثم ابحث عن المستخدم.
  2. افتح تبويب النشاط.
  3. راجع جميع الأحداث المتتبعة.

مشاكل شائعة

الأحداث لا تظهر:

  • تحقق من تهيئة SDK.
  • تأكد من تعريف المستخدم أو وجود معرّف مجهول.
  • فعّل وضع التصحيح.
  • راجع أخطاء وحدة تحكم المتصفح.

الخصائص لا تظهر:

  • تحقق من صحة أسماء الخصائص.
  • تحقق من أنواع البيانات.
  • تجنب أسماء الخصائص المحجوزة التي تبدأ بـ $.

الخطوات التالية