INTERNAL TOOL · NO TOKEN PERSISTENCE · NOT A DIALER
Ringnoted operator lab
SESSION
Worker and authentication
ACCOUNT
Away / vacation
Account-wide switch from GET|PUT /account. When away is on, call-flow answers, plays the away greeting, and takes a message. That plan overrides VIP, private line, hours, menu, ring, whisper, skip-if-busy, and missed-call SMS. Any Simulate while away walks the same local plan.
ACCOUNT
PIN / private line
GET|PUT /account/private-line returns { enabled, pin_set } and never the PIN. Enable requires a 4–8 digit PIN on PUT. Disable may omit pin or rotate it. Simulate private line assumes the PIN was already validated and walks answer → ring (private_line) → take_message_if_no_answer → hangup using the owned B ring_strategy / ring_targets (default single / one target). Whisper, skip-if-busy, and missed-call SMS compose from the owned B config the same way they do for VIP. Away still wins. Hours do not apply to VIP or private line.
ACCOUNT
Hours / holidays
GET|POST /hours and GET|PUT|DELETE /hours/:hours_id. Windows are account-scoped (number_id is null; E.164 is not required). Weekly rows use weekday 1..7 (Mon=1) plus starts_local / ends_local. Holiday rows use holiday_date YYYY-MM-DD; is_open false is closed, true is alternate hours. Call-flow precedence is away > VIP / private line > hours > open presets. Simulate A/B (and C) walk the after-hours plan when closed — unless Away, VIP, or private line already won.
No hours windows. Add a weekly open window or a holiday override.
PREFLIGHT
Operator checks
Owned numbers appear here after a signed-in Health check.
IVR PRESETS
Shallow phone flows
Sign in or paste a diagnostic token, then run Health to load presets.
After sign-in, Simulate A/B/C stays available. Owned presets are used once GET /presets succeeds; local create defaults are used only when that list loaded and none of that type exist. A failed presets request does not substitute defaults. Create A defaults to a nested Business info submenu (Hours / Address / bilingual parking Info). Simulate A walks nested menus with DTMF; digit 0 returns to the parent or replays the root; language en|fr selects the spoken prompt. play_* leaves still speak then hang up with no ring. Simulate B reads ring_strategy (default single) and ring_targets from the owned B config. Cascade walks sequential ring attempts; ring_all is one parallel step; round_robin uses the index input (default 0). Whisper, skip-if-busy, and missed-call SMS still compose. Owner busy plus skip_if_busy jumps to take-message. Take-message posts POST /messages when an owned number exists; otherwise the form stays local and says an owned number is required. Missed-call SMS previews after take-message / busy / no-answer when that flag is on. Simulate private line assumes the PIN was already validated and walks answer → ring_owner (private_line) → take_message_if_no_answer → hangup, using the same owned-B ring strategy. Hours / holiday windows (or the Outside hours toggle, a holiday closed day, or a fake now) walk the after-hours plan — play_after_hours_message plus notify preview — when closed. Precedence is away > VIP / private line > hours > open presets. If Away / vacation is on, every Simulate — including private line — walks the away greeting plus take-message plan instead.
PRESET A
DTMF menu
Play a spoken menu, collect digits, and route. A submenu may nest (max depth 3). Digit 0 returns to the parent or replays the root. Language en|fr selects bilingual prompts. Hours, address, and info leaves speak then hang up with no ring. Simulate walks the local call-flow plan. No carrier.
PRESET B
Ring then message
Ring the owner first; if unanswered, take a structured message (nom / callback / motif). Optional ring_strategy is single (default), cascade, ring_all, or round_robin. Extra E.164 targets are optional; the primary ring_target_e164 stays first. Whisper, skip-if-busy, and missed-call SMS still compose. Telephony still owns any real dialer.
PRESET C
After-hours
Skip the ring, play the after-hours prompt, and preview notify fan-out. Local IVR simulate · no carrier.
VIP NUMBERS
Whitelist bypass
Simulate VIP bypass uses the owned GET /vip-numbers list. Enter a caller E.164 that matches a loaded VIP row to walk ring then message and skip menu/hours. Whisper screens first when an enabled B preset has whisper_enabled, or when Screen VIP too is checked. Skip-if-busy, missed-call SMS, and ring_strategy / ring_targets are read from the owned B config (default single / one target). Owner busy plus skip-if-busy jumps to take-message. Missed-call SMS previews to the VIP caller after take-message / busy / no-answer when that flag is on. If Away / vacation is on, Simulate VIP walks the away plan and does not ring the owner. Private-line simulate is a separate button next to Away.
No VIP numbers. Add an E.164 caller with an optional label.
NOTIFY TARGETS
Fan-out destinations
No notify targets. Add an email or SMS destination with a label.
PROTOCOL