ثبت سفارش (Register Shipment)

۳ از ۱۱v1.2.0

پیش‌نیاز: داشتن access_token | خروجی: دریافت shipment_id و shipment_code

دو روش برای ثبت ارسال وجود دارد که نمی‌توان هر دو را با هم ترکیب کرد:

۲ ردیف
روشتوضیحچه زمانی استفاده شود
Specified Parcelsاطلاعات دقیق هر پارسل (وزن، ابعاد) همراه با ثبت ارسال ارسال می‌شودزمانی که اطلاعات همه پارسل‌ها در لحظه ثبت مشخص است
Estimated Capacityتخمینی از ظرفیت کلی رزرو می‌شود؛ پارسل‌ها بعداً اضافه می‌شوندزمانی که تعداد یا جزئیات دقیق پارسل‌ها در لحظه ثبت مشخص نیست

روش اول : ثبت با پارسل مشخص (Specified Parcels)

این سرویس برای زمانی است که در لحظه ثبت سفارش، جزئیات دقیق بسته‌بندی (تعداد، وزن و ابعاد پارسل‌ها) به طور کامل مشخص است.

POSThttps://api-demo.digiexpress.ir/api/v2/shipments
  • Authorization: <access_token>

ساختار درخواست (Request Body):

json
{
  "consignor_unique_reference_id": "string",
  "revive_if_already_registered_and_failed": true,
  "cargo_ready_date_time": "string",
  "promise_start_date_time": "string",
  "promise_end_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"
  },
  "cargo_submitter_person": {
    "first_name": "string",
    "last_name": "string",
    "national_code": "string",
    "first_mobile": "string",
    "second_mobile": "string",
    "phone": "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"
  },
  "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"
      ],
      "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"
    }
  ]
}

جدول پارامترهای اصلی

۱۱ ردیف
consignor_unique_reference_id
نوعstringوضعیتاجباری
توضیح فنی
شناسه یکتای شما برای این ارسال؛ باید در کل سیستم منحصربه‌فرد باشد . بین 5 تا 15 رقم باشد.
توضیح بیزینس
کد سفارش یا شماره فاکتور در سمت سیستم شما که به عنوان کلید اصلی ردیابی استفاده می‌شود. حتماً باید به صورت عدد خام بین 5 تا 15 رقم باشد.
revive_if_already_registered_and_failed
نوعbooleanوضعیتاجباری
توضیح فنی
اگر مقدار true باشد، در صورت شکست سفارش قبلی با همین شناسه یکتا (consignor_unique_reference_id)، سیستم بدون ایجاد خطای تکراری آن را احیا (Revive) و با اطلاعات جدید مجدداً ثبت می‌کند.
توضیح بیزینس
در صورتی که سفارش قبلی شما به هر دلیلی ریجکت یا متوقف شده باشد، با این فلگ می‌توانید همان شناسه ی یکتا (consignor_unique_reference_id) را بدون نیاز به تولید کد جدید، اصلاح و دوباره در سیستم زنده کنید. ( توضیحات تکمیلی در ادامه در بخش راهنمای جامع قابلیت Revive آمده است . )
cargo_ready_date_time
نوعstringوضعیتاجباری
توضیح فنی
زمان آماده بودن بسته زمان ارسال شده نمی‌تواند در گذشته باشد. (فرمت: YYYY-MM-DD HH:MM:SS)
توضیح بیزینس
زمان دقیق آماده بودن بسته در انبار فرستنده؛ سیستم دیجی‌اکسپرس اولین بازه جمع آوری ممکن بعد از این تاریخ را برای شما پیدا می‌کند.
promise_start_date_time
نوعstringوضعیتاختیاری
توضیح فنی
شروع بازه تعهد تحویل به مشتری؛ زمان آن نباید قبل از زمان آماده بودن بسته (cargo_ready_date_time) باشد. (فرمت: YYYY-MM-DD HH:MM:SS)
توضیح بیزینس
در سناریوی دو مرحله‌ای، این فیلد زمان شروع پنجره‌ای است که مشتری شما در سایت یا اپلیکیشنتان انتخاب کرده است. در صورت خالی بودن، سیستم اولین بازه توزیع ممکن را تخصیص می‌دهد.
promise_end_date_time
نوعstringوضعیتاختیاری
توضیح فنی
پایان بازه تعهد تحویل به مشتری؛ در صورت خالی بودن بازه شروع، این فیلد نیز باید خالی بماند و زمان آن نباید قبل از زمان آماده بودن بسته باشد. (فرمت: YYYY-MM-DD HH:MM:SS)
توضیح بیزینس
در سناریوی دو مرحله‌ای(shipping time window )، این فیلد زمان پایان پنجره‌ای است که مشتری شما انتخاب کرده است. در صورت خالی بودن، سیستم به طور خودکار بازه تعهد را فیکس می‌کند.
origin_point_id
نوعstringوضعیتاختیاری
توضیح فنی
ID هاب دیجی‌اکسپرس (در صورت تحویل مستقیم به هاب، با تیم دیجی‌اکسپرس هماهنگ کنید).
توضیح بیزینس
در صورتی که بار را خودتان مستقیماً به یکی از هاب‌های شناخته‌شده دیجی‌اکسپرس تحویل می‌دهید، آیدی آن هاب را وارد می‌کنید تا فرآیند جمع‌آوری (پیکاپ) سیستماتیک حذف شود.
origin_address
نوعobjectوضعیتاجباری
توضیح فنی
اطلاعات کامل آدرس مبدأ. در محیط دمو مبدأ باید همیشه تهران باشد. (جزییات بیشتر در جدول پارامترها در ادامه )
توضیح بیزینس
محل دقیق جمع‌آوری سفارش توسط راننده دیجی‌اکسپرس (لوکیشن انبار یا مغازه شما) هر شیپمنت باید یک آدرس جمع‌آوری مشخص داشته باشد.
destination_point_id
نوعstringوضعیتاختیاری
توضیح فنی
مشابه origin_point_id برای مقصد.
توضیح بیزینس
در موارد خاص لجستیکی که مقصد نهایی تحویل، یکی از لاکرها یا هاب‌های مشخص دیجی‌اکسپرس باشد استفاده می‌شود.
destination_address
نوعobjectوضعیتاجباری
توضیح فنی
اطلاعات کامل آدرس مقصد. در محیط دمو مقصد باید همیشه چیتگر باشد. (جزییات بیشتر در جدول پارامترها در ادامه )
توضیح بیزینس
محل دقیق تحویل نهایی سفارش به مشتری هر شیپمنت باید یک آدرس تحویل مشخص داشته باشد.
constant_proof_of_delivery_code_for_all_parcels
نوعstringوضعیتاختیاری
توضیح فنی
کد POD 5 رقمی؛ کمتر یا بیشتر از 5 رقم خطا می‌دهد.
توضیح بیزینس
کد تأیید تحویل (پین‌کد 5 رقمی): در صورت عدم ارسال از جانب شما، دیجی‌اکسپرس یک کد تصادفی تولید کرده، به مشتری پیامک می‌کند و از طریق وب‌هوک نیز به شما اطلاع می‌دهد.
parcels
نوعarray[object]وضعیتاجباری(در این روش)
توضیح فنی
آرایه شامل مشخصات فیزیکی بسته‌ها (وزن، حجم و...). (جزییات بیشتر در جدول پارامترها در ادامه )
توضیح بیزینس
لیست بسته‌های واقعی تشکیل‌دهنده این سفارش. در صورت استفاده از سناریوی ثبت با پارسل مشخص، پر کردن این آرایه اجباری است.

جدول پارامترهای هر آیتم در origin_address - destination_address

۸ ردیف
city_id
نوعstringوضعیتاجباری
توضیح
شناسه شهر (از API get_cities دریافت کنید).
توضیح بیزینس
کد سیستمی شهر مبدأ یا مقصد. برای جلوگیری از خطا، حتماً ابتدا سرویس عمومی دریافت شهرها را صدا بزنید و آیدی دقیق همان شهر را اینجا بفرستید.
full_address
نوعstringوضعیتاجباری
توضیح
آدرس کامل متنی
توضیح بیزینس
نشانی دقیق پستی که راننده برای پیدا کردن محل جمع‌آوری (مبدا) یا تحویل (مقصد) روی نقشه و به صورت فیزیکی به آن مراجعه می‌کند.
latitude
نوعstringوضعیتاختیاری
توضیح
عرض جغرافیایی آدرس مبدأ. این فیلد اختیاری است، اما در صورت در دسترس بودن مختصات دقیق مبدأ، قویاً توصیه می‌شود ارسال شود تا محل Pickup با دقت بیشتری شناسایی شود.
توضیح بیزینس
لوکیشن دقیق روی نقشه. اگر این فیلد را نفرستید، سیستم لوکیشن متنی شما را به مختصات تبدیل می‌کند؛ اما ارسال آن به مسیریابی دقیق‌تر راننده کمک پیش‌فرض می‌کند.
longitude
نوعstringوضعیتاختیاری
توضیح
طول جغرافیایی آدرس مبدأ. این فیلد اختیاری است، اما در صورت در دسترس بودن مختصات دقیق مبدأ، قویاً توصیه می‌شود همراه با latitude ارسال شود تا محل Pickup با دقت بیشتری شناسایی شود.
توضیح بیزینس
لوکیشن دقیق روی نقشه (مکمل فیلد latitude) جهت ناوبری دقیق‌تر رانندگان لجستیک.
postal_code
نوعstringوضعیتاختیاری
توضیح
کد پستی
توضیح بیزینس
کد پستی محل مبدأ یا مقصد که جهت صحه‌گذاری روی آدرس استفاده می‌شود، اما برای ثبت سفارش الزامی و اجباری نیست.
building_number
نوعstringوضعیتاختیاری
توضیح
شماره پلاک
توضیح بیزینس
شماره پلاک ملک جهت تفکیک دقیق ساختمان در کوچه یا خیابان اصلی.
unit
نوعstringوضعیتاختیاری
توضیح
شماره واحد
توضیح بیزینس
شماره واحد یا طبقه در ساختمان‌های چندواحدی جهت دسترسی سریع‌تر توزیع‌کننده.
description
نوعstringوضعیتاختیاری
توضیح
توضیحات تکمیلی آدرس
توضیح بیزینس
کروکی متنی یا نکات خاص آدرس (مانند: "زنگ سمت راست"، "مغازه نبش کوچه" یا "تحویل به نگهبانی") جهت راهنمایی راننده.

جدول پارامترهای هر آیتم در cargo_submitter_person / recipient_person

۶ ردیف
first_name
نوعstringوضعیتاجباری
توضیح فنی
نام
توضیح بیزینس
نام کوچک شخص تحویل‌دهنده (در مبدا) یا گیرنده مرسوله (در مقصد).
last_name
نوعstringوضعیتاجباری
توضیح فنی
نام‌خانوادگی
توضیح بیزینس
نام خانوادگی شخص تحویل‌دهنده یا گیرنده جهت احراز هویت در زمان تحویل بار.
first_mobile
نوعstringوضعیتاجباری
توضیح فنی
شماره موبایل (نه شماره ثابت؛ برای ارسال SMS و تماس استفاده می‌شود)
توضیح بیزینس
شماره همراه اصلی گیرنده یا فرستنده. این شماره کانال ارتباطی حیاتی سیستم با مشتری است و تمام پیامک‌های وضعیت سفارش، لینک ردیابی و تماس راننده روی آن انجام می‌شود.
national_code
نوعstringوضعیتاختیاری
توضیح فنی
کد ملی
توضیح بیزینس
کد ملی شخص که در موارد خاص بیزینسی یا احراز هویت‌های حقوقی مرسولات کاربرد دارد.
second_mobile
نوعstringوضعیتاختیاری
توضیح فنی
شماره موبایل دوم
توضیح بیزینس
شماره تماس اضطراری. اگر راننده نتواند با شماره اول تماس بگیرد، از این شماره برای بستر ارتباطی پشتیبان استفاده می‌کند.
phone
نوعstringوضعیتاختیاری
توضیح فنی
شماره تلفن ثابت
توضیح بیزینس
شماره تلفن ثابت محل (همراه با کد شهر) جهت آرشیو اطلاعات تماس سنتی.

جدول پارامترهای هر آیتم در parcels

۱۰ ردیف
dimensionsInCMs
نوعarray[string]وضعیتاجباری
توضیح فنی
ابعاد بسته به سانتی‌متر به صورت یک آرایه سه عضوی از اعداد صحیح به فرمت [طول, عرض, ارتفاع]
توضیح بیزینس
سایز فیزیکی بسته. سیستم لجستیک بر اساس این ابعاد، دسته‌بندی سایز مرسوله (Tier) را مشخص کرده و خودروی مناسب (موتور، سواری یا وانت) را تخصیص می‌دهد.
weight_grams
نوعstringوضعیتاجباری
توضیح فنی
وزن به گرم
توضیح بیزینس
وزن فیزیکی خالص بسته. این پارامتر در محاسبات ظرفیت وسیله نقلیه و همچنین توزیع بار انبار نقش کلیدی دارد.
content_value_price_rials
نوعstringوضعیتاجباری
توضیح فنی
ارزش ریالی (برای محاسبه بیمه)
توضیح بیزینس
ارزش واقعی کالا به ریال که مبنای اصلی محاسبه هزینه بیمه مرسوله قرار می‌گیرد تا در صورت بروز خسارت احتمالی، جبران زیان بر این اساس انجام شود.
description
نوعstringوضعیتاختیاری
توضیح فنی
توضیح کلی بسته
توضیح بیزینس
نکات خاص مربوط به حمل فیزیکی بسته (مانند: "شکستنی" یا "جهت جعبه رو به بالا باشد").
items_description
نوعstringوضعیتاختیاری
توضیح فنی
شرح محتویات
توضیح بیزینس
نام یا نوع کالای داخل بسته (مانند: "کتاب"، "پوشاک")
consignor_reference_id
نوعstringوضعیتاختیاری
توضیح فنی
شناسه پارسل از طرف شما
توضیح بیزینس
در صورتی که یک سفارش (Shipment) چند بسته داشته باشد، می‌توانید کد رهگیری اختصاصی هر بسته در سیستم خودتان را اینجا بفرستید تا در متدهای حذفی یا وب‌هوک‌ها بر اساس همین کد با سیستم خودتان ماک کنید.
payable_price_rials_by_recipient
نوعstringوضعیتاختیاری
توضیح فنی
مبلغ COD (پرداخت در محل) به ریال
توضیح بیزینس
در صورتی که سفارش شما مبلغ پرداخت در محل دارد، مقدار ریالی آن را در این فیلد وارد کنید تا راننده دیجی‌اکسپرس هنگام تحویل مرسوله مبلغ را از گیرنده دریافت کند. در غیر این صورت، فیلد را خالی یا null بگذارید. توجه: این قابلیت فقط برای کانساینرهایی قابل استفاده است که سرویس پرداخت در محل برای آن‌ها فعال شده باشد.
packaging_type
نوعstringوضعیتاجباری
توضیح فنی
نوع بسته‌بندی فیزیکی پارسل را مشخص می‌کند. مقدار این فیلد باید یکی از مقادیر مجاز packet یا box باشد. مقدار packet برای بسته‌هایی استفاده می‌شود که در پاکت یا بسته‌بندی سبک/پاکتی ارسال می‌شوند، و مقدار box برای بسته‌هایی است که به‌صورت جعبه بسته‌بندی شده‌اند.
توضیح بیزینس
این فیلد به دیجی‌اکسپرس کمک می‌کند نوع بسته‌بندی واقعی مرسوله را بشناسد و فرآیند حمل، چیدمان، اسکن، قیمت گذاری و جابه‌جایی بسته متناسب با مدل بسته‌بندی انجام شود.
characteristics
نوعarray[string]وضعیتاجباری
توضیح فنی
ویژگی عملیاتی یا ماهیت حساس کالای داخل پارسل را مشخص می‌کند. هر مقدار داخل آرایه باید یکی از مقادیر مجاز gold یا normal باشد. مقدار gold برای پارسل‌هایی استفاده می‌شود که محتوای آن‌ها طلا، و مقدار normal برای سایر بسته‌های عادی استفاده می‌شود.
توضیح بیزینس
این فیلد برای تفکیک بسته‌های حساس از بسته‌های عادی استفاده می‌شود. اگر کالای داخل بسته طلا باشد، مقدار gold ارسال می‌شود تا سیستم و عملیات دیجی‌اکسپرس بتوانند این بسته را به‌عنوان مرسوله حساس شناسایی کنند و در فرآیندهای بعدی مثل هندلینگ، مانیتورینگ، کنترل عملیاتی یا گزارش‌گیری، رفتار متناسب با آن اعمال شود. برای کالاهای غیرطلا و عادی، مقدار normal ارسال می‌شود.
scannable_codes
نوعarray[string]وضعیتاختیاری
توضیح فنی
آرایه‌ای از کدهای قابل اسکن اختصاصی کانساینر در سطح هر پارسل. هر مقدار باید در سطح کل سیستم دیجی‌اکسپرس یکتا باشد، بین ۱۲ تا ۳۶ کاراکتر باشد و تکراری نباشد. حداقل و حداکثر طول شامل خود ۱۲ و ۳۶ نیز می‌شود.
توضیح بیزینس
برای زمانی است که کانساینر می‌خواهد کد داخلی، بارکد انبار، کد WMS یا هر شناسه قابل اسکن اختصاصی خودش نیز در عملیات دیجی‌اکسپرس قابل اسکن و شناسایی باشد. اگر چند کد ارسال شود، همه آن‌ها برای شناسایی پارسل معتبرند، اما روی لیبل دیجی‌اکسپرس اولین مقدار آرایه درج می‌شود.

راهنمای جامع قابلیت Revive (احیای سفارش‌های ناموفق)

اگر در جدول پارامترهای اصلی، فیلد revive_if_already_registered_and_failed را برابر با true قرار دهید، قابلیت Revive فعال می‌شود. این ویژگی برای زمانی است که یک سفارش پس از ثبت، به وضعیت نهایی ناموفق (مانند Cancel، Reject یا Pickup Fail) رسیده باشد و شما بخواهید بدون تغییر دادن کد مرجع خود (consignor_unique_reference_id)، سفارش را اصلاح و مجدداً ارسال کنید.

جدول فرآیند و رفتار سیستم در حالت Revive

۳ ردیف
وضعیت بررسی سیستماقدام بعدی سیستمخروجی و رفتار نهایی
سفارش قبلی وجود نداردسفارش را به عنوان یک مرسوله کاملاً جدید ثبت می‌کند.پاسخ موفقیت‌آمیز (HTTP 200) صادر می‌شود.
سفارش قبلی در وضعیت نهایی ناموفق است (قابل احیا)در فرآیند احیا، تمام اطلاعات سفارش باید مجدداً ارسال شود؛ اطلاعات قبلی حذف شده و سفارش با داده‌های جدید ثبت و فعال می‌شود. ( امکان تغییر در اطلاعات وجود دارد. )مهم: سفارش با موفقیت احیا می‌شود اما کد پارسل فیزیکی (parcel_code) کاملاً تغییر خواهد کرد.
سفارش قبلی موفق یا در جریان است (غیرقابل احیا)فرآیند را متوقف کرده و امکان تغییر اطلاعات را نمی‌دهد.سیستم خطای تکراری بودن شناسه یکتا (consignor_unique_reference_id) (خطا با کد1079) برمی‌گرداند. کنار همین خطا کل مپینگ شیپمنتی که قبلا رجیستر شده قبلا مجدد در ریسپانس نمایش داده میشود.

نکات کلیدی بیزینسی و فنی در احیای سفارش

  • ادغام در API اصلی: توجه داشته باشید که Revive یک API جداگانه ندارد؛ این قابلیت در فیلد revive_if_already_registered_and_failed در API ثبت سفارش نسخه دو (Register V2) عمل می‌کند.
  • تغییر حتمی بارکد لیبل: حیاتی‌ترین نکته لجستیکی این است که پس از Revive موفق، با اینکه شناسه یکتا (consignor_unique_reference_id) شما ثابت مانده، اما سیستم کد پارسل (parcel_code) جدیدی تولید می‌کند. بنابراین حتماً باید لیبل جدید را مجدداً دریافت و روی بسته بچسبانید؛ رانندگان دیجی‌اکسپرس امکان اسکن بارکد قبلی را ندارند.
  • کاربرد اصلی: این فرآیند صرفاً زمانی کاربرد دارد که بسته هنوز به دست مشتری نرسیده و به هر دلیلی در مراحل اولیه (مثل خطا در آدرس یا عدم حضور شما در زمان پیکاپ) لغو یا رد شده است و شما تمایلی به تولید یک Reference ID جدید در سیستم خود ندارید.

پس از ارسال درخواست، در صورتی که مراحل بالا را به درستی انجام داده باشید و سیستم مرسوله را با موفقیت ثبت یا احیا کند، پاسخ (HTTP 200 (OK دریافت خواهید کرد.

در ادامه، نمونه ساختار پاسخ موفق (Response Body) سیستم و جدول تشریح فیلدهای فنی و بیزینسی آن آمده است:

Response موفق (200): API Specified Parcels

json
{
  "order_id": "string",
  "order_number": "string",
  "shipment_id": "string",
  "shipment_code": "string",
  "consignor_unique_reference_id": "string",
  "parcel_summaries": [
    {
      "parcel_id": "string",
      "parcel_code": "string",
      "consignor_reference_id": "string",
      "scannable_codes": [
        "string"
      ]
    }
  ],
  "estimated_capacity": {
    "parcels_total_estimated_weight_grams": "string",
    "parcels_total_estimated_volume_in_cm3": "string",
    "parcels_used_weight_grams": "string",
    "parcels_used_volume_in_cm3": "string",
    "parcels_remained_weight_grams": "string",
    "parcels_remained_volume_in_cm3": "string"
  },
  "parcel_size_tier": "NORMAL"
}

جدول پارامترهای خروجی موفق ثبت سفارش (Response Body)

۸ ردیف
order_id
نوع دادهstring
توضیح فنی
شناسه یکتا و سیستمی کل سفارش در دیجی‌اکسپرس.
توضیح بیزینسی
شناسه یکتای سیستمی سفارش در دیجی‌اکسپرس. این فیلد یک شناسه داخلی است و کارکرد اختصاصی برای کانساینر ندارد.
order_number
نوع دادهstring
توضیح فنی
شماره سفارش
توضیح بیزینسی
شماره فاکتور یا پیگیری سفارش لجستیکی که در پنل‌ها و مکاتبات عمومی کاربرد دارد.
shipment_id
نوع دادهstring
توضیح فنی
شناسه یکتای مرسوله در سیستم دیجی‌اکسپرس.
توضیح بیزینسی
مهم‌ترین فیلد برای ذخیره‌سازی. این آیدی کلید اصلی شما برای فرآیندهایی مثل لغو مرسوله یا پیگیری وضعیت است.
shipment_code
نوع دادهstring
توضیح فنی
کد یا بارکد اصلی شیپمنت (مانند DP987654321).
توضیح بیزینسی
کد رهگیری کلان مرسوله جهت ردیابی‌های لجستیکی و استفاده در عملیات دیجی‌اکس‌پرس
consignor_unique_reference_id
نوع دادهstring
توضیح فنی
همان شناسه یکتایی که در ریکوئست فرستاده بودید.
توضیح بیزینسی
کد سفارش سمت شما که سیستم آن را جهت تطبیق دیتای دو طرف برمی‌گرداند.
parcel_summaries
نوع دادهarray[object]
توضیح فنی
آرایه‌ای از خلاصه‌ اطلاعات بسته‌های ایجاد شده.
توضیح بیزینسی
لیست پارسل‌های فیزیکی ثبت شده شامل: parcel_id (آیدی یکتای بسته)، parcel_code (بارکد روی لیبل) و consignor_reference_id (کد مرجع شما به ازای هر پارسل).
estimated_capacity
نوع دادهobject
توضیح فنی
وضعیت ظرفیت تخمینی مرسوله شامل فیلدهای کل، مصرف‌شده و باقی‌مانده وزن و حجم.
توضیح بیزینسی
مدیریت ظرفیت مرسوله. نکته: اگر از روش Specified Parcels استفاده شده باشد، مقادیر تمام فیلدهای این آبجکت برابر با -1 برگشت داده می‌شود.
parcel_size_tier
نوع دادهstring
توضیح فنی
دسته‌بندی ابعادی مرسوله بر اساس قوانین لجستیک (مانند NORMAL).
توضیح بیزینسی
سایز نهایی سفارش شما که بر اساس ابعاد و وزن پارسل‌ها محاسبه شده و مبنای تخصیص خودرو قرار می‌گیرد.

مقادیر -1 در estimated_capacity به این معناست که از روش Specified Parcels استفاده شده و ظرفیت تخمینی وجود ندارد.

حتماً shipment_id دریافتی را در سیستم خود ذخیره کنید. در صورتی که به هر دلیلی این شناسه ذخیره نشد، می‌توانید مجدداً متد را با همان consignor_unique_reference_id قبلی فراخوانی (Call) کنید؛ در این حالت، سیستم خطای تکراری بودن کد مرجع را می‌دهد، اما کل ریسپانس اولیه (که شامل shipment_id نیز می‌شود) را مجدداً در پاسخ برمی‌گرداند.

دریافت HTTP 200 به معنای تحویل قطعی نیست. ممکن است پس از 200 سیستم به دلایلی (مثل آدرس خارج از ایران یا بازه تحویل پشتیبانی‌نشده) shipment را رد کند و نتیجه از طریق Webhook اطلاع‌رسانی شود.

در بخش مبدأ (Origin):

اگر بار را از انبار/مغازه خودتان تحویل می‌دهید، فقط آدرس مبدأ (origin_address) را بفرستید.

اگر بار را خودتان به یکی از هاب‌های دیجی‌اکسپرس می‌رسانید، فقط شناسه هاب مبدأ (origin_point_id) را بفرستید.

ارسال همزمان آدرس مبدأ و شناسه هاب مبدأ خطای سیستمی ایجاد می‌کند.

در بخش مقصد (Destination):

اگر بار مستقیم به دست مشتری نهایی می‌رسد، فقط آدرس مقصد (destination_address) را بفرستید.

اگر بار باید به یک هاب یا نقطه توزیع خاص برود، فقط شناسه هاب مقصد (destination_point_id) را بفرستید.

❌ارسال همزمان آدرس مقصد و شناسه هاب مقصد خطای سیستمی ایجاد می‌کند.

راهنمای جامع قابلیت scannable_codes

قابلیت scannable_codes برای زمانی استفاده می‌شود که کانساینر بخواهد علاوه بر parcel_code تولیدشده توسط دیجیاکسپرس، کد یا کدهای اختصاصی خودش نیز برای همان پارسل قابل اسکن و قابل شناسایی باشند.

این فیلد در سطح هر parcel ارسال می‌شود و به‌صورت آرایه‌ای از رشته‌ها است. بنابراین کانساینر می‌تواند برای هر پارسل یک یا چند کد قابل اسکن ارسال کند.

json
{
  "scannable_codes": [
    "WAREHOUSE-BC-100245",
    "WMS-PKG-88991234"
  ]
}

در این مثال، هر دو مقدار به همان پارسل متصل می‌شوند. اگر هرکدام از این کدها در فرآیندهای عملیاتی دیجی‌اکسپرس اسکن یا جستجو شوند، سیستم همان پارسل را شناسایی می‌کند.

کاربرد عملیاتی

در حالت عادی، دیجی‌اکسپرس برای هر پارسل یک parcel_code تولید می‌کند که روی لیبل قرار می‌گیرد و در عملیات‌هایی مثل دریافت بسته، جابه‌جایی، افزودن به کیف، رهگیری، اسکن توسط اپلیکیشن راننده و سایر مراحل عملیاتی استفاده می‌شود.

با ارسال scannable_codes، کانساینر می‌تواند کدهای داخلی خودش مثل بارکد انبار، شناسه WMS، کد بسته‌بندی، کد پستی، کد سفارش یا هر شناسه قابل اسکن دیگری را نیز به همان پارسل متصل کند. در این حالت، سیستم دیجیاکسپرس می‌تواند آن کدها را مثل parcel_code شناسایی کند.

قوانین اعتبارسنجی

مقدارهای ارسال‌شده در scannable_codes باید در سطح کل سیستم دیجی‌اکسپرس یکتا باشند. این یکتایی فقط در سطح همان کانساینر بررسی نمی‌شود؛ یعنی اگر یک کد قبلاً توسط هر کانساینر دیگری در سیستم ثبت شده باشد، امکان استفاده مجدد از آن وجود ندارد.

طول هر مقدار باید بین ۱۲ تا ۳۶ کاراکتر باشد. مقدار ۱۲ کاراکتری و مقدار ۳۶ کاراکتری نیز معتبر هستند.

اگر هرکدام از مقدارهای ارسال‌شده تکراری باشد، درخواست با خطای تکراری بودن کد قابل اسکن مواجه می‌شود. این تکرار می‌تواند در یکی از حالت‌های زیر اتفاق بیفتد:

● همان کد قبلا برای پارسل دیگری در سیستم دیجی‌اکسپرس ثبت شده باشد. ● همان کد قبلاً توسط کانساینر دیگری ثبت شده باشد. ● داخل همان آرایه scannable_codes یک مقدار دوبار تکرار شده باشد.

بنابراین بهتر است کانساینر از کدهای عمومی، کوتاه، موقت یا قابل حدس استفاده نکند و فقط کدهایی را ارسال کند که واقعا در سیستم خودش برای همان بسته یکتا و قابل اتکا هستند.

رفتار روی لیبل دیجی‌اکسپرس

اگر برای یک پارسل چند مقدار در scannable_codes ارسال شود، همه آن‌ها در سیستم دیجی‌اکسپرس برای شناسایی همان پارسل معتبر هستند؛ اما روی لیبل استاندارد دیجی‌اکسپرس فقط اولین مقدار آرایه قرار می‌گیرد.

json
{
  "scannable_codes": [
    "WAREHOUSE-BC-100245",
    "WMS-PKG-88991234",
    "POST-TRACK-2478912345"
  ]
}

در این مثال، مقدار WAREHOUSE-BC-100245 روی لیبل دیجی‌اکسپرس، پشت Barcode و QR Code قرار می‌گیرد. اما اگر مقدارهای WMS-PKG-88991234 یا POST-TRACK-2478912345 نیز در عملیات دیجی‌اکسپرس اسکن یا جستجو شوند، سیستم همچنان همان پارسل را شناسایی می‌کند.

رفتار در فرآیند Revive

اگر یک Shipment به وضعیت نهایی ناموفق برسد و کانساینر بخواهد همان سفارش را با قابلیت Revive احیا کند، می‌تواند همان scannable_codes قبلی را دوباره برای پارسل‌های سفارش احیاشده ارسال کند.

در فرآیند Revive، اطلاعات قبلی پارسل‌ها پاک می‌شود و سفارش با اطلاعات جدید ثبت می‌شود. به همین دلیل، استفاده مجدد از همان کدهای قابل اسکن قبلی برای همان سفارش احیاشده مجاز است.

اما اگر کانساینر بخواهد همان کد را در یک Shipment جدید و مستقل استفاده کند، سیستم آن را به‌عنوان کد تکراری شناسایی می‌کند و درخواست با خطا مواجه می‌شود.

نکات مهم

● scannable_codes جایگزین parcel_code نیست. ● scannable_codes جایگزین consignor_reference_id نیست. ● این فیلد فقط در سطح parcel ارسال می‌شود، نه در سطح Shipment. ● همه مقدارهای داخل آرایه باید string باشند. ● هر مقدار باید بین ۱۲ تا ۳۶ کاراکتر باشد. ● هر مقدار باید در سطح کل سیستم دیجی‌اکسپرس یکتا باشد. ● اگر چند مقدار ارسال شود، همه آن‌ها قابل اسکن هستند، اما فقط اولین مقدار روی لیبل دیجی‌اکسپرس قرار می‌گیرد. ● در صورت Revive همان سفارش، امکان استفاده مجدد از scannable_codes قبلی وجود دارد.

روش دوم: ثبت با ظرفیت تخمینی (Estimated Capacity)

POSThttps://api-demo.digiexpress.ir/api/v2/shipments

این روش برای زمانی طراحی شده است که اطلاعات فیزیکی دقیق پارسل‌ها در لحظه ثبت سفارش مشخص نیست. در این سناریو، شما ابتدا یک ظرفیت کلی در سیستم رزرو می‌کنید و بعداً پارسل‌ها را به مرور به مرسوله اضافه خواهید کرد.

ساختار درخواست (Request Body): ساختار کلی مشابه روش قبل (Specified Parcels) است، با این تفاوت که به جای آرایه parcels، آبجکت "max_shipment_capacity_estimation_for_pre_reservation" ارسال می‌شود:

text
"consignor_unique_reference_id": "string",
 "revive_if_already_registered_and_failed": true,
 "cargo_ready_date_time": "string",
 "promise_start_date_time": "string",
 "promise_end_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"
 },
 "cargo_submitter_person": {
 "first_name": "string",
 "last_name": "string",
 "national_code": "string",
 "first_mobile": "string",
 "second_mobile": "string",
 "phone": "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"
 },
 "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"
 ]
 },
}

جدول پارامترهای هر آیتم در Estimated Capacity:

۳ ردیف
parcels_total_estimated_weight_grams
نوع دادهstringوضعیتاجباری
توضیح فنی
وزن کل تخمینی همه پارسل‌ها به گرم.
توضیح بیزینسی
مجموع وزن حدودی کل بسته‌هایی که قرار است بعداً برای این سفارش ارسال کنید؛ سیستم بر این اساس گنجایش وزنی ناوگانش را رزرو می‌کند.
all_parcels_as_single_box_estimated_max_dimensions_cm
نوع دادهarray[string]وضعیتاجباری
توضیح فنی
ابعاد حداکثری تخمینی کل بسته‌ها، در حالتی که تمام پارسل‌ها به‌عنوان یک باکس واحد در نظر گرفته شوند. مقدار باید به‌صورت [طول، عرض، ارتفاع] و بر حسب سانتی‌متر ارسال شود.
توضیح بیزینسی
در صورتی که هنوز جزئیات تک‌تک پارسل‌ها مشخص نیست، با این فیلد ابعاد کلی فضای موردنیاز برای کل سفارش اعلام می‌شود. این اطلاعات به دیجیاکسپرس کمک می‌کند ظرفیت فیزیکی لازم برای حمل سفارش را تخمین بزند و ناوگان متناسب را اختصاص دهد.
each_parcel_size_tier
نوع دادهstringوضعیتاجباری
توضیح فنی
سطح سایز هر پارسل. مقادیر مجاز: NORMAL, MEDIUM, LARGE
توضیح بیزینسی
گروه ابعادی کالاهایی که قرار است اضافه شوند؛ سیستم با توجه به این فلگ متوجه می‌شود که چه نوع خودرویی (مانند موتور یا وانت) را باید برای فرآیند لجستیک شما آماده نگه دارد.

جدول ماتریس سایزبندی بسته‌ها (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 کیلوگرم باشد.

نکات و قوانین بسیار مهم رزرو ظرفیت

  • شما به هیچ عنوان نمی‌توانید همزمان دو فیلد parcels و max_shipment_capacity_estimation_for_pre_reservation را در یک درخواست بفرستید. ارسال همزمان این دو فیلد منجر به خطای ساختاری می‌شود و باید متناسب با فلو، یکی را انتخاب کنید.
  • قانون جداسازی سایز مرسولات: پارسل‌های دسته LARGE (بزرگ‌سایز) نمی‌توانند در یک Shipment مشترک با پارسل‌های NORMAL یا MEDIUM قرار بگیرند.
  • مثال بیزینسی: اگر یک سفارش مشتری شامل یک عدد "گوشی موبایل" و یک عدد "یخچال" باشد، به دلیل تفاوت ساختاری در تخصیص خودرو، این دو کالا حتماً باید در دو Shipment جداگانه ثبت شوند.

Response موفق (200): در صورتی که درخواست ثبت سفارش با روش ظرفیت تخمینی (Estimated Capacity) با موفقیت در سیستم ثبت شود، پاسخ (HTTP 200 (OK همراه با ساختار (Response Body) زیر صادر خواهد شد:

json
{
  "order_id": "string",
  "order_number": "string",
  "shipment_id": "string",
  "shipment_code": "string",
  "consignor_unique_reference_id": "string",
  "parcel_summaries": [
    {
      "parcel_id": "string",
      "parcel_code": "string",
      "consignor_reference_id": "string",
      "scannable_codes": [
        "string"
      ]
    }
  ],
  "estimated_capacity": {
    "parcels_total_estimated_weight_grams": "string",
    "parcels_total_estimated_volume_in_cm3": "string",
    "parcels_used_weight_grams": "string",
    "parcels_used_volume_in_cm3": "string",
    "parcels_remained_weight_grams": "string",
    "parcels_remained_volume_in_cm3": "string"
  },
  "parcel_size_tier": "NORMAL"
}

جدول پارامترهای خروجی ثبت سفارش با ظرفیت تخمینی

۸ ردیف
order_id
نوع دادهstring
توضیح فنی
شناسه یکتا و سیستمی کل سفارش در دیجی‌اکسپرس.
توضیح بیزینسی
شناسه یکتای سیستمی سفارش در دیجی‌اکسپرس. این فیلد یک شناسه داخلی است و کارکرد اختصاصی برای کانساینر ندارد.
order_number
نوع دادهstring
توضیح فنی
شماره سفارش -8
توضیح بیزینسی
شماره پیگیری سفارش لجستیکی جهت مکاتبات عمومی و اداری.
shipment_id
نوع دادهstring
توضیح فنی
شناسه یکتای مرسوله در سیستم دیجی‌اکسپرس.
توضیح بیزینسی
مهم‌ترین فیلد برای ذخیره‌سازی. این آیدی کلید اصلی شما برای فرآیندهای بعدی (مانند متد افزودن پارسل، لغو مرسوله یا پیگیری وضعیت) است.
shipment_code
نوع دادهstring
توضیح فنی
کد یا بارکد اصلی شیپمنت (مانند DP98765).
توضیح بیزینسی
کد رهگیری کلان مرسوله جهت ردیابی‌های لجستیکی و استفاده در عملیات دیجی‌اکس‌پرس
consignor_unique_reference_id
نوع دادهstring
توضیح فنی
همان شناسه یکتایی که در ریکوئست فرستاده بودید.
توضیح بیزینسی
کد سفارش سمت شما که سیستم آن را جهت تطبیق دیتای دو طرف برمی‌گرداند.
parcel_summaries
نوع دادهarray[object]
توضیح فنی
آرایه‌ای از خلاصه اطلاعات بسته‌های ایجاد شده.
توضیح بیزینسی
نکته بیزینسی: در این روش، این آرایه در ابتدا کاملاً خالی ([ ]) برمی‌گردد؛ زیرا هنوز هیچ پارسل فیزیکی مشخصی به سفارش اضافه نشده است.
estimated_capacity
نوع دادهobject
توضیح فنی
وضعیت جزییات ظرفیت تخمینی مرسوله.
توضیح بیزینسی
این آبجکت شامل فیلدهای زیر جهت مدیریت ظرفیت است: • parcels_total_estimated_weight_grams: وزن کل رزرو شده اولیه (به گرم). • parcels_total_estimated_volume_in_cm3: حجم کل رزرو شده اولیه (به سانتی‌متر مکعب). • parcels_used_weight_grams: وزن استفاده شده توسط پارسل‌های واقعی (در ابتدا 0 است). • parcels_used_volume_in_cm3: حجم استفاده شده توسط پارسل‌های واقعی (در ابتدا 0 است). • parcels_remained_weight_grams: وزن باقی‌مانده مجاز برای افزودن بسته‌های بعدی. • parcels_remained_volume_in_cm3: حجم باقی‌مانده مجاز برای افزودن بسته‌های بعدی.
parcel_size_tier
نوع دادهstring
توضیح فنی
دسته‌بندی ابعادی مرسوله بر اساس قوانین لجستیک.
توضیح بیزینسی
گروه ابعادی کل سفارش (مثلا NORMAL) که بر اساس دیتای ارسالی شما ست شده و راننده متناسب با آن اعزام می‌شود.

قوانین و پویایی ظرفیت مرسوله: با توجه به فرآیند پردازش انبار شما، پس از هر بار فراخوانی موفق سرویس افزودن پارسل (Add Parcel) به این مرسوله، مشخصات فیزیکی بسته واقعی ثبت شده و به صورت خودکار مقادیر مصرف‌شده (used) افزایش یافته و از مقدار ظرفیت باقی‌مانده کانساینر (remained_weight و remained_volume) کسر خواهد شد. ( تمامی این موارد از طریق وب هوک نیز اطلاع رسانی خواهد شد )

مدیریت پارسل‌ها (تغییرات مرسوله‌های تخمینی)

پیش‌نیاز: این مرحله مخصوص سفارش‌هایی است که در گام قبل به صورت ظرفیت تخمینی (Estimated Capacity) ثبت شده‌اند و شما برای مدیریت آن‌ها به shipment_id یا consignor_unique_reference_id نیاز دارید.

شرط لجستیکی و زمانی بسیار مهم :

  • موفقیت در مسیریابی: شما تنها زمانی می‌توانید به یک مرسوله (Shipment) پارسل جدید اضافه کرده یا از آن حذف کنید که عملیات مسیریابی (Routing) آن در سیستم با موفقیت انجام شده باشد. در صورت عدم تخصیص روت (خطای No Route Found)، امکان مدیریت پارسل‌ها وجود نخواهد داشت.
  • بازه زمانی: تمام فرآیندهای این مرحله تنها تا زمانی در سیستم مجاز است که بازه جمع‌آوری (Pick-up) مرسوله شروع نشده باشد و بار هنوز نزد فرستنده بوده و وارد پروسه عملیاتی دیجی‌اکسپرس نشده باشد.

افزودن پارسل به ارسال (Add Parcel)

POSThttps://api-demo.digiexpress.ir/api/v2/shipments/{shipment_id}/parcels

این سرویس برای تبدیل ظرفیت رزرو شده اولیه به بسته‌های واقعی (فیزیکی) یا افزودن بسته‌های جدید به یک مرسوله موجود استفاده می‌شود.

  • انعطاف در شناسایی: در آدرس (URL) این اندپوینت، سیستم هم shipment_id (آیدی دیجی‌اکسپرس) و هم consignor_unique_reference_id (کد مرجع شما) را می‌پذیرد.
  • ارسال گروهی: پارسل‌ها به صورت یک آرایه دریافت می‌شوند؛ بنابراین می‌توانید در یک درخواست، چندین بسته را به صورت همزمان به مرسوله اضافه کنید.
  • امکان چاپ فوری لیبل: فرآیند افزودن پارسل به صورت همزمان (Sync) پردازش می‌شود و به محض دریافت ریسپانس 200، می‌توانید فوراً API چاپ لیبل بارکد آن پارسل را صدا بزنید.

ساختار درخواست افزودن پارسل (Request Body) :

text
"parcels": [
 {
 "dimensionsInCMs": [
 "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"
 }
 ]

جدول پارامترهای ورودی آرایه Parcels

۱۰ ردیف
dimensionsInCMs
نوع دادهarray[string]وضعیتاجباری
توضیح فنی
ابعاد بسته به سانتی‌متر [طول, عرض, ارتفاع]
توضیح بیزینسی
ابعاد فیزیکی بسته جهت اعتبارسنجی با سقف سایز رزرو شده (each_parcel_size_tier).
weight_grams
نوع دادهstringوضعیتاجباری
توضیح فنی
وزن دقیق بسته به گرم.
توضیح بیزینسی
وزن فیزیکی بسته جهت کسر از ظرفیت وزنی کل مرسوله.
content_value_price_rials
نوع دادهstringوضعیتاجباری
توضیح فنی
ارزش ریالی کالا داخل بسته.
توضیح بیزینسی
مبنای مالی محاسبه هزینه بیمه برای بسته اضافه شده.
payable_price_rials_by_recipient
نوع دادهstringوضعیتاختیاری
توضیح فنی
مبلغ پرداخت در محل (COD) به ریال
توضیح بیزینسی
در صورتی که این بسته مبلع نقدی دریافتی از مشتری دارد، مقدار آن را ست کنید؛ در غیر این صورت null بفرستید.
items_description
نوع دادهstringوضعیتاختیاری
توضیح فنی
شرح دقیق محتویات بسته.
توضیح بیزینسی
جهت شفافیت ماهیت کالا در فرآیند بازرسی و بیمه لجستیکی.
description
نوع دادهstringوضعیتاختیاری
توضیح فنی
توضیح کلی بسته.
توضیح بیزینسی
نکات خاص فیزیکی مرسوله (مانند شکستنی بودن) جهت راهنمایی توزیع‌کننده.
consignor_reference_id
نوع دادهstringوضعیتاختیاری
توضیح فنی
شناسه اختصاصی شما برای «هر پارسل».
توضیح بیزینسی
کد رهگیری این بسته در سیستم شما. در صورت مقداردهی، بعداً در متد حذف پارسل با رفرنس یا وب‌هوک‌ها می‌توانید از آن استفاده کنید.
packaging_type
نوع دادهstringوضعیتاجباری
توضیح فنی
نوع بسته‌بندی فیزیکی پارسل را مشخص می‌کند. مقدار این فیلد باید یکی از مقادیر مجاز packet یا box باشد. مقدار packet برای بسته‌هایی استفاده می‌شود که در پاکت یا بسته‌بندی سبک/پاکتی ارسال می‌شوند، و مقدار box برای بسته‌هایی است که به‌صورت جعبه بسته‌بندی شده‌اند.
توضیح بیزینسی
این فیلد به دیجی‌اکسپرس کمک می‌کند نوع بسته‌بندی واقعی مرسوله را بشناسد و فرآیند حمل، چیدمان، اسکن، قیمت گذاری و جابه‌جایی بسته متناسب با مدل بسته‌بندی انجام شود.
characteristics
نوع دادهarray[string]وضعیتاجباری
توضیح فنی
ویژگی عملیاتی یا ماهیت حساس کالای داخل پارسل را مشخص می‌کند. هر مقدار داخل آرایه باید یکی از مقادیر مجاز gold یا normal باشد. مقدار gold برای پارسل‌هایی استفاده می‌شود که محتوای آن‌ها طلا، و مقدار normal برای سایر بسته‌های عادی استفاده می‌شود.
توضیح بیزینسی
این فیلد برای تفکیک بسته‌های حساس از بسته‌های عادی استفاده می‌شود. اگر کالای داخل بسته طلا باشد، مقدار gold ارسال می‌شود تا سیستم و عملیات دیجی‌اکسپرس بتوانند این بسته را به‌عنوان مرسوله حساس شناسایی کنند و در فرآیندهای بعدی مثل هندلینگ، مانیتورینگ، کنترل عملیاتی یا گزارش‌گیری، رفتار متناسب با آن اعمال شود. برای کالاهای غیرطلا و عادی، مقدار normal ارسال می‌شود.
scannable_codes
نوع دادهarray[string]وضعیتاختیاری
توضیح فنی
آرایه‌ای از کدهای قابل اسکن اختصاصی کانساینر در سطح هر پارسل. هر مقدار باید در سطح کل سیستم دیجی‌اکسپرس یکتا باشد، بین ۱۲ تا ۳۶ کاراکتر باشد و تکراری نباشد. حداقل و حداکثر طول شامل خود ۱۲ و ۳۶ نیز می‌شود.
توضیح بیزینسی
برای زمانی است که کانساینر می‌خواهد کد داخلی، بارکد انبار، کد WMS یا هر شناسه قابل اسکن اختصاصی خودش نیز در عملیات دیجی‌اکسپرس قابل اسکن و شناسایی باشد. اگر چند کد ارسال شود، همه آن‌ها برای شناسایی پارسل معتبرند، اما روی لیبل دیجی‌اکسپرس اولین مقدار آرایه درج می‌شود.

ساختار پاسخ موفق افزودن پارسل (Response Body - HTTP 200)

json
{
  "parcels_total_estimated_weight_grams": "string",
  "parcels_total_estimated_volume_in_cm3": "string",
  "parcels_used_weight_grams": "string",
  "parcels_used_volume_in_cm3": "string",
  "parcels_remained_weight_grams": "string",
  "parcels_remained_volume_in_cm3": "string",
  "new_added_parcels": [
    {
      "parcel_id": "string",
      "parcel_code": "string",
      "consignor_reference_id": "string",
      "scannable_codes": [
        "string"
      ]
    }
  ],
  "all_parcels": [
    {
      "parcel_id": "string",
      "parcel_code": "string",
      "consignor_reference_id": "string",
      "scannable_codes": [
        "string"
      ]
    }
  ]
}

جدول پارامترهای خروجی متد افزودن پارسل

۷ ردیف
parcels_total_estimated_weight_grams
نوع دادهstring
توضیح فنی
وزن کل تخمینی رزرو شده اولیه (گرم).
توضیح بیزینسی
سقف مجاز وزنی که در مرحله ثبت مرسوله تعیین کرده بودید.
parcels_remained_weight_grams
نوع دادهstring
توضیح فنی
وزن باقی‌مانده مجاز (گرم).
توضیح بیزینسی
ظرفیت وزنیِ هنوز استفاده‌نشده. با افزودن هر پارسل، این عدد کاهش می‌یابد تا به صفر برسد.
parcels_total_estimated_volume_in_cm3
نوع دادهstring
توضیح فنی
حجم کل تخمینی رزرو شده اولیه (سانتی‌متر مکعب).
توضیح بیزینسی
سقف مجاز حجمی تعیین شده در درخواست اولیه.
parcels_remained_volume_in_cm3
نوع دادهstring
توضیح فنی
حجم باقی‌مانده مجاز (سانتی‌متر مکعب).
توضیح بیزینسی
گنجایش حجمیِ هنوز استفاده‌نشده مرسوله برای بسته‌های بعدی.
new_added_parcels
نوع دادهarray[object]
توضیح فنی
لیست پارسل‌های جدیداً اضافه شده در این ریکوئست.
توضیح بیزینسی
شامل آیدی سیستمی (parcel_id) و بارکد اختصاصی بسته (parcel_code) که باید فوراً روی لیبل فیزیکی بسته چاپ شود.
all_parcels
نوع دادهarray[object]
توضیح فنی
لیست کل پارسل‌های فعال این مرسوله تا این لحظه.
توضیح بیزینسی
نمایی از تمام بسته‌های فیزیکی که از ابتدا تا الان به این مرسوله متصل شده‌اند.
parcel_size_tier
نوع دادهstring
توضیح فنی
رده ابعادی بسته (مانند NORMAL).
توضیح بیزینسی
گروه ابعادی محاسبه شده برای مرسوله که مبنای تخصیص خودرو قرار می‌گیرد.

حذف پارسل از ارسال (Delete Parcel)

اگر نیاز به حذف یک بسته از یک مرسوله ثبت‌شده داشته باشید، از این سرویس استفاده می‌شود. پس از حذف موفق، ظرفیت اشغال شده توسط آن بسته دقیقاً به میزان وزن و حجم آن به مقدار «ظرفیت باقی‌مانده» مرسوله بازگردانده می‌شود. شما به دو روش می‌توانید پارسل را حذف کنید:

روش اول: استفاده از شناسه‌های اختصاصی شما (Reference IDs)

این روش زمانی کاربرد دارد که شما در لایه درخواست افزودن، از شناسه‌های اختصاصی خودتان (consignor_reference) استفاده کرده باشید.

DELETEhttps://api-demo.digiexpress.ir/api/v2/shipments/{shipment_ref}/parcels/{parcel_ref}
  • {shipment_ref}: شناسه یکتای مرسوله در سمت شما (consignor_unique_reference_id).
  • {parcel_ref}: شناسه یکتای بسته در سمت شما (consignor_reference_id).

روش دوم: استفاده از شناسه‌های سیستمی دیجی‌اکسپرس (System IDs)

این روش ساده‌تر است و نیازی به ارسال شناسه مرسوله (Shipment) ندارد، زیرا آیدی یا کد پارسل در کل هسته سیستم دیجی‌اکسپرس یکتاست.

DELETEhttps://api-demo.digiexpress.ir/api/v2/parcels/{parcel_id_or_code}
  • {parcel_id_or_code}: آیدی متنی (UUID) یا بارکد پارسل (مانند DP...) که در ریسپانس‌های قبلی دریافت کرده‌اید.

قانون حذف آخرین پارسل: اگر مرسوله‌ای کلاً شامل یک پارسل باشد و شما همان یک پارسل را هم حذف کنید، کل سفارش لغو نمی‌شود؛ بلکه مرسوله همچنان در وضعیت "رزرو ظرفیت خالی" در سیستم باقی می‌ماند تا بسته جدید به آن اضافه کنید (مگر اینکه کل مرسوله را از طریق API ابطال، Cancel کنید).

ساختار پاسخ موفق حذف پارسل از ارسال (Response Body - HTTP 200) :

json
{
  "parcels_total_estimated_weight_grams": "string",
  "parcels_total_estimated_volume_in_cm3": "string",
  "parcels_used_weight_grams": "string",
  "parcels_used_volume_in_cm3": "string",
  "parcels_remained_weight_grams": "string",
  "parcels_remained_volume_in_cm3": "string",
  "removed_parcels": [
    {
      "parcel_id": "string",
      "parcel_code": "string",
      "consignor_reference_id": "string",
      "scannable_codes": [
        "string"
      ]
    }
  ],
  "remaining_parcels": [
    {
      "parcel_id": "string",
      "parcel_code": "string",
      "consignor_reference_id": "string",
      "scannable_codes": [
        "string"
      ]
    }
  ],
  "parcel_size_tier": "NORMAL"
}

جدول پارامترهای خروجی متد حذف پارسل

۷ ردیف
parcels_total_estimated_weight_grams
نوع دادهstring
توضیح فنی
وزن کل تخمینی اولیه (گرم).
توضیح بیزینسی
سقف مجاز وزنی رزرو شده کل سفارش.
parcels_remained_weight_grams
نوع دادهstring
توضیح فنی
وزن باقی‌مانده مجاز (گرم).
توضیح بیزینسی
نکته بیزینسی: این مقدار به میزان وزنِ بسته حذف‌شده افزایش یافته و ظرفیت مجدداً برای پذیرش بسته‌های جدید آزاد شده است.
parcels_total_estimated_volume_in_cm3
نوع دادهstring
توضیح فنی
حجم کل تخمینی اولیه (سانتی‌متر مکعب)
توضیح بیزینسی
سقف فضای فیزیکی رزرو شده برای این سفارش.
parcels_remained_volume_in_cm3
نوع دادهstring
توضیح فنی
حجم باقی‌مانده مجاز (سانتی‌متر مکعب)
توضیح بیزینسی
این مقدار به میزان حجمِ بسته حذف‌شده افزایش یافته و فضا مجدداً آزاد شده است.
removed_parcels
نوع دادهarray[object]
توضیح فنی
لیست اطلاعات بسته‌ای که هم‌اکنون حذف شد.
توضیح بیزینسی
مشخصات فنی و بارکد بسته‌ای که با موفقیت از این سفارش خلع اتصال شده است.
remaining_parcels
نوع دادهarray[object]
توضیح فنی
لیست بسته‌هایی که هنوز در سفارش باقی مانده‌اند.
توضیح بیزینسی
خلاصه‌ای از پارسل‌های فعال فیزیکی که کماکان تحت این Shipment پردازش خواهند شد.
parcel_size_tier
نوع دادهstring
توضیح فنی
رده ابعادی مرسوله پس از حذف (مانند NORMAL).
توضیح بیزینسی
بازبینی سایز مرسوله؛ در صورتی که با حذف بسته، سقف ابعادی کل سفارش دستخوش تغییر شود، سیستم رده آن را به‌روز می‌کند.