مسار التوصيل للمندوب عبر واجهة الجوال
من قائمة الطرود إلى التسليم الكامل أو الجزئي أو الرفض والفشل عبر واجهة المندوب للجوال، مع القواعد والأخطاء. لا توجد لوحة ويب للمندوب.
آخر تحديث 22 أكتوبر 2026 · آخر تحقق 22 أكتوبر 2026
الغرض#
يتتبّع هذا الدليل طرداً واحداً من لحظة إسناد الشركة له إلى مندوب حتى يسجّل المندوب النتيجة: فتح القائمة وقراءة التفاصيل والتسليم الكامل أو الجزئي أو الإبلاغ عن رفض أو فشل. لا توجد لوحة ويب للمندوب. كل ما ورد هنا يتم عبر واجهة الجوال /api/v10/deliveryman/*، ويستدعيها أي تطبيق جوال يوفّره مشغّل المنصة للمناديب؛ ولا يغطي هذا الدليل تطبيقاً بعينه ولا روابط تحميله (اسأل مشغّل المنصة عن التطبيق الذي يستعمله مناديبك). وتصف هذه الصفحة ما تتيحه الواجهة.
من يستطيع استخدامها#
حسابات المناديب لدى شركة توصيل، ومنهم مناديب شركة التوصيل الخاصة بالتاجر. المندوب الموقوف لا يستطيع الدخول (HTTP 403). وموظفو الشركة يتولّون ما لا يستطيعه المندوب: إسناد الطرود وإعادة الجدولة والتراجع عن النتيجة المسجَّلة.
ما الذي تحتاجه#
- ترويسة
apiKey(مفتاح واحد على مستوى المنصة مضبوط على الخادم، وهو نفسه لجميع الحسابات)، وترويسةAccept: application/json، ورمز Bearer منPOST /api/v10/deliveryman/login، ويطلب هذا الطلبdriver_id(رقم المندوب أو رقم الموبايل أو البريد الإلكتروني) وpassword(6 أحرف على الأقل)، والحد الأقصى لطلبات الدخول 10 طلبات في الدقيقة. - طرد أسندته إليك الشركة.
- إذا كانت شركتك تشترط أن يكون المندوب متصلاً، أرسل أولاً
POST /api/v10/deliveryman/dutyمع{"on_duty": true}؛ وإلا فلن يتمكّن موظفو التوزيع في الشركة من إسناد طرود إليك.
الخطوات#
سجّل الدخول
أرسل طلب الدخول مع ترويسة
apiKey. يحمل الردdata.token؛ أرسله بصيغةAuthorization: Bearer ...في كل طلب لاحق. إذا كان معرّف الدخول أو كلمة السر خاطئاً يعيد الطلب HTTP 401، وغيابapiKeyيعيد HTTP 400 معInvalid Api Key.افتح طرودك
يجمع
GET /api/v10/deliveryman/dashboardالطرود حسب الحالة: المسندة والمعاد جدولتها والراجعة للشركة والمسلَّمة (كاملة وجزئية). ويعرضGET .../parcel/indexكل طرد ارتبط بك يوماً كمندوب توصيل أو استلام، لا الطرود النشطة فقط. ويعيدGET .../parcel/details/{id}الطرد وأحداثه، أو HTTP 404 إن لم يكن مرتبطاً بك. وتُظهر قوائم نقطةdashboardلكل طرد المبلغ المطلوب تحصيله (cod_displayوcod_originalوcod_currency) وis_amount_collected.سلّم بالكامل
POST /api/v10/deliveryman/parcel/delivered/{id}معnoteوimageوsignatureImageاختيارياً. يُسجَّل كامل المبلغ المطلوب كمحصَّل. يجب أن تكون الصور JPEG أو PNG أو WebP أو GIF بحجم حتى 5 ميغابايت؛ والصورة غير الصالحة تُتجاهل دون خطأ.سلّم جزئياً
POST /api/v10/deliveryman/parcel/partial-delivered/{id}معcash_collection(مطلوب) والحقول الاختيارية نفسها. يجب أن يكون المبلغ بين 0 والمبلغ المطلوب تحصيله للطرد.أبلغ عن رفض أو فشل
POST /api/v10/deliveryman/parcel-status-updateمعparcel_idوstatus_action، ويمكنك إضافةreason(أوnote) بنص التوضيح. استخدم 5 عندما يرفض المستلم أو تفشل هذه المحاولة: يعود الطرد إلى المستودع لمحاولة أخرى، ويُحفظ السبب الذي أرسلته (ويُسجَّل سبب افتراضي بمعنى «تعذّر التسليم» إن لم ترسل شيئاً)، ويُلغى إسناده إليك. واستخدم 24 للفشل النهائي: يرجع الطرد إلى الشركة ويبدأ مسار إرجاعه إلى التاجر.
النتيجة المتوقعة#
| الإجراء | الطلب | الحالة الجديدة | ما يلي |
|---|---|---|---|
| تسليم كامل | delivered/{id} أو status_action = 9 |
تم التسليم | نهائية؛ التراجع للموظفين فقط |
| تسليم جزئي | partial-delivered/{id} أو status_action = 32 |
تسليم جزئي | نهائية؛ التراجع للموظفين فقط |
| رفض أو محاولة فاشلة | status_action = 5 |
بالمستودع — جاهز للتوزيع | يستطيع الموظفون إسناده من جديد |
| فشل نهائي | status_action = 24 |
فشل التوصيل — راجع للشركة | يتابع الموظفون الإرجاع |
تأتي الردود بصيغة {success, message, data}؛ أما غياب parcel_id أو status_action فيعيد HTTP 422 مع message وerrors القياسيين في Laravel لطلبات JSON، وبدون ترويسة Accept يرد Laravel بإعادة توجيه (redirect) إلى صفحة أخرى بدلاً من ذلك. وفي delivered/{id} وpartial-delivered/{id} تتكرر رسائل القواعد المقتبسة أدناه بعد شرطة وتنتهي بمرجع مثل (ref: E1A2B3) (لا في parcel-status-update)؛ لذا فالنصوص المقتبسة أدناه هي بداية الرسالة فقط، فاعتمد على رمز HTTP وجزء من النص. وتأتي The fields is required! كما هي. ويُسجَّل كل تغيير كحدث على الطرد ويُطلق الإشعارات المضبوطة له.
القواعد التي يفرضها النظام#
- لا تستطيع التصرف إلا بطرد مسند إليك وحالته «مع مندوب التوصيل» أو «إعادة جدولة التوصيل». وإلا فالرد HTTP 422 برسالة تبدأ بـ
This parcel is not assigned to you. وتكرار التسليم على طرد سُلّم فعلاً يعطي الرد نفسه. والطرد المسند إليك لإرجاعه إلى التاجر يجتاز هذا الفحص؛ ثم يرفض الفحص التالي عليه التسليم الكامل والجزئي والرفض (status_action= 9 و32 و5)، ويقبل 24 من حالة «راجع للتاجر» فينقله إلى «فشل التوصيل — راجع للشركة». - تُقبل فقط الانتقالات الواردة في القائمة المسموحة؛ والانتقال المرفوض يعيد HTTP 422 مع رسالة تذكر الحالتين.
- إعادة الجدولة وخطوات الاستلام والإرجاع النهائي إلى التاجر يقوم بها موظفو الشركة، ولا نقطة نهاية لها في واجهة المندوب. والطرد المعاد جدولته يبقى في قائمتك بالتاريخ الجديد وتُنهيه بالطريقة نفسها.
- تُبنى القوائم من الأحداث التي تذكرك، فقد يبقى طرد رفضتَه أو أُعيد إسناده ظاهراً فيها.
أخطاء شائعة#
status_actionغير 5 و9 و24 و32. يعيد HTTP 400، ونص الرسالة هو المفتاح غير المترجمparcel.invalid_status_action. ويعرضGET .../parcel-statusالإجراءات 9 و24 و32 فقط مع أن 5 مقبول أيضاً.- غياب
cash_collectionفي التسليم الجزئي. نقطةpartial-delivered/{id}وحدها ترفضه (HTTP 422 والرسالةThe fields is required!)؛ أماparcel-status-updateمعstatus_action= 32 فتقرأ غيابه صفراً وتسجّل الطرد «تسليم جزئي» بلا مبلغ محصَّل. فأرسله دائماً. - مبلغ محصَّل أكبر من مبلغ الطرد أو سالب. HTTP 422 برسالة تبدأ بـ
The collected amount exceeds the parcel COD amountأوThe collected amount cannot be negative.
الحدود والصلاحيات#
- يحتاج الدخول وطلبات الطرود إلى ترويسة
apiKey. أما نقاط الموقع والدوام وإعدادات التتبّع فمسجّلة خارج هذا الفحص وتحتاج رمز Bearer فقط. - الحد الافتراضي للواجهة 60 طلباً في الدقيقة لكل حساب؛ ويُحدّ
POST /api/v10/deliveryman/locationبـ 30 طلباً في الدقيقة وPOST /api/v10/deliveryman/dutyبـ 20 طلباً في الدقيقة. - يعمل المندوب على طرود شركته فقط.
- يُفحص المبلغ الجزئي مقابل مبلغ الطرد بالدولار الأمريكي؛ راجع دليل تسجيل المندوب للتحصيل عند الاستلام.
API
POST /api/v10/deliveryman/loginGET /api/v10/deliveryman/dashboardGET /api/v10/deliveryman/parcel/indexGET /api/v10/deliveryman/parcel/details/{id}POST /api/v10/deliveryman/parcel/delivered/{id}POST /api/v10/deliveryman/parcel/partial-delivered/{id}GET /api/v10/deliveryman/parcel-statusPOST /api/v10/deliveryman/parcel-status-updatePOST /api/v10/deliveryman/duty