Card number + menu key live here. Codes + per-call timing are managed below
in Range Auto-Dial; connect/RING comes from there too. Use the
token-flow builder for one-off manual scripts.
Built DTMF string (single-code, manual)
—
DTMF builder · from flow tokens · debug
Low-level escape hatch — normally you'll use Range Auto-Dial instead. Write the call as a
token flow (one per line or comma-separated).
Tokens: CARD, MENU, CODE1/CODE2/CODE3,
HANGUP, WAIT_n (n seconds), or a literal digit string. Example:
CARD, WAIT_6, MENU, WAIT_5, CODE1, WAIT_7, CODE2, WAIT_7, CODE3, WAIT_6, HANGUP
Each WAIT_n becomes n commas in the compact string (1 comma = 1 s pause); each
digit token expands to that card / menu key / code value.
Sweeps a range of access codes, packing several per call. The per-call rhythm above is enforced
end-to-end — device DTMF builder, classifier window, and live timeline below all derive from the
same numbers. Each code gets a 2 s post-DTMF settle immediately followed by a
4-6 s listen window so an early IVR reply (“invalid”, lockout) is never missed.
Code range
Per-call window (seconds)
Call pacing (seconds)
Total codes
—
Calls
—
Avg call
—
Total est.
—
Next call timeline · ● green cursor tracks the live call; click any
segment to edit its timing—
—
ringconnected (2s)card / menu keywaitcode digitslisten windowtail (last code)
Raw DTMF string
—
Idle0 ok ·
0 fail
0%
—00:00 · —
line: idledtmf:
—waiting
🎧 Live Listen · in-call audio + partial transcript
idle
Streaming + STT run on the PC server regardless of the browser. Muting here only silences your speakers — the
WAV file and partial-transcript signals still flow into the Range classifier.
Level
0 B
Rolling transcript (last ~6s):
—
—
⟳ Retry candidates:0
Time
Phone
Outcome
Stage
Invalid
Keywords
Transcript
No analysis results yet —
click Pull & Analyze after recordings exist on the device.
Calls placed in this session (range auto-dial). Cross-reference with the Analysis tab once recordings are
pulled.
No
completed calls yet
—
Started
Dur
Target
Codes attempted
Outcome
Transcript snippet
Audio
No live-stream sessions yet. Start a stream or enable "Auto-start with range" in Live Listen.
Pending
empty
Recent
none
Daemon Configuration · single source of truth
One config. Saved to settings.json on the PC and pulled by
service.sh on every daemon spawn via /api/dialer/env.
Restart the daemon to apply: adb shell su -c "pkill -f td_call_ctl".
Active dialing card (from IVR Script): —
· Viewing history for: —
· Server stores each card under pc_server/code_results/<card>/log.jsonl.
0 processed
0 winner
0 invalid
0 lockout
0 exhausted
0 voicemail / stuck / unknown / dial_failed
remaining: 0 of 0
range hint: —SKIP_PROCESSED is OFF — daemon will redial everything in CODE_START..CODE_END
What the IVR said after each code
When
Code
Outcome
IVR transcript
no history yet — run the
dialer, then click Reload
Processed codes map (click a row to see its
transcript)
Call walk-through — one row per phone call
(IVR stage path + transcript)
Each phone call (one DTMF burst = one recording) shows its ordered IVR stage path, a per-call verdict, and
the transcript. Source: /api/code-results/<card>/calls.
no calls yet — run the dialer,
then click Reload
🛠 Calibration · recommended timing
Analyses your recent per-code outcomes and proposes safer or tighter
values for the Range card. Run a quick 10-code calibration first if
you've never tuned this phone / line.
—
No findings yet — click Analyse outcomes.
Proposed Range timing:
Knob
Current
Proposed
Why
Apply updates the Range card and persists to
localStorage. Click Sync from Range ↻ in Daemon Config to push to the device too.