Berish vazifalari
Berish vazifasi — bitta jismoniy reys: ushbu buyurtma laganini shu stolga olib borish yoki bu buyurtmani yetkazish manziliga eltish. Vazifalarni Sitora taklif qiladi, sizning kontrolleringiz qabul qiladi va qatʼiy holat mashinasi boʻylab boshqaradi.
Hayotiy sikl
“Hayotiy sikl” bo'limioffered ──claim──▶ claimed ──xodim yuklaydi──▶ loaded ──▶ en_route ──▶ arrived ──▶ completed │ │ │ └─ expired └─ failed(code) ◀────────────────────────────────┘ istalgan payt: cancelledoffered → claimed
“offered → claimed” bo'limiPOST /serving-tasks/{id}/claim/. Birinchi daʼvo yutadi; yutqazilgan poyga
already_claimed kodi bilan 409 qaytaradi; muddati oʻtgan taklif oynasi
offer_expired kodi bilan 410 qaytaradi. Muddati oʻtgan takliflar odamlarga
qaytadi — muddat oʻtishini qayta urinish kerak boʻlgan xato deb hisoblamang.
claimed → loaded xodim tomonidan tasdiqlanadi
“claimed → loaded xodim tomonidan tasdiqlanadi” bo'limiRobotingiz berish joyida kutadi; odam Sitora Proʻda lagan manifestga mos kelishini tasdiqlaydi. Ovqat uchun javobgarlikni odam beradi, mashina uni oʻzi eʼlon qilmaydi.
Siz loaded haqida xabar bera olmaysiz. Xabar endpointi roppa-rosa toʻrtta
qiymatni qabul qiladi — en_route, arrived, completed, failed — qolgan
hammasi maydon tekshiruvi bilan rad etiladi: 400, uning tanasi code emas,
maydon nomi boʻyicha kalitlanadi:
{ "status": ["\"loaded\" is not a valid choice."] }loaded → en_route → arrived → completed
“loaded → en_route → arrived → completed” bo'limiPOST /serving-tasks/{id}/report/ va {"status": "..."}. Xabarlar qatʼiy
tartibda; tartibsiz xabar task_<joriy_holat> kodi bilan (masalan,
task_claimed) va vazifaning joriy holatini koʻrsatuvchi izoh bilan 409
qaytaradi. Har qanday xabarga ixtiyoriy telemetry obyektini qoʻshish mumkin;
u vazifaning hodisalar jurnalida saqlanadi.
failed
“failed” bo'limiQabul qilingandan keyingi istalgan holatdan kodlangan sabab bilan xabar qilinadi:
failure_code |
Maʼnosi |
|---|---|
obstacle_blocked |
Yoʻl toʻsilgan va tiklab boʻlmaydi. |
hardware_fault |
Mexanik yoki elektr nosozlik. |
navigation_lost |
Joylashuvni aniqlash yoʻqoldi. |
payload_disturbed |
Lagan yoki yuk yoʻlda buzildi. |
battery_critical |
Reysni tugatishga quvvat yetmaydi. |
operator_abort |
Operatoringiz aralashdi. |
other |
Boshqa har qanday holat — reason qoʻshing. |
Nosozlik xavfsiz: buyurtma darhol inson jarayoniga qaytadi va xodimlar ogohlantiriladi. Nosozliklar haqida halol va darhol xabar bering.
failed haqida xabar berganingizda failure_code majburiy; yoʻq yoki notanish
kod 400 (unknown_failure_code) bilan rad etiladi.
Siz yubora olmaydigan, ammo koʻradigan yana bitta failure_code bor:
fleet_unresponsive. Sitora uni parkingiz qabul qilgan, soʻng heartbeat
eskirgan holda harakatlantirishni toʻxtatgan vazifaga qoʻyadi — buyurtma
kutmasligi uchun reys siz oʻrningizga nosoz deb yopiladi va uni xodimlar
davom ettiradi. Buni koʻrish robot nosozlik eʼlon qilganini emas, kontrolleringiz
jim boʻlganini bildiradi.
cancelled
“cancelled” bo'limiSitoraʼdan keladi — xodim buyurtmani birinchi berib qoʻydi, buyurtma bekor
qilindi yoki xodim reysni bekor qildi. Reysni toʻxtating va bazaga qayting.
loaded dan keyingi bekor qilish laganni olish uchun xodimlarni ogohlantiradi.
Yakunlash va tasdiqlash
“Yakunlash va tasdiqlash” bo'limiYakunlash buyurtma holatini hech qachon toʻgʻridan-toʻgʻri yozmaydi. Keyin nima boʻlishini filialning tasdiqlash qoidasi hal qiladi:
human_confirmed(sukut boʻyicha) — xodimlar buyurtmani Sitora Proʻda odatdagidek beradi; ularning tasdigʻi siklni yopadi va vazifaga qayta bogʻlanadi.auto_confirm— server sizningcompletedxabaringizdan keyin buyurtma oʻtishini oʻzi qoʻllaydi. Xabararriveddan keyin sozlangan kechikishdan (park holati suratidagiauto_confirm_dwell_seconds) erta kelmasligi kerak — mehmon laganni olishi mumkin boʻlgan vaqtdan tezroq yakunlasharrival_dwell_pendingbilan409qaytariladi.
Manifest
“Manifest” bo'limiHar bir vazifa ish tavsifini olib yuradi — va boshqa hech nimani:
{ "order_display_number": 118, "leg": "dine_in_tray", "items": [ { "name": "Grilled trout", "quantity": "1" }, { "name": "Green tea", "quantity": "2" } ], "dining_spot": { "id": 12, "number": 4, "label": "Table 4", "spot_type": "table" }}Kuryerlik bosqichi manifestlari dining_spot oʻrniga delivery_address olib
yuradi. Mehmon yozuvi, telefon raqami, buyurtma izohi, narx yoki toʻlov
maʼlumotlari hech qachon boʻlmaydi — bu maydonlar manifestga umuman oʻqilmaydi.
Manifest faqat soʻrov endpointlarida beriladi, u yerda hisob maʼlumotingiz har bir oʻqishda tekshiriladi. U vebhukda hech qachon yuborilmaydi.