Mama & Baby Pro Ultimate — دليل التثبيت بالعربي
الإصدار 1.0 · 2026-09-26
الرابط المقصود: https://onlinksoft.net/mumbaby/
App Root: public_html/mumbaby
Python المستهدف: 3.11 / CloudLinux Setup Python App / Passenger

اقرئي هذا أولاً
==============
الحزمة برنامج مصدر كامل قابل للتثبيت، وليست حسابات خدمات جاهزة.
فك الضغط ينشئ الملفات؛ تشغيل API يحتاج إنشاء Python App وتثبيت التبعيات
وتعيين مفاتيحك. لا مفاتيح حقيقية ولا مستخدمون حقيقيون ولا كتب طبية مرفقة.
لا يمكن ضمان توافق كل استضافة مشتركة أو زمن أقل من ثانية دون اختبار الخادم.
الكتب وChromaDB تحتاج مساحة وذاكرة وSQLite مناسباً. التطبيق لا ينزل نموذج AI
ضخماً: البحث الاستخراجي يستخدم فهرس Chroma وبصمات كلمات محلية.

1. رفع الحزمة بدون مضاعفة المجلد
===============================
1) افتحي cPanel ← File Manager ← public_html.
2) Upload: ارفعي mama-baby-ultimate.zip داخل public_html.
3) حددي ZIP ← Extract إلى public_html.
4) يجب أن يكون main.py في public_html/mumbaby/main.py، وليس mumbaby/mumbaby.
5) Settings في File Manager ← Show Hidden Files حتى تري .htaccess.
6) الملفات جاهزة ولا تحتاجين إنشاءها يدوياً. للتحقق: users.json وclinics.json
   وبقية JSON موجودة وقيمتها {}. new_refs وchroma_data موجودان.
7) إذا اضطررت لإنشاء مجلد: +Folder ثم اكتبي الاسم. لإنشاء ملف: +File،
   ثم Edit. لا تستبدلي أي JSON بملف فارغ بعد تسجيل المستخدمين.
8) احذفي ZIP من public_html بعد الفك كي لا تنشر نسخة المصدر بالخطأ.

2. إنشاء Python App
==================
1) cPanel ← Software ← Setup Python App ← Create Application.
2) Python version: 3.11، Application mode: Production.
3) Application root: public_html/mumbaby (عادة حقل نسبي إلى حساب cPanel).
4) Application URL: اختاري onlinksoft.net واكتبي mumbaby في خانة المسار.
5) Application startup file: passenger_wsgi.py
6) Application Entry point: application
7) Create، ثم انسخي أمر تفعيل البيئة الافتراضية الذي يعرضه cPanel.
8) افتحي Terminal في cPanel، والصقي ذلك الأمر كما هو. مثال توضيحي فقط:
   source /home/CPANEL_USER/virtualenv/public_html/mumbaby/3.11/bin/activate
   cd /home/CPANEL_USER/public_html/mumbaby
   استبدلي CPANEL_USER باسم حسابك. المسار الذي يولده cPanel هو المرجع الصحيح.
9) نفذي:
   python -m pip install --upgrade pip
   python -m pip install -r requirements.txt
10) إذا لم يتوفر Terminal، استخدمي Run Pip Install واختر requirements.txt،
    ثم اطلبي من دعم الاستضافة تنفيذ setup_config.py أو استخدمي SSH.

لماذا passenger_wsgi.py؟
FastAPI تطبيق ASGI وPassenger يتوقع WSGI؛ الملف يربطهما عبر a2wsgi.
لا تستخدمي main.py كـ WSGI مباشرة، ولا تشغلي uvicorn كعملية خلفية عشوائية
في الاستضافة المشتركة. الخادم المحلي فقط يمكن تشغيله بـ:
python -m uvicorn main:app --host 127.0.0.1 --port 8765
مع PUBLIC_URL مناسب للاختبار؛ عنوان الإنتاج الافتراضي هو onlinksoft.net.

3. إنشاء سر التطبيق وكلمة مرور الإدارة
=====================================
بعد تفعيل البيئة والدخول إلى مجلد التطبيق:
   python setup_config.py
اكتبي كلمة مرور قوية من 12 حرفاً على الأقل، ثم أعيديها.
ينشئ الأمر ملفاً خاصاً خارج public_html:
   /home/CPANEL_USER/.config/mama-baby.env
صلاحية هذا الملف 600. يحتوي APP_SECRET عشوائياً وبصمة كلمة المرور.
لا توجد كلمة مرور افتراضية، ولا ترسلي محتوى الملف لأحد.
File Manager ← Home ← .config ← mama-baby.env ← Edit لإضافة مفاتيح الخدمات.
أبقي قيم الملف بين علامات اقتباس مفردة كما وُلدت.
يمكن وضع المتغيرات في Environment Variables داخل Python App أيضاً،
لكن قيم Python App تتقدم على الملف؛ تأكدي أن Cron يستخدم القيم نفسها.
لا تغيّري APP_SECRET دورياً دون سبب: تغييره يلغي الجلسات والرموز القائمة.

المتغيرات:
APP_SECRET                  يولد تلقائياً
ADMIN_PASSWORD_HASH          يولد تلقائياً (ليس كلمة المرور الخام)
PUBLIC_URL                   https://onlinksoft.net/mumbaby
PAYMENTS_LIVE                0 للاختبار، 1 للإنتاج
ULTRAMSG_INSTANCE            instance12345 مثلاً
ULTRAMSG_TOKEN               من UltraMsg
STRIPE_SECRET_KEY            sk_test_... ثم sk_live_...
STRIPE_PUBLISHABLE_KEY       pk_test_... (محفوظ للإعداد؛ Hosted Checkout لا يحتاجه بالواجهة)
STRIPE_WEBHOOK_SECRET        whsec_...
TCO_MERCHANT_CODE            رمز تاجر Verifone/2Checkout
TCO_BUYLINK_SECRET           Buy-link secret word لتوقيع JWT HS512
TCO_IPN_SECRET               Secret Key الخاص بتوقيع IPN SHA، لا تخلطيه بسر Buy Link
TCO_PRODUCT_CODE            كود منتج العضوية السنوية $1
TCO_CLINIC_PRODUCT_CODE      كود ظهور العيادة لشهر $10
BOOK_DEFAULT_LANG            ar للملفات الموضوعة يدوياً، أو en إذا كلها إنجليزية

4. ربط WhatsApp OTP — UltraMsg
==============================
1) أنشئي حساب UltraMsg وInstance، واربطي WhatsApp المخصص للمنصة حسب تعليماتهم.
2) تأكدي أن Instance حالته متصلة / authorized؛ وإلا قد تتراكم الرسائل.
3) انسخي Instance ID وToken إلى الملف الخاص، ولا تضعيهما داخل HTML.
4) Restart من Setup Python App.
5) افتحي https://onlinksoft.net/mumbaby/ واضغطي دخول.
6) اكتبي رقم جوال حقيقي تملكينه بصيغة +رمز الدولة والرقم، ثم إرسال.
7) يجب أن تصل رسالة 6 أرقام. أدخليها خلال 5 دقائق.
8) تحققي من لوحة الإدارة أن is_verified=true وhas_used_free_trial=true.
9) اخرجي وادخلي مجدداً: يجب ألا يتغير تاريخ التجربة بسبب إعادة التسجيل.

القيود الأمنية:
- التحقق من صيغة ورقم الجوال عبر phonenumbers، ثم إثبات الوصول إلى WhatsApp.
- لا رمز ثابت، ولا وضع OTP تجريبي يتجاوز التحقق في الإنتاج.
- حد إرسال لكل رقم ولكل IP، وفاصل دقيقة؛ خمس محاولات لكل رمز.
- OTP مخزن كبصمة HMAC وليس نصاً، والجلسة Cookie HttpOnly / Secure / SameSite.
- OTP لا يثبت الهوية المدنية ولا يضمن كشف كل الأرقام الافتراضية. حظر أرقام
  VoIP أو التحقق من هوية الشخص يحتاج خدمة مستقلة إذا كان ذلك شرطاً تجارياً.
- لا تحذفي سجل users.json؛ حذف السجل يفقد تاريخ أهلية التجربة.

5. إعداد Stripe ودفع $1
======================
1) افتحي Stripe Dashboard في وضع الاختبار / Sandbox.
2) Developers أو Workbench ← API keys: انسخي pk_test وsk_test.
3) ضعي sk_test في STRIPE_SECRET_KEY، وpk_test في STRIPE_PUBLISHABLE_KEY.
4) Developers / Workbench ← Webhooks ← Add destination / endpoint.
5) الرابط الدقيق:
   https://onlinksoft.net/mumbaby/payment/webhook
6) اختاري الأحداث:
   checkout.session.completed
   checkout.session.async_payment_succeeded
7) احفظي الوجهة ← Reveal signing secret ← انسخي whsec إلى STRIPE_WEBHOOK_SECRET.
8) اتركي PAYMENTS_LIVE=0 وأعيدي تشغيل Python App.
9) سجلي كمستخدمة ← نقاطي ← Stripe $1.
10) في صفحة Stripe التجريبية اكتبي 4242 4242 4242 4242، تاريخاً مستقبلياً
    ورمز CVC من ثلاثة أرقام، وبقية الحقول التي تطلبها صفحة الاختبار.
11) بعد العودة افحصي سجل الدفع. التمديد لا يحصل بمجرد العودة، بل عندما
    تصل رسالة Webhook موقعة وحالتها paid والمبلغ 100 سنت USD.
12) من Stripe أعيدي إرسال الحدث نفسه. لا يجب أن تحصل سنة إضافية ثانية.
13) للعيادات المبلغ 1000 سنت ويُسمح فقط لصاحب العيادة المسجل بشراء التمييز.
14) للإنتاج: فعّلي حسابك وفق بلد تسجيل نشاطك، بدلي sk_test إلى sk_live،
    أنشئي Webhook فعلياً وخذي whsec الخاص به، ثم PAYMENTS_LIVE=1 وRestart.

السنة تمديد 12 شهراً تقويمياً من نهاية أطول استحقاق قائم، أو من الآن إن انتهى.
مدفوعات هذا الإصدار دفعات منفردة، وليست تجديداً تلقائياً ولا تفويض خصم دوري.
الاستردادات والنزاعات تُدار من لوحة المزود؛ لا يسحب هذا الإصدار الاستحقاق
تلقائياً عند الاسترداد. يستطيع المشرف حظر الحساب عند الحاجة بعد المراجعة.

6. إعداد 2Checkout / Verifone ConvertPlus
=========================================
هذه آلية ConvertPlus Buy Link + IPN، وليست بروتوكول INS القديم.
1) افتحي حساب التاجر، Integrations ← Webhooks & API.
2) انسخي Merchant Code، وBuy-link Secret Word، وSecret Key الخاص بـ IPN
   إلى متغيراتها أعلاه؛ قد تسمي بعض واجهات الحساب الأسرار بأسماء مختلفة.
3) أنشئي منتج Catalog للعضوية: $1 USD / شراء مرة واحدة، وآخر للعيادة $10.
4) لا تفعلي تجديداً تلقائياً. انسخي Product Code لكلا المنتجين.
5) فعّلي IPN إلى:
   https://onlinksoft.net/mumbaby/payment/2co_webhook
6) اختاري توقيع SHA-256 أو SHA3-256. MD5/INS غير مدعومين عمداً.
7) فعّلي الحقول: REFNO, REFNOEXT, ORDERSTATUS, CURRENCY, IPN_PID[],
   IPN_PNAME[], IPN_DATE, IPN_TOTALGENERAL, TEST_ORDER، وبقية الحقول القياسية.
8) النظام يرسل order-ext-ref في Buy Link، ويطابقه مع REFNOEXT في IPN.
9) سر Buy Link يوقّع JWT HS512 قصير العمر، ثم تُطلب signature من خدمة
   https://secure.2checkout.com/checkout/api/encrypt/generate/signature
10) في وضع الاختبار يضاف test=1. استخدمي بطاقة اختبار المزود من دليله،
    وليس بالضرورة بطاقة Stripe 4242.
11) بعد COMPLETE وإشعار صحيح والمبلغ المطابق بالضبط يحصل التمديد مرة واحدة.
12) هذا المسار يقارن الإجمالي المتوقع $1/$10؛ اضبطي منتجك وضريبته بحيث
    يطابق الإجمالي هذا المبلغ. أي زيادة ضريبة/عملة مختلفة تُرفض ولا تمنح مدة.
13) أعيدي إرسال IPN نفسه للتأكد من منع التكرار، ثم اختبري حسابك الحي قبل الإطلاق.

لا يمكن اختبار بوابة حقيقية أو تأكيد أهلية التاجر بدون حسابك ومفاتيحك.
روابط Webhook لأي نطاق آخر:
https://yourdomain.com/mumbaby/payment/webhook
https://yourdomain.com/mumbaby/payment/2co_webhook
مع تغيير PUBLIC_URL إلى النطاق الحقيقي وإعادة تشغيل التطبيق.

7. رفع الكتب: الطريقة الأسهل
============================
1) افتحي https://onlinksoft.net/mumbaby/admin.html
2) ادخلي بكلمة مرور الإدارة التي اخترتِها.
3) المكتبة ← عنوان واضح ← لغة الكتاب الصحيحة ← PDF نصي.
4) الحد 25 MB و2000 صفحة لكل كتاب. PDF المصور يحتاج OCR خارجي أولاً.
5) فعّلي الاعتماد فقط بعد مراجعة المرجع طبياً وحقوقياً، ثم «رفع وتعلّم الآن».
6) يظهر تقدم الصفحات 0–100%. «ready» يعني فهرسته؛ «معتمد» يعني السماح به.
7) عند انقطاع worker قد يتوقف تقدم الفهرسة؛ Cron يستأنف الملفات queued/learning.
8) إذا ظهر error، أصلحي الملف/التبعيات ثم «إعادة الفهرسة».
9) الإجابة مقتطفات قابلة للفتح كصورة صفحة المرجع؛ لا يضيف النظام معرفة من ذاكرته.
10) القائمة لا تأتي جاهزة بنصائح علاجية، أغاني، أسماء أو صور طبية: ارفعي مراجع
    مرخصة لكل موضوع. لا يولّد هذا الإصدار فيديوهات أو رسوماً تشريحية جديدة.

بديل File Manager:
ضعي PDF في public_html/mumbaby/new_refs/ ثم شغلي cron_learn.py.
الرفع اليدوي يفهرس الملفات لكنه لا يعتمدها تلقائياً للنشر.
لا تغيري أسماء ملفات البصمات التي ينشئها النظام، ولا تمسحي chroma_data عشوائياً.
روابط WHO في download_links.txt. راجعي حقوق استخدامها التجاري قبل رفعها
إلى الخدمة المدفوعة. لا يفترض البرنامج أن WHO تمنح ترخيص SaaS تجارياً.

محتوى الأيام وحجم الجنين والصور:
الإدارة ← المتجر والنصائح ← محتوى يومي موثق وصور المراجع.
انسخي ID الكتاب من المكتبة وأدخلي صفحة ومقتطفاً حرفياً. حددي نطاق أيام
الحمل/عمر الطفل. يمكن إضافة اسم فاكهة فقط إذا كان مذكوراً في نفس المرجع.
يرفض البرنامج مقتطفاً غير موجود في الصفحة. تعرض البطاقة النص ورابط صورة
الصفحة بما فيها الرسوم والصور. ارفعي مراجع مناسبة ثم أعدّي هذه البطاقات؛
لا تتضمن الحزمة مكتبة فواكه أو خطط تغذية/تمارين جاهزة بلا مرجع.
محتوى البطاقات المحرر يعرض بلغة الكتاب؛ الشات يترجمه عند طلبه بموافقة الترجمة.

8. الأسئلة بلا إجابة والتنبيهات التلقائية — الإضافة المطلوبة
==========================================================
كل سؤال بلا مرجع مناسب يُسجل في unanswered.json مع رقم الهاتف والسؤال واللغة
والوقت والسبب. يظهر في الإدارة ← الأسئلة بلا إجابة، مع بحث برقم أو نص السؤال
وفلتر مفتوح/معالج/الكل. أخطاء خدمة البحث تسجل أيضاً كي لا تضيع حاجة السائلة.
بعد فهرسة كتاب جديد واعتماده، يعاد فحص الأسئلة المفتوحة (حتى 100 في التشغيل).
عند وجود مقتطف مطابق يُحفظ الجواب ومصدره، ويتحول السؤال إلى معالج، وتُنشأ
رسالة واحدة ثابتة المعرف في notifications.json.
- يظهر تنبيه داخل حساب السائلة وفي ملفي، حتى إذا انتهت عضويتها بعد السؤال.
- إذا فعّلت «تنبيهات إجابات الأسئلة السابقة» ترسل الرسالة عبر UltraMsg.
- نص WhatsApp يختصر عند الحاجة بسبب حد الرسالة، والإجابة الكاملة بالحساب.
- يمكن إعادة البحث من الإدارة؛ لا يتكرر تنبيه السؤال المعالج.
- «accepted» يعني أن المزود قبل الإرسال، وليس إثبات قراءة WhatsApp.
- «delivery_unknown» عند فشل اتصال يحتمل معه أن المزود استلم الرسالة:
  لا يعاد إرسالها آلياً حتى لا تتكرر. افحصي سجل UltraMsg؛ الجواب موجود داخل
  الحساب. لا يوجد ادعاء ضمان تسليم الرسائل مرة واحدة عبر شبكة خارجية.
- علامة «تمت القراءة» تخص حساب المنصة، وليس إيصال قراءة WhatsApp.

9. تشغيل Cron
=============
cPanel ← Advanced ← Cron Jobs. استخدمي المسار الفعلي للبيئة الافتراضية.
لا تكتبي python وحده لأن Cron قد يستدعي إصدار النظام الخطأ.
مثال (استبدلي CPANEL_USER وكل مسار بالمسار الظاهر في حسابك):
كل 15 دقيقة:
*/15 * * * * /home/CPANEL_USER/virtualenv/public_html/mumbaby/3.11/bin/python /home/CPANEL_USER/public_html/mumbaby/cron_learn.py >> /home/CPANEL_USER/mama-learn.log 2>&1
كل ساعة:
0 * * * * /home/CPANEL_USER/virtualenv/public_html/mumbaby/3.11/bin/python /home/CPANEL_USER/public_html/mumbaby/cron_notify.py >> /home/CPANEL_USER/mama-notify.log 2>&1
السجلات خارج public_html. دوّريها/احذفي القديم منها دورياً.
Cron يقرأ ~/.config/mama-baby.env نفسه. لا تضعي الأسرار في سطر Cron.
التذكيرات يوم الموعد حسب UTC، وليست لحظية حسب توقيت كل بلد.
يوجد قفل لمنع تداخل تشغيل كل مهمة مع نفسها.

10. إدارة الاشتراكات والنقاط والإحالات
====================================
الاشتراكات: بحث ← منح ← تاريخ محدد مثل 2027-12-31 أو عدد أيام مثل 90.
التاريخ يشمل اليوم المختار حتى بداية اليوم التالي UTC. لا يقصر اشتراكاً
مدفوعاً أطول. عدد الأيام يضاف بعد أطول استحقاق قائم. الحظر يلغي الجلسات.
التجربة الأولى شهر تقويمي؛ الشهر المكتسب بالنقاط شهر تقويمي أيضاً.
تفسير النقاط المطبق: سؤال فعلي في الشات = 10 نقاط لأول استخدام يومي؛
كل 10 أيام متتالية +100 إضافية. لا نقاط وهمية على أيام مجانية بلا نشاط.
10 أيام متتالية تمنح 200 نقطة إجمالية = شهرين. هذه مكافآت المستخدم المطلوبة؛
قد تجعل الاشتراك المدفوع غير ضروري للنشيطات، فراجعي اقتصاد المشروع بنفسك.
الإحالة تُصرف بعد توثيق رقم جديد فقط، مرة واحدة لكل مدعوة؛ تغيير الرابط
بعد إنشاء الحساب لا يصرف مكافأة ثانية. تعدد الأرقام للشخص نفسه لا يُكشف هنا.

11. وظائف الواجهة الإضافية
=========================
- ملفي: تواريخ، موافقات، سجلات، حذف سجل، تقرير PDF وكتاب رحلة PDF.
- التطعيمات والمواعيد: مدخلات المستخدمة حسب طبيبتها، وليست وصفة تلقائية.
- العيادات: الإدارة تسجل عيادة ومالكاً موثقاً، التقييم يدوي معلن، والتميز مدفوع.
- المجتمع: اسم مستعار، مراجعة إدارية قبل النشر؛ ليس مجهول الهوية عن الإدارة.
- Affiliate: الإدارة تضيف روابط HTTPS، الزبونة تدفع في المتجر الخارجي.
- SOS: موقع بموافقة إلى أقرب عيادة مفعلة من القائمة؛ لا استدعاء إسعاف حقيقي.
- PWA: تثبيت، أيقونات، نمط ليلي. يخزن ملفات شكلية عامة فقط، ولا يخزن بيانات
  صحية في Service Worker. الشات والبيانات الخاصة لا تعمل بلا اتصال.
- الإملاء: SpeechRecognition في المتصفحات المدعومة بعد الموافقة.
- اللغات: العربية افتراضياً، قاموس إنجليزي أساسي، ترجمة تلقائية للعناصر
  المعلمة في الواجهة بعد الموافقة. ليست كل النصوص التشغيلية مترجمة يدوياً.
- all languages تعني قائمة خدمة الترجمة المتاحة، وليست ضماناً لكل لغة أو لهجة.

12. فحص التثبيت وحماية الملفات — نفذيه قبل استقبال مستخدمات
===========================================================
داخل البيئة:
   python check_install.py
ثم Restart من cPanel، وافتحي:
   https://onlinksoft.net/mumbaby/api/health
ينبغي ظهور ok=true وconfigured=true بعد ضبط السر.
افحصي من متصفح غير مسجل:
   https://onlinksoft.net/mumbaby/users.json
   https://onlinksoft.net/mumbaby/payments.json
   https://onlinksoft.net/mumbaby/main.py
   https://onlinksoft.net/mumbaby/new_refs/test.pdf
   https://onlinksoft.net/mumbaby/chroma_data/chroma.sqlite3
يجب أن تكون كلها 403/404، ولا تظهر أي بيانات أو مصدر.
إذا كانت تظهر، أوقفي الاستخدام وأصلحي AllowOverride/.htaccess مع الدعم.
لا تحذفي .htaccess عند إعداد Passenger؛ اجمعي حماية الملفات وإعدادات cPanel.
صلاحية المجلدات عادة 700/750 حسب إعداد المضيف والمالك؛ ملفات البيانات 600.
لا تستخدمي chmod 777. السيرفر المحلي يرفض هذه المسارات أيضاً.
ملف التكوين خارج public_html، والـCookie يحتاج HTTPS في الإنتاج.

13. اختبارات المطور والقبول
==========================
داخل بيئة منفصلة للاختبارات أو بعد تثبيت requirements-dev.txt:
   python -m pip install -r requirements-dev.txt
   python -m pytest tests -q
الاختبارات تنشئ بيانات مؤقتة منفصلة، ولا ترسل WhatsApp ولا تسحب أموالاً.
راجعي TEST_REPORT.txt لنتائج الاختبار الفعلي وحدوده.
قبولك النهائي على الخادم:
- OTP حقيقي يصل لرقمك ويمنع إعادة التجربة.
- حسابان لا يرى أحدهما سجلات أو تنبيهات الآخر.
- سؤال بلا مصدر يظهر للإدارة مع رقم الهاتف.
- رفع PDF تملكينه، ثم اعتماد المرجع، يظهر تنبيه جواب داخل الحساب.
- وافقي على WhatsApp وتحققي من وصول الجواب الفعلي.
- دفع تجريبي لكل مزود، إعادة إرسال Webhook، لا تكرار التمديد.
- تجربة مقاسات الهاتف واللوحي والكمبيوتر، وتنزيل PDF عربي.
- التحقق من تكوين Cron وفتح روابط البيانات المحمية للتأكد من حجبها.

14. المشاكل الشائعة
====================
500 أو صفحة Passenger:
راجعي Passenger log، مسار Python واسم application، ثم check_install.py.
SQLite قديم:
Chroma يحتاج SQLite >=3.35؛ اطلبي Python بSQLite أحدث من المضيف. لا يوجد
تجاوز آمن لهذا الشرط بمجرد تغيير الواجهة. خادم لا يتيح ذلك غير متوافق.
نفاد ذاكرة أثناء pip أو التعلم:
اطلبي رفع حد الموارد أو استضافة مناسبة؛ ارفعي كتباً أصغر. لا تحمل المكتبة
نموذج embeddings خارجي، لكنها تحتاج مكتبات Chroma الثنائية المتوافقة.
Forbidden عند طلب API:
PUBLIC_URL يجب أن يطابق الأصل https://onlinksoft.net والمسار /mumbaby
فعلياً. لا تفتحي HTML عبر file://. طلبات التعديل تحتاج Origin ورأس X-Mama-Request.
OTP لا يصل:
تحققي من اتصال Instance، الرصيد، الرقم الدولي، وسجل UltraMsg. الرسالة قد
تكون queued لدى المزود. لا تكرري الإرسال سريعاً بسبب حدود الحماية.
لا نتائج بحث:
الكتاب يجب أن يكون ready ومعتمداً وباللغة الصحيحة، ونصه قابلاً للاستخراج.
فعّلي موافقة الترجمة عند اختلاف لغة السؤال والكتاب. OCR غير مدمج.
الواجهة تعمل لكن الأيقونات لا:
تحققي من وجود assets/fontawesome.css وassets/webfonts. Font Awesome 6 مرفق محلياً لتسريع التحميل، بينما Tailwind CDN مضاف حسب الطلب مع CSS محلي يعمل بدونه.
صفحة HTML سريعة لكن البحث بطيء:
الفهرسة والترجمة عمليات مختلفة عن تحميل الصفحة؛ لا ضمان أقل من ثانية لها.

15. النسخ الاحتياطية وحدود التشغيل
==================================
التخزين JSON محمي بقفل Linux وكتابة ذرية مع journal لاستعادة معاملة منقطعة.
استخدمي خادماً واحداً وقرصاً محلياً؛ ليس نظاماً متعدد الخوادم أو مناسباً
لملايين المستخدمين كما هو. عند النمو انقلي التخزين إلى قاعدة بيانات معاملات
ومهام خلفية مستقلة، مع الحفاظ على دفتر التجربة الأولى وسجلات الدفع.
خذي نسخة احتياطية متسقة أثناء إيقاف الكتابة: JSON + new_refs + chroma_data
وملف التكوين الخاص. احفظيها خارج public_html وبصلاحيات مقيدة.
لا تسترجعي users.json من تاريخ قديم دون مراجعة الدفعات والتجارب الجديدة.
لا تتضمن الحزمة ضمان ربح أو اختبار اختراق مستقل أو اعتماداً طبياً.
يجب على المشغّل مراجعة حقوق المحتوى وسياسة الخصوصية وتوفير وسيلة تواصل
ومراجعة طبية للمراجع قبل إطلاق خدمة صحية مدفوعة.

مصادر تقنية راجعت أثناء البناء:
https://docs.cpanel.net/knowledge-base/web-services/how-to-install-a-python-wsgi-application/
https://support.cpanel.net/hc/en-us/articles/360057849753-How-to-register-an-application-with-Python-Selector
https://docs.stripe.com/checkout/fulfillment
https://docs.stripe.com/api/checkout/sessions/create
https://docs.ultramsg.com/api/post/messages/chat
https://github.com/2Checkout/2checkout-php-sdk
https://www.acog.org/womens-health/faqs/fertility-awareness-based-methods-of-family-planning
