📞 Telephone.org

IVR Management Console
Invalid password
Ready
Conversation
Debug
DSL:
🔧 Kazoo Pivot Output
Start a simulation to see Kazoo Pivot JSON output here.

Each step will show the JSON that would be sent to Kazoo.
Select a flow to edit
No flow
100%
🔍 Analyze Flow:
💾 Presets:
Traces all reachable flows from selected root
Loading analysis...
📊 Flow Statistics
Click a flow to see stats
đŸŒŗ Branch Visualizer
đŸ—ēī¸ Flow Connection Map
🔌 Endpoint Dependency Map
Run analysis to see endpoint usage
💾 Saved Presets (click to expand)
đŸŽ¯ Test Navigator & Node Tools (click to expand)
đŸŽ¯ Test Navigator

Jump to any node with pre-filled session data

Preset:
📊 Coverage Progress
📝 Node Verification (click to expand)

Click: cycle status (❓→✅→🔧) | Right-click: notes | Double-click: test

❓ Not Tested | đŸ‘ī¸ Visited | ✅ Verified | 🔧 Needs Fix

🔧 DSL Builder & Validator

Convert Twilio Studio flows, scripts, or descriptions into our DSL format. All prompt sections below are editable - customize them for your specific needs.

Core rules for the LLM - edit to adjust strictness
DSL node specifications - add/modify as needed
Expected output format for flows and endpoints
Real example from our system - helps LLM understand patterns
Paste Twilio JSON, script code, or describe the flow you want

đŸ“Ĩ Import LLM Response

After running the prompt through an LLM (Claude, GPT, etc.), paste the response here. The system will extract FLOWS and ENDPOINTS JSON blocks, validate them, and prepare for import.

🕐 Business Hours Manager

Manage named schedules that DSL check_schedule calls reference

📊 Schedule Status

Current status of all named schedules (as referenced by DSL)

📅 Weekly Hours

Select a schedule to edit its weekly hours

đŸšĢ Recurring Holidays

These dates are closed every year (affects schedules with shared holidays enabled)

📆 Special Closures

One-time closures (e.g., Thanksgiving varies each year)

đŸ§Ē Test Schedule

Simulate a date/time to test if a schedule would be open

📞 Queue Manager

Map DSL queue destinations to Kazoo extensions and CRM callback IDs

📋 Queue Mappings

DSL Destination Name Ext Callflow ID Queue ID CRM ID Aliases
Loading...

🔍 Test Queue Lookup

Test resolving any identifier to its queue info

📊 Queue Usage in Flows

Shows which flows use each queue

Traffic Router

Route Kazoo pivot calls across multiple IVR servers with weighted traffic splitting

Servers

Shared pool of IVR server base URLs referenced by route profiles

Key Name Base URL
Loading...
If routing fails for any reason, calls fall back to this server

Routes

Each route is a Kazoo entry point with switchable traffic profiles

Server Base URL

This URL is used by Kazoo to reach your IVR server. Set it in Settings → Server Settings.

📊 Today's Stats
0
Calls Today
0
Active Now
0
Peak Concurrent
0
Avg Steps
Avg Response: 0ms
Last Call: --
Errors: 0
📞 Order Identification
0
Auto (Caller ID)
0
Manual Entry
Avg Steps (all calls): 0
🧠 Prediction Accuracy
--
Accuracy Rate
Prediction Coverage --
0 of 0 calls
0
Confirmed
0
Declined
0
Auto-routed
0
Low Confidence
Per-Rule Accuracy
No data yet
đŸŽ¯ Flow Hits Today
No data yet
🌐 API Endpoint Hits
No data yet
đŸŸĸ Active Calls
No active calls
⚙ Feature Flags
Loadingâ€Ļ
🚨 Error Log
No errors
Page 1 0 entries
📡
Loading call logs...

🌐 API Endpoints

CRM API integration health and usage dashboard

-
Total Endpoints
-
Used in Flows
-
Orphaned
-
Local Handlers
-
Fields Mapped
-
KB Conditions

Refund Audit Log

Cancel & refund operations with business rule validation
Time Order # Caller Endpoint Amount Balance Delivered Cancel OK Status Flags
Click Refresh to load audit data
Page 1
📁 API Groups
âš ī¸ Orphaned Endpoints
🌐

Select an endpoint group or endpoint to view details

Bot Hierarchy
Loading hierarchy...
Orphan Nodes
Loading insights...
DSL Nodes
Select a Landbot flow to visualize its graph and DSL nodes.
KB Articles
Loading articles...
Loading KB overview...
Article Detail
Click an article to view details.
Loading rules...
Select a rule to edit
🔮
Select a prediction rule from the left panel to edit
Rule Status
No rule selected
Test Predictions
Run a test to see matched rules
Engine Info
-
Known Fields
-

đŸ—ē Phase Status / Roadmap

[click to expand]

📋 Agent Context Bundle

The curated payload sent to the LLM at agent_loop entry — order summary, eligibility flags with block reasons, history, frustration signal, and the in-scope tool catalog. Strips PII, internal IDs, and URLs. See src/agent_context.py and Section 11.5 of docs/ARCHITECTURE_DECISIONS.md.

or:
// Pick a session above or click a demo to view the bundle.

💰 Usage & Billing

Append-only ledger of every metered upstream call (TTS, Claude, Groq, ASR). Filter by tenant or call. Cache hits show up but bill 0 — only generations bill. See src/usage_ledger.py · logs/usage_*.jsonl · Section 11.7 of docs/ARCHITECTURE_DECISIONS.md.

🤖 AI / LLM Mode

Master toggle for the agent_loop on pilot flows (NON_DELIVERY_AI, PRODUCT_QUALITY_AI). When OFF, calls fall back to deterministic CANCEL_ORDER_FLOW / PRODUCT_FLOW (DTMF). Same fallback fires on concurrency-cap rejection or any agent_loop exception. See src/ai_concurrency.py + src/interpreter.py agent_loop branch.

Master Toggle
Max Concurrent AI Sessions
New calls beyond this fall back to DTMF for that call. Existing AI calls finish.
đŸ—Ŗ Groq Utterance Polish (Phase 2)
Routes Claude's draft response through Groq for tone cleanup. Adds ~200-400ms but cheaper Groq tokens. A/B test whether it improves naturalness.
▸ Active AI sessions
▸ Recent acquire/reject/release events
Auto-refreshes every 5s while panel is open

📞 Kazoo Integration URLs

Edit the public-facing URLs Kazoo uses to reach this server. Saves to .env and applies live (no restart). The catalog below is auto-derived — copy-paste into your Kazoo Pivot configuration. See src/env_config_manager.py.

Loadingâ€Ļ

Paths Kazoo connects to:

Defined in the FastAPI routers — paths themselves are not user-configurable, but the BASE_URL above feeds into all of them. Click any URL to copy.

Loadingâ€Ļ

🔑 LLM API Keys

Anthropic (Claude) for tool-use decisions · Groq for fast utterance generation (Phase 2). Keys are persisted to .env and applied to the running process immediately — no restart required. Values are masked for display. See src/secrets_manager.py.

Loadingâ€Ļ

🔊 VAD (Voice Activity Detection) Provider

Detects when the customer is speaking. Silero is the default — free, ONNX, no GPU, ~1ms per chunk. Trained on speech formants — correctly rejects noise/silence even at high amplitude. SoulX-Duplug is a semantic upgrade (returns idle/nonidle/speak/blank where speak means semantic completeness) — skeleton until hosting is decided. See src/vad/.

Loadingâ€Ļ

🚧 Phase 3 Feature Toggles

Switches for Phase 3 audio-pipeline features. Some are wired to live code paths; others are skeletons until the underlying impl lands. Flipping a flag whose impl isn't ready is a no-op on dead code — safe to toggle ahead of time.

Loadingâ€Ļ

đŸ§Ē Channel Interrupt Lab — Empirical Testing

Test how Kazoo behaves when you interrupt an in-progress play verb. Documentation is sparse — the only way to know if metaflow / redirect / break actually preempts mid-utterance is to fire the request against a live call and observe.

📚 Kazoo research notes
  • POST /v2/accounts/{aid}/channels/{call_id}/metaflow — runtime callflow injection. Documented purpose: hot-key callflow features mid-call (e.g. dial a star-code to mute). Whether it preempts an in-progress play verb is unverified.
  • POST /v2/accounts/{aid}/channels/{call_id} with action=break / queue — older API. Behavior under Pivot's play is unknown.
  • Pivot redirect: returning a fresh Pivot response with a new play may or may not preempt the previous one — depends on Pivot's playback state machine.
  • The polite barge-in approach (Section 5.4(a) of arch doc) sidesteps this entirely: let the current play finish a short sentence, capture customer speech in parallel, respond on next turn.

Live call selector

Loadingâ€Ļ

Interrupt strategy

📋 Expected observations to record
  • Did the original play stop immediately? Within how many ms?
  • Did Kazoo queue the new audio (waited for original to finish)?
  • Did the call drop or behave erratically?
  • HTTP response code + body from Kazoo
Append findings to docs/ARCHITECTURE_DECISIONS.md Section 5.4(b).

🎤 ASR (Speech-to-Text) Provider

Selects the streaming-ASR backend used by Pivot-TAP and Jambonz when those adapters land. Deepgram nova-2 is the production-ready default. Together.ai Whisper is the cost target (Phase 3 verification of streaming pending). Google Cloud is a future skeleton. NoOp bypasses ASR for tests/dev. See src/asr/.

Loadingâ€Ļ

đŸŽ™ī¸ TTS Cache Pre-warm + Hash Registry

Pre-generate audio for common phrases at startup so the first call doesn't pay synthesis latency. Hash registry persistence lets dynamic Groq utterances survive restarts. See src/tts_prewarm.py ¡ src/adapters/tts_endpoint.py.

🚨 Frustration Detector

Repeat-call frequency thresholds + keyword signals (BBB, lawyer, chargeback, etc.). Hard signals skip the AI agent entirely and route to the priority queue. Soft signals are exposed to the LLM as context flags. See src/frustration_detector.py ¡ Section 11.6 of docs/ARCHITECTURE_DECISIONS.md.

đŸ§Ē Probe a scenario
Thresholds are placeholders — see open question #13 (out to customer)

🌐 Server Settings

Configure the public URLs that Kazoo will use to reach this server and the TTS endpoint.

🔊 TTS Provider

Select and configure the text-to-speech engine for IVR prompts.

đŸ—Ŗī¸ Pronunciation Mappings

Map words to TTS-friendly pronunciations. Example: "avas" → "ayvas" so TTS says it correctly.

→

â˜ī¸ Google Cloud TTS Settings

Configure Google Cloud Text-to-Speech API credentials and voice settings.

No file uploaded

Upload your Google Cloud service account JSON key file (e.g., my-project-123456.json)

🔊 TTS Testing

Test TTS synthesis directly and via the Kazoo-compatible endpoint.

Current Provider: -- (Change above and Save Settings to switch)

đŸ“Ļ TTS Cache & Hash Registry

Monitor TTS caching and hash registry. Hash registry maps clean URLs to text.

🔗 Hash Registry
--
Registered Hashes
--
Max Capacity
đŸŽĩ Audio Cache
--
Hit Rate
--
Entries
--
Hits
--
Misses
--
Memory
--
Bytes Saved
--
Evictions
Recent Cache Entries:
Click "Refresh Stats" to load entries

đŸ”ĸ DTMF Settings

Configure timing for DTMF digit collection. Other settings (max digits, timeout) are defined per-node in the DSL.

Time between key presses before input is accepted. Increase if callers need more time to type order numbers or zip codes.

đŸ“Ĩ Pivot Session Fields

Select which Kazoo Pivot request fields to store as session variables. These become available as {{variable}} in your DSL flows for branching, API calls, etc.
📖 Kazoo Pivot Docs

Standard Fields (every request)
Optional Fields (after certain actions)
Always included:
call_id - unique call identifier (used as session ID)
lead_id - alias for call_id (CRM convenience)
Custom-Application-Vars - unpacked as individual session vars
💡 Usage Example
// In your DSL flow, branch based on caller:
{
"type": "branch",
"input": "{{caller_id}}",
"branches": {
"+15551234567": "vip_greeting",
"_default": "standard_greeting"
}
}

🔀 Relay Proxy

Configure relay proxy for CRM API calls through a remote server.

🎤 OSTI Speech Intent Router

Configure the openSpeechToIntent server for voice-based menu navigation. When enabled on a choice node, calls will be redirected to OSTI for speech recognition racing against DTMF.

The OSTI server receives Kazoo pivot redirects, streams audio, races DTMF vs speech, and returns results.
Template URL OSTI uses to return results. Use {session_id} placeholder.
Confidence score (0-1) required to accept speech intent
How long OSTI listens for speech
WebSocket URL for Kazoo to stream call audio to OSTI
📋 OSTI Redirect Parameters
Parameters sent TO OSTI:
session_id
- Current call session ID
return_url
- URL to redirect back with results
prompt_url
- TTS audio URL for speech prompt
dtmf_prompt_url
- TTS audio URL for DTMF prompt
intents
- JSON: {key: {dtmf:["1"], phrases:[...]}}
threshold
- Confidence threshold
timeout
- Speech timeout in ms
session_vars
- Base64 encoded session variables
flow_id
- Current flow ID
node_id
- Current node ID
Parameters returned FROM OSTI:
Digits
- Matched DTMF digit (for DSL compatibility)
source
- "osti" or "dtmf"
intent
- Intent key if from speech
confidence
- Match confidence (0-1)
transcript
- What caller said
session_id
- Session ID (echoed back)

📡 Real-time WebSocket

Enable WebSocket event broadcasting for real-time dashboards. When disabled, there is zero performance overhead on the IVR engine.

When enabled:
â€ĸ WebSocket endpoint: ws://host/ws/realtime?channels=stats,calls,all
â€ĸ REST API: GET /api/realtime/summary
â€ĸ Events published for: call start/end, flow changes, node execution
Use for external dashboards that need real-time call counts.
Status: Checking...

📱 Twilio SMS

Configure Twilio for sending SMS messages from IVR flows (missing item links, PAN notices, order modification links).

Keep this secret - stored in settings.json
Uses messaging service for automatic number selection
📋 SMS Nodes in Flows
DELIVERY_FLOW / missing_item_message
Sends CS URL for missing item requests
SOP_FLOW / pan_url_text
Sends Product Availability Notice URL + PIN
ORDER_MOD_FLOW / ordermod_send_sms
Sends order modification URL

🔐 Security Settings

Basic login protection for the admin console.

Leave blank to keep current password. Default: avas2026

📁 File Manager

Browse and manage files on the persistent data disk (config, flows, data).

Loading...

🔍 System Diagnostics

Shows which directories the system is using for config and flows. Helps diagnose persistent disk issues.

Click Refresh to load diagnostics...

📋 Current Configuration

Showing: Last saved configuration


                    
Copied!