Project
ISP Support Agent
A WhatsApp support agent guides Spanish-speaking internet-provider customers through account checks, connection troubleshooting and consent-based ticket changes.
- Period
- June – October 2026
- Status
- Industry AI agent project
- Stack
- Python 3.12+LangGraphPydanticFlaskSQLiteHTTPXGunicornOllamaDockerpytestRuffGitHub Actions
Support agent
Recorded conversations, replayed through the agent's graph.
The agent asks who is writing and pauses until the customer answers.
- VERIFY: The agent asks who is writing and pauses until the customer answers.
- VERIFY: The agent asks who is writing and pauses until the customer answers.
- VERIFY: The conversation is already verified, so the agent passes straight through.
- CLASSIFY: The model reads the message: diagnose, 95% sure.
- DIAGNOSE: Four tool calls run in parallel: customer equipment, radio, upstream and area outage.
- VERDICT: A fixed table turns the results into a verdict: weak radio signal.
- REPLY: The template is sent as written.
- CONFIRM: Before touching a ticket, the agent asks and waits for a yes or no.
- CONFIRM: The customer said yes: one ticket write.
- REPLY: A Spanish template, rewritten by the model and checked before it is sent.
- VERIFY: The conversation is already verified, so the agent passes straight through.
- CLASSIFY: The model reads the message: tickets, 100% sure.
- REPLY: A Spanish template, rewritten by the model and checked before it is sent.
What the customer sees
The agent's state
- verified
- false
- VERIFY
Conversation accounts and network outcomes are synthetic and simulated; this is a replay of a recorded local model run demonstrating the workflow, not real operational accuracy.
What it does
A customer describes a symptom. The agent finds the fault and says it plainly.
- Verifies the customer, then answers billing and ticket questions in Spanish over WhatsApp.
- Diagnoses the connection with four checks run in parallel and a fixed verdict table.
- Asks before it opens or changes a ticket, and keeps technical evidence for staff.
01Context
The problem,and my part in it.
The problem
Built with GNS, an internet provider, as the industry partner of a university project. It runs against a mock ticket API and a simulated network and was never connected to GNS's systems.
What I did
I built the agent in a university team project with an industry partner, then led it to this version, directing AI coding agents.
- Built the LangGraph agent: identity, diagnosis and ticket-confirmation subgraphs that pause for the customer and resume from a checkpoint.
- Set the product rules: the model reads the message, while fixed rules decide the diagnosis and every ticket change.
- Designed the evaluation: a blind set written by outside AI models, labels I checked, and recorded replays that run in CI.
- Set the acceptance rules for rewritten replies, including the eight-second turn limit.
02Decisions
How it was built,and why.
Keep language interpretation separate from diagnosis. The model handles varied phrasing, while an ordered verdict table makes faults explainable. This makes thresholds explicit but requires maintaining them; model-generated diagnoses would instead give inference control over the outcome.
03Next
Where it goesfrom here.
- 01
Pilot it against a real ticket API in a sandbox.
- 02
Evaluate it on real, anonymized customer messages.
- 03
Send alerts to staff, with a handoff to a person when a customer is frustrated.