Field dispatch on AWS Communication Developer Services
Many reports. One incident. The right crew, in one tap.
For any organization that sends crews: roadside assistance, home assistance for insurers and utilities. FrontBox folds the many reports of one outage into one incident, lets a tenant policy decide when a person must approve, and offers the job to the right crew as a one-tap WhatsApp message.
The console requires sign-in. The demo video opens on YouTube.
One live journey, seven steps
LIVE-CURRENT- ReportPortal intake with a GPS pin
- Bedrock triageP1, electrical hazard, skill
HIGH_VOLTAGE_LINE - One incidentA paraphrased second report merged by the agent
- Tenant policyReturned
REQUIRE_APPROVAL - Human approvalA Commander approves in the portal
- WhatsApp offerOn the crew phone about 6 s after approval
- Accept ASSIGNEDOne tap on the crew phone
Final live run, 2026-10-28, synthetic tenant. One run, not a benchmark.
Proven live, labelled honestly
Two live runs reached a one-tap Accept on a real phone.
Report intake, Commander approval, the WhatsApp offer, one-tap Accept and ASSIGNED ran on the 2026-10-28 release, twice. Every figure carries its evidence level.
- 144 sReport to accept, final runLIVE-CURRENT, n = 1
- 101 sMedian report to accept over two runs. A record, not a benchmark.LIVE-CURRENT, n = 2
- ~6 sFrom the Approve click to the offer on the crew phoneLIVE-CURRENT, final run
- 25AWS services wired together in one CDK appDeployed in the current release
- LIVE-CURRENT
- ran on this release
- LIVE-OLD
- ran on an earlier runtime
- CI-ONLY
- hosted tests with fakes
- SOURCE-ONLY
- implemented, never run
The citizen side, every SMS send and every SES send are CI-ONLY. The released source passed 2,810 JavaScript and TypeScript tests, 916 Python tests and 48 Playwright tests in hosted CI (CI-ONLY).
The demo, 2:59
Watch the final live run, from report to Assigned.
The run on screen is LIVE-CURRENT: one run, not a benchmark. Other scenes are labelled CI-only or illustrative. The narration uses a synthetic voice.
Watch on YouTubeThe problem
One storm. Hundreds of calls. Crews outside the system.
One event, many reports
A storm or a fallen line brings many reports of the same thing, sorted by hand.
Crews sit outside the system
External workers have no seat in the dispatch application, so offers go out by phone tree.
Speed and control pull apart
Some jobs need a person to approve. Each organization should decide which, not the code.
Nearest is not always right
A live power line needs a line crew, not the nearest tow truck.
Nikolaos, a delivery driver in Marousi, Athens, is stuck in his car with a live 20kV line lying across it. A phone tree takes 47 minutes to find help. With FrontBox, a grid line crew accepts in 43 seconds, and 15 reports -> 1 incident.
HIGH_VOLTAGE_LINE sends a grid line crew, not a tow truck. Real figures are in Proven live.How it works
From the first report to a crew on the way.
Report
By the web widget (live), WhatsApp (CI-ONLY) or SMS (CI-ONLY; an SMS has no location, so a person takes it over), with a photo and a location. Faces and number plates are masked first (LIVE-OLD).
Triage
One Amazon Bedrock call returns severity, domain and hazards. Safety rules and a guardrail check it.
One incident
Duplicates fold into one incident by distance, time and wording. Across different callers, only grid-outage reports merge (Titan embeddings and a bounded agent); other domains merge reports from the same caller only.
Policy
A versioned tenant policy decides: dispatch now, ask a Commander, require two reviewers, escalate, or deny.
Match
Amazon Location ranks the qualified crews within 35 km by travel time.
Offer
The crew gets a WhatsApp message with one-tap Accept and Decline. No app and no account: a zero-seat worker.
Close the loop
Accept resumes the workflow and the crew gets a progress request. The reporter gets a status update (CI-ONLY).
Fail closed If no crew accepts, the case becomes Escalated, unassigned and a dispatcher takes over. Never a fake success. LIVE-CURRENT, observed once
The crew moment
One tap on WhatsApp resumes the workflow.
- Zero-seat worker. No app and no account in the dispatch system.
- The tap resumes AWS Step Functions. The private task token stays in DynamoDB; the buttons carry only an opaque callback ID.
- The right message type per worker. Interactive buttons inside the worker's own 24-hour window (LIVE-CURRENT, 2 runs), else the approved template (CI-ONLY). With neither, nothing is sent and the next crew is tried.
- Resume once. The callback is resolved server-side and consumed, so one answer wins.
Illustrative mock-up. The real crew phone is below.
One platform, four domains
Triage picks the domain. A fixed rule picks the crew skill.
Roadside assistance
MOTOR_ROADSIDEBATTERY_JUMPorFLATBED_TOWINGBattery jump for a drivable car, flatbed towing otherwise.
Home assistance for insurers
HOME_ASSISTANCEEMERGENCY_PLUMBINGUtilities
GRID_UTILITY_OUTAGEHIGH_VOLTAGE_LINEThe domain of the live runs.
Live domainMedical advisory
MEDICAL_ADVISORYTELE_DOCTOR
An electrical hazard in any domain needs HIGH_VOLTAGE_LINE. The live runs used one synthetic grid tenant, so dispatch in the other three domains is CI-ONLY.
Agentic, with guardrails
The model proposes. Fixed rules and people decide.
One model call per report
Multimodal Amazon Bedrock with a forced
record_triage_assessmenttool call. No free-text fallback.Rules after the model
Keyword safety overrides and a prompt-injection screen run on every report.
Guardrail on citizen text
A Bedrock guardrail intervention withholds the model output and forces human review.
A bounded correlation agent
For grid-outage reports, Titan embeddings merge at cosine 0.82 or above. Uncertain pairs go to a Converse tool-use agent: at most 4 turns and 8 tool calls, and any failure falls back to the rule.
Autonomy is tenant policy
A versioned policy returns
ALLOW,REQUIRE_APPROVAL,REQUIRE_DUAL_CONTROL,ESCALATEorDENY. When triage withholds confidence,ALLOWbecomes a human gate.A per-sender limit
At most 20 model-backed reports per tenant and sender per clock hour.
Evaluation against a keyword and lexical baseline
LIVE-OLD, 2026-10-18Earlier runtime. 150 synthetic reports and 60 single-annotator pairs, English and Greek. The FrontBox figures are the model plus deterministic rules.
Disclosure: duplicate precision was 1.00 (0 wrong merges) and F1 0.943, in-sample. The first live run on the same 60 pairs scored recall 0.162 and F1 0.279; the prompt and the routing to the agent were then tuned on those pairs. No clean held-out result exists.
Built on AWS
25 AWS services, wired together in one CDK app.
The three AWS Communication Developer Services channels carry every participant-facing step. All 25 are deployed in the current release; which steps ran live is in Proven live.
Messaging (CDS)
- AWS End User Messaging Social WhatsApp offer and Accept, LIVE-CURRENT
- AWS End User Messaging SMS CI-ONLY
- Amazon SES v2 CI-ONLY
AI
- Amazon Bedrock guardrail, Titan embeddings, Converse agent
- Amazon Transcribe
- Amazon Rekognition
Workflow
- AWS Step Functions
- AWS Lambda
- Amazon EventBridge
- Amazon SQS
- Amazon SNS
Data and location
- Amazon DynamoDB
- Amazon S3
- AWS KMS
- Amazon Location Service
Access, web and security
- Amazon Cognito
- Amazon API Gateway
- Amazon CloudFront
- AWS Certificate Manager
- AWS Secrets Manager
Release and operations
- AWS CloudFormation
- AWS CodePipeline
- AWS CodeBuild
- AWS CodeDeploy
- Amazon CloudWatch
What is live today
Honest limits.
- LIVE-CURRENT Report intake, triage, the agent merge, the tenant policy, approval, Amazon Location ranking, the WhatsApp offer and one-tap Accept (triage, the merge, the policy and the ranking on the final run, n = 1).
- CI-ONLY The citizen side, every SMS and SES send, the offer template and the SMS nudge.
- Pending No approved offer template yet, so an offer reaches only a crew whose own 24-hour window is open. SES is in its sandbox.
- Illustrative The 43 seconds stays illustrative until a live median over at least 10 acceptances exists.
AWS CDS Agentic AI Hackathon -Sept. 2026.
See the right crew accept, in one tap.
Two live runs. One tap. ASSIGNED. LIVE-CURRENT
Watch the final live run, then open the console.