← ZORT integration

"My order hasn't arrived"

The most common support thread a seller gets. ZORT holds the order. It does not hold the parcel's location or the customer's history, so this is the path through.

1. Find the order

Customers rarely lead with an order number. zort_list_orders takes a keyword that matches order number, customer name, or tracking number, so start with whatever they gave you.

zort_list_orders(keyword: "0812345678")

2. Read its state

zort_get_order returns the order plus line items, payments, shipping address, and tracking numbers. Four fields decide what happens next:

  • status, where fulfillment got to
  • paymentstatus, whether the money arrived
  • trackingno and trackingList, whether it ever reached a carrier
  • isCOD, whether the money is still riding with the parcel

Failed Shipment is the carrier saying it could not deliver. Waiting means dispatched as far as ZORT can take it, not "nothing has happened"; see the dispatch guide.

3. Find the parcel

ZORT gives you the tracking number, not the tracking events. It cannot tell you the parcel is sitting at a depot. Take trackingno, plus the carrier from shippingchannel, to that carrier's own tracking.

This is the step that resolves most threads. "Delivered, signed for on Tuesday" and "stuck at a sorting facility for six days" lead to completely different replies.

4. Check whether this has happened before

GetOrders has no customer-id filter, so there is no direct "this customer's orders" call. Search by name or phone:

zort_list_orders(keyword: "Somchai")

A first-time buyer with a slow parcel and a buyer on their fourth non-delivery claim are different problems. If the pattern matters, promote them to a contact asset. Its widget keeps that history in front of you, and contacts carry tags.

5. Decide, and record it

findingaction
in transit, slowtag and wait
lost in transitreship, or return the money
delivered, buyer disputesget carrier proof before refunding
never dispatchedzort_ready_to_ship now
order should not existzort_void_order

A reship is a new order (zort_create_order). Put the original number in a tag or the description so the two stay connected.

A refund is a return order:

zort_create_return(
  number: "RT-0001",
  amount: 68,
  reference: "SO-0042",
  warehousecode: "WH1",
  paymentmethod: "Transfer",
  paymentamount: 68
)

Put the original order number in reference. Nothing enforces it, and without it the return is an orphan document nobody can trace back.

Watch the warehouse code. A return with a warehousecode puts stock back on the shelf. If the goods are lost and never coming back, that is a write-off, not a return, so leave the warehouse out and do not re-increment stock you do not have.

Whatever you decide, tag the order:

zort_tag_order(order_number: "SO-0042", tag: "carrier-claim-filed")

The status field cannot say "we filed a claim and are waiting". The tag can, and without it the next run starts from zero.

Who approves what

Refunds, voids, and reships are not reversible, so they run as approval-gated tools. The agent proposes and a person confirms. Reads are not gated, so triage costs nothing; only the decision does.