الأدلة دي بتطابق مفاهيم المجال مع العناصر الموجودة في المنصة دلوقتي (bouquets وخطوط وحزم وحسابات موزّعين وعقد والـ API). دي مطابقات مفاهيمية، مش ميزات خاصة بمجال، وحساب الموزّع حساب مفوَّض، مش tenant معزول.
المطابقة المفاهيمية
مفيش حاجة في اللوحة اسمها اشتراك أو نقطة حضور. الجدول بيقول أنهي كائن بيلعب أنهي دور؛ والفصول اللي تحت بتظبطهم بالترتيب ده.
| في مجالك | على المنصة | فين في اللوحة |
|---|---|---|
| حساب موزّع أو شريك إقليمي | حساب موزّع (reseller): لوحة مفوَّضة بكريديت وصلاحيات وخطوطه الخاصة | Users → ضيف موزّع؛ Groups لصلاحياته |
| مستوى قنوات أو حزمة إضافية | Bouquet: مجموعة مسمّاة من القنوات أو الأفلام أو المسلسلات اللي الحزمة بتديها | Bouquets، من Streams وMovies / Series |
| قناة تلفزيونية | قناة مباشرة: بث بمصادره وEPG وصيغ الإخراج | Streams → ضيف بث مباشر (رابط المصدر أو RTMP push) |
| مكتبة الفيديو عند الطلب | كتالوج VOD: أفلام ومسلسلات بمواسم وحلقات وتصنيفات وبيانات وصفية | Movies وSeries، أو مهمة استيراد VOD |
| وصول المشترك للتلفزيون | الخط: وصول واحد بحزمته وbouquets وانتهائه وحد اتصالاته ومخرجاته | Lines → إضافة، أو أكواد التفعيل، أو الـ Reseller API |
| نهاية فترة الفوترة | تاريخ انتهاء الخط، بيتجدّد بحزمة أو كريديت أو الـ API | تاريخ انتهاء الخط ومدة الحزمة |
| شاشات لكل اشتراك | أقصى اتصالات للخط: كام جهاز يقدر يشوف في نفس الوقت | أقصى اتصالات للخط |
| تكامل الفوترة والتوفير | Reseller API وwebhooks: عمليات اللوحة من نظامك إنت | مفاتيح Reseller API وwebhooks في لوحة الموزّع |
| عقدة نقطة الحضور | عقد البث: سيرفرات حافة بتتسجّل من اللوحة، واحدة لكل موقع أو مبنى | Servers → ضيف Node، بتتثبّت عن طريق SSH |
المتطلبات
اللي لازم يكون موجود قبل التثبيت.
- سيرفر في الموقع الرئيسي (Ubuntu 22.04 أو 24.04)، والمثبّت، ونطاق أو عنوان المشتركين يقدروا يوصلوه، وسيرفر في كل نقطة حضور للـ Nodes.
- بث القنوات المرخّصة، ومكتبة الفيديو عند الطلب، ونظام الفوترة اللي الاشتراكات عايشة فيه.
- قرار بخصوص المستويات، وفترة الفوترة بتدوم قد إيه، وأنهي موزّعين ياخدوا حساب شريك.
نشر البنية
الموقع الرئيسي، وبعدين نقاط الحضور.
- شغّل المثبّت على السيرفر الرئيسي؛ وحط اللوحة ورا الريفرس بروكسي بتاعك واضبط TRUSTED_PROXIES عشان السجلات وقواعد IP تشوف عنوان المشترك الحقيقي.
- اضبط أساس التشغيل على العنوان العام اللي المشتركين بيوصلوله، وادخل مفتاح الرخصة على السيرفر.
- سجّل Node لكل نقطة حضور من Servers؛ اللوحة بتثبّتها عبر SSH، أو الـ Node بتسجّل نفسها برمز لمرة واحدة، وبتوجّه المشتركين القريبين منها ليها.
- اعمل حساب شريك (موزّع) للدعم أو لفريق الفوترة بصلاحيات الخطوط بس.
تنظيم المحتوى
المستويات والحزم الإضافية كـ bouquets.
- ضيف القنوات تحت Streams ومكتبة الفيديو عند الطلب تحت Movies وSeries، مع تصنيفات ومصدر EPG.
- اعمل bouquets للقنوات الأساسية والقنوات المميزة ومكتبة الفيديو عند الطلب.
- اعمل حزمة لكل مستوى اشتراك بالـ bouquets اللي بتديها، وفترة الفوترة كمدة، وسعر بالكريدت.
- اعمل حزمة تجريبية قصيرة لعرض ترويجي أو لعميل جديد.
إعداد الشركاء (الموزّعين)
موزّعين بكريدت.
- اعمل مجموعة للموزّعين بصلاحيات لخطوطهم الخاصة ومن غير وصول للكتالوج أو الإعدادات.
- ضيف كل موزّع إقليمي كحساب شريك بالمجموعة دي والحزم اللي يقدر يبيعها ورصيد كريدت؛ والموزّع ممكن يبقى عنده موزّعين فرعيين لحد خمس مستويات.
- webhook credits.low وإشعار الرصيد المنخفض بيفكّروا الموزّع يشحن قبل ما المبيعات توقف.
إعداد خطوط المشتركين
خط لكل اشتراك.
- الفوترة بتعمل خط لما الاشتراك يبدأ، من خلال موصّل أو action=create_line في Reseller API مع حزمة المستوى ومعرّف الطلب.
- اضبط max connections لكل مستوى، يعني عدد الشاشات اللي البيت يقدر يستخدمها مع بعض.
- اربط الخط بعنوان المشترك أو بلده أو مزوّد إنترنته لما العرض يكون لشبكتك بس.
- لتجربة أو حالة دعم، ضيف خطوط من Lines ← إضافة وسلّم بيانات الدخول.
مكتبة الفيديو عند الطلب
كتالوج عند الطلب.
- ضيف أفلام ومسلسلات بمواسمها وحلقاتها، مستوردة بمهمة استيراد الفيديو عند الطلب أو مرفوعة، مع بيانات TMDB الوصفية للملصقات والأوصاف.
- جمّع العناوين في bouquets حسب المستوى أو الإضافة، عشان الحزمة تدّي بالظبط اللي الاشتراك بيشمله.
- الـ Nodes بتخزّن ملفات الفيديو عند الطلب مؤقتًا، فالعناوين الشائعة بتتخدم من نقطة الحضور القريبة من المشترك.
القنوات المباشرة
قنوات الباقة.
- ضيف كل قناة مرخّصة تحت Streams مع بثها وفعّل Catch-up أو timeshift بس حيث الحقوق بتسمح.
- ضيف مصدر EPG عشان التطبيقات والأجهزة تعرض دليل البرامج.
- كل Node بتاخد القناة المباشرة مرة واحدة من المصدر الأصلي وبتوزعها على مشتركيها.
الانتهاء والتجديد والإلغاء
فترة الفوترة كصلاحية للخط.
- الخط بيدوم طول فترة حزمته؛ والفوترة بتجدّده كل فترة بـ action=renew_line أو من خلال الموصّل.
- لما اشتراك بينتهي أو بيتلغي، الفوترة بتنادي action=disable_line، وبتفعّل الخط تاني عند إعادة التفعيل.
- اشترك الفوترة في webhooks عشان تطابق الخطوط اللي بتقرّب تنتهي والمنتهية مع سجلاتها.
التكامل مع الفوترة
الفوترة بتدير الوصول؛ والمشغّل بيشغّل.
- ثبّت موصّل نظام الفوترة في ناحيته (WHMCS وBlesta وOdoo وغيرهم)، أو نادي Reseller API بمفتاح ومعرّف طلب من نظامك.
- مفيش تسجيل دخول موحّد للمشاهدين: المشترك بيسجّل الدخول لتطبيق أو جهاز ببيانات الخط، اللي الفوترة تقدر تعرضها في منطقة العميل.
- استخدم مفاتيح Admin API بعلامة القراءة فقط وقائمة IP مسموحة وتاريخ انتهاء لأدوات التقارير.
اعتبارات الأمان
خلّي الخدمة للمشتركين.
- حط اللوحة ورا الريفرس بروكسي مع TLS واضبط TRUSTED_PROXIES؛ وخلّي حركة إدارة الـ Nodes على شبكة خاصة.
- تسجيل دخول بخطوتين لكل حساب في اللوحة ومجموعات صلاحيات للدعم والموزّعين؛ وreCAPTCHA أو Turnstile عند تسجيل الدخول.
- روابط تشغيل موقّعة وبتنتهي، وحد اتصالات لكل اشتراك، وربط بعنوان أو بلد أو مزوّد إنترنت حيث ينفع.
- نسخ احتياطية مشفّرة لقاعدة البيانات مع نسخة برا الموقع، وسجل التدقيق لكل تغيير في الخطوط والكريدت.
حل المشاكل
الفحوص الأولى المعتادة.
- مشترك من غير تلفزيون: افحص إن الخط مفعّل ومش منتهي، وبعدين نداء الفوترة في سجل نداءات Reseller API.
- قناة ناقصة لمستوى واحد: افحص bouquets حزمة المستوى ده.
- نقطة حضور بتقطّع: افحص نبض الـ Node بتاعتها وإن مشتركيها متوجّهين ليها.
- موزّع مش قادر يعمل خط: افحص رصيده وإن الحزمة من اللي يقدر يبيعها.