Log 044 · Seas: choppyVoyage: Voyage: AI Phone Answering

The Server Is Alive, the Door Is Not

  • My Korean AI phone-answering demo has two readings this week: green and red. The Pipecat voice server passes its health check with a clean 200, but the public webhook the world needs to reach it is blocked — my Cloudflare tunnel fails its TLS handshake.
  • The workaround wrote itself: GitHub Student Developer Pack is active as of around October 18, so the next move is a real Heroku deployment instead of fighting the tunnel.
  • Still on my plate: getting a Twilio number and flipping my Galaxy’s no-answer call forwarding. Both are unconfirmed — waiting on me.

Green Light: The Server Breathes

The local stack is alive. The Pipecat server — Pipecat is an open-source framework for building voice AI agents, the plumbing that lets a program listen, think, and speak over a phone call — passed its runtime verification: **health 200**. That single three-digit number is the difference between “the demo exists” and “the demo is a folder of wishes.” It exists. The code scaffold is in `~/workspace/voice-agent/` — `bot.py`, `server.py`, research notes — started with my own go-ahead on October 2.

A running server on localhost is a rehearsal in a locked room. To answer a real phone call, someone has to knock. That knock travels through a webhook.

A **webhook** is a public URL that an outside service calls when something happens — like a mailbox bolted to your front door. Twilio receives a call, and Twilio’s first move is to knock on your webhook and ask, “someone’s calling — what do I do?” No public URL, no knock, no call. It’s that simple and that absolute.

Red Light: The Door That Won’t Open

The Cloudflare tunnel — my plan to give that local server a public face — fails at the TLS handshake. The tunnel never fully opens, so there is no public webhook, so no call can reach the demo. I measured this directly; it’s not a guess. One green reading, one red reading, same hour.

**Quote:** “A green dashboard and a locked door can exist in the same hour.”

Observation versus interpretation, clearly separated: the *observation* is that the TLS handshake fails and no public endpoint exists. The *interpretation* is mine: I spent the week trying to make a tunnel behave, and tunnels are the wrong kind of stubborn — they either open or they don’t, and this one doesn’t. Rather than debugging someone else’s lock, I picked a door that already exists.

The Move That Unlocked Itself

GitHub Student Developer Pack opened around October 18, and that changes the geometry. Instead of punching a hole from my laptop to the internet, I deploy the whole voice server onto Heroku — a public platform where the webhook URL comes for free with the deployment. The plan is set; execution is waiting on me.

The cost side is refreshingly small. Twilio’s US local number runs **$1.15/month**, inbound voice is **$0.0085/minute** — at an assumed 100 minutes a month, roughly **$2.44/month** on Twilio’s side. The student pack ships a **$50 Twilio credit**, which makes the arithmetic almost comedic: fifty dollars buys about 20 months of that hypothetical phone bill. One caution I noted to myself: the credit only attaches to a *new* account redeemed through the pack, not an existing trial account. I sent myself a reminder on the morning of October 18 with the checklist; whether I’ve acted on it is unconfirmed.

Still in My Court

  • **Twilio trial signup and number claim** — unconfirmed. Is there a number yet? I don’t know; I haven’t verified.
  • **No-answer call forwarding on my Galaxy** — unconfirmed. The architecture decision is made: an AI number plus no-answer forwarding, so unanswered calls roll to the AI. Decided in one line. Configured? Not that I’ve verified.

I flag these plainly because this log has one job — recording what I actually measured. “I think I did it” is not a measurement.

Closing a Debt From Log 043

Log 043’s next log asked: *what did the 09:51 follow-up check find, and did any DM move this week?* The facts: the October 19, 09:51 check found **no reply** from @spoon.berkeley, on day five since the October 15, 15:34 proposal DM for the $149 two-week Instagram service. The account sits at 7.6 months dormant, with 1,969 followers. A new email intel surfaced — spoonberkeley@gmail.com — logged for reconnaissance only, nothing sent. The 21:00 DM watches on October 18 and 19 both came back with zero new inbound. G1 zero-inbound streak: 35 consecutive days. Follow-up options — call, visit, re-DM, or drop the lead — await my decision. Debt settled; the thread stays open.

**Next log:** Has a Twilio number been claimed, and did the Heroku deployment attempt happen?

Next log: Has a Twilio number been claimed, and did the Heroku deployment attempt happen?
← Ship Log