توثيق تطبيق سائق التوصيل لووكومرس
دليل خطوة بخطوة للجميع دون برمجة: أضف السائقين، وحدّد القواعد، وأسند الطلبات، وفعّل الإشعارات الفورية، وابنِ تطبيق أندرويد الخاص بك أونلاين، مع فصول للمطورين.
يشرح الإصدار 1.1.0حُدّث في 22 أكتوبر 2026
بداية سريعة
ما الذي اشتريته: ثلاثة أجزاء تعمل معًا
| الجزء | ما هو | من يحتاج إليه |
|---|---|---|
1. الإضافةdelivery-driver-app-for-woocommerce-plugin.zip | تُثبَّت على متجر WordPress الخاص بك. منها تسند الطلبات، وتختار القواعد، وتضبط الرسائل النصية للعملاء والإشعارات الفورية، وتبني التطبيق، كل ذلك في مكان واحد. | الجميع |
| 2. أداة بناء التطبيق أونلاين (App Builder) (تبويب داخل الإضافة) | تنشئ تطبيق أندرويد خاصًا بك (باسمك وأيقونتك وألوانك) على خوادمنا. تملأ نموذجًا قصيرًا وتضغط زرًا واحدًا. | معظم المستخدمين |
3. الشيفرة المصدرية للتطبيقflutter-app-source.zip | الشيفرة الكاملة لتطبيق السائق (Flutter، لأندرويد وآيفون). استخدمها إذا أردت تعديل التطبيق أو بناءه بنفسك. | المطورون |
آلية التوصيل
| الخطوة | من ينفّذها | ماذا يحدث |
|---|---|---|
| Assigned (مُسنَد) | أنت (أو السائق، من المجموعة المفتوحة) | يصل السائق إشعار فوري «New order assigned». |
| Accepted (مقبول) | السائق ينقر Accept Route | تعرف أن السائق قبل المهمة. |
| Picked up (تم الاستلام) | السائق ينقر Mark as Picked Up | يمكن أن يصل العميل رسالة نصية «في الطريق». |
| Completed (مكتمل) | السائق ينقر Complete Delivery (ويلتقط صورة إذا اشترطتها) | تصبح حالة طلب WooCommerce Completed، وتُدفع عمولة السائق، ويصل العميل رسالة «تم التسليم». |
خيارات إضافية يمكنك تشغيلها أو إيقافها: يستطيع السائقون الاستحواذ على الطلبات التي لم يأخذها أحد («المجموعة المفتوحة»)، ويستطيعون رفض الطلب، ويمكن جعل صورة التسليم إلزامية.
المتطلبات
| ما تحتاج إليه | السبب |
|---|---|
| موقع WordPress مع WooCommerce 8.0 أو أحدث، وPHP 7.4+ | تقرأ الإضافة طلبات WooCommerce وتحدّثها. |
| HTTPS (قفل في المتصفح) وروابط ثابتة «جميلة» (pretty permalinks) | يتصل الهاتف بمتجرك عبر https://yourstore.com/wp-json/. |
| مشروع Firebase مجاني (حساب Google) | مطلوب للإشعارات الفورية. يعرض الفصل 7 كل نقرة. |
| اختياري: إضافة TeraWallet المجانية | تدفع عمولة السائق في محفظة يراها السائق داخل التطبيق. |
| اختياري: حساب لدى مزوّد رسائل SMS (Twilio أو Unifonic أو 2Factor أو OTPless) | يرسل رسائل «في الطريق» و«تم التسليم» إلى العملاء. |
| رمز الشراء الخاص بك | تحتاج إليه أداة بناء التطبيق أونلاين (الفصل 12). |
التثبيت
- فك ضغط الحزمة التي نزّلتها. ستجد بداخلها الملفين
delivery-driver-app-for-woocommerce-plugin.zipوflutter-app-source.zip. لا تفك ضغط هذين الملفين. - في WordPress افتح Plugins → Add New → Upload Plugin، واختر
delivery-driver-app-for-woocommerce-plugin.zip، ثم انقر Install Now ثم Activate. - افتح Settings → Delivery App. إذا ظهرت الصفحة بخمسة تبويبات (Operations وMobile App وSMS & WhatsApp وPush Notifications وApp Builder) فالإضافة جاهزة.
- تحقق من Settings → Permalinks: أي خيار عدا «Plain» مناسب. انقر Save Changes مرة واحدة إذا تعذّر على التطبيق الوصول إلى متجرك.
إنشاء السائقين
- افتح Users → Add New.
- املأ اسم المستخدم (مثل
maria) والبريد الإلكتروني والاسم وكلمة مرور قوية. - اضبط Role على Delivery Boy وانقر Add User.
- سلّم اسم المستخدم وكلمة المرور إلى السائق. هذا كل شيء.
الإعدادات تبويبًا تبويبًا
Operations: قواعد عملك في التوصيل
| الإعداد | وظيفته |
|---|---|
| Delivery History (Days) | عدد أيام عمليات التوصيل المنتهية التي يستطيع السائق رؤيتها. 1 = اليوم فقط، 7 = الأسبوع الأخير. |
| Driver Commission per Delivery | مبلغ يُدفع إلى TeraWallet الخاصة بالسائق مرة واحدة عند اكتمال الطلب. 0 = لا يُدفع شيء. |
| Allow Self-Assignment (Open Pool) | يضيف إلى التطبيق تبويب Available فيه الطلبات قيد المعالجة التي لم يأخذها أحد. ينقر السائق Claim Order ليأخذ أحدها. |
| Allow Order Rejection | يعرض زر Reject this order على الطلبات المسندة حديثًا. يعود الطلب المرفوض إلى حالة «غير مُسنَد» (ولن يُعرض على السائق نفسه مرة أخرى). |
| Require Photo Proof | يجب أن يلتقط السائق صورة قبل أن يمكن إكمال الطلب. |
| Dispatch Hotline Phone Number | يظهر في التطبيق تحت Contact Dispatch؛ ينقر السائق للاتصال بك. |
Mobile App
| الإعداد | وظيفته |
|---|---|
| Force App Update | أدنى إصدار مسموح به للتطبيق، مثل 1.2.0. تعرض التطبيقات الأقدم شاشة «Update Required» ولا يمكن استخدامها. |
| App Update Link | الوجهة التي يفتحها زر «Update Now»: صفحة تطبيقك في Google Play أو App Store. |
| Privacy Policy / Terms links | تُفتح من شاشة الملف الشخصي للسائق. |
SMS & WhatsApp
فعّل Enable Automated Texts، واختر المزوّد، والصق المفتاح (والسر إن كان لدى مزوّدك سر)، واكتب اسم المرسِل أو رقمه، وعدّل الرسالتين. يمكنك استخدام {order_id} و{customer_name} و{total} في الرسائل. تُرسل رسالة «في الطريق» عندما ينقر السائق Mark as Picked Up، وتُرسل رسالة «تم التسليم» عند اكتمال الطلب.
Push Notifications
هنا يوضع مفتاح Firebase الخاص بك (الفصل 7).
الإشعارات الفورية (Firebase)
أ. أنشئ مشروع Firebase
- انتقل إلى console.firebase.google.com وسجّل الدخول بحساب Google.
- انقر Add project، واكتب اسمًا (مثل «Acme Drivers»)، وأكمل المعالج. يمكنك إيقاف Google Analytics.
ب. ملف التطبيق: google-services.json (أندرويد)
- في مشروعك انقر أيقونة Android («Add app»).
- Android package name: اكتب الاسم الفريد لتطبيقك، مثل
com.acme.drivers. دوّنه: يجب أن تستخدم الاسم نفسه تمامًا في App Builder (الفصل 12). - انقر Register app ثم Download google-services.json. احتفظ بهذا الملف للفصل 12 أو 13. يمكنك تخطي شاشات Firebase المتبقية.
ج. ملف المتجر: مفتاح حساب الخدمة
- في Firebase انقر أيقونة الترس ← Project settings ← تبويب Service accounts.
- انقر Generate new private key وأكّد. سيُنزَّل ملف
.json. - افتح هذا الملف في محرر نصوص، وحدّد كل محتواه وانسخه.
- في WordPress افتح Settings → Delivery App → Push Notifications، والصق المحتوى في الحقل، وانقر Save Settings.
د. للآيفون فقط
للآيفون أضف أيضًا تطبيق iOS في Firebase (باستخدام معرّف الحزمة bundle ID)، ونزّل GoogleService-Info.plist، وارفع مفتاح APNs من Apple ضمن Project settings → Cloud Messaging. التفاصيل في الفصل 13.
جرّبه
سجّل الدخول إلى التطبيق على هاتف (الفصل 9)، ثم أسند إلى ذلك السائق طلبًا (الفصل 8). يجب أن يرنّ الهاتف خلال ثوانٍ. تقول ملاحظات الطلب في شاشة الطلب «Push notification sent to driver…» أو تعرض الخطأ الدقيق الصادر من Google إذا حدث خلل.
إسناد طلب إلى سائق
- افتح WooCommerce → Orders وانقر طلبًا حالته Processing.
- في Assign Delivery Boy افتح القائمة واختر السائق.
- يعرض سطر الحالة «Assigned» ويصل السائق إشعار فوري.
يمكنك تغيير السائق ما دام التوصيل لم ينتهِ. يبدأ السائق الجديد من جديد عند «Assigned». اختيار السطر الفارغ يزيل السائق.
ما تراه في الطلب بعد ذلك
| العنصر | المعنى |
|---|---|
| Current Status | Assigned أو Accepted أو Picked up أو Completed. |
| Track Driver on Map | يفتح Google Maps عند آخر موقع للسائق، مع وقت آخر تحديث. |
| Proof of Delivery | الصورة (والتوقيع) التي رفعها السائق. |
| ملاحظات الطلب | تُكتب كل خطوة في ملاحظات الطلب، مثل «Order assigned to Ahmed Khan». |
دليل السائق (سلّمه لسائقيك)
التثبيت وتسجيل الدخول
- ثبّت تطبيقك (ملف APK من رسالة App Builder الإلكترونية، أو من Google Play).
- افتحه، واسمح بـالإشعارات والموقع عند الطلب، وسجّل الدخول باسم المستخدم وكلمة المرور اللذين أنشأتهما.
- تفتح لوحة التحكم. يبقى السائق مسجّلًا للدخول حتى ينقر Logout أو تغيّر كلمة مروره.
لوحة التحكم
| التبويب | المحتوى |
|---|---|
| Available | طلبات لم يأخذها أحد بعد. انقر أحدها ثم Claim Order. |
| Assigned | الطلبات الجديدة لهذا السائق. |
| Accepted | الطلبات التي قبلها السائق أو استلمها. |
| Completed | توصيلات اليوم (أو آخر الأيام التي اخترتها في Operations). |
تنفيذ توصيل
- انقر الطلب. يتصل Call بالعميل، ويفتح Navigate العنوان في تطبيق الخرائط.
- انقر Accept Route (أو Reject this order إذا سمحت بذلك).
- عند المتجر انقر Mark as Picked Up. يمكن الآن أن يصل العميل رسالة «في الطريق».
- عند الباب انقر Complete Delivery. إذا لم يكن العميل قد دفع بعد (الدفع عند الاستلام) يعرض الزر Collect Cash & Complete. وإذا فعّلت إثبات الصورة تُفتح الكاميرا: التقط صورة للطرد عند الباب فيكتمل التوصيل.
الأرباح والملف الشخصي
تعرض شاشة الملف الشخصي (أيقونة الشخص أعلى اليمين) Total Earnings من TeraWallet، ورقم هاتف الإرسال (dispatch)، وسجل التوصيل، والخصوصية والشروط، وإصدار التطبيق، وLogout.
عمولة السائق والأرباح
حدّد مبلغًا في Operations → Driver Commission per Delivery. عند اكتمال التوصيل تضيف الإضافة هذا المبلغ إلى رصيد TeraWallet الخاص بالسائق. يُدفع مرة واحدة لكل طلب، حتى لو عُدّل الطلب لاحقًا. تعرض ملاحظات الطلب «Credited … to driver». ويرى السائق الرصيد باسم Total Earnings في التطبيق.
ثبّت إضافة TeraWallet المجانية (محفظة WooCommerce) وفعّلها لهذا الغرض. بدونها تعمل عمليات التوصيل، لكن ملاحظة الطلب تقول «Commission not paid: TeraWallet is not active» ويعرض التطبيق 0.00. لصرف مستحقات سائقيك استخدم شاشات TeraWallet نفسها (قائمة Wallet ← تعديل الرصيد أو السحب).
رسائل العملاء
فعّل Settings → Delivery App → SMS & WhatsApp → Enable Automated Texts. يُستخدم رقم هاتف الفوترة للعميل، لذا اجعله حقلًا إلزاميًا في صفحة الدفع واطلب إدخال رمز الدولة.
| المزوّد | مناسب لـ | المفتاح / السر |
|---|---|---|
| Twilio | رسائل SMS وWhatsApp حول العالم | Account SID / Auth Token؛ المرسِل = رقم Twilio الخاص بك (لـ WhatsApp: whatsapp:+1…) |
| Unifonic | السعودية والإمارات والخليج | AppSid؛ المرسِل = اسم مرسِل معتمد |
| 2Factor | رسائل SMS للمعاملات في الهند | مفتاح API؛ معرّف المرسِل (sender id) |
| OTPless | رسائل WhatsApp | Client ID / Client Secret |
بناء تطبيقك الخاص أونلاين (دون برمجة)
قبل أن تبدأ
- رمز الشراء الخاص بك.
- أيقونة التطبيق (PNG مربعة، 1024×1024)، وشعار، وصورة شاشة البداية (splash).
- ملف
google-services.jsonمن الفصل 7، المُنشأ لاسم الحزمة (package name) الذي ستكتبه أدناه.
خطوة بخطوة
- افتح Settings → Delivery App → App Builder.
- Step 1. تحقق من عنوان موقعك (https، دون شرطة مائلة في النهاية)، والصق رمز الشراء، وانقر Connect & load my app. تظهر علامة «Connected» الخضراء. يُخزَّن رمزك على خادمك ولا يظهر مرة أخرى.
- Step 2. اكتب App name (يظهر تحت الأيقونة على الهاتف) وPackage name (الاسم نفسه الذي أعطيته لـ Firebase، مثل
com.acme.drivers) وبريدك الإلكتروني. نرسل رابط التنزيل إلى هذا البريد. - Step 3. اختر صور الأيقونة والشعار وشاشة البداية (تُرفع بمجرد اختيارها)، واختر لون شاشة البداية، وارفع
google-services.json. - Step 4. اختر APK (للتثبيت مباشرة على هاتف وتجربته) أو App Bundle (للرفع إلى Google Play). انقر Save details ثم Start Android build.
- انتظر رسالة البريد الإلكتروني (عادةً بضع دقائق؛ تُصفّ عمليات البناء في طابور واحدة تلو الأخرى). افتح الرابط على الهاتف لتنزيل ملف APK وتثبيته.
معلومات مفيدة
- تبني الأداة تطبيقات أندرويد. للآيفون استخدم الشيفرة المصدرية (الفصل 13).
- يمكن لكل رمز شراء بناء تطبيق واحد. لتغيير الاسم أو الأيقونة أو الشاشات لاحقًا، احفظ النموذج مرة أخرى وانقر Build مرة أخرى.
- المُرسَل إلى خادم البناء: عنوان موقعك، ورمز الشراء، واسم التطبيق، واسم الحزمة، وبريدك الإلكتروني وهاتفك، ولون شاشة البداية، وصورك الثلاث، وملف Firebase. لا حاجة إلى كلمات مرور المتجر ولا إلى مفاتيح WooCommerce.
- لا يستطيع استخدام هذا التبويب إلا المديرون، وكل طلب محمي برمز أمان.
لتثبيت APK على هاتف: افتح الرابط في متصفح الهاتف، واسمح بـ«التثبيت من هذا المصدر» إذا طلب أندرويد ذلك، ثم افتح التطبيق. سجّل الدخول بحساب سائق من الفصل 5.
للمطورين: بناء التطبيق من الشيفرة المصدرية
flutter-app-source.zip: Flutter (Dart)، وDio للاتصال بالشبكة، وFirebase Messaging، وGeolocator، وSecure Storage.المتطلبات
- Flutter 3.41 أو أحدث (يجب أن يكون
flutter doctorأخضر)، وAndroid Studio لأندرويد، وXcode وCocoaPods للآيفون.
1. افتح المشروع ووجّهه إلى متجرك
unzip flutter-app-source.zip -d driver_app && cd driver_app flutter pub get # run on a connected phone or emulator flutter run --dart-define=API_DOMAIN=https://yourstore.com
أو غيّر القيمة الافتراضية بشكل دائم في lib/core/constants/app_config.dart:
class ApiConstants {
static const String domain = String.fromEnvironment(
'API_DOMAIN',
defaultValue: 'https://yourstore.com', // <- your store, no slash at the end
);
...
}2. أضف ملفات Firebase
- أندرويد:
android/app/google-services.json(يعمل إضافة Gradle تلقائيًا عند وجود الملف). - آيفون:
ios/Runner/GoogleService-Info.plist، ثم افتحios/Runner.xcworkspaceفي Xcode واسحبه إلى مجموعة Runner إذا ظهر باللون الأحمر.
3. الاسم والحزمة والأيقونات
# unique app id (must match Firebase) dart run change_app_package_name:main com.acme.drivers # replace assets/images/icon.png (1024x1024) and assets/images/splash.png, then: dart run flutter_launcher_icons dart run flutter_native_splash:create
اسم التطبيق الظاهر على الهاتف موجود في android/app/src/main/AndroidManifest.xml (android:label) وفي ios/Runner/Info.plist (CFBundleDisplayName). وألوان العلامة التجارية في lib/core/constants/app_colors.dart.
4. التوقيع والبناء (أندرويد)
# create a signing key once and keep it safe keytool -genkey -v -keystore ~/acme-drivers.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload # android/key.properties storeFile=/Users/you/acme-drivers.jks storePassword=... keyAlias=upload keyPassword=...
في android/app/build.gradle.kts اقرأ هذه القيم داخل كتلة signingConfigs { create("release") { … } } واستخدمها في buildTypes.release بدلًا من مفتاح التصحيح (debug) (في الملف تعليق يوضح الموضع). ثم:
flutter build apk --release --dart-define=API_DOMAIN=https://yourstore.com # APK to test flutter build appbundle --release --dart-define=API_DOMAIN=https://yourstore.com # AAB for Google Play
5. آيفون
cd ios && pod install --repo-update && cd .. flutter build ipa --release --dart-define=API_DOMAIN=https://yourstore.com
في Xcode اختر Team الخاص بك، وعيّن Bundle Identifier فريدًا (نفسه المستخدم في Firebase)، وأبقِ إمكانية Push Notifications. وارفع مفتاح APNs في Firebase لتعمل الإشعارات الفورية.
أين توجد الأشياء
| المجلد | المحتوى |
|---|---|
lib/core/network/dio_client.dart | عميل الشبكة؛ يضيف رمز تسجيل الدخول إلى كل طلب ويسجّل خروج السائق عندما يقول الخادم إن تسجيل الدخول انتهى. |
lib/features/auth | تسجيل الدخول وشاشة البداية والجلسة. |
lib/features/orders | لوحة التحكم وقائمة الطلبات وتفاصيل الطلب وإثبات الصورة والسجل. |
lib/features/profile | الأرباح والتواصل والروابط القانونية وتسجيل الخروج. |
lib/core/services | مشاركة الموقع وإعدادات المتجر والتخزين الآمن. |
default_files/ | قوالب تستخدمها أداة البناء أونلاين. تجاهلها. |
للمطورين: واجهة REST API
العنوان الأساسي: https://yourstore.com/wp-json/taqnix/v1. كل شيء عدا /login و/settings يحتاج إلى الرمز (token) الذي تحصل عليه من تسجيل الدخول، ويُرسل في الترويسة X-Driver-Token (ويعمل Authorization: Bearer … أيضًا). مدة صلاحية الرموز 90 يومًا، ويمكن تسجيل دخول السائق على ما يصل إلى 5 هواتف، و/logout ينهي واحدًا منها.
| الطريقة والمسار | وظيفته |
|---|---|
POST /login | username وpassword ← boy_id وtoken والاسم والبريد الإلكتروني. الرمز 429 بعد كلمات مرور خاطئة كثيرة. |
POST /logout | ينهي هذا الرمز ويوقف الإشعارات الفورية إلى هذا الهاتف. |
GET /settings | القواعد العامة: الحد الأدنى للإصدار، والرفض، وإثبات الصورة، والمجموعة المفتوحة، وهاتف الإرسال، وروابط الشروط والتحديث. |
GET /orders | الطلبات النشطة للسائق (+ المجموعة المفتوحة عند تفعيلها). |
GET /history | الطلبات المكتملة للسائق خلال عدد الأيام المختار. |
POST /orders/{id}/status | status = assigned (الاستحواذ من المجموعة) أو accepted أو picked_up أو completed. الخطوة التالية فقط مسموحة؛ وإلا يُرجَع 409. |
POST /orders/{id}/reject | reason اختياري. فقط عندما يكون الرفض مفعّلًا وما زال الطلب «assigned». |
POST /orders/{id}/pod | رفع متعدد الأجزاء (Multipart): pod_photo (JPG/PNG/WebP)، وpod_signature اختياري. يُكمل الطلب. |
POST /location | latitude وlongitude. |
POST /update-fcm | fcm_token الخاص بالهاتف. |
GET /wallet | الرصيد من TeraWallet (balance_raw وbalance_formatted). |
جرّبه
# 1. log in
curl -s -X POST https://yourstore.com/wp-json/taqnix/v1/login \
-H 'Content-Type: application/json' \
-d '{"username":"maria","password":"your-password"}'
# -> {"success":true,"data":{"boy_id":7,"token":"7.3f9c…","display_name":"Maria Lopez",...}}
# 2. list my orders
curl -s https://yourstore.com/wp-json/taqnix/v1/orders -H 'X-Driver-Token: 7.3f9c…'
# 3. accept an order
curl -s -X POST https://yourstore.com/wp-json/taqnix/v1/orders/123/status \
-H 'X-Driver-Token: 7.3f9c…' -H 'Content-Type: application/json' -d '{"status":"accepted"}'إسناد طلب من شيفرتك الخاصة
// PHP, inside WordPress
$order = wc_get_order( 123 );
$result = TDB_Flow::assign( $order, $driver_user_id ); // sends the push message too
if ( is_wp_error( $result ) ) {
error_log( $result->get_error_message() );
}بيانات الطلب التي يمكنك قراءتها
| مفتاح البيانات الوصفية (Meta key) | القيمة |
|---|---|
_assigned_delivery_boy_id | معرّف مستخدم السائق. |
_delivery_status | assigned أو accepted أو picked_up أو completed. |
_tdb_pod_photo_id | معرّف الوسائط لصورة التسليم. |
_tdb_commission_paid | العمولة المدفوعة لهذا الطلب (فارغ = لم تُدفع). |
الأمان والخصوصية
- كل طلب يحتاج إلى رمز تسجيل دخول. بدونه ترد الواجهة بالرمز «401». يُؤخذ معرّف السائق من الرمز وليس من الطلب أبدًا، فلا يستطيع سائق قراءة طلبات سائق آخر أو محفظته أو موقعه، ولا تغييرها.
- الرموز عشوائية وتُخزَّن كتجزئة (hash) أحادية الاتجاه. تسجيل الخروج أو حذف المستخدم أو إزالة الدور ينهي الوصول فورًا.
- ترتيب الخطوات مفروض على الخادم، وتُدفع العمولة مرة واحدة لكل طلب، ويجب أن تكون الملفات المرفوعة صور JPG أو PNG أو WebP حقيقية.
- محاولات تسجيل الدخول محدودة (5 كلمات مرور خاطئة، ثم 15 دقيقة).
- يتطلب تبويب App Builder وكل إجراء إداري صلاحية مدير ورمز أمان؛ ولا شيء متاح للزوار.
- البيانات المخزَّنة: آخر 100 موقع للسائق، ورمز الإشعارات الفورية، ورموز تسجيل الدخول (بيانات المستخدم الوصفية user meta)، وصور التسليم (مكتبة الوسائط)، وملاحظات الطلب. اطلب موافقة سائقيك على مشاركة الموقع واذكر ذلك في سياسة الخصوصية الخاصة بك.
حل المشكلات
| المشكلة | ما العمل |
|---|---|
| يقول التطبيق «Cannot reach the server» | تحقق من عنوان المتجر في التطبيق (API_DOMAIN) ومن HTTPS، وافتح https://yourstore.com/wp-json/taqnix/v1/settings في المتصفح: يجب أن ترى نصًا يبدأ بـ {"success":true. وإلا فأعد حفظ Settings → Permalinks. |
| «Access denied» عند تسجيل الدخول | يجب أن يكون دور المستخدم Delivery Boy (وليس Customer أو Subscriber). |
| «Too many failed attempts» | انتظر 15 دقيقة. هذا يحمي الحساب من تخمين كلمة المرور. |
| يعرض التطبيق فجأة شاشة تسجيل الدخول | انتهى تسجيل الدخول (سُجّل الخروج، أو تغيرت كلمة المرور، أو مرت 90 يومًا). سجّل الدخول مرة أخرى. |
| لا يصل إشعار فوري | اقرأ ملاحظات الطلب: تعرض رد Google. تحقق من ملف حساب الخدمة (الفصل 7، القسم ج)، ومن أن السائق سجّل الدخول على ذلك الهاتف مرة واحدة على الأقل، ومن أن الإشعارات مسموح بها على الهاتف. |
| لا يرى السائق الطلب | يجب أن يكون الطلب Processing ومُسندًا إلى ذلك السائق. تنتقل الطلبات المكتملة إلى تبويب Completed. |
| تبويب «Available» مفقود | فعّل Allow Self-Assignment وأعد تشغيل التطبيق. |
| يُرفض Complete Delivery برسالة «photo required» | إثبات الصورة مفعّل. يفتح التطبيق الكاميرا؛ اسمح بالوصول إلى الكاميرا من إعدادات الهاتف. |
| تبقى الأرباح 0.00 | ثبّت TeraWallet وحدّد مبلغ العمولة. لا تُدفع عمولات الطلبات التي اكتملت قبل ذلك بأثر رجعي. |
| يقول App Builder «Not allowed» | انتهت جلسة المدير: أعد تحميل الصفحة. |
| يقول App Builder إن اسم الحزمة غير متطابق | اجعل اسم الحزمة في الأداة مطابقًا لاسمه في Firebase، أو نزّل ملف google-services.json جديدًا. |
| إضافات التخزين المؤقت (LiteSpeed وWP Rocket وCloudflare) | استثنِ /wp-json/taqnix/ من التخزين المؤقت. يطلب التطبيق بالفعل بيانات حديثة. |
التحديث والانتقال من الإضافات القديمة
التحديث
ارفع ملف zip الجديد للإضافة مع Replace current with uploaded؛ تبقى إعداداتك وسائقوك. ابنِ إصدارًا جديدًا من التطبيق (الفصل 12 أو 13) واطلب من السائقين التحديث. ارفع Force App Update إلى رقم الإصدار الجديد عندما تريد أن يحدّث الجميع.
إذا كنت تستخدم «Delivery Boy for WooCommerce» (1.0.x) و«Taqnix App Builder»
- هذه الإضافة تحل محلهما معًا. عطّل «Taqnix App Builder» واحذفها؛ أداة البناء فيها صارت الآن تبويب App Builder هنا. أدخل رمز الشراء هناك مرة واحدة.
- ارفع هذه الإضافة فوق القديمة. يبقى سائقوك وإعداداتك وطلباتك.
- تتوقف تطبيقات السائقين القديمة عن العمل عن قصد. أغلق الإصدار 1.1 ثغرة خطيرة: كان بإمكان أي شخص يعرف معرّف السائق حتى ذلك الحين قراءة الطلبات وتغييرها. يسجّل التطبيق الجديد الدخول برمز (token). ابنِ التطبيق الجديد وثبّته، ثم ارفع Force App Update.
- كانت العمولة سابقًا مبلغًا ثابتًا قدره 15، يُدفع من جديد في كل مرة يُحفظ فيها الطلب كمكتمل. أصبحت الآن إعدادًا (القيمة الافتراضية 0) وتُدفع مرة واحدة لكل طلب.
الإزالة
عطّل الإضافة واحذفها. يبقى سائقوك (المستخدمون) وطلباتك وصورك. أما إعدادات الإضافة فتُزال.
الدعم
المساعدة في التثبيت وإصلاح الأخطاء مشمولة لمدة 6 أشهر، مع تحديثات مدى الحياة. تواصل معنا عبر صفحة المنتج في السوق التي اشتريت منها الحزمة. يرجى ذكر عنوان متجرك، وما فعلته، وما رأيته على الشاشة (ولقطة الشاشة تفيد).