پیشنیاز: داشتن access_token و در اختیار داشتن اطلاعات زمان آمادهسازی مرسوله، مبدأ، مقصد و برآورد فیزیکی محموله.
خروجی مرحله اول: دریافت یک یا چند بازه قابل ارائه برای جمعآوری و تحویل، به همراه یک token اختصاصی برای هر گزینه.
خروجی مرحله دوم: ثبت قطعی مرسوله از طریق API اصلی ثبت سفارش با استفاده از توکن گزینه انتخابشده.
سرویس Shipping Time Window برای کانساینرهایی طراحی شده است که میخواهند پیش از ثبت نهایی مرسوله، بازههای واقعی و قابل ارائه دیجیاکسپرس را به مشتری نهایی خود نمایش دهند تا مشتری بتواند زمان تحویل را انتخاب کند.
این API بهتنهایی هیچ Shipment یا Parcel جدیدی ایجاد نمیکند و جایگزین API ثبت سفارش نیست. این سرویس صرفاً بر اساس اطلاعاتی مانند زمان آماده بودن بار، مبدأ، مقصد، ماهیت فیزیکی مرسوله، ظرفیت عملیاتی و روزهای تعطیل کانساینر، گزینههای قابل ارائه را محاسبه میکند.
برای هر گزینه، یک توکن اختصاصی در پاسخ برگردانده میشود. پس از انتخاب بازه توسط مشتری، کانساینر باید توکن همان گزینه را همراه با اطلاعات ثبت سفارش به API اصلی Register Shipment ارسال کند.
تفاوت ثبت تکمرحلهای و ثبت با انتخاب بازه زمانی
| مدل پیادهسازی | اطلاعات ارسالی توسط کانساینر | رفتار سیستم |
|---|---|---|
| ثبت بدون نمایش بازه زمانی فقط با Ready Date | کانساینر فقط cargo_ready_date_time را ارسال میکند. | سیستم بر اساس زمان آمادهسازی، مبدأ، مقصد و ظرفیت عملیاتی، اولین بازه ممکن برای جمعآوری و تحویل را انتخاب میکند. نتیجه نهایی مسیریابی از طریق وبهوک اطلاعرسانی میشود. |
| ثبت بدون نمایش بازه زمانی با Ready Date و Promise Date | کانساینر علاوه بر cargo_ready_date_time، بازه promise_start_date_time و promise_end_date_time موردنظر خود را نیز ارسال میکند. | سیستم بررسی میکند که آیا با توجه به زمان آمادهسازی، مبدأ، مقصد و ظرفیت موجود، امکان تحویل در بازه درخواستی وجود دارد یا خیر. در صورت وجود مسیر، نتیجه موفق و در صورت نبود مسیر یا ظرفیت، نتیجه ناموفق از طریق وبهوک اعلام میشود. |
| ثبت با نمایش بازههای واقعی دیجیاکسپرس | ابتدا API مربوط به Shipping Time Window فراخوانی میشود و بازههای واقعی به مشتری نمایش داده میشوند. | پس از انتخاب یک بازه توسط مشتری، توکن همان گزینه در API ثبت سفارش استفاده شده و مسیر انتخابشده بهصورت همزمان نهایی میشود. |
در دو حالت اول، مشتری نهایی الزاماً بازههای واقعی دیجیاکسپرس را مشاهده نمیکند و فرآیند یافتن مسیر پس از ثبت سفارش انجام میشود.
در حالت سوم، مشتری پیش از ثبت نهایی سفارش یکی از بازههای واقعی قابل ارائه را انتخاب میکند و توکن گزینه انتخابشده مبنای ثبت نهایی قرار میگیرد.
فرآیند کلی ثبت با Shipping Time Window
فرآیند ثبت سفارش با انتخاب بازه زمانی شامل مراحل زیر است:
- کانساینر اطلاعات زمان آمادهسازی، مبدأ، مقصد و برآورد فیزیکی مرسوله را به API مربوط به Shipping Time Window ارسال میکند.
- دیجیاکسپرس یک یا چند گزینه قابل ارائه را در آرایه options برمیگرداند.
- کانساینر بازه تحویل هر گزینه، یعنی promise_start_date_time و promise_end_date_time، را به مشتری نهایی نمایش میدهد.
- مشتری یکی از گزینهها را انتخاب میکند.
- کانساینر token، همان گزینه را در API اصلی ثبت سفارش ارسال میکند.
- در مرحله ثبت نهایی، کانساینر باید یکی از دو روش زیر را انتخاب کند:
- ثبت با پارسلهای مشخص یا Specified Parcels
- ثبت با ظرفیت تخمینی یا Estimated Capacity
دریافت بازههای زمانی قابل ارسال
Get Shipping Time Windows
https://api-demo.digiexpress.ir/api/v2/shipping-time-window-requestاین API یک سرویس استعلامی است. فراخوانی موفق آن به معنی ثبت سفارش نیست و هیچ shipment_id یا parcel_id جدیدی ایجاد نمیکند.
هر بار فراخوانی این API توکنهای جدیدی تولید میکند؛ بنابراین کانساینر باید توکن همان گزینهای را ذخیره کند که مشتری در آخرین استعلام معتبر انتخاب کرده است.
ساختار درخواست Shipping Time Window
ساختار زیر تمام فیلدهای قابل استفاده را نمایش میدهد. در درخواست واقعی:
برای مبدأ فقط یکی از origin_point_id یا origin_address ارسال شود.
برای مقصد فقط یکی از destination_point_id یا destination_address ارسال شود.
{
"cargo_ready_date_time": "string",
"origin_point_id": "string",
"origin_address": {
"city_id": "string",
"full_address": "string",
"building_number": "string",
"unit": "string",
"postal_code": "string",
"latitude": "string",
"longitude": "string",
"description": "string"
},
"destination_point_id": "string",
"destination_address": {
"city_id": "string",
"full_address": "string",
"building_number": "string",
"unit": "string",
"postal_code": "string",
"latitude": "string",
"longitude": "string",
"description": "string"
},
"all_parcels_as_single_box_estimated_max_dimensions_cm": [
"string",
"string",
"string"
],
"all_parcels_as_single_box_estimated_max_weight_grams": "string",
"each_parcel_size_tier": "NORMAL",
"off_day_dates": [
"YYYY-MM-DD"
]
}جدول پارامترهای اصلی درخواست
- توضیح فنی
- زمان آماده بودن بسته زمان ارسال شده نمیتواند در گذشته باشد. (فرمت: YYYY-MM-DD HH:MM:SS)
- توضیح بیزینسی
- زمان دقیق آماده بودن بسته در انبار فرستنده؛ سیستم دیجیاکسپرس اولین بازه جمع آوری ممکن بعد از این تاریخ را برای شما پیدا میکند.
- توضیح فنی
- ID هاب دیجیاکسپرس (در صورت تحویل مستقیم به هاب، با تیم دیجیاکسپرس هماهنگ کنید). برای تعیین مبدأ، فقط یکی از origin_point_id یا origin_address باید ارسال شود. ارسال همزمان هر دو مجاز نیست.
- توضیح بیزینسی
- در صورتی که بار را خودتان مستقیماً به یکی از هابهای شناختهشده دیجیاکسپرس تحویل میدهید، آیدی آن هاب را وارد میکنید تا فرآیند جمعآوری (پیکاپ) سیستماتیک حذف شود.
- توضیح فنی
- اطلاعات کامل آدرس مبدأ. در محیط دمو مبدأ باید همیشه تهران باشد. (جزییات بیشتر در جدول پارامترها در ادامه ) برای تعیین مبدأ، فقط یکی از origin_point_id یا origin_address باید ارسال شود. ارسال همزمان هر دو مجاز نیست.
- توضیح بیزینسی
- محل دقیق جمعآوری سفارش توسط راننده دیجیاکسپرس (لوکیشن انبار یا مغازه شما) هر شیپمنت باید یک آدرس جمعآوری مشخص داشته باشد.
- توضیح فنی
- مشابه origin_point_id برای مقصد. برای تعیین مقصد نیز فقط یکی از destination_point_id یا destination_address باید ارسال شود. ارسال همزمان هر دو مجاز نیست.
- توضیح بیزینسی
- در موارد خاص لجستیکی که مقصد نهایی تحویل، یکی از لاکرها یا هابهای مشخص دیجیاکسپرس باشد استفاده میشود.
- توضیح فنی
- اطلاعات کامل آدرس مقصد. در محیط دمو مقصد باید همیشه چیتگر باشد. (جزییات بیشتر در جدول پارامترها در ادامه ) برای تعیین مقصد نیز فقط یکی از destination_point_id یا destination_address باید ارسال شود. ارسال همزمان هر دو مجاز نیست.
- توضیح بیزینسی
- محل دقیق تحویل نهایی سفارش به مشتری هر شیپمنت باید یک آدرس تحویل مشخص داشته باشد.
- توضیح فنی
- آرایه سهعضوی ابعاد تخمینی کل مرسوله بهصورت [طول، عرض، ارتفاع] بر حسب سانتیمتر.
- توضیح بیزینسی
- تمام کالاهای سفارش بهصورت یک جعبه فرضی واحد در نظر گرفته میشوند تا فضای کلی موردنیاز مرسوله تخمین زده شود.
- توضیح فنی
- وزن کل تخمینی تمام پارسلها بر حسب گرم.
- توضیح بیزینسی
- وزن تقریبی کل کالاهایی که قرار است در این Shipment ارسال شوند. این مقدار در کنترل ظرفیت روزهای قابل ارائه استفاده میشود.
- توضیح فنی
- گروه سایز هر پارسل. مقادیر مجاز فعلی: NORMAL، MEDIUM و LARGE.
- توضیح بیزینسی
- سیستم بر اساس این مقدار نوع مسیر، ظرفیت و ناوگان مناسب را بررسی میکند. پارسلهای ثبتشده در مرحله بعد باید با این گروه سایز سازگار باشند.
- توضیح فنی
- آرایه تاریخهایی با فرمت YYYY-MM-DD.
- توضیح بیزینسی
- روزهایی که کانساینر در مبدأ امکان تحویل بار به ناوگان یا انجام پیکاپ را ندارد. سیستم این روزها را در محاسبه زمان جمعآوری و در نتیجه زمان تحویل لحاظ میکند.
جدول پارامترهای هر آیتم در origin_address - destination_address
- توضیح
- شناسه شهر (از API get_cities دریافت کنید).
- توضیح بیزینس
- کد سیستمی شهر مبدأ یا مقصد. برای جلوگیری از خطا، حتماً ابتدا سرویس عمومی دریافت شهرها را صدا بزنید و آیدی دقیق همان شهر را اینجا بفرستید.
- توضیح
- آدرس کامل متنی
- توضیح بیزینس
- نشانی دقیق پستی که راننده برای پیدا کردن محل جمعآوری (مبدا) یا تحویل (مقصد) روی نقشه و به صورت فیزیکی به آن مراجعه میکند.
- توضیح
- عرض جغرافیایی آدرس مبدأ. این فیلد اختیاری است، اما در صورت در دسترس بودن مختصات دقیق مبدأ، قویاً توصیه میشود ارسال شود تا محل Pickup با دقت بیشتری شناسایی شود.
- توضیح بیزینس
- لوکیشن دقیق روی نقشه. اگر این فیلد را نفرستید، سیستم لوکیشن متنی شما را به مختصات تبدیل میکند؛ اما ارسال آن به مسیریابی دقیقتر راننده کمک پیشفرض میکند.
- توضیح
- طول جغرافیایی آدرس مبدأ. این فیلد اختیاری است، اما در صورت در دسترس بودن مختصات دقیق مبدأ، قویاً توصیه میشود همراه با latitude ارسال شود تا محل Pickup با دقت بیشتری شناسایی شود.
- توضیح بیزینس
- لوکیشن دقیق روی نقشه (مکمل فیلد latitude) جهت ناوبری دقیقتر رانندگان لجستیک.
- توضیح
- کد پستی
- توضیح بیزینس
- کد پستی محل مبدأ یا مقصد که جهت صحهگذاری روی آدرس استفاده میشود، اما برای ثبت سفارش الزامی و اجباری نیست.
- توضیح
- شماره پلاک
- توضیح بیزینس
- شماره پلاک ملک جهت تفکیک دقیق ساختمان در کوچه یا خیابان اصلی.
- توضیح
- شماره واحد
- توضیح بیزینس
- شماره واحد یا طبقه در ساختمانهای چندواحدی جهت دسترسی سریعتر توزیعکننده.
- توضیح
- توضیحات تکمیلی آدرس
- توضیح بیزینس
- کروکی متنی یا نکات خاص آدرس (مانند: "زنگ سمت راست"، "مغازه نبش کوچه" یا "تحویل به نگهبانی") جهت راهنمایی راننده.
جدول ماتریس سایزبندی بستهها (Parcel Size Tier)
| دسته سایز (Tier) | محدودیتهای ابعادی فیزیکی | محدودیت وزنی | توضیح لجستیکی و بیزینسی |
|---|---|---|---|
| NORMAL | • بزرگترین ضلع: حداکثر 64 سانتیمتر • ضلع دوم: حداکثر 44 سانتیمتر • ضلع سوم: حداکثر 34 سانتیمتر | حداکثر 14,999 گرم (کمتر از 15 کیلوگرم) | بستههای استاندارد و کوچکسایز که معمولاً ظرفیت حمل آنها با موتور یا خودروهای سواری کوچک وجود دارد. |
| MEDIUM | هر بستهای که شرایط NORMAL را نداشته باشد و در محدوده خطقرمزهای LARGE نیز قرار نگیرد. | هر بستهای که از نظر وزن در محدوده NORMAL نباشد، اما طبق قوانین سیستم در دسته LARGE هم قرار نگیرد. | بستههای متوسط که فراتر از ابعاد موتور سیکلت هستند اما نیاز به تجهیزات حمل کالاهای فوقسنگین (Large) ندارند. |
| LARGE | • حداقل یکی از ابعاد بیشتر از 140 سانتیمتر باشد؛ یا | • وزن Parcel بیشتر از 40 کیلوگرم باشد. | کالاهای فوق سنگین، حجیم یا با ابعاد نامتعارف (کالای بزرگسایز) که حمل آنها نیازمند خودروهای باری اختصاصی (مانند وانت) است. |
یک Parcel در صورتی در دسته LARGE قرار میگیرد که حداقل یکی از شرایط زیر برقرار باشد: حداقل یکی از ابعاد بیشتر از 140 سانتیمتر باشد؛ یا وزن Parcel بیشتر از 40 کیلوگرم باشد.
نکته درباره برآورد فیزیکی مرسوله
برآورد وزن و ابعاد در این API برای تعیین موارد زیر استفاده میشود:
- تشخیص ماهیت و گروه سایز مرسوله
- بررسی ظرفیت وزنی و حجمی مسیرها
- حذف روزهایی که ظرفیت کافی برای مرسوله وجود ندارد
- تعیین بازههای واقعی قابل ارائه به مشتری
این اطلاعات باعث ایجاد پارسل نمیشوند. در مرحله ثبت نهایی همچنان باید یکی از این دو روش استفاده شود:
- ارسال مشخصات واقعی تمام پارسلها در آرایه parcels
- ارسال ظرفیت تخمینی در max_shipment_capacity_estimation_for_pre_reservation
همچنین گروه سایز اعلامشده باید با پارسلهای مرحله ثبت نهایی سازگار باشد. برای مثال، اگر در مرحله دریافت Time Window مقدار NORMAL اعلام شده باشد، نباید در مرحله ثبت یا افزودن پارسل، بستهای با مشخصات گروه LARGE برای همان مرسوله ارسال شود.
ساختار پاسخ موفق Shipping Time Window
Response Body (HTTP 200)
{
"options": [
{
"token": "string",
"promise_start_date_time": "string",
"promise_end_date_time": "string",
"pickup_start_date_time": "string",
"pickup_end_date_time": "string",
"expires_at_date_time": "string",
"route_start_date_time_cut_off": "string",
"service_level": "STANDARD"
}
]
}جدول پارامترهای خروجی Shipping Time Window
- توضیح فنی
- آرایه گزینههای قابل ارائه برای مرسوله.
- توضیح بیزینسی
- تمام زمانهایی که دیجیاکسپرس در لحظه استعلام و با توجه به اطلاعات درخواست میتواند ارائه کند.
- توضیح فنی
- توکن اختصاصی گزینه.
- توضیح بیزینسی
- نماینده همان ترکیب زمان تحویل، زمان پیکاپ، مسیر و سطح سرویس است. این مقدار باید در API ثبت سفارش استفاده شود.
- توضیح فنی
- شروع بازه تعهد تحویل به گیرنده.
- توضیح بیزینسی
- اولین زمان قابل تعهد برای تحویل سفارش به مشتری نهایی.
- توضیح فنی
- پایان بازه تعهد تحویل به گیرنده.
- توضیح بیزینسی
- آخرین زمان بازهای که سفارش در آن به مشتری تحویل داده خواهد شد.
- توضیح فنی
- شروع بازه جمعآوری مرسوله از مبدأ.
- توضیح بیزینسی
- اولین زمان برنامهریزیشده برای مراجعه ناوگان به محل کانساینر.
- توضیح فنی
- پایان بازه جمعآوری مرسوله از مبدأ.
- توضیح بیزینسی
- پایان بازهای که پیکاپ در آن انجام میشود.
- توضیح فنی
- زمان دقیق انقضای توکن.
- توضیح بیزینسی
- پس از این زمان، توکن برای ثبت سفارش قابل اتکا نیست و باید استعلام جدید انجام شود.
- توضیح فنی
- حد زمانی عملیاتی مربوط به نهاییسازی گزینه و شروع روت.
- توضیح بیزینسی
- کانساینر باید این زمان را در فرآیند خود رعایت کند. پس از عبور از این محدودیت، امکان حفظ همان گزینه تضمین نمیشود.
- توضیح فنی
- سطح سرویس گزینه، مانند STANDARD.
- توضیح بیزینسی
- نوع سرویس حملی که زمانهای اعلامشده بر اساس آن محاسبه شدهاند. همین مقدار باید در ثبت نهایی سفارش ارسال شود.
قوانین اعتبار و مصرف توکن
- هر گزینه در آرایه options دارای یک token مستقل است.
- توکن فقط تا زمان اعلامشده در expires_at_date_time معتبر است.
- سیستم کانساینر نباید برای اعتبار توکن یک مدت ثابت، مانند 24 ساعت، در نظر بگیرد؛ همیشه باید زمان دقیق برگشتی در expires_at_date_time ملاک قرار گیرد.
- محدودیت route_start_date_time_cut_off نیز باید در کنار زمان انقضای توکن رعایت شود.
- در صورت منقضی شدن توکن یا عبور از محدودیت عملیاتی گزینه، API مربوط به Shipping Time Window باید مجدداً فراخوانی شود.
- هر فراخوانی جدید ممکن است توکنهای جدیدی تولید کند؛ بنابراین از ذخیره یا استفاده طولانیمدت از توکنهای قدیمی خودداری شود.
- دریافت توکن بهتنهایی به معنی ثبت یا رزرو نهایی Shipment نیست. ثبت قطعی فقط پس از فراخوانی موفق API ثبت سفارش انجام میشود.
- پس از ثبت موفق سفارش با یک توکن، همان توکن نباید برای ایجاد Shipment دیگری استفاده شود.
- نحوه مقداردهی
- توکن گزینه انتخابشده در Shipping Time Window
- نحوه مقداردهی
- مشخصات واقعی تمام پارسلها
- نحوه مقداردهی
- ظرفیت تخمینی مرسوله
اطلاعاتی که در مرحله Shipping Time Window داخل Token ثبت و Lock شدهاند، در Final Register نباید مجددا در Body ارسال شوند. این موارد شامل cargo_ready_date_time، اطلاعات مبدأ، اطلاعات مقصد، promise_start_date_time، promise_end_date_time و service_level هستند.
در Final Register، علاوه بر اطلاعات عمومی موردنیاز ثبت سفارش، token گزینه انتخابشده ارسال میشود و بر اساس روش ثبت، فقط یکی از parcels یا max_shipment_capacity_estimation_for_pre_reservation مقداردهی میشود.
ارسال همزمان parcels و max_shipment_capacity_estimation_for_pre_reservation مجاز نیست؛ این دو روش در ساختار فعلی ثبت سفارش نیز بهعنوان روشهای مجزا تعریف شدهاند.
نهاییسازی سفارش با توکن انتخابشده
پس از انتخاب گزینه توسط مشتری، کانساینر باید API اصلی ثبت سفارش را فراخوانی کند:
Method: POST
Endpoint: https://api-demo.digiexpress.ir/api/v2/shipments
Authorization: <access_token>در این مرحله، اطلاعات پایه ثبت سفارش مطابق بخش اصلی Register Shipment ارسال میشوند. علاوه بر آن، فیلدهای زیر باید بر اساس گزینه انتخابشده مقداردهی شوند:
روش اول: ثبت با پارسلهای مشخص و Time Window
Register with Specified Parcels and Selected Time Window
این روش زمانی استفاده میشود که در لحظه ثبت نهایی، تعداد، وزن، ابعاد و مشخصات تمام پارسلها معلوم است.
در این حالت:
- آرایه parcels باید ارسال شود.
- آبجکت max_shipment_capacity_estimation_for_pre_reservation نباید ارسال شود.
- توکن و زمانهای گزینه انتخابشده باید در همان درخواست قرار گیرند.
- پس از ثبت موفق، امکان اضافه یا حذف کردن پارسلهای این Shipment وجود ندارد.
ساختار درخواست
فیلدهای Token-bound در این ساختار ارسال نمیشوند؛ زمان آمادهسازی، اطلاعات مبدأ، اطلاعات مقصد، بازه تعهد و service_level داخل token قرار دارند.
{
"consignor_unique_reference_id": "string",
"revive_if_already_registered_and_failed": true,
"order_number": "string",
"cargo_submitter_person": {
"first_name": "string",
"last_name": "string",
"national_code": "string",
"first_mobile": "string",
"second_mobile": "string",
"phone": "string"
},
"recipient_person": {
"first_name": "string",
"last_name": "string",
"national_code": "string",
"first_mobile": "string",
"second_mobile": "string",
"phone": "string"
},
"constant_proof_of_delivery_code_for_all_parcels": "string",
"parcels": [
{
"dimensionsInCMs": [
"string",
"string",
"string"
],
"content_value_price_rials": "string",
"description": "string",
"items_description": "string",
"weight_grams": "string",
"consignor_reference_id": "string",
"payable_price_rials_by_recipient": "string",
"scannable_codes": [
"string"
],
"characteristics": [
"string"
],
"packaging_type": "string"
}
],
"token": "string"
}رفتار سیستم
در صورت معتبر بودن توکن و تطابق اطلاعات ثبت با گزینه انتخابشده، دریافت HTTP 200 به معنی ثبت موفق و قطعی Shipment در همان لحظه است.
از آنجا که پارسلهای واقعی در همین درخواست ایجاد شدهاند، کانساینر میتواند بلافاصله پس از دریافت پاسخ موفق، API دریافت لیبل را برای parcel_id یا parcel_codeهای برگشتی فراخوانی کند.
ساختار پاسخ این روش همان ساختار پاسخ موفق Specified Parcels در بخش اصلی ثبت سفارش است.
روش دوم: ثبت با ظرفیت تخمینی و Time Window
Register with Estimated Capacity and Selected Time Window
این روش زمانی استفاده میشود که مشتری بازه تحویل خود را انتخاب کرده است، اما در لحظه ثبت نهایی هنوز تعداد یا مشخصات دقیق پارسلهای فیزیکی معلوم نیست.
در این حالت:
- آبجکت max_shipment_capacity_estimation_for_pre_reservation باید ارسال شود.
- آرایه parcels نباید ارسال شود.
- توکن و زمانهای گزینه انتخابشده باید در همان درخواست قرار گیرند.
- پس از ثبت موفق، پارسلهای واقعی از طریق APIهای Add Parcel و Delete Parcel مدیریت میشوند.
ساختار درخواست
{
"consignor_unique_reference_id": "string",
"select_random_found_route": true,
"revive_if_already_registered_and_failed": true,
"order_number": "string",
"cargo_submitter_person": {
"first_name": "string",
"last_name": "string",
"national_code": "string",
"first_mobile": "string",
"second_mobile": "string",
"phone": "string"
},
"recipient_person": {
"first_name": "string",
"last_name": "string",
"national_code": "string",
"first_mobile": "string",
"second_mobile": "string",
"phone": "string"
},
"constant_proof_of_delivery_code_for_all_parcels": "string",
"max_shipment_capacity_estimation_for_pre_reservation": {
"parcels_total_estimated_weight_grams": "string",
"each_parcel_size_tier": "NORMAL",
"all_parcels_as_single_box_estimated_max_dimensions_cm": [
"string",
"string",
"string"
]
},
"token": "string"
}رفتار سیستم
در صورت معتبر بودن توکن و تطابق اطلاعات درخواست با گزینه انتخابشده، دریافت HTTP 200 به معنی ثبت قطعی Shipment و نهایی شدن مسیر است.
با این حال، در این مرحله هنوز پارسل فیزیکی ایجاد نشده است؛ بنابراین امکان دریافت لیبل پارسل بلافاصله پس از ثبت اولیه وجود ندارد.
کانساینر باید پس از آماده شدن هر بسته، API مربوط به Add Parcel را فراخوانی کند. پس از دریافت پاسخ موفق HTTP 200 از متد افزودن پارسل، parcel_id و parcel_code ایجاد میشوند و لیبل همان پارسل بلافاصله قابل دریافت خواهد بود.
ساختار پاسخ این روش همان ساختار پاسخ موفق Estimated Capacity در بخش اصلی ثبت سفارش است.
نتیجه ثبت و زمان دریافت لیبل
| روش ثبت با Time Window | وضعیت پاسخ Register | وضعیت پارسلها | زمان امکان دریافت لیبل |
|---|---|---|---|
| Time Window + Specified Parcels | همزمان یا Sync؛ پاسخ HTTP 200 به معنی ثبت قطعی است. | پارسلها در همان درخواست ایجاد شدهاند. | بلافاصله پس از دریافت پاسخ موفق Register. |
| Time Window + Estimated Capacity | همزمان یا Sync؛ پاسخ HTTP 200 به معنی ثبت قطعی Shipment است. | در لحظه ثبت اولیه هیچ پارسل فیزیکی ایجاد نشده است. | پس از هر فراخوانی موفق Add Parcel، برای پارسل اضافهشده. |
ارسال وبهوکهای عملیاتی و تغییرات وضعیت در هر دو روش همچنان ادامه خواهد داشت. همزمان بودن Register به معنی حذف وبهوک نیست؛ بلکه فقط به این معناست که نتیجه ثبت اولیه و انتخاب مسیر در همان پاسخ API قطعی شده است.
نکات و قوانین مهم فلو Shipping Time Window
- API مربوط به Shipping Time Window یک API استعلامی است و بهتنهایی هیچ سفارشی ثبت نمیکند.
- زمانهای برگشتی بر اساس اطلاعات همان درخواست، ظرفیت لحظهای و روزهای قابل ارائه محاسبه میشوند.
- هر گزینه دارای توکن مستقل است.
- توکن گزینه انتخابشده باید در فیلد token درخواست Register قرار گیرد.
- promise_start_date_time، promise_end_date_time و service_level جزئی از اطلاعات گزینه انتخابشده هستند و داخل Token ذخیره میشوند؛ بنابراین در Final Register نباید مجددا ارسال شوند.
- pickup_start_date_time و pickup_end_date_time فقط خروجی سرویس Time Window هستند و لازم نیست در Register ارسال شوند.
- اطلاعات مبدأ، مقصد و زمان آمادهسازی ثبت نهایی باید با اطلاعاتی که گزینهها بر اساس آنها محاسبه شدهاند سازگار باشند.
- اطلاعات تخمینی مرحله Time Window جایگزین مشخصات واقعی یا ظرفیت تخمینی مرحله Register نمیشوند.
- در ثبت با پارسل مشخص، parcels اجباری است و ظرفیت تخمینی نباید ارسال شود.
- در ثبت با ظرفیت تخمینی، آبجکت ظرفیت اجباری است و parcels نباید ارسال شود.
- پارسلهای نهایی باید با each_parcel_size_tier اعلامشده در مرحله Time Window سازگار باشند.
- off_day_dates مربوط به روزهای عدم امکان پیکاپ از مبدأ کانساینر است، نه روزهای عدم حضور مشتری در مقصد.
- سیستم کانساینر باید زمان دقیق expires_at_date_time را ملاک قرار دهد و نباید مدت اعتبار توکن را بهصورت ثابت در کد خود پیادهسازی کند.
- در صورت انقضای توکن، استعلام Shipping Time Window باید مجدداً انجام شود.
- در صورت ثبت با ظرفیت تخمینی، تمام قوانین فعلی Add Parcel و Delete Parcel بدون تغییر برقرار هستند.