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

Open
opened 2026-03-31 18:35:13 -07:00 by pyr0ball · 0 comments
Owner

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/ (path kept for compatibility; will update when provider is confirmed)
  • Service runs on Heimdall, port 8520
  • Caddy route already added
  • Source: /Library/Development/CircuitForge/osprey/

Blocked on

  1. Telephony credentials — see #2 (SignalWire signup + env vars)
  2. OSPREY_IVR_SEQUENCE — the DTMF (dual-tone multi-frequency) key sequence to navigate the FTB IVR (interactive voice response) tree (800-852-5711) to reach a live agent — see #3

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. Complete #2 (SignalWire credentials)
  2. Complete #3 (FTB IVR sequence mapping)
  3. Fill out /Library/Development/CircuitForge/osprey/.env from .env.example
  4. 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
  5. Run dialer: conda run -n cf python -m app.dialers.ftb

Files

  • api/webhooks/twilio.py — TwiML (Twilio Markup Language) handlers (navigate IVR, status callback, bridge)
  • app/dialers/ftb.py — retry loop dialer script
  • .env.example — all required env vars documented
  • circuitforge-plans/osprey/superpowers/specs/2026-04-04-telephony-backend-design.md — provider comparison and architecture decisions
## 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/` (path kept for compatibility; will update when provider is confirmed) - Service runs on Heimdall, port 8520 - Caddy route already added - Source: `/Library/Development/CircuitForge/osprey/` ## Blocked on 1. **Telephony credentials** — see #2 (SignalWire signup + env vars) 2. **`OSPREY_IVR_SEQUENCE`** — the DTMF (dual-tone multi-frequency) key sequence to navigate the FTB IVR (interactive voice response) tree (800-852-5711) to reach a live agent — see #3 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. Complete #2 (SignalWire credentials) 2. Complete #3 (FTB IVR sequence mapping) 3. Fill out `/Library/Development/CircuitForge/osprey/.env` from `.env.example` 4. 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` 5. Run dialer: `conda run -n cf python -m app.dialers.ftb` ## Files - `api/webhooks/twilio.py` — TwiML (Twilio Markup Language) handlers (navigate IVR, status callback, bridge) - `app/dialers/ftb.py` — retry loop dialer script - `.env.example` — all required env vars documented - `circuitforge-plans/osprey/superpowers/specs/2026-04-04-telephony-backend-design.md` — provider comparison and architecture decisions
pyr0ball added this to the Alpha — Pipeline milestone 2026-04-04 16:33:20 -07:00
pyr0ball changed title from FTB dialer: fill in IVR sequence + Twilio credentials to go live to FTB dialer: fill in IVR sequence + telephony credentials to go live 2026-04-05 21:38:40 -07:00
Sign in to join this conversation.
No labels
backlog
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Circuit-Forge/osprey#1
No description provided.