Skip to content

Delivery Exception Triage

Example prompt: "When a driver submits a failed-delivery Google Form, classify the reason (customer not in, refused, damaged, etc.), draft a reschedule email to the customer, and route anything needing ops attention to the right Slack channel."

The Problem

A failed delivery is small in isolation and expensive in aggregate. Each one needs the right next move — a polite reschedule email to a no-answer customer, a customer-service ticket for a refused-at-door case, an ops alert for a damaged parcel. Done by hand at the end of the shift, the no-answers slip a day, the refusals do not get a ticket until the morning, and the damaged-parcel cases sit until the customer-service lead notices the photo in the WhatsApp group.

How GloriaMundo Solves It

We build a workflow triggered by submissions to the dispatcher's 'Failed delivery' Google Form. An integration step dedupes on form_response_id and looks up the delivery row in our dispatch sheet. A conditional step routes the case by reason. For soft failures (no answer, access blocked, address not found) an LLM step drafts a polite reschedule to the customer and saves it as a Gmail draft for the dispatcher to review. For hard failures (refused, damaged) an integration step opens a Linear ticket and posts a one-line alert in the ops Slack channel so the customer-service lead picks it up the same day. A final integration step appends the case to the exceptions log. Glass Box preview shows the customer drafts, the ticket body, and the Slack alert before anything reaches a customer or a colleague.

Example Workflow Steps

  1. Trigger (integration): A new submission lands on the 'Failed delivery' Google Form.
  2. Step 1 (code): Dedupe on form_response_id against the 'Exceptions Log' tab — if a row exists, return its exception_id and stop. Otherwise allocate a fresh exception_id ('EX-[YYYY]-[6-digit sequence]').
  3. Step 2 (integration): Look up the delivery row on the 'Deliveries' tab by delivery_id.
  4. Step 3 (conditional): Branch on the reason field.
  5. Step 4 (llm + integration): For soft failures, draft a polite reschedule email offering tomorrow's time window and save as a Gmail draft.
  6. Step 5 (integration): For hard failures, open a Linear ticket on the 'Customer Service' project (exception_id as the title prefix), then post a one-line alert in #ops on Slack with the ticket link.
  7. Step 6 (integration): Append a row to the 'Exceptions Log' tab with exception_id, form_response_id, delivery_id, reason, driver, customer, gmail_draft_link or linear_ticket_id, and status 'Awaiting dispatcher review'.

Integrations Used

  • Google Forms — the driver's failed-delivery report
  • Google Sheets — the deliveries source-of-truth and the exceptions log
  • Gmail — the per-customer reschedule drafts
  • Linear — customer-service tickets for hard-failure cases
  • Slack — the same-day ops alerts so nothing waits for tomorrow

Who This Is For

Last-mile delivery firms and small courier ops handling 50 to 500 drops a day where the dispatcher currently triages failed-delivery reports by hand at the end of the shift, and where the gap between the driver hitting 'submit' and the customer hearing back has been creeping up.

Time & Cost Saved

A dispatcher spends ten to fifteen minutes on each failed delivery — opening the customer record, deciding the right action, writing the reschedule, opening a ticket if needed. For a depot seeing twelve to twenty failed deliveries a day, that is two to four hours of end-of-shift triage. This workflow turns it into a fifteen-to-twenty-minute review of the queue before the dispatcher leaves, and the customer hears back the same day on the soft-failure cases rather than the next.