Skip to main content

Operations Guide

๐Ÿ“– Back to Main Documentation

This document covers operational monitoring and management features available in the Control Panel.

Core Documentationโ€‹

Monitoring & Testing Toolsโ€‹

Call Processing & Servicesโ€‹

Integration Interfacesโ€‹


Operationsโ€‹

This section covers operational monitoring and management features available in the OmniTAS Control Panel.

Table of Contentsโ€‹

Subscribers Viewโ€‹

The Subscribers view provides real-time monitoring of IMS subscriber registrations stored in the Sofia SIP registration database.

Access: Navigate to /subscribers in the Control Panel

Featuresโ€‹

  • Registration List: View all active subscriber registrations
  • Registration Details: Click on any registration to view complete details including:
    • SIP User and Realm
    • Contact URI
    • Registration status and expiration
    • Network information (IP, port, hostname)
    • Authentication details
    • Cell tower location (when available via P-Access-Network-Info)
      • MCC/MNC, Radio Type, TAC/LAC, Cell ID
      • Geographic coordinates and coverage range
      • Interactive map view powered by OpenStreetMap and OpenCellID data

Data Sourceโ€‹

Registration data is queried directly from the Sofia registration database, providing real-time visibility into subscriber attachment status. Cell tower locations are resolved using the OpenCellID database when subscribers provide P-Access-Network-Info headers in their SIP REGISTER messages.

Use Casesโ€‹

  • Monitor active subscriber registrations
  • Verify subscriber attachment status
  • Troubleshoot registration issues
  • Audit subscriber connectivity

Call Detail Records (CDR)โ€‹

The CDR view provides access to call detail records stored by TAS for billing, troubleshooting, and analytics purposes.

Access: Navigate to /cdr in the Control Panel

Featuresโ€‹

  • Paginated View: Browse through call records (100 per page with Previous/Next controls)
  • Advanced Search: Powerful search with support for exact match, inverse/exclude, and multiple terms
  • Column Selection: Customize which fields to display
    • Click "Columns" button to open column picker modal
    • Select/deselect individual columns
    • Select All / Deselect All quick actions
    • Selection persists across sessions (saved to browser localStorage)
    • Shows "X / Y columns" counter
  • Sortable Columns: Click any column header to sort (ascending/descending)
    • Visual indicators (โ–ฒ ascending, โ–ผ descending)
    • Sorted column highlighted in blue
    • Resets to page 1 when sorting changes
  • Multiple Filter Options:
    • Text Search: Search across all fields with advanced operators
    • Date Range Filter: Filter by start/end date and time (datetime picker)
    • Field-Specific Filter: Filter by exact field value (hangup cause, caller ID, destination, context)
    • Active Filter Display: Visual chips show currently active filters
    • Clear All: One-click removal of all active filters
  • Detailed Information: Click on any CDR row to expand and view all fields:
    • Call parties (caller ID name/number, destination number)
    • Timestamps (start, answer, end)
    • Duration and billed seconds
    • Hangup cause (color-coded: green=normal, yellow=cancel, red=error)
    • Call UUIDs (A-leg and B-leg)
    • Context and account code
    • All available database fields in alphabetical order
  • Color-Coded Hangup Causes:
    • ๐ŸŸข Green: NORMAL_CLEARING
    • ๐ŸŸก Yellow: Cancelled calls
    • ๐Ÿ”ด Red: Error conditions
  • Total Count: Real-time display of total matching records
  • Responsive Layout: Filters wrap appropriately on smaller screens

How to Useโ€‹

  1. Basic Viewing:

    • Page loads with latest 100 CDR records (sorted by start_stamp descending)
    • Total record count shown in top-right
    • Use Previous / Next buttons to navigate pages
    • Click any row to expand and see all fields
  2. Customize Columns:

    • Click "Columns" button in top-right
    • Modal shows all available fields
    • Check/uncheck fields to show/hide columns
    • Use "Select All" or "Deselect All" for quick selection
    • Settings automatically saved to browser
    • Close modal to apply changes
  3. Sort Data:

    • Click any column header to sort by that field
    • First click: Descending (โ–ผ)
    • Second click: Ascending (โ–ฒ)
    • Third click: Back to descending
    • Sorted column highlighted in blue
  4. Search Records:

    • Enter search query in "Search" box
    • Supports advanced operators (see Search Syntax below)
    • Searches across multiple fields: caller_id_number, destination_number, uuid, caller_id_name, hangup_cause
    • Click "Apply" to execute search
  5. Filter by Date Range:

    • Use "Start Date" and "End Date" datetime pickers
    • Both dates required for date filtering
    • Supports date and time selection
    • Click "Apply" to filter
  6. Filter by Specific Field:

    • Select field from "Select Field to Filter" dropdown:
      • Hangup Cause
      • Caller ID
      • Destination
      • Context
    • Enter exact value in "Enter Filter Value"
    • Click "Apply" to filter
  7. Combine Filters:

    • All filters can be used simultaneously:
      • Text search + Date range + Field filter all work together
    • Active filters shown as chips below the filter form
    • Click "Clear All" to remove all filters at once
  8. View Details:

    • Click any CDR row to expand
    • Shows all database fields in a grid layout
    • Fields displayed in alphabetical order
    • Hangup cause color-coded for quick identification
    • Click row again to collapse

Advanced Search Syntaxโ€‹

The search box supports powerful query syntax for precise record filtering across multiple fields simultaneously.

How Search Works:

The search engine checks all searchable fields in each CDR record. A record is included in results when it matches your search criteria in any of these fields:

  • caller_id_number
  • destination_number
  • uuid
  • caller_id_name
  • hangup_cause

Search Operators (can be combined):

  1. Contains Search (default):

    • Syntax: term (no quotes)
    • Matches: Records where any field contains the term anywhere within it
    • SQL: Uses LIKE '%term%' across all searchable fields joined with OR
    • Example: 61480 matches "61480123456", "55561480999", etc.
  2. Exact Match:

    • Syntax: "term" (with double quotes)
    • Matches: Records where any field exactly equals the term
    • SQL: Uses = 'term' across all searchable fields joined with OR
    • Example: "911" matches only exactly "911", not "9115" or "1911"
  3. Inverse/Exclude:

    • Syntax: !term (exclamation mark prefix, no quotes)
    • Matches: Records where no field contains the term
    • SQL: Uses NOT LIKE '%term%' across all searchable fields joined with AND
    • Example: !NORMAL excludes any record with "NORMAL" in any field
  4. Exact Inverse/Exclude:

    • Syntax: !"term" (exclamation mark + double quotes)
    • Matches: Records where no field exactly equals the term
    • SQL: Uses != 'term' across all searchable fields joined with AND
    • Example: !"NORMAL_CLEARING" excludes records where any field is exactly "NORMAL_CLEARING"
  5. Multiple Terms with AND:

    • Syntax: term1 AND term2 (case-insensitive AND)
    • Matches: Records matching all terms (each term can match different fields)
    • Each term is processed with its own operator (quotes, !, etc.)
    • Terms are combined with AND in SQL
    • Example: "911" AND "12345" finds records with "911" in one field AND "12345" in another

Search Execution Logic:

For each CDR record:
For normal search (no !):
- Check if ANY field contains/equals the term โ†’ Include if TRUE
- SQL: field1 LIKE '%term%' OR field2 LIKE '%term%' OR ...

For inverse search (!):
- Check if ALL fields do NOT contain/equal the term โ†’ Include if TRUE
- SQL: field1 NOT LIKE '%term%' AND field2 NOT LIKE '%term%' AND ...

For AND searches:
- Each term is evaluated separately
- All term conditions must be TRUE โ†’ Include if TRUE
- SQL: (term1_conditions) AND (term2_conditions) AND ...

Complex Search Examples:

QueryHow It WorksResult
61480Contains search across all fieldsAll records with "61480" anywhere (caller, destination, UUID, etc.)
"911"Exact match across all fieldsRecords where any field is exactly "911"
!NORMAL_CLEARINGInverse contains searchExcludes records with "NORMAL_CLEARING" in ANY field (failed calls)
!"NORMAL_CLEARING"Exact inverseExcludes records where any field exactly equals "NORMAL_CLEARING"
"911" AND "12345"Exact "911" AND exact "12345"Records with both values (e.g., caller="12345", destination="911")
!NORMAL AND 61480Inverse contains "NORMAL" AND contains "61480"Non-normal calls involving "61480"
!"ANSWER" AND !NORMALExact inverse "ANSWER" AND inverse contains "NORMAL"Exclude answered calls and anything with "NORMAL"
61480 AND !NORMAL_CLEARINGContains "61480" AND inverse contains "NORMAL_CLEARING"Failed calls involving "61480"

Practical Use Cases:

  • Find specific number: 61480123456 - Contains search finds partial matches
  • Find exact emergency calls: "911" - Only calls to exactly "911"
  • All failed calls: !NORMAL_CLEARING - Exclude successful calls
  • Specific caller's failed calls: "61480123456" AND !NORMAL - Combine exact caller with inverse
  • Exclude test numbers: !test AND !demo - Multiple inverse searches
  • Complex debugging: 61480 AND !"ANSWER" AND !CANCEL - Contains one term, exclude exact and partial others

Data Sourceโ€‹

CDR data is queried directly from the TAS CDR SQLite database.

The schema may vary between deployments based on specific requirements.

CDR Export Optionsโ€‹

Important: CDR records can be exported in various formats to support integration with billing systems, analytics platforms, and reporting tools.

The CDR database schema and export formats are deployment-specific. When setting up your system, please request the specific CDR output formats you need from your integration engineer. Common export formats include:

  • CSV (Comma-Separated Values)
  • JSON (for API integration)
  • XML
  • Direct database access
  • Custom formatted exports

Your integration engineer can configure CDR export mechanisms tailored to your operational and billing requirements.

Use Casesโ€‹

  • Call Troubleshooting: Search for specific calls by number or UUID to debug issues
  • Billing Reconciliation: Filter by date range to match billing periods
  • Quality Analysis: Filter by hangup cause to identify problem patterns
  • Emergency Call Auditing: Search for "911" to verify emergency call handling
  • Customer Support: Look up specific customer calls by caller ID or destination
  • Pattern Analysis: Sort by duration or timestamps to identify anomalies
  • Compliance & Record Keeping: Date range filters for regulatory reporting
  • Failed Call Analysis: Use !NORMAL_CLEARING to find all failed calls
  • Context-Based Reports: Filter by context to analyze specific call flows

Configurationโ€‹

Default Visible Columnsโ€‹

You can configure which CDR fields are shown by default in the LiveView by setting cdrs_field_list in your config/runtime.exs:

config :tas,
cdrs_field_list: [
"caller_id_number",
"destination_number",
"start_stamp",
"duration",
"hangup_cause"
]

Behavior:

  • If cdrs_field_list is not set: All available CDR fields are shown by default
  • If cdrs_field_list is set: Only the specified fields are shown by default, but all other fields remain available in the column picker
  • If a field in the list doesn't exist in the CDR data, it will be automatically skipped
  • Field names can be specified as strings or atoms
  • Users can manually select additional columns from the column picker at any time

Use Cases:

  • Set a clean default view with only essential fields visible
  • Reduce information overload for new users
  • Standardize the initial column layout across all users
  • Keep advanced fields hidden by default but still accessible

Example Configuration:

# Show only essential call information by default
cdrs_field_list: [
"start_stamp",
"caller_id_number",
"destination_number",
"duration",
"billsec",
"hangup_cause"
]

Note: This configuration sets the default visible columns. All CDR fields remain available in the "Columns" picker - users can manually show/hide any field they need.

API / Programmatic Accessโ€‹

For automated CDR analysis, the underlying Elixir API supports all search features:

# Elixir API examples
Tas.Cdr.get_filtered_records(search: "911")
Tas.Cdr.get_filtered_records(search: "\"911\"")
Tas.Cdr.get_filtered_records(search: "!NORMAL_CLEARING")
Tas.Cdr.get_filtered_records(search: "\"911\" AND \"12345\"")

See lib/cdr/cdr.ex for full API documentation.

Troubleshootingโ€‹

No Results Foundโ€‹
  1. Check for typos in search terms
  2. Try removing quotes for broader search
  3. Verify the term exists in searchable fields
  4. Check date range isn't too restrictive
Too Many Resultsโ€‹
  1. Add more AND terms to narrow
  2. Use exact match with quotes
  3. Apply date range filters
  4. Use field-specific filters
Unexpected Resultsโ€‹
  1. Remember search applies to ALL searchable fields
  2. Check if term appears in unexpected field (like UUID)
  3. Use exact match to avoid partial matches
  4. Verify inverse logic (AND vs OR)

Tipsโ€‹

  • Column Selection: Hide unused columns to focus on relevant data and improve performance
  • Combine Filters: Use search + date range + field filter together for precise queries
  • Date Range Performance: Narrow date ranges return results faster for large databases
  • Sort for Analysis: Sort by duration to find long/short calls, or by timestamp to see call patterns
  • Active Filter Chips: Use visual chips to verify which filters are currently active
  • Persistent Settings: Column selections are saved per browser, useful for different analysis tasks
  • Color Coding: Quickly scan hangup causes - green is good, red needs investigation
  • Expandable Details: Click rows to see all fields without cluttering the main view
  • Search Operators: Master the search syntax for powerful filtering:
    • Use quotes for exact matches: "911"
    • Use ! to exclude: !NORMAL_CLEARING
    • Combine with AND: "61480" AND !NORMAL
  • Pagination: Remember filters persist across pages - use pagination to review large result sets

Active Calls Monitoringโ€‹

The Active Calls view shows real-time information about ongoing calls through the system.

Access: Navigate to /calls in the Control Panel

Featuresโ€‹

  • Real-time Status: Live view of active call sessions
  • Call Details: View channel variables and call state information
  • UUID Tracking: Monitor both A-leg and B-leg call identifiers

IMS Conference Serverโ€‹

The IMS Conference Server provides multi-party conferencing capabilities compliant with 3GPP IMS standards (RFC 4579, RFC 4575, TS 24.147).

Access: Navigate to /conference in the Control Panel

Documentation: See IMS Conference Server User Guide for detailed documentation

Featuresโ€‹

  • Real-time Monitoring: Live view of active conferences and participants
  • Conference Statistics Dashboard:
    • Active conference count
    • Total participants across all conferences
    • Video conference count
    • Locked conference count
    • Server configuration details (domain, MNC/MCC, max participants)
  • Conference List: View all active conferences with:
    • Conference ID and SIP URI
    • Current participant count
    • Conference creator identity
  • Conference Details: Click any conference to expand and view:
    • Full conference information (state, video status, locked status, recording status)
    • Complete participant list with roles and states
    • Participant video status
  • Conference Control Actions:
    • Lock/Unlock conferences to control access
    • Enable/Disable video for conferences
    • Real-time status updates with action feedback
  • Auto-Refresh: Configurable auto-refresh (default: 5 seconds) for real-time monitoring

OmniTAS Console Managementโ€‹

All conference operations are also available through the OmniTAS console using the ims_conference command:

ims_conference list                    # List all active conferences
ims_conference info <conf_id> # Show conference details
ims_conference stats # Show server statistics
ims_conference lock <conf_id> # Lock a conference
ims_conference unlock <conf_id> # Unlock a conference
ims_conference video <conf_id> on|off # Control video
ims_conference record <conf_id> start|stop # Control recording
ims_conference add <conf_id> <sip_uri> # Add participant
ims_conference remove <conf_id> <uuid> # Remove participant
ims_conference destroy <conf_id> # Terminate conference

Use Casesโ€‹

  • Operational Monitoring: Real-time visibility into active conferences and resource usage
  • Capacity Management: Monitor participant counts and video usage to manage bandwidth
  • Troubleshooting: Diagnose conference access issues, participant connection problems
  • Conference Control: Lock conferences for privacy, manage video to control bandwidth
  • Compliance: Monitor and record conferences for regulatory compliance

3GPP Complianceโ€‹

The conference server implements key 3GPP IMS conferencing specifications:

  • TS 24.147: Conferencing using IM Core Network subsystem
  • RFC 4579: SIP Call Control - Conferencing for User Agents
  • RFC 4575: SIP Event Package for Conference State
  • RFC 5239: Framework for Centralized Conferencing

Gateway Statusโ€‹

Monitor the status and health of SIP gateways/trunks connected to the TAS.

Access: Navigate to /gw in the Control Panel

Featuresโ€‹

  • Registration Status: View gateway registration state
  • Call Statistics: Track incoming/outgoing calls and failures
  • Ping Monitoring: SIP OPTIONS ping times and reachability
  • Gateway Details: Complete configuration and status information

Monitored Metricsโ€‹

  • SIP Registration status
  • Ping time (average SIP OPTIONS response time)
  • Uptime (seconds since profile restart)
  • Calls In / Calls Out
  • Failed Calls In / Failed Calls Out
  • Last ping time and frequency

Diameter Peer Statusโ€‹

Monitor Diameter peer connectivity for Sh and Ro interfaces.

Access: Navigate to /diameter in the Control Panel

Featuresโ€‹

  • Peer Status: Connection state for each configured peer
  • Application Support: View supported Diameter applications (Sh, Ro)
  • Watchdog Status: Diameter watchdog monitoring

System Logs Viewerโ€‹

Real-time unified log viewer for both TAS Backend (Elixir) and TAS Call Processing (FreeSWITCH) logs.

Access: Navigate to /logs in the Control Panel

Featuresโ€‹

  • Unified Log Stream: View logs from both TAS Backend and Call Processing in one interface
  • Real-time Updates: Live streaming of log messages as they occur (auto-refresh every 1 second)
  • Color-Coded Log Levels:
    • ๐ŸŸฃ Console - Console messages (purple/magenta)
    • ๐Ÿ”ด Alert/Critical - Urgent issues requiring immediate attention (red)
    • ๐ŸŸ  Error - Error conditions (light red)
    • ๐ŸŸก Warning - Warning messages (yellow)
    • ๐Ÿ”ต Notice - Notable informational messages (cyan)
    • ๐Ÿ”ต Info - General informational messages (blue)
    • โšช Debug - Debug/verbose logging (gray)
  • Source Badges:
    • ๐Ÿ”ต TAS Backend - Elixir application logs (blue badge)
    • ๐ŸŸฃ TAS Call Processing - FreeSWITCH logs (purple badge)
  • Left Border Indicators: Color-coded left border matching log level for quick visual scanning
  • Multiple Filters:
    • Source Filter: All Sources / TAS Backend / TAS Call Processing
    • Level Filter: All / Console / Alert / Critical / Error / Warning / Notice / Info / Debug
    • Text Search: Real-time keyword search across log messages
  • Pause/Resume: Freeze log streaming to analyze specific entries without losing context
  • Clear Logs: Remove all current log entries from display
  • Log Counter: Shows filtered logs vs total logs (e.g., "Showing 150 of 500 logs")
  • Tail Behavior: Maintains last 500 log entries for performance
  • Metadata Display: File name and line number for source code references (when available)
  • Scrollable View: Fixed-height container with auto-scroll for latest logs

How to Useโ€‹

  1. Basic Viewing:

    • Page loads with latest 500 log entries from both sources
    • Logs appear in real-time as they're generated
    • Most recent logs appear at the top
    • Auto-refreshes every 1 second
  2. Filter by Source:

    • Select from "Source" dropdown:
      • All Sources - Show both TAS Backend and Call Processing logs
      • TAS Backend - Only Elixir application logs
      • TAS Call Processing - Only FreeSWITCH/dialplan logs
    • Filter applies immediately
  3. Filter by Log Level:

    • Select from "Level" dropdown:
      • All - Show all log levels
      • Console through Debug - Show only that specific level
    • Useful for focusing on errors or debugging specific issues
  4. Search for Keywords:

    • Type in the "Search logs..." box
    • Case-insensitive search across log messages
    • Filters in real-time as you type
    • Combines with source and level filters
  5. Pause/Resume Stream:

    • Click "Pause" button (orange) to freeze log updates
    • "PAUSED" indicator appears in header
    • Review specific log entries without new logs interrupting
    • Click "Resume" button (green) to restart live streaming
  6. Clear Logs:

    • Click "Clear" button (red) to remove all displayed logs
    • Clears both TAS Backend and Call Processing logs
    • Fresh logs will appear as they're generated
  7. Read Log Entries:

    • Timestamp: Shows time in HH:MM:SS.milliseconds format
    • Source Badge: Indicates TAS Backend (blue) or Call Processing (purple)
    • Log Level: Color-coded level in brackets [ERROR], [INFO], etc.
    • File/Line: Source code location (when available)
    • Message: The actual log message content

Log Levels Explainedโ€‹

LevelColorWhen UsedExample
ConsolePurpleConsole-specific messagesHigh-priority FreeSWITCH console output
AlertRedImmediate action requiredSystem component failure
CriticalRedCritical conditionsDatabase connection lost
ErrorLight RedError conditionsFailed to process call, invalid configuration
WarningYellowWarning conditionsDeprecated function used, retry attempt
NoticeCyanNotable normal eventsConfiguration reloaded, service started
InfoBlueInformational messagesCall connected, Diameter request sent
DebugGrayDebug-level messagesFunction entry/exit, variable values

Use Casesโ€‹

  • Real-time Troubleshooting: Monitor logs during active call to debug issues
  • Error Investigation: Filter by Error/Critical levels to find problems
  • Call Flow Analysis: Search for Call-ID or phone number to trace call path
  • Performance Monitoring: Watch for warnings and errors during load testing
  • Integration Debugging: Filter TAS Backend to see Diameter/Sh/Ro messages
  • Dialplan Debugging: Filter TAS Call Processing to see FreeSWITCH call routing
  • System Health Monitoring: Keep logs open to watch for anomalies
  • Development & Testing: Use Debug level to see verbose application behavior

Tipsโ€‹

  • Combine Filters: Use Source + Level + Search together for precise filtering
    • Example: Source="TAS Backend" + Level="Error" + Search="Diameter" โ†’ Find Diameter errors
  • Pause Before Searching: Pause stream before typing search query to avoid logs scrolling
  • Use Debug Wisely: Debug level is verbose - filter to specific source to reduce noise
  • Color Scanning: Quickly scan left borders - red borders indicate problems
  • Source Badges: Blue badges (Backend) for app logic, Purple badges (Call Processing) for calls
  • Timestamp Precision: Millisecond timestamps help correlate events across systems
  • File References: Click/note file:line references to jump to source code
  • Clear Regularly: Clear logs when switching investigation contexts for clarity
  • Search for UUIDs: Search for Call-ID/UUID to follow a specific call through entire system
  • Emergency Search: Search "911" or "emergency" to quickly find emergency call handling

Technical Detailsโ€‹

  • Log Limit: Maximum 500 logs displayed (oldest discarded when limit reached)
  • Refresh Rate: Auto-refresh every 1000ms (1 second)
  • Search: Case-insensitive substring matching on message field only
  • Empty Filtering: Automatically filters out empty/placeholder log messages
  • Source Detection: Logs tagged with :elixir or :freeswitch source
  • Sorting: Logs sorted by timestamp descending (newest first)
  • PubSub: Elixir logs delivered via Phoenix PubSub for real-time updates
  • FreeSWITCH Logs: Collected via Event Socket Interface (ESI) log listener

Cell Tower Databaseโ€‹

Manage and query the OpenCellID cell tower location database for emergency services and location-based features.

Access: Navigate to /cell_towers in the Control Panel

Featuresโ€‹

  • Database Statistics: View total records, coverage by country/network
  • Search & Query:
    • Search by MCC (Mobile Country Code)
    • Search by MNC (Mobile Network Code)
    • Search by radio type (GSM, UMTS, LTE)
    • Search by location string
  • Database Management:
    • Import cell tower data
    • Re-download latest dataset from OpenCellID
    • View import status and progress
  • Location Resolution: Resolve cell IDs to geographic coordinates

Use Casesโ€‹

  • Emergency call location determination
  • Subscriber location tracking (with consent)
  • Network coverage analysis
  • Troubleshooting roaming location issues
  • Cell tower database maintenance

Data Sourceโ€‹

Cell tower data is sourced from OpenCellID (https://opencellid.org/), a collaborative community project to create a free database of cell tower locations worldwide.


Call Simulatorโ€‹

Interactive call simulation tool for testing dialplan logic without making real calls.

Access: Navigate to /simulator in the Control Panel

Detailed Documentation: See doc/HLR_AND_CALL_SIMULATOR.md

Featuresโ€‹

  • Simulate Call Types: Test MO, MT, and Emergency calls
  • Configurable Parameters:
    • Source and destination numbers
    • Source IP address (to simulate SBC/CSCF)
    • Force specific call disposition
    • Skip OCS authorization for faster testing
  • Comprehensive Results:
    • Complete dialplan variable output
    • Sh/HLR lookup results
    • OCS authorization result
    • SS7 MAP query results (if applicable)
    • Generated dialplan XML
  • Step-by-Step Processing: View each stage of call processing

Use Casesโ€‹

  • Test dialplan changes before deployment
  • Verify subscriber provisioning
  • Debug call routing issues
  • Train staff on call flow
  • Validate OCS/HLR integration
  • Test emergency call handling

HLR/MAP Testingโ€‹

Test SS7 MAP operations including Send Routing Info (SRI) and Provide Roaming Number (PRN) queries.

Access: Navigate to /hlr in the Control Panel

Detailed Documentation: See doc/HLR_AND_CALL_SIMULATOR.md

Featuresโ€‹

  • SRI Query: Test Send Routing Info for call routing
  • PRN Query: Test Provide Roaming Number for roaming subscribers
  • Real Results: Actual queries to configured MAP gateway
  • Response Display: View MSRN, MSC address, and forwarding status
  • Error Handling: Clear display of MAP errors and timeouts

Use Casesโ€‹

  • Verify HLR connectivity
  • Test roaming number allocation
  • Debug call routing to roaming subscribers
  • Validate MAP gateway configuration
  • Troubleshoot call forwarding issues

OCS Testingโ€‹

Test Diameter Ro (Online Charging) Credit-Control-Request (CCR) operations directly against your OCS.

Access: Navigate to /ocs_test in the Control Panel

Featuresโ€‹

  • Flexible CCR Types: Send INITIAL, UPDATE, TERMINATION, or EVENT requests
  • Session Simulation: Reuse the same Call ID to simulate a complete session lifecycle
  • Event Type Selection: Test both SMS (event-based) and Call (session-based) charging
  • Direction Control: Test both outgoing (MO) and incoming (MT) scenarios
  • Optional Parameters: Specify Destination-Host and Username for advanced testing
  • Real-time Results: View complete CCA (Credit-Control-Answer) responses

How to Useโ€‹

  1. Enter Test Parameters:

    • Called MSISDN: The destination number (e.g., 61400123456)
    • Calling MSISDN: The originating number (e.g., 61400987654)
    • Event Type: Choose sms or call
      • SMS defaults to EVENT_REQUEST (type 4)
      • Call defaults to INITIAL_REQUEST (type 1)
    • Direction: out for MO or in for MT
  2. Configure CCR Type:

    • Request-Type: Select the CCR type:
      • 1 โ€” INITIAL_REQUEST - Start a new session
      • 2 โ€” UPDATE_REQUEST - Mid-session re-authorization
      • 3 โ€” TERMINATION_REQUEST - End session and report usage
      • 4 โ€” EVENT_REQUEST - One-time event (SMS, immediate event)
    • Request-Number: Starts at 1, increment for each request in the same session
  3. Session Testing:

    • Call ID: Auto-generated unique identifier for correlation
    • Click "New ID" to generate a fresh Call ID for a new test session
    • Keep the same Call ID to simulate a complete session:
      • First request: INITIAL_REQUEST (type 1, number 1)
      • Mid-session: UPDATE_REQUEST (type 2, number 2, 3, 4...)
      • Final request: TERMINATION_REQUEST (type 3, number N+1)
  4. Advanced Options:

    • Destination-Host: Target a specific OCS node (optional)
    • Username: Override the subscriber identifier (optional)
  5. Run and Review:

    • Click "Run CCR" to send the request
    • View the complete CCA response with all AVPs
    • Check result code, granted units, and validity time
    • Last run timestamp shown in top-right corner

Use Casesโ€‹

  • OCS Connectivity Testing: Verify Diameter Ro connection and authentication
  • Credit Control Logic: Test credit allocation, consumption, and exhaustion scenarios
  • Session Flow Testing: Simulate complete call lifecycle (INITIAL โ†’ UPDATE โ†’ TERMINATION)
  • Rating Validation: Verify correct charging rates for different number ranges
  • Failover Testing: Test OCS redundancy by targeting specific Destination-Host
  • Integration Debugging: Troubleshoot OCS integration issues with detailed AVP inspection
  • Load Testing Preparation: Validate OCS behavior before load testing
  • Emergency Number Bypass: Verify that emergency numbers bypass charging correctly

Tipsโ€‹

  • Use the same Call ID with incrementing Request-Numbers to test session continuity
  • Monitor OCS logs simultaneously to correlate test requests
  • Test UPDATE requests to verify mid-session re-authorization logic
  • Verify that TERMINATION requests properly close sessions and prevent leaks
  • Test credit exhaustion by sending UPDATE requests after consuming granted units

Sh Interface Testingโ€‹

Test Diameter Sh User-Data-Request (UDR) operations to retrieve subscriber profile data from the HSS.

Access: Navigate to /sh_test in the Control Panel

Featuresโ€‹

  • Multiple Data References: Query over 20 different subscriber data types
  • Real HSS Queries: Live Diameter Sh requests to your configured HSS
  • Complete Response Display: View full XML subscriber data and AVPs
  • Session Tracking: Shows HSS hostname, realm, and session ID
  • Error Handling: Clear display of Diameter result codes and error conditions

How to Useโ€‹

  1. Enter Public Identity:

    • Public Identity: The subscriber's IMS Public Identity
    • Format: sip:61400123456@ims.mncXXX.mccXXX.3gppnetwork.org
    • Can also use tel:+61400123456 format
  2. Select Data Reference: Choose the type of subscriber data to retrieve:

    • RepositoryData (0): Complete subscriber profile
    • IMSPublicIdentity (10): List of public identities
    • IMSUserState (11): Registration state
    • S-CSCFName (12): Assigned S-CSCF
    • InitialFilterCriteria (13): iFC triggers for application servers
    • LocationInformation (14): Current location
    • ChargingInformation (16): P-Charging addresses
    • MSISDN (17): Phone number
    • IMSI (32): International Mobile Subscriber Identity
    • IMSPrivateUserIdentity (33): Private user identity
    • And many more...
  3. Run and Review:

    • Click "Fetch SH Data" to send the UDR request
    • View the complete User-Data-Answer (UDA) response
    • Check subscriber profile XML, service data, and iFC rules
    • Session metadata shows which HSS responded

Use Casesโ€‹

  • Subscriber Verification: Confirm subscriber is provisioned in HSS
  • iFC Debugging: Review Initial Filter Criteria and trigger points
  • Registration Troubleshooting: Check user state and S-CSCF assignment
  • Charging Configuration: Verify P-Charging-Function-Addresses
  • HSS Connectivity Testing: Validate Diameter Sh connection
  • Profile Validation: Ensure correct service profile is assigned
  • Integration Testing: Test HSS integration after provisioning changes
  • Roaming Analysis: Check location information and serving network

Tipsโ€‹

  • Use IMSPublicIdentity (10) to see all aliases for a subscriber
  • Use RepositoryData (0) to get the complete subscriber profile in one query
  • Check IMSUserState (11) to verify if a subscriber is registered
  • InitialFilterCriteria (13) shows which application servers will be triggered
  • The session ID can be used to correlate queries in HSS logs
  • Error responses include Diameter result codes (e.g., 5001 = User Unknown)

Number Translation Testingโ€‹

Test number translation rules and formatting without making actual calls.

Access: Navigate to /translate in the Control Panel

Featuresโ€‹

  • Real-time Translation: Auto-translates as you type
  • Country Code Support: Test different country code contexts
  • Disposition-Aware: Apply different rules based on call disposition
  • Live Results: Immediate feedback with translated number
  • Debug Information: View raw return values for troubleshooting

How to Useโ€‹

  1. Configure Parameters:

    • Country Code: The dialing context (e.g., AU, US, NZ)
      • Defaults to the value configured in Tas.Config.number_translate()[:country_code]
      • Accepts formats: AU, :AU, au
    • Phone Number: The number to translate
      • Examples: +61400111222, 0400111222, 61400111222
    • Disposition: (Optional) Call context for conditional rules
      • Examples: originate, route, emergency
  2. Test Translation:

    • Enter values in the form
    • Translation runs automatically as you type
    • Or click "Translate" to manually trigger
    • View the translated result immediately
  3. Review Results:

    • Translated: Shows the formatted output number
    • Error: Displays validation errors or translation failures
    • Raw return (debug): Shows the complete Elixir tuple for debugging

Use Casesโ€‹

  • Dialplan Development: Test number formatting rules before deployment
  • Format Validation: Verify E.164 conversion is working correctly
  • Country Code Testing: Ensure correct handling of international prefixes
  • Emergency Number Detection: Verify emergency numbers are properly identified
  • Short Code Handling: Test special service codes (voicemail, etc.)
  • Trunk Preparation: Format numbers correctly for SIP trunk requirements
  • Disposition Logic: Test different rules for MO vs MT scenarios
  • Debugging Translation Issues: Troubleshoot why specific numbers fail routing

Tipsโ€‹

  • Test both local format (0400111222) and international format (+61400111222)
  • Verify emergency numbers (000, 112) are detected correctly
  • Use disposition field to test different call scenarios (MO, MT, emergency)
  • Check that short codes and internal numbers are handled appropriately
  • The debug output shows the raw return value - useful for investigating issues
  • Test edge cases like leading zeros, international prefixes, and special characters

Voicemail Managementโ€‹

Manage and listen to voicemail messages stored in the system.

Access: Navigate to /voicemail in the Control Panel

Featuresโ€‹

  • Complete Voicemail List: View all voicemail messages across all mailboxes
  • In-Browser Playback: Listen to voicemail recordings directly in the web interface
  • Message Details: View username, UUID, timestamps, file paths, and metadata
  • Delete Functionality: Remove individual voicemail messages
  • Auto-Refresh: Refresh button to reload latest voicemail data
  • Dynamic Columns: Automatically displays all available database fields

How to Useโ€‹

  1. View Voicemail List:

    • Page loads automatically with all voicemail records
    • Table shows all fields from the voicemail database
    • Timestamps are automatically formatted from epoch values
    • File paths are shortened for readability
  2. Listen to Messages:

    • Click "โ–ถ Play" button next to any voicemail
    • Audio player appears with controls (play, pause, seek, volume)
    • Supports WAV, MP3, and OGG formats
    • Click "Stop" to close the audio player
  3. Delete Messages:

    • Click "Delete" button to remove a voicemail
    • Confirmation prompt prevents accidental deletion
    • Page automatically refreshes after successful deletion
  4. Refresh Data:

    • Click "Refresh" button in top-right to reload voicemail list
    • Useful after new voicemails are left

Message Details Displayedโ€‹

The table dynamically shows all available fields, typically including:

  • Username: Mailbox owner
  • UUID: Unique message identifier
  • Created Epoch: When the message was left (auto-formatted to readable date/time)
  • Read Epoch: When the message was accessed (if applicable)
  • File Path: Location of the audio file
  • Additional metadata from the voicemail database

Use Casesโ€‹

  • Subscriber Support: Listen to voicemail messages for troubleshooting
  • Testing Voicemail Delivery: Verify voicemails are being stored correctly
  • Message Management: Clean up old or test voicemail messages
  • Troubleshooting Recording Issues: Check file paths and verify audio files exist
  • Mailbox Maintenance: Monitor voicemail storage and usage
  • Quality Assurance: Review recorded messages for audio quality

Tipsโ€‹

  • File paths are automatically shortened to show only the relevant portion
  • Epoch timestamps are automatically converted to human-readable format
  • Empty voicemail database shows "No voicemail records found"
  • Audio playback uses HTML5 audio element - supported in all modern browsers
  • Delete confirmation prevents accidental removal of important messages

TTS Prompt Managementโ€‹

Manage Text-to-Speech (TTS) generated audio prompts used throughout the system.

Access: Navigate to /prompts in the Control Panel

Featuresโ€‹

  • Prompt Settings Display: View current TTS voice, response format, and instructions
  • Recording Status: See which prompts exist and which are missing
  • File Details: View file size, modification time, and path for each prompt
  • In-Browser Playback: Listen to prompts directly in the web interface
  • Generate Missing: Automatically create all missing prompt files
  • Re-record Individual: Regenerate a specific prompt with updated settings
  • Re-record All: Regenerate all prompts (useful after changing voice or settings)

How to Useโ€‹

  1. Review Prompt Settings:

    • Voice: TTS voice being used (e.g., alloy, nova, shimmer)
    • Response Format: Audio format (e.g., wav, mp3, opus)
    • Instructions: Special instructions passed to TTS engine
  2. Check Recording Status:

    • Text: The prompt text to be spoken
    • Relative Path: Where the audio file is stored
    • Exists: Green "Yes" if file exists, Yellow "No" if missing
    • Size: File size in bytes/KiB/MiB
    • Modified: Last modification timestamp
  3. Generate Prompts:

    • Generate Missing: Creates only prompts that don't exist yet
      • Useful for initial setup or after adding new prompts
    • Re-record All: Regenerates all prompts regardless of existence
      • Useful after changing voice, format, or instructions
      • Use with caution as it regenerates everything
  4. Manage Individual Prompts:

    • โ–ถ Play: Listen to the prompt (only enabled if file exists)
    • ๐Ÿ”„ Re-record: Regenerate just this one prompt
      • Useful if one prompt sounds incorrect
      • Uses current voice and settings
  5. Listen to Prompts:

    • Click "โ–ถ Play" to hear the prompt
    • Audio player appears at bottom with full controls
    • Click "Stop" to close the player

Prompt Configurationโ€‹

Prompts are configured in your application config:

config :tas, :prompts,
voice: "nova",
response_format: "wav",
instructions: "Speak clearly and professionally.",
recordings: [
%{path: "/sounds/en/us/callie/voicemail/vm-enter_id.wav",
text: "Please enter your mailbox ID followed by pound"},
# ... more prompts
]

Use Casesโ€‹

  • Initial Setup: Generate all prompts after system installation
  • Voice Changes: Re-record all prompts with a different TTS voice
  • Quality Improvement: Fix individual prompts that don't sound right
  • Format Updates: Regenerate prompts in different audio format (wav โ†’ mp3)
  • Text Updates: Re-record after changing prompt text in config
  • Testing TTS: Preview how prompts will sound before deployment
  • Troubleshooting Playback: Verify prompt files exist and are accessible
  • Storage Management: Check file sizes and manage disk usage

Tipsโ€‹

  • Use "Generate Missing" for initial setup - it won't overwrite existing prompts
  • Use "Re-record All" after changing voice or format in config
  • Individual "Re-record" is useful for iterating on specific prompts
  • Listen to prompts before deployment to ensure quality
  • Larger response formats (wav) have better quality but use more disk space
  • The instructions field can guide TTS engine for tone and pacing
  • Re-recording can take time if you have many prompts - be patient
  • Prompts are stored in FreeSWITCH sounds directory for easy access

Dialplan XML Templatesโ€‹

View and inspect FreeSWITCH dialplan XML templates used for call routing.

Access: Navigate to /routing in the Control Panel

Featuresโ€‹

  • Template List: View all XML dialplan templates from priv/templates/ directory
  • File Details: See filename and last modified timestamp for each template
  • Syntax Highlighting: Color-coded XML display for easy reading
    • Tags in teal
    • Attributes in light blue
    • Values in orange/tan
    • Comments in green
  • Expandable View: Click any template to view its full XML content
  • Read-Only View: Safe inspection without risk of accidental modification
  • Scrollable Content: Large templates scroll within fixed-height container (max 600px)

How to Useโ€‹

  1. View Template List:

    • Page loads with all .xml files from the templates directory
    • Sorted alphabetically by filename
    • Shows modification timestamp for each file
  2. Inspect Template:

    • Click any row to expand and view the XML content
    • Template displays with syntax highlighting
    • Click again to collapse
  3. Read XML Content:

    • Tags (teal): XML element names like <extension>, <condition>
    • Attributes (light blue): Attribute names like name=, field=
    • Values (orange): Attribute values like "public", "destination_number"
    • Comments (green): XML comments <!-- ... -->

Use Casesโ€‹

  • Review Dialplan Logic: Inspect routing rules and call flow templates
  • Troubleshoot Call Routing: Understand which templates are used for different call types
  • Verify Template Syntax: Check XML structure before deployment
  • Training & Documentation: Share template contents with team members
  • Change Auditing: Compare modification timestamps to track updates
  • Template Development: Reference existing templates when creating new ones

Tipsโ€‹

  • Templates are loaded from priv/templates/ within the TAS application
  • Only .xml files are displayed
  • Templates are read-only through the web interface
  • Modification timestamps help identify recent changes
  • Use this view to verify templates match your dialplan expectations
  • Syntax highlighting makes complex XML easier to parse visually
  • Combine with /logs view to correlate routing behavior with templates

Technical Detailsโ€‹

  • Location: Templates stored in priv/templates/ directory
  • Format: FreeSWITCH XML dialplan format
  • File Extension: Only .xml files listed
  • Sorting: Alphabetical by filename
  • Syntax Highlighting: Client-side colorization using regex patterns
  • Max Display Height: 600px with scroll for large files

ESL Command Runnerโ€‹

Execute FreeSWITCH Event Socket Layer (ESL) commands directly from the web interface.

Access: Navigate to /command in the Control Panel

Featuresโ€‹

  • Command Execution: Run any ESL/FreeSWITCH API command
  • Live Output: See command results in real-time
  • Command History: Recent commands dropdown (last 10 commands)
  • Auto-Complete Ready: Monospace input for precise command entry
  • Error Handling: Clear display of command errors and exceptions
  • No Auto-Execute: Selecting history fills input but requires explicit "Run" click

How to Useโ€‹

  1. Enter Command:

    • Type ESL command in the input box
    • Examples:
      • status - Show FreeSWITCH status
      • show channels - List active calls
      • uuid_dump <uuid> - Dump all variables for a call
      • sofia status - Show SIP profile status
      • reloadxml - Reload XML dialplan
      • version - Show FreeSWITCH version
  2. Run Command:

    • Click "Run" button to execute
    • Button shows "Runningโ€ฆ" while executing
    • Cannot run multiple commands simultaneously
  3. View Output:

    • Results appear in the "Output" section below
    • Successful commands show raw response
    • Errors prefixed with "ERROR:"
    • Output is scrollable with max height of 600px
    • Monospace font for aligned data
  4. Use Command History:

    • Recent commands appear in dropdown after first execution
    • Select from "Recent:" dropdown to fill input field
    • History maintains last 10 unique commands
    • Most recent command at top
    • Selecting history does NOT auto-execute (safety feature)

Common Commandsโ€‹

CommandDescriptionExample Output
statusSystem status and uptimeFreeSWITCH running info
show channelsList all active callsChannel list or "0 total"
show callsSummary of active callsCall count summary
uuid_dump <uuid>All variables for a callComplete variable dump
uuid_kill <uuid>Hangup specific call"+OK" or error
sofia statusSIP profile statusProfile list and states
sofia status profile <name>Specific profile detailsRegistration count, etc
reloadxmlReload dialplan XML"+OK" confirmation
versionFreeSWITCH version infoVersion string
global_getvar <var>Get global variableVariable value
api helpList available commandsCommand reference

Use Casesโ€‹

  • Call Debugging: Get detailed info about active call with uuid_dump
  • System Status: Check FreeSWITCH health with status and show calls
  • SIP Troubleshooting: Inspect SIP profiles with sofia status
  • Dialplan Reload: Apply config changes with reloadxml
  • Emergency Actions: Kill stuck calls with uuid_kill
  • Variable Inspection: Check global or channel variables

Troubleshootingโ€‹

Subscribers Not Showingโ€‹

  • Verify OmniTAS is running
  • Check Sofia profile is active: sofia status profile internal
  • Verify database path in configuration matches actual database location

CDR Records Not Appearingโ€‹

  • Confirm OmniTAS CDR module is loaded
  • Check CDR database exists at configured path
  • Verify CDR module configuration in OmniTAS

Performance Considerationsโ€‹

  • Large CDR databases (>1M records) may require additional indexing for optimal performance
  • Consider archiving old CDR records periodically
  • Subscriber registration queries are typically fast as the registration database is small

Configurationโ€‹

Access Controlโ€‹

The Control Panel should be deployed behind appropriate access controls (firewall, VPN, authentication) as it provides visibility into subscriber activity and call records.