Skip to content

Delivery updates and failed-delivery recovery

Synthesized from the base patterns logistics pack

Customers get an SMS when their parcel is out for delivery, with a time window and a number to call. A failed delivery sends a link to pick a new day and gives your dispatcher a task, and a reschedule request gives the dispatcher another. Delivered parcels get a short rating form an hour later, and a low rating gives your operations team a task. A weekly report shows how deliveries went.

  • You run a courier, last-mile or dispatch-rider business, and customers keep calling to ask where their parcel is.
  • Failed deliveries (nobody home, phone off, wrong location) cost you a second trip because nobody follows up.
  • Your riders or dispatchers can log a status in your dispatch app, or on a short form if you don't have an app.
HowWhat
A form your staff fill inThe Dispatch form this playbook creates: your dispatcher or rider logs each parcel as out for delivery, delivered or failed, with the customer's phone number. Use this if you have no dispatch app.
Events from your app or website (needs a developer)Or your dispatch app sends an event when a parcel goes out for delivery, is delivered or fails, with a reason on failures.
A form people fill inThe Reschedule and Rating forms this playbook creates. Customers open them from the SMS links.
KindNameWhat it doesLands
TeamDispatchFollows up failed deliveries and reschedule requests.Empty
TeamOperationsCalls unhappy customers; gets the weekly report.Empty
FormDispatchStaff-only form where a dispatcher or rider logs a parcel as out for delivery, delivered or failed. Matched to the customer by phone.Draft, not published
FormReschedule my deliveryThe form customers open from the failed-delivery SMS to pick a new day and time window.Draft, not published
FormRate your deliveryA one-page rating form with an optional comment. The score is saved on the customer.Draft, not published
TemplateOut for delivery (SMS)Out-for-delivery message with the time window and a number to call. No address.Ready
TemplateDelivery missed (SMS)Failed-delivery message with the reschedule link. No reason, no address.Ready
TemplateReschedule received (SMS)Acknowledgement when a customer asks for a new day.Ready
TemplateRate your delivery (SMS)Rating request after delivery.Ready
QuestionReport: out for deliveryParcels out for delivery in the report's period.Ready
QuestionReport: deliveredParcels delivered in the report's period.Ready
QuestionReport: failed deliveriesFailed deliveries in the report's period.Ready
QuestionReport: reschedule requestsReschedule requests in the report's period.Ready
QuestionReport: low ratingsLow delivery ratings in the report's period.Ready
ReportWeekly: deliveriesThe week's parcels out, delivered and failed, reschedule requests and low ratings, sent to operations.Off
Follow-upDelivery 1: out for delivery (form)Dispatcher logs "out for delivery" on the form; the customer gets the ETA SMS.Off
Follow-upDelivery 1: out for delivery (app)Your app sends "out for delivery"; the customer gets the ETA SMS.Off
Follow-upDelivery 2: delivered (form)Dispatcher logs "delivered" on the form; a rating request follows an hour later.Off
Follow-upDelivery 2: delivered (app)Your app sends "delivered"; a rating request follows an hour later.Off
Follow-upDelivery 3: delivery failed (form)Dispatcher logs "failed" on the form; the customer gets the reschedule link and dispatch gets a task.Off
Follow-upDelivery 3: delivery failed (app)Your app sends "delivery failed"; the customer gets the reschedule link and dispatch gets a task.Off
Follow-upDelivery 4: reschedule requestA reschedule request gets an SMS and a dispatch task to confirm the new day.Off
Follow-upDelivery 5: low ratingA low rating gives operations a call task; the outcome is saved.Off
#QuestionDefaultFills in
1What should messages call your delivery company?none, must answerorg_name
2How do you record delivery status? Choose form if your dispatcher fills in a form, or app_events if your dispatch app sends events.formdispatch_via
3Which team handles failed deliveries and reschedule requests? (your dispatchers, or one person)Dispatchdispatch_team
4Which team follows up on unhappy customers and gets the weekly report?Operationsops_team
5Which number should customers call about a delivery?‹workspace phone›dispatch_phone

These have defaults. Change any that don’t fit.

SettingDefaultKey
Out for delivery eventOut For Deliveryout_event
Delivered eventDelivereddelivered_event
Delivery failed eventDelivery Failedfailed_event
Ratings at or below this (out of 5) give operations a task2low_score
How long after delivery to ask for a rating1hrating_delay
Hours dispatch has to follow up a failed delivery4failed_due_hours
Hours dispatch has to confirm a reschedule request4reschedule_due_hours
Hours operations has to call after a low rating24ops_due_hours
Default phone country on the forms‹workspace country›default_country
Time zone for the report‹workspace timezone›timezone
Weekly operations report0 8 * * 1report_cron
Greeting when a first name is missingtheregreeting_fallback
  • Out for delivery: an SMS straight away with the time window and a number to call.
  • Failed delivery: an SMS straight away with the reschedule link, and a task for Dispatch due in 4 hours.
  • A reschedule request: an SMS straight away and a task for Dispatch, due in 4 hours.
  • Delivered: a rating form by SMS 1h later (at most once every 3 days per customer).
  • A rating of 2 or lower: a call task for Operations, due in 24 hours.
  • Weekly operations report: 0 8 * * 1 in ‹workspace timezone›.
ChannelNeeded forBefore it can send
smsEvery message to customersAn SMS provider, or Origamy managed SMS after business verification (KYC).
  1. If you use the Dispatch form, give it to your dispatchers and riders and have them fill it in for every parcel: the customer's phone number, the status, and for out-for-delivery an ETA window such as "2pm to 5pm". If you use a dispatch app, send Out For Delivery, Delivered and Delivery Failed with the customer's phone as a trait, and optional eta_window, rider_phone, sender, tracking_ref and (on failures) reason properties.
  2. Never put a full address in a message. These messages show only the time window, a phone number and links. Keep addresses in your dispatch system.
  3. Add people to the Dispatch and Operations teams. A task assigned to an empty team reaches nobody.
  4. Publish the Reschedule and Rating forms. Their links go out in the SMS.
  5. Tell customers when you collect their phone number that you will text them about their delivery.
  6. Connect an SMS provider or finish business verification, switch the follow-ups and report on, and test each status with your own phone.
  • With a dispatch app, send Out For Delivery, Delivered and Delivery Failed with the customer’s phone as a trait, and optional properties eta_window, rider_phone, sender, tracking_ref and (on failures) reason. On the Dispatch form, the same details are fields. The messages use the time window and phone number you send, and fall back to your dispatch number.
  • Keep full addresses out of SMS and out of the forms’ free text. Messages show only a time window and links; the rider has the address in your dispatch system. Delivery messages go to whoever holds the phone, which is often not the person at the address.
  • Failed deliveries are mostly “nobody home” or “phone off”. A reschedule link that needs no call saves the second trip. In Nigeria and much of Africa, riders and customers also use WhatsApp, so a rider’s number the customer can message helps; send it as rider_phone.
  • The rating form goes to everyone. Only low ratings add a task for your team, so scores aren’t filtered before they reach you.

This playbook is synthesized: no customer has run it with us yet. If you build it, tell us what you changed, and we’ll replace it with the real version.

The request used to test the copilot on this playbook (a live eval):

We're a courier company. When our dispatcher marks a parcel out for delivery on a form, text the customer that it's on the way with a time window and our phone number. If a delivery fails, text them a link to pick a new day and give our dispatch team a task due in four hours. When someone submits the reschedule form, give dispatch a task to confirm it. An hour after a delivery, text a rating link, and if someone rates it 2 or below give our operations team a task to call. Never put a full address in a message. Send operations a weekly report.

It passes when every piece is a valid draft and everything lands off, with at least: form, workflow, message_template, report.