MVP demo on 31 October. Three screens, one rescue, all mock data.

Alodi messages and calls the buyer the moment a delivery fails, then hands the next shipper structured context — so the second drop lands.

No answerRescheduledRefusedRoute plannerVoice memo
CHATCALLEXTRACTGUARD
Shipper cardDispatcherCS queueOrder contextMetrics log
Shippers we interviewed
The problem

An SPX Express hub on Bui Minh Truc street, Ho Chi Minh City
Field visit · SPX Express hub, Ho Chi Minh City
₫0

return fee the seller pays on each failed order

Source: Shopee policy §7.1; ₫40,000 cap since Apr 2025 (GHN)

0–0%

of orders refused at the door, nationwide

Source: VECOM, Nguoi Lao Dong, 19 Jul 2025

0

delivery windows a Shopee buyer can choose

Source: Shopee Help Center, article 79559

₫0M

lost a month in one area of 4,000 orders a day

Source: Team cost model, PRD §18.8 (modelled)

We asked both sidesPlaceholder values until the interview export lands
Buyersn = 100 · online shoppers
  • 0%
    want to choose a delivery window
  • 0%
    called the shipper back and couldn’t reach them
Shippersn = 12 · 6 carriers
  • 0%
    of their calls to buyers go unanswered
  • 0%
    would use an Alodi-like system
Our approach

A rider carrying goods on a motorbike down a tree-lined street in Ho Chi Minh City
01

Play inside the rules

Lemic302, CC0

Shopee allows 2–3 contacts within 5 days. Alodi never steps outside.

Tap10:02ChatnowCall+60′Call+2 hCSpersonday 0day 5 · Shopee’s limit
A hand holding a smartphone
02

Draw a hard line

Samson Vowles, CC0

The agent asks and calls. Money and a buyer’s record go to a person.

Ask for a window
Label a refusal
Call 08:00–20:30
Return to seller
Apply ≥ 0.85
Settle a conflict
A developer working on code on a laptop
03

Prove it with evals

Tirza van Dijk, CC0

Codex changes one thing per round. The held-out set decides.

0.59
held-out F1
Introducing Alodi

Alodi turns a failed delivery into a confirmed next attempt. One shipper tap starts chat and voice outreach, and the next shipper gets a rule-checked card: when, where and who.

For
Carriers like SPX, their shippers and buyers
Starts with
One tap: No answer · Rescheduled · Refused
Does
Asks for a window before dispatch, recovers by chat and voice, writes a context card
Never
Labels or returns an order without a person
Built on
GPT-Live-1, the Decisions API on GPT-6 Luna and GPT-6.1 Terra; built with Codex

One-Tap Rescue Pipeline

One agent with four tools runs as a state machine per order. The shipper’s tap starts it; the policy guard decides when it stops.

Shipper tapTrigger · A
↳Always
Rescue chatAgent
↳Silent 60 min
Voice callAgent
↳Answered
ExtractorJSON + confidence
OR
Auto-applyall fields ≥ 0.85
Human reviewlow or conflicting

In-Flight Context Extraction

Turn a 74-second call into four typed fields before the shipper reaches the next stop. Every field carries its own confidence.

“Tomorrow after five, please. Leave it with security in Tower B — or call my wife.”
Extractor · strict JSON
time_windowSun 1 Nov · 17:00–20:00
drop_locationSecurity desk, Tower B
alt_receiverWife · 0903 *** 214

Rule-Based Escalation

Quiet hours, contact caps and confidence thresholds are rules, not prompts. Anything high-stakes is routed to a person.

↳ Always↳ AND↳ OR
Policy guard rules
  1. 1key call_hoursonly between08:0020:30
  2. 2key max_callsper cycle is2
  3. 3key confidencebelow0.85→ human review
  4. 4key triggerequalsREFUSED→ CS, no contact

Deploy Your Way

Browser demo today, shadow mode at one depot next, a regional on-prem gateway when the data has to stay in-house.

Demo
Browser onlyMock dataFast-forward clock
Pilot
Shadow modeOne depotNo buyer contact
On-prem
Regional gatewayPII stays inFine-tuned ASR

One tap instead of an error code

The shipper picks No answer, Rescheduled, or Refused. The agent does the rest.

Ask for a window before delivery

Send two or more slots from the route planner as quick replies. Only for risky orders: high COD, past failures.

Message first, call if silent

Chat goes out the moment the shipper taps. 60 minutes of silence triggers call one, two hours later call two. Calls only 08:00–20:30.

A ten-second voice memo

Buyer rescheduled on the phone? The shipper repeats it aloud; speech-to-text turns it into structured data.

Extraction with confidence

Window, drop-off, alternate receiver, address fix: each field is JSON with a confidence score. Low confidence goes to a person.

Policy guard

Quiet hours, contact caps, “stop” means stop, recording consent before every call.

Order Context Object

Versioned context with an audit log: who changed what, and when, across agent, buyer, shipper and CS.

Refusals go straight to CS

Never spend effort calling a buyer who refused at the door. A “suspected bomb” label is only a suggestion; a person approves it.

Architecture

GPT-6.1 Terra runs the agent in the middle. The carrier keeps every system it already has.

Route planner
feasible windows
Order system
today’s orders, COD
Shipper tap
No answer · Rescheduled · Refused
Buyer chat
quick replies, free text
AI call
GPT-Live-1 over a branded SIP line
alodiagent layer
Alodi Agent
GPT-6.1 Terra · Agents SDK, one run per order
Triage
Decisions API on GPT-6 Luna
Policy guard
quiet hours · caps · 0.85 · masks PII
Scheduler
60′ and +2 h timers, retries
PostgreSQLRedisMinIOmasked text out
Context card
to the shipper, next attempt
CS queue
a person decides
Ops dashboard
events, metrics, audit
Models · OpenAImasked text to the cloud · calls after consent
  • GPT-Live-1real-time voice calls with the buyer
  • Decisions APIGPT-6 Luna triages every message
  • GPT-6.1 Terraorchestrates buyer, shipper and policy
  • gpt-oss-20blocal fallback · PhoWhisper for memos

Source: PRD §16, §16.7, §18.8. The demo runs the same shape on the OpenAI API, SQLite and mock data.

Outcomes

Saved a month, one areaProjected
₫0M
See every formula · PDF →
From answer to cardTarget
< 0 s

Source: Team cost model, PRD §18.8, best-in-class rescue 25% → 65% (Shipsy vendor range); time-to-context target, PRD §2.3.

OpenAI ecosystem · tech stack

GPT-Live-1 talks to the buyer, GPT-6 Luna triages through the Decisions API, GPT-6.1 Terra orchestrates. Codex builds it.

OpenAI, end to endproduction design · the demo runs the OpenAI API
RuntimeOne agent, six workers
  • Alodi Agent · Agents SDK · GPT-6.1 Terra
  • TriageDecisions API · GPT-6 Luna
  • VoiceGPT-Live-1
  • Rescue chatGPT-6.1 Terra
  • WindowDecisions API · choice
  • ExtractorTerra · Structured Outputs
  • Guardrailscode + SDK guardrails
Triage first
GPT-6 Luna answers routine questions through the Decisions API; only real cases reach Terra
Private by default
Text to the cloud is masked; calls run on GPT-Live-1 after consent; gpt-oss-20b stays local as fallback
Gated
OpenAI Evals on the held-out set before any prompt or model change
Build timeShipped with Codex, reviewed by people
  1. SpecifyPRD and rules become scriptsChatGPT + Codex
  2. BuildPair-programming with AGENTS.mdCodex CLI · IDE
  3. ParalleliseOne task, one branch, one PRCodex cloud
  4. ReviewEvery PR reviewed before mergeCodex in GitHub
  5. EvaluateOne change per round, held-out F1Codex + Evals
Demo · 31 Oct
  • Next.js
  • TypeScript
  • Tailwind CSS
  • Motion
  • FastAPI
  • Pydantic
  • OpenAI API
  • GPT Live
  • GPT Transcribe
  • Presidio
  • SQLite
  • Caddy
  • Docker
Production · per area
  • GPT-Live-1
  • Decisions API
  • GPT-6.1 Terra
  • gpt-oss-20b
  • Ollama / vLLM
  • PhoWhisper
  • Piper TTS
  • NVIDIA RTX
  • PostgreSQL
  • Redis
  • Temporal
  • MinIO
  • Zalo ZNS
  • Asterisk
  • Grafana
Competitive landscape

aldiClickPostShipsyAfterShip AgentRingg AIShiprocketGHTK
Main marketVietnamIndiaIndiaGlobalIndiaIndiaVietnam
TriggerShipper taps one meaningful buttonNDR code from carrier APINDR eventTracking exceptionNDR from carrierShipper marks NDRRecipient books a slot
Reaching the buyerMarketplace chat → AI callSMS, email, WhatsApp, IVR, voice agentAutomated CX AgentDrafts a message for approvalVoice agentSMS + IVR (Advanced/Pro)App, hotline
Asks for a window before deliveryYes, from the route plannerNot disclosedYesNot disclosedNot disclosedNot disclosedYes, by half-day
Context for the next attemptJSON with confidence, versions, auditReattempt / return instructionNot disclosedSuggested fixDisposition + instructionsReattempt / return instructionTime-window note
Human approval for high-stakes callsRequired; the agent only suggestsNot disclosedNot disclosedYesNot disclosedSeller handles itCall-centre agent
Published resultsMeasured at the 31 Oct demoRTO −15–20% (Parth)Industry rescue 20–30%−58% resolution time (one customer)No independent figuresNot disclosedNot disclosed

Source: ClickPost NDR Management and Parth (Angel One); Shipsy NDR guide and last-mile page; AfterShip exception agent; Ringg AI failed-delivery recovery; Shiprocket contact-buyer docs; GHTK scheduled delivery. Vendor figures are self-reported. “Not disclosed” means we found nothing on the official pages as of October 2026.

The team

Four builders from UTS × HCMUT.

Nomura Yoshio
Nomura YoshioTeam LeadProject Presenter
Long Quan Ton
Long Quan TonProduct ManagerAI Engineer
Khanh Tuong Huynh
Khanh Tuong HuynhApplied AISoftware Engineer
Thanh Loi Tran
Thanh Loi TranData EngineerBackend Developer

One shipper tap, one well-timed conversation, one context card for the next attempt.

Sources