المتطلبات المسبقة
- حساب Mellowtel ومفتاح التكوين (تحصل عليه من لوحة التحكم).
- تطبيق Electron عنده وصول للعملية الرئيسية.
التثبيت
1. إعداد مصادقة npm
صنع ملف.npmrc في الدليل الجذري تاع المشروع تاعك باش توجه npm إلى سجل حزم GitHub تاع Mellowtel وتوثيق التثبيت:
YOUR_NPM_TOKEN بالتوكن تاع التثبيت اللي تحت. اضغط باش تكشف، ثم استعمل أيقونة النسخ في كتلة الكود باش تنسخه إلى الحافظة تاعك.
كشف توكن التثبيت
كشف توكن التثبيت
2. تثبيت الحزمة
من الدليل الجذري تاع المشروع تاعك، ثبّت الـ SDK تاع Electron:3. أضف إلى الكود تاعك
في ملف العملية الرئيسية تاع Electron (عادةًmain.ts أو main.js)، استورد الـ SDK، وكونه بمفتاح التكوين تاعك، واطلب الموافقة من المستخدم، ثم ناد 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-inc/mellowtel-electron. شوف README الرئيسي للاستعمال الرسمي.
موافقة المستخدم
عندك زوج طرق للتعامل مع الموافقة:- استعمل الحوار المحلي المدمج عبر
requestConsent(window, incentive). هذي أسرع طريقة وهي اللي يظهرها المقطع اللي فوق. يعرضdialog.showMessageBoxمحلي تاع Electron بنسخة الحافز تاعك كعنوان ويحتفظ بقرار المستخدم تلقائياً. - بني واجهة موافقة خاصة بك وسير الـ SDK عبر
optIn(),optOut(), وgetOptInStatus(). استعمل هذي إذا كنت حابب علامات تجارية مخصصة، شروحات أغنى، أو توطين يتجاوز اللي يعرضه الحوار المحلي.
وش لازم يتضمنه حوار الموافقة تاعك
اشرح وش يدير Mellowtel
استعمل لغة بسيطة. مثال: “هذا التطبيق يستعمل Mellowtel لمشاركة عرض النطاق الترددي تاع الإنترنت اللي ما تستعملوش. في المقابل، تحصل على [ميزة/فائدة]. تقدر تلغي الاشتراك في أي وقت في الإعدادات.”
رابط للسياسات
ضمّن روابط لـ شروط الخدمة وسياسة الخصوصية.
خلي المستخدمين يغيروا الموافقة تاعهم لاحقاً
Mellowtel يوفر حوار إعدادات مدمج عبرshowConsentSettings(window). يعرض حوار محلي بأزرار اشتراك/إلغاء اشتراك اللي تطابق الحالة الحالية تاع المستخدم، وداخلياً ينادي optIn() أو optOut() (زائد إعادة الاتصال بـ WebSocket عند الاشتراك) كي المستخدم يبدل. اربطها بعنصر قائمة أو زر إعدادات في التطبيق تاعك باش المستخدمين يقدروا يراجعوا اختيارهم.
إذا كنت تفضل تبني شاشة إعدادات خاصة بك، ناد getOptInStatus() باش تقرأ الحالة الحالية وoptIn() / optOut() باش تغيرها.
مرجع الطرق
الفئةMellowtel تعرض الطرق العامة التالية. كلهم متاحين على النسخة اللي أنشأتها بـ new Mellowtel(configurationKey, options?).
دورة الحياة
init(): Promise<void>يبدأ الخدمة إذا كان المستخدم مشترك، أو يرجع بصمت إذا ما كانش. يرمي خطأ غير كي يكون مفتاح التكوين فارغ.requestConsent(window: BrowserWindow, incentive: string): Promise<boolean | undefined>يعرض الحوار المحلي المدمج للموافقة ويحتفظ بالنتيجة. يرجعtrueعند القبول،falseعند الرفض أو الإغلاق،undefinedإذا كانت الموافقة معطاة من قبل.showConsentSettings(window: BrowserWindow): Promise<void>يعرض حوار إدارة الموافقة المدمج. الـ SDK يتعامل مع الانتقالات الداخلية للاشتراك/إلغاء الاشتراك كي المستخدم يبدل اختياره.
optIn(): Promise<void>يعلّم المستخدم كأنه مشترك بدون عرض حوار. استعمل هذي غير بعد جمع الموافقة عبر واجهة المستخدم الخاصة بك.optOut(): Promise<void>يعلّم المستخدم كأنه غير مشترك ويغلق اتصال WebSocket النشط.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 } }يرجع كل الثلاثة عدادات في نداء واحد.
الإيقاف ودورة الحياة
الـ SDK تاع Electron ما يسجلش معالجاتbefore-quit أو will-quit الخاصة به. كي يخرج العملية تاع Electron تاعك، اتصال WebSocket الخلفي يتمزق معاه، وما يحتاجش تنظيف صريح من جهتك.
إذا كنت حابب تفصل Mellowtel في منتصف الجلسة (مثلاً، كي المستخدم يبدل إعداد “إيقاف مؤقت” في التطبيق تاعك)، ناد optOut(). هذي تمسح علم الاشتراك وتغلق الاتصال النشط. باش تعيد الاتصال، ناد optIn() متبوع بـ init().
استمرارية الموافقة
حالة الاشتراك مخزنة في مسار التكوين الافتراضي للمنصة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" أثناء التثبيت
- تحقق أن
.npmrcفي جذر المشروع، بجانبpackage.json. - تأكد أن التوكن ما عندوش مسافات زائدة في البداية أو النهاية.
- امسح ذاكرة التخزين المؤقت لـ npm وأعد المحاولة بتشغيل
npm cache clean --forceمتبوع بـnpm install.
خطأ "Unauthorized" أو 401 أثناء التثبيت
خطأ "Unauthorized" أو 401 أثناء التثبيت
حوار الموافقة ما يظهرش
حوار الموافقة ما يظهرش
- تأكد أنك تنادي
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 تاعنا.