pyr0ball opened issue Circuit-Forge/osprey#1

pyr0ball
Tue, 31 Mar 2026 18:35:13 -0700

1#FTB dialer: fill in IVR sequence + Twilio credentials to go live#

Context

Bootstrapping the Osprey government hold-line dialer using the FTB (Franchise Tax Board) as the first real-world test case.

The webhook service and dialer script are built and deployed:

Webhook endpoint: https://circuitforge.tech/webhooks/twilio/

Service runs on Heimdall, port 8520

Caddy route already added

Source: /Library/Development/CircuitForge/osprey/

Blocked on

OSPREY_IVR_SEQUENCE — the DTMF key sequence to navigate the FTB IVR tree (800-852-5711) to reach a live agent.

Format: comma-separated digits where each comma = 0.5s pause.
Example: "1,,,2,,,0" = press 1, wait 1.5s, press 2, wait 1.5s, press 0.

Set in /Library/Development/CircuitForge/osprey/.env as OSPREY_IVR_SEQUENCE=...

To complete setup

1. Sign up for Twilio at console.twilio.com

2. Get Account SID + Auth Token

3. Buy a phone number (~$1/mo)

4. Fill out /Library/Development/CircuitForge/osprey/.env from .env.example

5. Set OSPREY_IVR_SEQUENCE to the FTB key sequence

6. Start webhook server on Heimdall: conda run -n cf uvicorn api.main:app --host 0.0.0.0 --port 8520 --app-dir /Library/Development/CircuitForge/osprey

7. Run dialer: conda run -n cf python -m app.dialers.ftb

Files

api/webhooks/twilio.py -- TwiML handlers (navigate IVR, status callback, bridge)

app/dialers/ftb.py -- retry loop dialer script

.env.example -- all required env vars documented