المتطلبات الأساسية
- حساب Mellowtel ومفتاح التكوين (جيب تاعك من لوحة التحكم).
- تطبيق Electron عنده وصول للعملية الرئيسية.
التثبيت
1. إعداد توثيق npm
دير ملف.npmrc في الدليل الجذري تاع المشروع تاعك باش توجه npm إلى سجل Mellowtel GitHub Packages وتوثيق التثبيت:
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). يعرض حوار أصلي مع أزرار الاشتراك / إلغاء الاشتراك اللي تتماشى مع الحالة الحالية تاع المستخدم، ويدير الانتقالات الداخلية للاشتراك / إلغاء الاشتراك كي المستخدم يغير اختياره. اربطها بعنصر قائمة أو زر إعدادات في التطبيق تاعك باش المستخدمين يقدرو يراجعو اختيارهم.
إذا كنت تفضل تبني شاشة إعدادات خاصة بك، ناد 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.
حوار الموافقة ما يظهرش
حوار الموافقة ما يظهرش
- تأكد أنك تنادي
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.