Proof of Delivery Chase
Example prompt: "Each morning at 8am, check our 'Deliveries' Google Sheet for yesterday's completed drops with no POD logged. Draft a Slack DM to each driver chasing the missing POD, and escalate anything still missing after 48 hours to the ops channel."
The Problem
A delivery without a proof-of-delivery photo or signature is invisible to the customer's accounts payable team and to ours. The driver remembers doing the drop, the customer remembers signing the slip, but the photo never made it off the driver's phone and the row sits in the Deliveries sheet at 'Completed, pod_link empty'. Finance only finds out at the end of the week, by which time three or four of those rows have stacked up and the customer is querying the invoice for the one we cannot prove was delivered.
How GloriaMundo Solves It
We build a workflow that runs at 11am every weekday. An integration step reads the Deliveries tab and filters to yesterday's and earlier rows where status is 'Completed' and pod_link is empty. A code step computes the working-hours gap for each missing-POD row. A conditional step routes the chase by severity band — a quiet Slack DM to the driver on day one, a dispatcher-channel message on day two, a finance Gmail draft and an invoice hold on day three, a Linear ticket on day four. Every chase is logged to the 'POD Chase Log' tab with a (delivery_id, chase_date) idempotency key so a replay on the same morning never produces a duplicate. Glass Box preview shows the Slack messages, the finance draft, and the Linear ticket body before anything reaches a driver, the dispatcher, finance, or the ops manager.
Example Workflow Steps
- Trigger (scheduled): Every weekday at 11am.
- Step 1 (integration): Read the 'Deliveries' tab of the dispatch Google Sheet, filtered to status 'Completed' AND pod_link empty.
- Step 2 (code): For each row, compute hours_overdue as the working-hours gap from end-of-day on delivery_date to now (depot local time, 18:00 close).
- Step 3 (code, gate): For each row, dedupe on (delivery_id, chase_date = today) against the 'POD Chase Log' tab. Final state ('Chased') halts that delivery; provisional state ('Allocating') resumes; no row allocates a fresh chase_id and writes a provisional row.
- Step 4 (conditional): Branch on hours_overdue band — 0-24, 24-48, 48-96, or 96+.
- Step 5 (integration): For 0-24 — post a one-line Slack DM to the driver's Slack user with the delivery_id and a link to the POD upload form. Persist slack_dm_ts to the provisional row.
- Step 6 (integration): For 24-48 — post a one-line message in #dispatch on Slack referencing the driver's name and delivery_id. Persist slack_dispatcher_ts to the provisional row.
- Step 7 (llm + integration): For 48-96 — draft a Gmail to the finance team flagging the missing-POD case and asking whether to hold the invoice; save as draft, persist gmail_draft_link, and update the Deliveries row to set invoice_status to 'On hold — POD missing'.
- Step 8 (integration): For 96+ — search Linear's 'Operations' project for an issue whose title starts with the delivery_id prefix
POD missing — [delivery_id](NOT the per-day chase_id, which would miss yesterday's ticket and open a duplicate); if found, reuse linear_ticket_id; otherwise create the ticket with titlePOD missing — [delivery_id] — [customer_name], the chase_id in the body as the originating-row reference, and the trail of prior chase links. Persist linear_ticket_id to the provisional row. - Step 9 (integration): Flip the provisional POD Chase Log row's status from 'Allocating' to 'Chased'.
Integrations Used
- Google Sheets — the Deliveries tab and the POD Chase Log
- Slack — the per-driver DM and the dispatcher-channel escalation
- Gmail — the finance draft on day three
- Linear — the operations ticket on day four
Who This Is For
Last-mile and small parcel operators where invoicing depends on a POD photo or signature being uploaded by the driver, and where the gap between 'driver says it was delivered' and 'we can prove it to the customer' is wide enough that a fortnightly invoice run finds three or four cases the dispatcher cannot answer for.
Time & Cost Saved
A dispatcher chasing missing PODs at the end of the week typically spends 90 minutes pulling the list together, scrolling driver WhatsApps to find the photos, and writing the apology to finance for the cases that will hold up the invoice. This workflow turns it into a 10-minute review of the queue every morning; the day-one chases catch most of the missing photos before they reach the day-three finance hold; the invoice run does not have to absorb a manual reconciliation.