المتطلبات الأساسية
- حساب Mellowtel ومفتاح التكوين (جيب تاعك من لوحة التحكم).
- تطبيق Electron عندو الوصول للعملية الرئيسية.
التثبيت
1. تثبيت الحزمة
من جذر المشروع تاعك، ثبّت الـ SDK تاع Electron:2. أضف الكود تاعك
في ملف العملية الرئيسية تاع Electron (عادةًmain.ts أو main.js)، استورد الـ SDK، نداء اختياري لـ setupMellowtelApp() قبل ما يكون التطبيق جاهز، أنشئ Mellowtel بمفتاح التكوين تاعك، اطلب الموافقة من المستخدم، ومن بعد نداء init() باش تبدأ الخدمة.
عوض
YOUR_CONFIGURATION_KEY بالمفتاح من لوحة التحكم تاع Mellowtel.new Mellowtel(configurationKey, options?)ينشئ الـ SDK. الخيار الوحيد المتاح اليوم هوdisableLogs، اللي الافتراضي تاعوtrue. حطوfalseكي تكون راك تدمج باش تشوف حالة الاتصال ونشاط الطلب في التيرمينال تاعك.requestConsent(window, incentive)يعرض صندوق رسالة Electron أصلي مربوط بـBrowserWindowاللي تمررو. الحجة الثانية هي العنوان البارز للحوار (مثال،"احصل على 3 أشهر مجانا")، معروض فوق شرح ثابت لوش يدير Mellowtel. يرجعtrueإذا المستخدم قبل،falseإذا المستخدم رفض أو غلق الحوار، وundefinedإذا كانت الموافقة موجودة بالفعل. الـ SDK يحفظ قرار الاشتراك تلقائيا، يعني ما تحتاجش تناديoptIn()بعدين.init()يرمي خطأ غير كيconfigurationKeyيكون فارغ. إذا المستخدم ما وافقش، يسجل ويرجع بصمت. وإلا يفتح WebSocket للواجهة الخلفية تاع Mellowtel. النداء غير حاصر لواجهة المستخدم، يعني النوافذ تبقى مستجيبة بينما الاتصال يتأسس.
منع انقطاعات حوارات النظام (موصى به)
الـ SDK يجي مع مساعد اختياري،setupMellowtelApp()، اللي يضبط أعلام سطر أوامر Electron باش يقمع حوارات النظام (نوافذ الملء التلقائي، أشرطة الترجمة، مطالبات المصادقة NTLM / Kerberos، تكامل مدير كلمات المرور، تراكبات الوسائط، حوارات التشغيل الأول) اللي ممكن تقطع المستخدمين تاعك كي نوافذ Mellowtel المخفية تعالج الطلبات في الخلفية.
نداء في أعلى ملف العملية الرئيسية تاعك، قبل app.whenReady()، واستوردو مع التصدير الافتراضي من mellowtel-electron. شوف README الأصلي للاستخدام الرسمي.
موافقة المستخدم
عندك طريقين للتعامل مع الموافقة:- استعمل الحوار الأصلي المدمج عبر
requestConsent(window, incentive). هذا هو الطريق الأسرع ووش يبينو المقتطف اللي فوق. يعرضdialog.showMessageBoxأصلي تاع Electron مع نسخة الحافز تاعك كعنوان ويحفظ قرار المستخدم تلقائيا. - بني واجهة الموافقة تاعك الخاصة وسير الـ SDK عبر
optIn()،optOut()، وgetOptInStatus(). استعمل هذا إذا حبيت العلامة التجارية الخاصة، تفسيرات أغنى، أو توطين يتجاوز وش يوفره الحوار الأصلي.
وش لازم يتضمن حوار الموافقة تاعك
1
اشرح وش يدير Mellowtel
استعمل لغة بسيطة. مثال: “هذا التطبيق يستعمل Mellowtel لمشاركة عرض النطاق الترددي الزائد تاع الإنترنت تاعك. في المقابل، تحصل على [فائدة/ميزة]. تقدر تلغي الاشتراك في أي وقت في الإعدادات.”
2
اعطي المستخدمين خيار واضح
ضمّن خيارات قبول ورفض متميزة.
3
رابط للسياسات
ضمّن روابط لـ شروط الخدمة وسياسة الخصوصية.
خلي المستخدمين يغيرو موافقتهم لاحقا
Mellowtel يوفر حوار إعدادات مدمج عبرshowConsentSettings(window). يعرض حوار أصلي مع أزرار اشتراك / إلغاء اشتراك اللي تتماشى مع حالة المستخدم الحالية، وداخليا ينادي optIn() أو optOut() (بالإضافة لإعادة الاتصال بالـ WebSocket عند الاشتراك) كي المستخدم يبدل. اربطو بعنصر قائمة أو زر إعدادات في التطبيق تاعك باش المستخدمين يقدرو يراجعو اختيارهم.
إذا فضلت تبني شاشة الإعدادات تاعك الخاصة، نداء getOptInStatus() باش تقرا الحالة الحالية وoptIn() / optOut() باش تغيرها.
مرجع الطريقة
الفئةMellowtel تعرض الطرق العامة التالية. كلهم متاحين على المثيل اللي أنشأته بـ new Mellowtel(configurationKey, options?).
دورة الحياة
init(): Promise<void>يبدأ الخدمة إذا المستخدم وافق، أو يرجع بصمت في البداية إذا ما وافقش. يرمي خطأ غير كي يكون مفتاح التكوين فارغ.shutdown(): Promise<void>ينظف موارد الـ SDK كي التطبيق يغلق. يغلق الـ WebSocket، يدمر نوافذ العامل المخفية، ويزيل المؤقتات الخلفية. يحافظ على تفضيل الاشتراك تاع المستخدم.requestConsent(window: BrowserWindow, incentive: string): Promise<boolean | undefined>يعرض حوار الموافقة الأصلي المدمج ويحفظ النتيجة. يرجعtrueعند القبول،falseعند الرفض أو الإغلاق،undefinedإذا كانت الموافقة موجودة بالفعل.showConsentSettings(window: BrowserWindow): Promise<void>يعرض حوار إدارة الموافقة المدمج. الـ SDK يتعامل مع انتقالات الاشتراك / إلغاء الاشتراك داخليا كي المستخدم يبدل اختياره.
optIn(): Promise<void>يعلّم المستخدم كأنه وافق بدون عرض حوار. استعمل هذا غير بعد ما تجمع الموافقة عبر واجهة المستخدم تاعك.optOut(): Promise<void>يعلّم المستخدم كأنه ألغى الاشتراك وينفذ تنظيف كامل (نفس الموارد كـshutdown(), بالإضافة لإزالة تفضيل الموافقة المحفوظ). ما تحتاجش تناديshutdown()بعدين.getOptInStatus(): boolean | undefinedيرجع حالة الاشتراك الحالية، أوundefinedإذا المستخدم ما دارش اختيار.getNodeId(): stringيرجع معرف عقدة Mellowtel لهذا التثبيت. مفيد كي تقدم تذاكر الدعم.
electron-store وتبقى بعد إعادة تشغيل التطبيق. عرضها في واجهة المستخدم تاعك إذا حبيت تبين للمستخدمين تأثير الاشتراك تاعهم.
getTotalRequestCount(): numberيرجع عدد الطلبات الكلي المعالجة منذ التثبيت.getDailyRequestCount(): numberيرجع عدد الطلبات المعالجة اليوم.getRequestCountForDate(date: string): numberيرجع العدد لتاريخ معينYYYY-MM-DD.getDailyRequestsHistory(): { [date: string]: number }يرجع كل عدد يومي كخريطة.getRequestCountsInRange(startDate: string, endDate: string): { [date: string]: number }يرجع العدادات لفترة زمنية.getRequestCounts(): { total: number; daily: number; dailyHistory: { [date: string]: number } }يرجع كل العدادات الثلاثة في نداء واحد.
دورة الحياة وإغلاق التطبيق
بعد معالجة أول طلب، Mellowtel ممكن ينشئ نوافذ عامل Electron مخفية. التطبيقات المستضيفة لازم تناديshutdown() كي التطبيق يغلق فعليا.
shutdown():
- يغلق اتصال الـ WebSocket.
- يدمر نوافذ العامل المخفية.
- يزيل المؤقتات الخلفية وموارد الشبكة.
- يحافظ على تفضيل الاشتراك تاع المستخدم.
التطبيقات ذات النافذة الواحدة
نداءshutdown() كي النافذة الرئيسية للتطبيق تغلق:
window-all-closed تاع Electron لأن نوافذ العامل المخفية تاع Mellowtel ممكن تمنعها من التشغيل.
تطبيقات الدرج
ما تناديشshutdown() كي تخفي النافذة فقط إلى درج النظام. نداء من إجراء الإنهاء الصريح:
تطبيقات macOS
إذا التطبيق يبقى نشط بعد ما تغلق نوافذه، نداءshutdown() غير كي المستخدم يغلق التطبيق فعليا.
إلغاء الاشتراك
optOut() ينفذ تنظيف كامل بالفعل:
shutdown() بعدين. على عكس shutdown(), optOut() يغير أيضا تفضيل الموافقة المحفوظ.
البدء من جديد
بعدshutdown() أو optOut(), Mellowtel يقدر يبدأ من جديد:
استمرار الموافقة
حالة الاشتراك مخزنة في مسار تكوينelectron-store الافتراضي للنظام:
- macOS:
~/Library/Application Support/<YourAppName>/config.json - Windows:
%APPDATA%\<YourAppName>\config.json - Linux:
~/.config/<YourAppName>/config.json
حل المشاكل
خطأ "Package not found" أثناء التثبيت
خطأ "Package not found" أثناء التثبيت
- تأكد أنك راك تثبت
mellowtel-electron(ماشي اسم حزمة GitHub Packages محدد). - امسح ذاكرة التخزين المؤقتة تاع npm وأعد المحاولة بتشغيل
npm cache clean --forceمتبوع بـnpm install mellowtel-electron.
حوار الموافقة ما يظهرش
حوار الموافقة ما يظهرش
- تأكد أنك تنادي
requestConsentبعد ماapp.whenReady()تحل وتكون عندك مرجعBrowserWindowصالح وغير مدمر. - إذا كنت تستعمل
setupMellowtelApp(), تحقق أنه منادى قبلapp.whenReady(), ماشي بعد.
"init() يشتغل بلا أخطاء لكن والو ما يصراش"
"init() يشتغل بلا أخطاء لكن والو ما يصراش"
هذا عن قصد.
init() يرجع بصمت في البداية كي المستخدم ما وافقش. تحقق من getOptInStatus() باش تأكد. إذا رجع undefined أو false, شغل requestConsent أولا. لاحظ أن السجل الداخلي “المستخدم ما وافقش” يبلع كي disableLogs يبقى في الافتراضي تاعو (شوف “السجلات صامتة” تحت), يعني التيرمينال ما يعطيكش إشارة في أي اتجاه حتى تقلب هذا العلم.السجلات صامتة
السجلات صامتة
خيار المنشئ
disableLogs الافتراضي هو true. مرر { disableLogs: false } كالحجة الثانية للمنشئ أثناء الدمج باش تظهر حالة الاتصال ونشاط الطلب في التيرمينال تاعك. هذا أيضا أسرع طريقة لتمييز “ما وافقش” بصمت (شوف فوق) من فشل اتصال حقيقي.الوقت المقدر للإكمال: 10-15 دقيقة. إذا احتجت مساعدة أو عندك ملاحظات، تواصل معنا على info@mellowtel.com أو انضم لمجتمعنا على Discord.