# Four questions from the 17 August meeting — answered

*For Ken. Written 2026-08-17, from the meeting transcript and from the code.*

The other eight items on the list were built and are on the branch
`claude/dashboard-portal-onboarding-5n91ic`. These four were questions rather than
builds, so here are the answers — including one thing that is going to matter on
Tuesday and that nobody has spotted yet.

---

## 1. Chad's call transcripts — server or Telnyx?

**Short answer: the audio comes from Telnyx, the written transcript comes from our
own server, and — this is the part that matters — we only have the written one for
the calls that BOOKED.**

| What | Where it comes from | Which of Chad's 13 calls |
|---|---|---|
| **Audio recording** | **Telnyx**, kept 12 months. Play it from the portal → **Calls** tab. | **All of them** |
| **Written transcript** | **Our server.** Josh's own bot posts what was said to `/api/calls/transcript`, and it is filed as a note on the client's CRM record. | **Only the ones that booked** |
| **Assertion failures** | Hamming, but only when a monitored call trips a rule. | Only if that call was in a monitored run |

### ⚠️ The problem, in the code's own words

`austin-voice-poc/bot.py` says it plainly:

> *"save_contact writes a BOOKING, and the transcript is only filed on calls that
> booked, so a non-booking call left no trace but a duration."*

And `api/calls/transcript.js` does exactly that — no booking, no contact to file
against, nothing written.

**Why that bites right now:** you gave Chad twenty scenarios and told him to try to
break it. A good test set is mostly calls that *don't* end in a booking — the price
shopper, the wrong area, the angry one, the "do you do pre-drywall". Those are the
calls you most want to read, and they are the ones with no transcript.

You said it yourself: *"what we need to do is pull those transcripts and go over
each one of them."* Right now that means **listening to thirteen recordings**, not
reading thirteen transcripts.

### What you can do this week

1. **Portal → Calls.** Every one of the 13 is there with its duration, whether it
   booked, and a play button. That is the full set, today, no work required.
2. **For the ones that booked**, the transcript is already on the client's CRM
   record as a note, alongside the work order.

### What I'd fix, and it is small

Log the transcript for **every** call, not only the ones that booked. The bot
already has the turns in hand when the caller hangs up — it just throws them away
when there is no contact to attach them to. They would go to the call log instead
of the CRM contact.

**This is a change to the phone bot, so it needs a manual deploy and a test call
(`cp bot.py` + `pm2 restart austin-voice`).** I have not made it — it touches the
process Chad's and Ted's live numbers run on, and that is your call, not mine. But
if you want to read rather than listen for the Tuesday cohort, it wants doing
before Tuesday.

---

## 2. Different ElevenLabs voices

**Built. It's a page.** You said: *"let us give us what we need to listen to, and
we'll listen to it right away."*

**`bookedsolidinspector.com/voice-audition.html`** — sign in with your launch-board
login. It lists every voice on our ElevenLabs account and plays each one saying the
same Josh line, so you and Beth can compare like for like.

Three things I built into it deliberately:

- **Every voice reads the identical script**, and it is what Josh actually says —
  including the AI disclosure and the recording notice you added on the 17th. A
  voice that sounds good reading something else has not won anything. There is an
  address, a time and a price in there on purpose: **numbers are where a voice goes
  wrong**, and that is what a scheduling call is made of.
- **The voice Josh uses today is marked and listed first**, so you calibrate against
  the current one rather than judging in the abstract.
- **Listening changes nothing.** Picking one here does not switch it. The live voice
  is a server setting that takes a deploy and a test call — and there is already a
  per-number override so a new voice can be tried on the **shared 888 test line**
  without going anywhere near Chad's or Ted's numbers.

⚠️ **One caution.** ElevenLabs' public library has thousands of voices, but a voice
only works once it has been **added to our account**. The page lists what our
account actually holds, so if the list looks short, that is the reason — Dil can add
more from the library and they will appear.

⚠️ **And Dil's rule from 13 August stands over this:** *"we need quality product not
cheap."* If the cheaper option sounds worse, it failed the test. It didn't save
anything.

---

## 3. Connecting our data to Whisper

**Not built, and I have not pretended to.** Here is what is actually known and what
I would need.

**What you told us:** Chad wants to introduce you to **Larry White at Whisper
Computer Solutions** — inspection software, Texas-only report, and *"tons of home
inspectors have him."* The job is to make the booking pre-fill the inspection
report: client name, property address, age of the home, the rest.

**What we already hold** — and this is the good news, because it is most of the
job. Every booking already captures, in a structured record: client name, phone,
email; property address, square feet, year built, foundation type, occupancy,
utilities on, pool/spa, MLS number; access notes and lockbox code; the package, the
add-ons, the price; the referring agent. That is very close to a report header
already.

**What is missing is entirely on their side, and it is one question:**

> **Does Whisper accept inspection data in, and how — an API, a webhook, or a file
> import?**

I cannot answer that from here and I am not going to guess at it. Nobody in this
company has spoken to Larry yet.

**What I would ask him, in this order:**

1. Do you have an API or a webhook that creates a job / pre-fills a report from
   outside Whisper?
2. If not, do you support a file import — CSV or otherwise — for a new job?
3. What are the required fields, and what do you call them?
4. Is it per-inspector credentials, or one integration key for a company?

You also suggested asking ISN and Spectora *"does ISN pre-fill my inspection
report, and how"* — worth doing, because it tells us the shape of the thing Whisper
will most likely have copied. **But note the two are not the same job:** ISN and
Spectora are the *scheduler* pre-filling their *own* report writer. We are a
scheduler pre-filling **somebody else's**, which is the harder version and depends
entirely on what Larry exposes.

**Realistic sequence:** one call with Larry → we know if it is an afternoon or a
fortnight. Until that call, any estimate would be made up.

---

## 4. GHL sendouts using Booked Solid

**Beth has this, and she took it explicitly.** From the end of the meeting, after
Dil raised it:

> Beth: *"Let me handle it. I'll go tell Ken I'll do it too."*

Her plan, as she said it: send tomorrow's 6:30 email from your G Suite as before,
and get **Jo** to set up Booked Solid properly inside GoHighLevel in parallel —
because there is real setup underneath it.

**What she named as still outstanding**, so it is written down somewhere other than
a Zoom call:

- The Booked Solid sending address needs **DKIM and DMARC** verified.
- **Two template headers, not one** — a desktop header *and* a mobile header. Beth:
  *"you can't use a desktop header on a mobile view… we realise, wow, we've been
  doing this wrong the whole time."*
- **No Booked Solid logo has been settled.** Dil: the current one *"was created by
  AI"* and is *"too ordinary."* Jewel has not been briefed on one.

Nothing here is mine to do, and I have not touched it. Flagging it only because the
logo is on the critical path for the email template, and the email template is on
the critical path for Tuesday.

---

## The one thing I'd put in front of you first

The transcript gap in §1. Everything else on this list can wait a week; that one
decides whether Tuesday's testers give you thirteen readable conversations or
thirteen recordings somebody has to sit through.
