تأكيد حجز نيابةً عن العميل
يُطلق إجراء العميل `confirm_booking` من واجهة النشاط التجاري (يُدقَّق بوصفه business_on_behalf). استخدامان: (1) الوضع الحي — يؤكّد الموظفون فترة لعميل حجز عبر الهاتف؛ (2) بيئة الاختبار — واجهة الرمز السحري للعميل متاحة في الوضع الحي فقط (لا يمكن أبدًا أن يصل رابط عمل بيئة الاختبار إلى عميل حقيقي)، لذا فهذه هي الطريقة الوحيدة لدفع عمل اختبار في بيئة الاختبار إلى ما بعد الحجز (حجز ← تسعير ← تأكيد ← إسناد ← إنجاز). يحمل المتن قيمة scheduled_at التي اختارها العميل (تاريخ ووقت ساذج بالتوقيت المحلي للنشاط التجاري). جدول القرار — كل رمز 409 تُرجعه هذه النقطة، والخطوة التالية الصحيحة (تفرّع على error_code، لا على حالة HTTP أبدًا): • JOB_REQUEST_STAGE_CONFLICT — تغيّر العمل منذ قراءتك له (ملاحظة: كل محاولة تأكيد فاشلة ترفع أيضًا status_version عمدًا). التالي: أعد جلب العمل، وأعد المحاولة بـ status_version الجديد. • JOB_REQUEST_ACTION_NOT_PENDING — لم يعد العمل عند خطوة التأكيد (عادةً: مؤكّد بالفعل). التالي: أعد الجلب واعرض الحالة الحالية؛ لا تُعِد المحاولة. • JOB_REQUEST_NO_TECHNICIAN_AVAILABLE — الوقت غير مجدٍ للجميع (خارج ساعات العمل / نافذة العميل، أو لا أحد مؤهّل). التالي: اختر وقتًا آخر عبر booking-windows / time-segments. ليست حالة طوارئ — الإزاحة لا تخلق سعة. • JOB_REQUEST_TECH_INFEASIBLE — الفنّي المفروض لا يمكنه أبدًا تولّي العمل حينها؛ يبيّن `data.reason` السبب: cannot_arrive_in_time (التنقّل/بدء الوردية — `data.earliest_feasible_at` (RFC3339 UTC) هو أول وقت في نفس اليوم يمكنه فيه التواجد في الموقع ← اعرضه) | missing_required_skills | not_available_today | not_lead_tier. التالي: أبقِ الفنّي وأعد الجدولة إلى earliest_feasible_at أو بعده، أو أبقِ الوقت وأسقِط technician_id (اختيار تلقائي) / اختر فنّيًا آخر من time-segments. ليست حالة طوارئ. • JOB_REQUEST_P0_REQUIRES_DISPLACEMENT — الرمز الوحيد الذي يوجّه إلى مسار الطوارئ: العمل من فئة P0، والفنّي مؤهّل، لكن المسار مشغول فعلًا. التالي: POST emergency/candidates ← preview ← commit (يؤكّد التنفيذ تلقائيًا). تنبيه: إذا كانت الأعمال الشاغلة نفسها من فئة P0 فسترفض المعاينة بـ EMERGENCY_RESCHEDULE_SLOT_OCCUPIED (P0 لا يزيح P0 أبدًا) — عندئذٍ اختر فنّيًا/وقتًا آخر.
المعاملات
curl -X POST "https://api.crisphive.com/v1/job-requests/9b2f6c3e-1a4d-4f0a-8f2e-7c5d1b3a9e01/confirm" \ -H "Authorization: Bearer chsk_test_4eC8xQ9mZ2pL7Ka0rT" \ -H "Content-Type: application/json" \ -d '{ "arrival_window_minutes": 1, "scheduled_at": "2030-06-14T09:00:00", "status_version": 2, "technician_id": "9b2f6c3e-1a4d-4f0a-8f2e-7c5d1b3a9e01" }'