Inspiration We built Freight Room, a multi-agent system that detects vessel disruptions and negotiates a response — and it won lablab's Band of Agents hackathon. But it had one gap we couldn't stop staring at: it ended at a dashboard. The system decided, a human clicked approve, and then... nothing. The importer — the person actually paying the demurrage — never got a phone call. In freight, that call is the whole business. It happens today with a broker on a headset at 2am, in three languages, writing decisions on a notepad. We wanted to close that loop.

What it does PortCall takes an approved disruption recommendation and turns it into a real phone call to the party that bears the cost.

Plan → confirm → dial. The skill prints the full call plan first (numbers, scripts, cost math). Nothing dials without an explicit second gate: --confirm plus a per-shipment authorized-numbers consent file. The call itself is task-based, not script-reading. We hand CALL-E a task describing the disruption and a result_schema, and CALL-E runs the conversation. It explains the situation, states the daily cost, and asks for one of three dispositions: reroute / accept delay / escalate. Structured result, not a transcript to read. GET /v1/calls/{id} returns the disposition, who confirmed it, the agreed action and notes — plus the transcript and evidence for audit. The decision lands back in the system. The call outcome is persisted and appended as a "Call outcome" block in the incident's one-page audit dossier, next to the agents' reasoning and human approval. Built for India. Region IN, +91 E.164 validation, English / Hindi / Tamil locales — a 10-digit number is validated and refused, never guessed. How we built it CALL-E is the phone layer. Runtime integration — POST /v1/calls with Authorization: Bearer $CALLE_API_KEY, a deterministic Idempotency-Key (portcall__) so a retry can never double-dial, and a strict base-URL allowlist (api.heycall-e.com). A reused, proven core. PortCall sits on top of our winning Freight Room build — the incident detector, cost engine and dossier generator stay; we added a thin call layer at the decision hook instead of rebuilding multi-agent negotiation. A standalone Agent Skill. The submission is a self-contained skill package: SKILL.md, scripts/place_disruption_calls.py (dry-run by default, serial calls, halt-on-ambiguity), reference docs, and a sample CSV with fictional numbers only. Ships with a console "Dial importer" button, two-step confirmation, and CSV-driven shipments (consignee, phone, containers, free days, cost/day). Challenges we ran into Consent is the hard part, not the dialing. Auto-dialing humans is a liability, so we made calling the hardest thing to do accidentally: dry-run default, two independent live gates, serial calls only, immediate halt on ambiguity, and AI self-identification on every call. Costs are contract-dependent. Demurrage terms vary per carrier and contract, so we present every figure as an estimate with its arithmetic shown (3 days × 12 containers × $175/day ≈ $6,300) rather than a promise. Telephony realism in the demo. We rehearsed a live call to a human playing the importer instead of faking a recording — the "nothing is mocked" standard we set on Freight Room. Accomplishments we're proud of A real phone call that changes the state of a logistics system — not a chatbot demo, but a decision captured where the money is. A safety model strict enough that a reviewer can run it without fear: nothing dials by default; every call requires an explicit, per-number authorization file. End-to-end audit: structured result + transcript + evidence, attached to the incident's dossier. What we learned CALL-E removes the excuse. Once an agent can call, the entire bottleneck of a disruption workflow stops being technology and becomes a question of consent and authorization — which is exactly the design work worth doing.

What's next Wire the call outcome back into the negotiation loop so carriers get counter-called as well; move from CSV to CRM/TMS connectors; measurable impact tracking — median hours-to-decision and demurrage dollars avoided per incident.

Built With

Built With

Share this project:

Updates

Submission history