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.

  1. VERIFY: The agent asks who is writing and pauses until the customer answers.
  2. VERIFY: The agent asks who is writing and pauses until the customer answers.
  3. VERIFY: The conversation is already verified, so the agent passes straight through.
  4. CLASSIFY: The model reads the message: diagnose, 95% sure.
  5. DIAGNOSE: Four tool calls run in parallel: customer equipment, radio, upstream and area outage.
  6. VERDICT: A fixed table turns the results into a verdict: weak radio signal.
  7. REPLY: The template is sent as written.
  8. CONFIRM: Before touching a ticket, the agent asks and waits for a yes or no.
  9. CONFIRM: The customer said yes: one ticket write.
  10. REPLY: A Spanish template, rewritten by the model and checked before it is sent.
  11. VERIFY: The conversation is already verified, so the agent passes straight through.
  12. CLASSIFY: The model reads the message: tickets, 100% sure.
  13. REPLY: A Spanish template, rewritten by the model and checked before it is sent.

What the customer sees

S
SoporteEnglish translation
The internet has been really slow since yesterday
To start, type your customer number, for example: customer ••. If you don't remember it, check your bill or call us.
Type a message

The agent's state

paused at verify, waiting for the customer
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.
47 vs 37of 50 blind test messages: the model against rules alone; 48/50 combined (synthetic set)
262 of 294rewrites sent; the other 32 fell back to the template (synthetic test conversations)

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.

Decision 01

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.

  1. 01

    Pilot it against a real ticket API in a sandbox.

  2. 02

    Evaluate it on real, anonymized customer messages.

  3. 03

    Send alerts to staff, with a handoff to a person when a customer is frustrated.

Next projectReady-Mix Concrete Demand Forecasting