"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 topaymentstatus, whether the money arrivedtrackingnoandtrackingList, whether it ever reached a carrierisCOD, 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
| finding | action |
|---|---|
| in transit, slow | tag and wait |
| lost in transit | reship, or return the money |
| delivered, buyer disputes | get carrier proof before refunding |
| never dispatched | zort_ready_to_ship now |
| order should not exist | zort_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.