إنشاء Canvas
Canvas هو منشئ الرحلات المرئي في Joryio. استخدمه لإنشاء سير عمل آلي متعدد الخطوات يستجيب لسلوك المستخدمين في الوقت الفعلي: مسارات التهيئة، وتسلسلات السلة المتروكة، وتحويل التجارب، وحملات الاستعادة وغير ذلك.
يبقى اسم المسار والكيان الداخلي canvas، لكن الاسم الظاهر للمستخدم هو User Journey. المصطلحان قابلان للتبادل في الوثائق.
ما يمكنك إنشاؤه
- مسارات التهيئة: إرشاد المستخدمين الجدد خلال منتجك.
- السلة المتروكة: تذكير المستخدمين بإكمال الشراء.
- تحويل التجربة: رعاية مستخدمي التجربة نحو الخطط المدفوعة.
- إعادة التفاعل: استعادة المستخدمين غير النشطين.
- تسلسلات البيع الإضافي: تشجيع الترقية.
- تنسيق متعدد القنوات: تنسيق Email وSMS وPush وWhatsApp وIn-app.
المعالج ذو علامات التبويب الست
يستخدم Canvas معالجًا مرقمًا من ست علامات تبويب. يعرض الرأس Stepper بعناوين فرعية وخطوط وصل وعلامات صح خضراء للخطوات المكتملة وشارة ! برتقالية لأي علامة زرتها وتركتها مع أخطاء تحقق. يوجد Continue وSave Draft وPublish جميعها في الرأس؛ لا توجد قائمة تنقل سفلية.
يحفظ الانتقال بين علامات التبويب عملك تلقائيًا بحالة status='draft'. ينشئ الحفظ الأول السجل، وتنفذ الحفظات التالية PATCH. يمكنك المغادرة والعودة دون فقدان شيء.
| # | التبويب | ما تضبطه |
|---|---|---|
| 1 | Details | الاسم والوصف والحالة والوسوم. |
| 2 | Delivery | نوع الإرسال وإعداد المشغّل. |
| 3 | Audience | اختيار الوضع ثم منشئ الفلاتر وسياسة إعادة الدخول ومعايير الخروج. |
| 4 | Conversion | أحداث التحويل الأساسية والثانوية. |
| 5 | Journey editor | محرر العُقد بملء الشاشة. |
| 6 | Summary | مراجعة للقراءة فقط قبل النشر. |
افتح المعالج من Canvas ← New User Journey.
التبويب 1: Details
- Name مطلوب وDescription اختياري.
- Status:
draft/active/paused/archived. تبدأ معظم الرحلات كـdraftوتتحول إلىactiveعند النشر. - Tags: وسوم لتحديد نطاق الفريق، وتعمل أيضًا كوسوم لتجاوز قائمة الحظر، بالنموذج نفسه للحملات. اكتب وسمًا واضغط Enter فيظهر كبطاقة قابلة للإزالة.
التبويب 2: Delivery
اختر send type، وهو مطلوب ولا يوجد اختيار افتراضي صامت:
| نوع الإرسال | متى يدخل المستخدمون |
|---|---|
immediate | مرة واحدة فور النشر، لكل مستخدم يطابق الجمهور. |
scheduled | مرة واحدة في تاريخ/وقت تختاره، لكل مستخدم يطابق حينها. |
recurring | وفق جدول، يومي/أسبوعي/شهري/cron مخصص. يُعاد تقييم الجمهور في كل تشغيل. |
trigger | عند إطلاق مشغّل: حدث أو تغير كيان أو WhatsApp وارد أو SMS وارد أو استدعاء API. تحكم شروط الجمهور الدخول لكل مستخدم. |
في وضع trigger، اختر نوع مشغّل، وهو مطلوب أيضًا:
-
Built-in: مشغلات Joryio عالية القيمة في قائمة منتقاة بدل البحث عنها بين جميع الأحداث:
- Back in stock / Restock: يصبح منتج أو عنصر أبدى المستخدم اهتمامًا به متاحًا مجددًا. اختر المصدر: Product catalog،
back_in_stockيُصدر تلقائيًا لكل مستخدم من متجرك المتزامن Shopify / WooCommerce / Magento، أو Custom entity،entity_back_in_stock، من تنبيه علاقة كيان مثل دورة أو حلقة أو موعد. - Price drop،
price_drop: انخفض سعر منتج أبدى المستخدم اهتمامًا به عن حدك، من كتالوج المنتجات المتزامن.
يُخزّن كل منهما كمشغّل حدث عادي، ويمكنك إضافة شروط للخصائص داخل المنتقي، مثل فئة محددة أو أقل من حد سعري.
- Back in stock / Restock: يصبح منتج أو عنصر أبدى المستخدم اهتمامًا به متاحًا مجددًا. اختر المصدر: Product catalog،
-
Event tracked: يطلق عند تتبع حدث مسمى للمستخدم.
-
Entity changed: يطلق عند
created/updated/deleted/ تغير حقل في كيان مخصص. -
WhatsApp inbound: يطلق عند إرسال المستخدم رسالة WhatsApp واردة مطابقة.
-
Inbound SMS: يطلق عند وصول SMS من جهة اتصال معروفة. صفِّ حسب حساب SMS ونوع الرسالة وشروط Message Text / Message Type، يساوي أو يحتوي أو يبدأ بـ إلخ. يلتقط Webhook الوارد للرقم SMS الوارد. تُسجل فقط جهات الاتصال الموجودة في جمهورك بهذا الرقم؛ تُخزن ردود الأرقام المجهولة لكنها لا تنشئ جهة اتصال تلقائيًا.
-
Attribute changed: يطلق عند تغير قيمة سمة مستخدم.
-
Subscription status: يطلق عند تغير حالة اشتراك قناة أو قائمة.
-
API (manual entry): لا يوجد مستمع تلقائي؛ يدخل المستخدمون عبر
POST /api/canvas/:id/enter.
إعدادات تسليم إضافية:
- Quiet-time override: تجاهل الساعات/الأيام/العطل الهادئة لهذه الرحلة.
- Touching-rules override: تجاوز حدود التكرار على مستوى مساحة العمل. مخصص للرسائل المعاملية أو الحرجة.
التبويب 3: Audience
يبدأ تبويب Audience بـ منتقي وضع، وهو البطاقتان نفسهما في معالج الحملات:
- Targeted audience مع شارة خضراء (موصى به): منشئ الفلاتر.
- Send to everyone: إرسال إلى مساحة العمل كلها.
بعد اختيار الوضع، يحاكي معالج الرحلة معالج الحملة تمامًا: واجهة منشئ الفلاتر v2، شارات مرقمة ملونة لكل مجموعة، وConnectorChip لـ AND/OR بين الصفوف والمجموعات، وأزرار + Add condition / + Add filter group المتقطعة، وتأكيـد حذف المجموعات غير الفارغة، وشارات عدد حي لكل مجموعة. يعرض الشريط الأيمن حجم الجمهور مع شارة Live خضراء ونسبة مساحة العمل وشريط تقدم 4px وتفصيلًا حسب القناة.
منتقيا الأحداث والسمات هما combobox قابلان للبحث مع صف + Create event/attribute "<query>" حين لا يطابق شيء.
سياسة إعادة الدخول
ما يحدث عندما يطلق مستخدم يملك تنفيذًا نشطًا الرحلة مرة أخرى:
| السياسة | السلوك | تسمية minIntervalMinutes |
|---|---|---|
block، الافتراضي | لا تسمح بإعادة الدخول. | "Cooldown after exit (minutes)": يجب مرور N دقائق بين آخر خروج للمستخدم والدخول التالي. |
restart | أخرج التنفيذ القديم وابدأ تنفيذًا جديدًا. | الحقل مخفي؛ إعادة التشغيل تنهي القديم أصلًا. |
parallel | اسمح بتنفيذات متزامنة متعددة لكل مستخدم. | "Minimum time between entries (minutes)": خفف من آخر دخول. |
لوضع parallel، اضبط كذلك Max concurrent بين 1 و10.
معايير الخروج
عرّف متى يجب أن يخرج المستخدم من رحلة جارية مبكرًا. يستخدم منشئ مجموعات الفلاتر نفسه الخاص بـ Audience، مع كتلة تضمين فقط: لا يوجد استبعاد، لأن وضع استبعاد فوق "أزل المستخدمين المطابقين X" ينتج نفيًا مزدوجًا مربكًا.
تعمل مهمة مجدولة كل خمس دقائق: لكل رحلة نشطة فيها معايير خروج، تحل المستخدمين المطابقين، وتقاطعهم مع التنفيذات النشطة حاليًا، وتنقلهم إلى exited مع exitReason='exit_criteria_matched'.
استخدامات نموذجية:
- أوقف عند تحويل المستخدم: فلتر حدث التحويل الأساسي.
- أزل عند إلغاء الاشتراك: فلتر اشتراك القناة أو عضوية القائمة.
- تخطّ المستخدمين الذين أكملوا الهدف في مكان آخر: فلتر سلوكي أو تنفيذ Canvas.
التبويب 4: Conversion
- Primary conversion event: اسم الحدث الذي يمثل تحويل المستخدم. تحسّن شروط الخصائص الاختيارية المطابقة.
- Attribution window: ساعات بعد الدخول تستمر فيها نسبة التحويل.
- Attribution model:
first_touch/last_touch/linear. - Secondary conversion events: أهداف إضافية متتبعة بجانب الأساسي، مثل
added_to_cartوviewed_pricing. لكل منها تسمية اختيارية.
التبويب 5: Journey editor
يأخذك النقر على هذا التبويب إلى محرر العُقد بملء الشاشة في /canvas/:id?from=wizard. تكون عُقدة المشغّل مزروعة مسبقًا بإعداد تبويب Delivery ومقفلة؛ لا يمكنك تحريرها أو حذفها من داخل المحرر. لتغيير بداية الرحلة، عد إلى تبويب Delivery.
العُقد المتاحة
عُقد الرسائل
- Email: إرسال بريد إلكتروني.
- SMS: إرسال رسالة نصية.
- Push: إرسال إشعار Push.
- WhatsApp: إرسال قالب WhatsApp.
- In-app: عرض رسالة داخل التطبيق.
- Webhook: استدعاء API خارجي.
عُقد المنطق
- Delay: انتظار مدة ثابتة، مثل يوم أو 3 ساعات.
- Wait Until: انتظار حدث أو تغير سمة أو تاريخ محدد.
- Branch: تقسيم المستخدمين حسب الشروط.
- Filter: السماح بالمرور فقط للمطابقين للمعايير.
- Exit: إنهاء الرحلة.
عُقد التجارب
- A/B Test: اختبار نسخ الرسائل.
- Random Split: توزيع المستخدمين عشوائيًا إلى المسارات.
يعيدك إجراء "Back to wizard" إلى تبويب Summary للمراجعة والنشر.
التبويب 6: Summary
مراجعة للقراءة فقط لكل ما ضُبط. تظهر أخطاء التحقق من علامات التبويب السابقة كشريط. يُعطّل زر Publish حتى تصبح القائمة فارغة وتحتوي الرحلة على عُقدة محفوظة واحدة على الأقل.
مثال: رحلة تحويل تجربة
مسار بسيط يرعى مستخدمي التجربة نحو الدفع:
[المشغّل: الحدث "trial_started"]
↓
[تأخير: يوم واحد]
↓
[Email: ترحيب + دليل البدء]
↓
[تأخير: 3 أيام]
↓
[فرع: هل استخدم الميزة X؟]
├─ نعم → [Email: نصائح متقدمة]
└─ لا → [Email: كيفية استخدام الميزة X]
↓
[تأخير: 7 أيام]
↓
[فلتر: ما زال في التجربة؟]
↓
[Email: تنتهي التجربة قريبًا - خصم 20%]
↓
[Wait Until: يتحول أو تنتهي التجربة]
├─ تحوّل → [Email: أهلًا بك في Premium]
└─ انتهت المهلة → [Exit]
دورة حياة التنفيذ: completed مقابل exited
كل مستخدم يدخل رحلة هو run منفصل. يعيش التنفيذ في إحدى أربع حالات:
| الحالة | المعنى |
|---|---|
| active | يتحرك المستخدم حاليًا خلال الرحلة. |
| completed | وصل المستخدم إلى عُقدة Exit طبيعيًا؛ انتهى المسار بنجاح. تضبط عند وصول وقت التشغيل إلى خطوة Exit. |
| exited | أُخرج المستخدم من الرحلة قبل الوصول إلى عُقدة Exit. يسجل صف التنفيذ حقل exitReason بإحدى الحالات أدناه. |
| failed | أخفقت عُقدة بشدة، مثل Webhook أعاد 500 بلا بديل. |
لماذا توجد تنفيذات exited؟
يمكن إنهاء التنفيذ قسرًا في أربع حالات:
exit_criteria_matched: طابق التنفيذ فلتر Exit Criteria عالميًا، مثل ألغى المستخدم الاشتراك أو أصبح عميلاً دافعًا. تسحب مهمة كل خمس دقائق المستخدمين المطابقين مبكرًا.reentry_restart: أعاد المستخدم دخول الرحلة مع بقاء تنفيذ سابق نشط وكانت سياسة إعادة الدخول restart. يُخرج التنفيذ السابق قسرًا ليبدأ الجديد نظيفًا.force_exited_on_publish: نشر مسؤول إصدارًا جديدًا بوضع انتقال force exit existing users. يُخرج كل مستخدمي الإصدار السابق أثناء المسار.version_orphaned_cleanup: علق المستخدم على إصدار مؤرشف. بعد ساعة من عدم النشاط على إصدار يتيم، ينظف وقت التشغيل التنفيذ.
تدعم الرحلات الطويلة، متعددة الأسابيع أو الأشهر، صراحة؛ لا يوجد حد عالمي لـ "إنهاء التنفيذ بعد N ساعة". لتقييد انتظار خطوة واحدة استخدم مدة عُقدة Delay لكل خطوة؛ ولإزالة مستخدمين عند تغير حالتهم استخدم Exit Criteria.
لماذا يهم الفرق في التقسيم
يحمل فلتر Canvas Journey في منشئ الشرائح عوامل منفصلة لكل حالة، لأنها تصف أفواجًا مختلفة:
- Completed canvas: فوج التحويل أو النجاح؛ مستخدمون أكملوا المسار طبيعيًا.
- Exited canvas: فوج التسرب من المسار؛ مستخدمون بدأوا ولم يكملوا، مفيد لإعادة الاستهداف.
- Is in canvas: مستخدمون يملكون تنفيذات
activeالآن. - Is not in canvas: يستبعد تنفيذات
activeفقط، فيشمل المستخدمين المكتملين والخارجين؛ مفيد لمن تريد "أي شخص مر بهذه الرحلة في أي وقت وليس فيها حاليًا".
أين تفحص ما حدث
- تسرد لوحة Journey Runs، من Analytics في الشريط العلوي لمحرر الرحلة، كل تنفيذ مع شارة الحالة والإصدار والعُقدة الحالية والطوابع الزمنية. يكشف توسيع الصف Run timeline، كل عُقدة زارها ونتائجها، وContext variables، حقيبة المتغيرات المحلولة للتنفيذ.
- للتنفيذ الخارج، يظهر سبب الخروج في API كـ
execution.exitReason. وتعرض واجهة Journey Runs السبب ضمن الخط الزمني عند انتهاء التنفيذ.
انتقالات الحالة
draft ──▶ active ──▶ paused ──▶ active
│
└──▶ archived
- لا يمكن تعديل البنية، العُقد/الحواف، إلا لرحلات
draft. - تتوقف
activeمؤقتًا عند Pause، وتستأنفpausedعند إعادة التفعيل. - تتوقف الرحلات المتكررة تلقائيًا عند مرور
endDateأو بلوغmaxOccurrences.
عند نشر تغييرات لرحلة نشطة، يُنشأ إصدار جديد. يستمر المستخدمون الحاليون على إصدارهم الأصلي بينما يحصل الداخلون الجدد على الإصدار المحدّث. راجع سجل الإصدارات للتفاصيل.
التوسع أكثر
- أفضل ممارسات الرحلات: إرشادات لرحلات بسيطة وموقّتة ومخصصة.
- أنماط الرحلات الشائعة: مسارات قابلة للتعديل، سلسلة تهيئة وسلة متروكة واستعادة وبوت دعم WhatsApp.
القديم
لم تعد نافذة "Settings" الأقدم داخل محرر العُقد تحتوي سياسة إعادة الدخول أو تتبع التحويل أو الوسوم أو أي شيء انتقل إلى المعالج. تحتفظ فقط بـ Personalized Variants، اختيار النسخ الموجّه بـ ML لرحلات A/B/n.