# Whisper — we may already have the connection, and it runs through ISN

*For Dil and Ken. Written 2026-08-17, from the code rather than from a conversation.*

**The short version:** Dil asked whether what we have from ISN tells us how to
connect to Whisper. It does, and it points somewhere different from the earlier
note. **The likely route to Whisper is not Larry White's API — it is Chad's ISN,
which we can already write into.** The code to do it exists, is finished, and is
called by nothing.

---

## The chain, and where the gap actually is

| Link | State |
|---|---|
| Josh takes a booking and captures the full property record | ✅ live |
| We write that record into Chad's ISN as an order | ⚠️ **built, tested, and dark** |
| Chad's ISN feeds his report writer | ❓ **the one thing nobody has confirmed** |
| Whisper opens with the header already filled in | follows from the row above |

The earlier note put the missing piece on Whisper's side — *"does Whisper accept
data in, and how"* — and prepared four questions for Larry. That is the right
question **if** we are pushing into Whisper directly. It is the wrong question if
Whisper already reads jobs out of ISN, which is the ordinary arrangement and the
reason an inspector runs a scheduler and a report writer together at all.

⚠️ **I have not confirmed that Whisper reads from ISN and I am not going to
assume it.** Nobody here has seen Chad's Whisper account. It is one question, and
it is a question for **Chad**, not Larry — see the message at the bottom.

---

## What we already have on the ISN side

`api/isn/availability.js` is a complete ISN REST integration against Chad's
account (`goisn.net`, HTTP Basic, company key + API user). It does two things:

**Reads availability — live.** `GET /api/isn/availableslots` is mounted in
`server.js` and is how Josh offers a caller a real open time.

**Writes an order — built, never called.** `isnCreateOrder()` posts a full job to
ISN's `/order`, and it is not a sketch. It resolves the foundation-type UUID,
sets the display dropdowns through `controls-v2` with a fallback if ISN rejects
them, creates the client record first and links it by `clientuuid`, ticks the
add-on services so ISN prices them off its own square-footage table, and writes
the appointment note. Somebody did the hard part already.

The fields it sends, which is the same thing as *the report header we can
pre-fill*:

```
address1 · city · state · stateuuid · zip
squarefeet · yearbuilt · foundationtypeuuid
propertyoccupied · utilitieson · clientattending
gatecode / lockboxcode          (routed to the right one)
ordertypeuuid · services · fees
datetime · inspector1uuid · inspector1requested
client: name · email · mobile   (linked by clientuuid)
cs2clientnote · cs2appointmentnote
```

⚠️ **Two reasons it is dark, and only one of them is a switch.**

1. `ISN_WRITE_ENABLED` is not set, and the function returns
   `{ok:false, skipped:true}` without it. That is deliberate — the comment says
   so — because test calls must not create real unscheduled orders in a live
   inspector's account.
2. **Nothing calls `isnCreateOrder` at all.** It is exported from
   `api/isn/availability.js` and there is no importer anywhere in the repo. Only
   `isnAvailableSlotsHandler` is imported into `server.js`. So flipping the env
   var alone would change nothing — the booking path has to be wired to it.

That is worth saying plainly because it is the difference between "turn it on"
and "half a day's work", and I would rather be right than encouraging.

---

## Why this is a better route than building to Whisper

**One integration instead of one per client.** Whatever Larry exposes would be a
Whisper integration. ISN is the scheduler a large share of inspectors already
run, and we are connected to it. Every client on ISN inherits the same pipe.

**We are not asking a third party for anything.** No call to book, no waiting on
somebody else's roadmap, no per-inspector credentials to chase — which was
question 4 in the earlier note and the one that decides whether a thing scales.

**It is already proven against Chad's real account.** The availability read has
been running against his live calendar since July. This is the same credentials,
the same base URL, the same auth.

**And the harder version is the one we would be signing up for.** As the earlier
note put it: ISN and Spectora are a scheduler pre-filling *their own* report
writer. Pushing into Whisper directly makes us a scheduler pre-filling *somebody
else's* — which depends entirely on what one man chooses to expose, and on his
timescale rather than ours.

---

## What I would do, in order

1. **Ask Chad the one question below.** Costs him thirty seconds.
2. **If the job already appears in Whisper from ISN** — wire `isnCreateOrder`
   into the booking path, set `ISN_WRITE_ENABLED=1`, and run one booking end to
   end on the 888. Larry is not involved. Half a day, most of it testing.
3. **If it does not** — then the earlier note stands unchanged, and the four
   questions for Larry are the right four.

⚠️ **Step 2 writes into a real inspector's live software and needs Ken's or
Chad's say-so first.** It creates an order in GC's ISN that a human then has to
review and schedule. That is not an internal change and it does not fall under
"just do it".

⚠️ **And it changes what a failed booking looks like.** Today a booking that
saves to GHL and the portal is done. With the ISN write wired in there is a third
system that can fail, so it has to be fire-and-forget the same way the GHL notes
are — a missing ISN order is an annoyance, a booking that fails because ISN was
slow is a lost job.

---

## Copy and paste to Chad

> Hey Chad — one quick question about Whisper, and it might save everyone a call
> with Larry.
>
> **When you sit down to write a report in Whisper, is the job already in there —
> the address, the client, the square footage — pulled across from ISN? Or do you
> type it all in again?**
>
> If it comes across from ISN on its own, we can pre-fill your reports from
> Josh's bookings without touching Whisper at all, because we already write into
> ISN. If you're retyping it, then we do need Larry and we'll set that call up.
>
> Either answer is useful — just tell me which one it is.

---

## What I do not know, stated plainly

- **Whether Whisper reads from ISN.** The whole thing turns on it. Not confirmed.
- **Whether Chad's ISN is configured to share with a report writer** even if
  Whisper can. That is an account setting on his side.
- **What Whisper does with a job it receives** — which fields it maps, whether a
  partial header is useful or whether it needs all of them.

None of those can be answered from this repo, and the first one is a thirty-second
question rather than a meeting.
