SHT-01Agent schedule

Agents that answer the phone, then get out of the way.

One of the systems we built has AI in it, and this is the only sheet where we say so. Everything below names the file it comes from. The agent's job is to catch the call, sort the reply, and put a person in front of the lead while it is still warm.

SHT-02Detail A · inbound voice

The call is answered, sorted, and handed over.

A Vapi assistant takes the inbound call. When it ends, Vapi posts the end-of-call report back into the system, which checks a shared secret before it believes anything, reads the duration to tell a conversation from a wrong number, matches the caller to a lead record, and sends the owner a Telegram alert while the lead is still warm. Short calls and no-answers are recorded but not announced, because an alert that fires for everything gets ignored.

  • Vapi assistant on the inbound line
  • Webhook rejects anything without the shared secret
  • Caller number matched to the lead record
  • Telegram alert only when a real conversation happened
  • Proof
    wallflow-saas · app/api/vapi/webhook/route.ts, lib/telegram.ts

SHT-03Detail B · telephony

Twilio underneath, because a phone call is not a webhook.

Six routes carry the actual telephony: a token endpoint so a call can be placed from the browser, a voice route that answers, a status callback so the system knows how the call ended, and a hook that fires when a recording finishes writing.

  • Browser-placed calls via a token endpoint
  • Voice route answers the inbound leg
  • Status callbacks close the loop on every call
  • Recording completion handled as its own event
  • Proof
    wallflow-saas · app/api/twilio/ (call, call-status, recording-done, token, voice)

SHT-04Detail C · follow-up engine

Twelve modules, and most of them exist to stop the machine doing something stupid.

Automated follow-up is easy to build and easy to get wrong in ways nobody notices for a month. Each module below was written after a specific failure, and the failure is written into the top of the file.

C1reply-classifier.ts

A bounce is not a reply

Every inbound message used to count as a human answering. Bounces, out-of-office autoreplies, and opt-out shouts all promoted a lead to 'replied' and quietly paused its sequence, which then had to be undone by hand. The classifier separates the four cases and routes each one differently.

C2hot-replies.ts

A real reply that nobody answered

A lead that answered and has heard nothing back since is the most expensive thing in the pipeline. It goes into a daily digest and stays there until someone actually moves it, rather than being announced once and forgotten.

C3adaptive-cap.ts

The engine throttles itself

When sending volume is high and real replies are not, the daily cap comes down on its own. Sending harder into a spam folder costs the sending domain, and the domain is the one asset here that cannot be replaced.

C4business-days.ts

It knows what a weekend is

Every wait in the system is counted in business days, and a step that lands on a Saturday moves to the Monday. A nudge that arrives on a Sunday reads as a machine, because it is one.

C5sequences.ts

The cadence lives in code

Steps are stored relative to the step before them, and where a subject line has variants, the variant is picked by a deterministic hash of the lead. The same lead always gets the same one, so a restarted sequence never reads as a different sender.

C6gmail.ts

It reads the real inbox

Sends over SMTP and reads replies back over IMAP from the actual mailbox, so a reply is a reply rather than an inference from a tracking pixel. Every message carries a working unsubscribe.

Proof · wallflow-saas · lib/followups/ (12 modules)

SHT-05Detail D · the dialer

A person is on the line. The agent does the paperwork.

A caller opens one tokenised page and works a list: the next number, who it is, what happened last time, and where the outcome goes. Eight endpoints stand behind that page, the campaign, the lead, the log, the callbacks, the calendar, the activity feed, the history, and the outreach record. Nothing is generated for the caller mid-conversation. The software's job is that they never have to look anything up.

  • One tokenised page, no CRM login to hand out
  • Call outcome and callback written as they happen
  • History of the lead visible before the number dials
  • Eight endpoints behind it, all server-side
  • Proof
    wallflow-saas · app/va-dial/[token], app/api/va-* (8 routes)

SHT-06Detail E · scheduled work

Thirteen jobs that run whether anyone remembers or not.

The parts of the working week that depend on a person remembering are the parts that stop happening in a busy month. These run on a schedule instead.

  • 01followup-engine
  • 02followup-stats
  • 03lead-rescue
  • 04inbox-cleanup
  • 05morning-briefing
  • 06evening-reflection
  • 07weekly-revenue
  • 08reminders
  • 09expire-trials
  • 10resend-stats
  • 11competitor-monitor
  • 12va-daily
  • 13smoke-test

Proof · wallflow-saas · app/api/cron/ (13 jobs)

SHT-07General notes · what this page will not claim

The parts we are not going to tell you.

How accurate is it?
There is no percentage on this page because we do not have one we would be willing to defend. What we can show you is the code that decides, and the failure each rule was written after.
Does it replace someone?
No, and it is not built to. The voice agent's entire design is the handoff, it answers, works out whether the call was real, and gets a human in front of it. The dialer is the same idea from the other end: a person talks, the software keeps the record.
Is the AI in everything you build?
No. The sauna building system deliberately has none. Both AI features it inherited were removed, because neither could actually run and one of them reported work it had not done. It is a better system for it, and we would rather say so than let this page imply otherwise.
Can an agent move a job on its own?
It is not wired to. The agents here classify, route, and notify. Moving a project forward, sending an estimate, or taking a deposit is a deliberate action by a person, and that is a design decision rather than a limitation we are waiting to remove.

SHT-08Cross-reference

The agent is only as good as the record behind it.

An agent that answers the phone and writes into nothing is a novelty. The reason the handoff works is that there is a system on the other side of it: the lead, the estimate, the deposit, the schedule. That is on its own sheet.

See the system

SHT-08Issued for construction

Start with the audit.

A short video walkthrough of where your lead flow leaks and what it would take to close it. Free, and there is no call afterwards unless you want one.

Get my free audit