Inspiration

When a water bill triples, the customer doesn't want a help article about "common causes of high bills". They want someone to look at their meter, tell them what's wrong, and fix the money side. Utilities run on small call-center teams, and high-bill, payment-plan and move calls are the bulk of the queue. I wanted an agent that resolves those end to end and hands off cleanly when it shouldn't decide.

What it does

Flo is the AI support agent for Riverbend Water, a fictional municipal water utility (all customer data is fictional).

  • Pre-chat triage workflow asks one question up front. A water emergency gets the 24/7 emergency line before anything else. Everything else goes to the agent with the customer's own words.
  • Grounded answers from five knowledge articles I wrote: high bills and leak adjustments, payment plans and shutoff protection, start/stop/transfer, outages and boil-water notices, and water quality and lead. Every answer cites its source.
  • Real actions on a live API, through five custom actions plus Knowledge Search:
    • review_my_bill verifies the account by number + ZIP and reads usage and smart-meter data ("18 CCF vs 6 average, meter never dropped below 7.5 gal/hr overnight → probable leak").
    • open_leak_adjustment opens the credit case with the policy estimate and a proof-of-repair deadline.
    • setup_payment_plan creates a plan inside policy. Over policy, it opens a specialist review instead.
    • request_meter_reread books a free re-read for estimated reads.
    • check_service_alerts reports outages and boil-water notices by ZIP.
  • Process workflow (Move Planner), tied to the "Utility Service Administration" intent: start, stop or transfer service. It asks own/rent, date and address, then schedules the order through the API and returns an order number.
  • Escalation workflow with four paths: call Customer Care, book a callback (name + phone, posted to the care system, falls back to a call if the API fails), email the transcript to a specialist, or the emergency line.
  • Validation and guardrails: account + ZIP verification, date fields, data masking on, never asks for card/bank numbers, never approves credits itself ("a billing specialist approves it"), off-topic questions declined politely.
  • Every action shows up live in a care-team queue (https://riverbend.sites.tab.bot/ops.html), so you can watch the agent's work land.

How I built it

  • eGain AI Agent: knowledge base (5 PDFs → 6 intents), agent persona and instructions, custom API actions, three published workflows (pre-chat, escalation, process), data masking.
  • Backend: a small serverless API (Cloudflare Worker + KV) at riverbend.sites.tab.bot with demo accounts that cover the main scenarios. Cases are idempotent, so retries don't create duplicate cases.
  • Demo video: real screen recordings of the working agent, with an AI-generated voiceover.

Challenges

  • The custom action limit (6 per agent) meant moving the callback into the escalation workflow's API node. That turned out better, because the callback has a fallback path.
  • Keeping the agent honest about authority: it estimates credits and plans from policy but never "approves" them, and it routes over-policy balances to a person instead of forcing a plan.

What I learned

Combining workflows (deterministic, auditable steps) with grounded generation and real actions is what moves an agent from "answers questions" to "resolves the ticket".

Try it

Open the demo link and try:

  • "My bill is $163, usually $60. Why?" then RB-10427 / 55501, then "the plumber fixed the flapper, can I get a credit?"
  • "I'm moving out, stop my service"
  • "Can I talk to a person?"

Other demo accounts: RB-20831/55502 (estimated read), RB-30115/55503 (payment plan), RB-40990/55504 (over-policy balance + boil-water notice).

Disclosure: Riverbend Water, its accounts and phone numbers are fictional. The video voiceover is AI-generated. Built by David J.

Built With

Share this project:

Updates

Submission history