This guide explains how to dial phone numbers and ranges using VibeDialer, including phone number validation and country code support.
- Quick Start
- Telephony Backends
- Phone Number Formats
- Range Dialing
- Country Code Support
- Session Tracking
- Validation Rules
- Examples
# Launch the interactive TUI - configure all settings in the interface
vibedialervibedialer dial 555-234-5678# Dial all numbers from 555-234-5600 to 555-234-5699
vibedialer dial 555-234-56# Dial UK numbers
vibedialer dial --country-code 44 2012345678VibeDialer supports multiple telephony backends for actually placing calls. Choose the backend that best suits your needs.
The simulation backend is perfect for testing and development. It simulates dial results without making real calls.
# Simulation is the default
vibedialer dial 555-234-56
# Or explicitly specify
vibedialer dial --backend simulation 555-234-56Features:
- No real calls made
- Randomized realistic responses
- Various statuses (busy, no answer, modem, person)
- Free to use
Make real phone calls using Twilio's Voice API. Requires a Twilio account.
- Create a Twilio account at https://www.twilio.com/
- Get your Account SID and Auth Token from the Twilio Console
- Purchase or verify a Twilio phone number
- Use the credentials with VibeDialer
vibedialer dial \
--backend voip \
--twilio-account-sid "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
--twilio-auth-token "your_auth_token_here" \
--twilio-from-number "+15551234567" \
555-234-56Features:
- Real phone calls via Twilio
- Carrier detection (modem vs voice)
- Call duration tracking
- Detailed call logs
- Pay-per-use pricing
Optional Parameters:
--twilio-twiml-url: Custom TwiML URL for call instructions (default uses Twilio demo)
Twilio VoIP backend attempts to detect modem carriers by analyzing call duration:
- Calls lasting less than 3 seconds are flagged as potential modem carriers
- Modems typically disconnect quickly after handshake
- Voice calls usually last longer
Twilio charges per minute for outbound calls. Costs vary by destination:
- USA: ~$0.013/min
- Canada: ~$0.013/min
- UK: ~$0.024/min
- Other countries: Varies
Visit Twilio Pricing for current rates.
- Start with small test ranges
- Monitor your Twilio usage dashboard
- Set up billing alerts
- Use simulation mode for testing
Use a physical Hayes-compatible modem connected to your computer.
vibedialer dial \
--backend modem \
--modem-port /dev/ttyUSB0 \
--modem-baudrate 57600 \
555-234-56Features:
- Direct modem connection
- Audio carrier detection
- Modem tone analysis
- No per-call costs (only phone line charges)
Requirements:
- Hayes-compatible modem
- Serial port connection (USB-to-Serial adapter supported)
- Active phone line
| Backend | Real Calls | Cost | Setup Complexity | Carrier Detection |
|---|---|---|---|---|
| Simulation | No | Free | None | Simulated |
| Twilio VoIP | Yes | Pay-per-use | Easy | Duration-based |
| Modem | Yes | Phone line | Moderate | Audio analysis |
VibeDialer defaults to USA/Canada phone number format (North American Numbering Plan - NANP):
- Format:
NXX-NXX-XXXX - Length: 10 digits (area code + exchange + subscriber)
- Area Code: First digit must be 2-9 (not 0 or 1)
- Exchange: First digit must be 2-9 (not 0 or 1)
- Country Code:
1
Valid Examples:
555-234-5678212-555-9999+1-800-234-5678
Invalid Examples:
155-234-5678(area code starts with 1)555-156-7890(exchange starts with 1)911-234-5678(N11 service code)
VibeDialer supports multiple country codes:
- UK (
44): 10 digits after country code - Germany (
49): 10-11 digits after country code - France (
33): Variable length - Japan (
81): Variable length - Australia (
61): Variable length
Range dialing allows you to dial multiple phone numbers by providing a partial number pattern. VibeDialer will generate all possible combinations and dial them in sequence.
When you provide a partial number, VibeDialer:
- Validates the partial pattern
- Generates all possible completions
- Filters out invalid numbers
- Dials each valid number in sequence (or random order)
# Dials: 555-234-5600 through 555-234-5699
vibedialer dial 555-234-56# Dials: 555-234-5000 through 555-234-5999
vibedialer dial 555-234-5# Dials: 555-234-0000 through 555-234-9999
vibedialer dial 555-234For USA/NANP numbers, you must provide at least the area code (3 digits):
# Valid: includes area code
vibedialer dial 555
# Invalid: too short
vibedialer dial 55 # Error: Pattern must include at least area codeBy default, numbers are dialed in sequential order. Use --random to randomize:
# Sequential (default): 555-234-5600, 555-234-5601, 555-234-5602, ...
vibedialer dial 555-234-56
# Random: 555-234-5642, 555-234-5601, 555-234-5688, ...
vibedialer dial --random 555-234-56Use the --country-code (or -c) flag to specify the country:
# USA/Canada (default)
vibedialer dial 555-234-5678
# UK
vibedialer dial --country-code 44 2012345678
# Germany
vibedialer dial --country-code 49 3012345678| Country | Code | Format Notes |
|---|---|---|
| USA/Canada | 1 | 10 digits (NXX-NXX-XXXX) |
| UK | 44 | 10 digits after country code |
| Germany | 49 | 10-11 digits after country code |
| France | 33 | Variable length |
| Japan | 81 | Variable length |
| Australia | 61 | Variable length |
VibeDialer tracks each war dialing session with a unique session ID, making it easy to analyze results and resume interrupted sessions.
A session represents a single war dialing operation. Each session has:
- Session ID: A unique 8-character identifier (e.g.,
a3f5c2d1) - Metadata: Backend type, storage type, phone pattern, statistics
- Results: All dial results grouped by session ID
Session IDs are short, unique identifiers that group related dial results together:
# Auto-generated session ID
vibedialer dial 555-234-56
# Session ID: a3f5c2d1 (auto-generated)
# Manually specify session ID
vibedialer dial --session-id mysession1 555-234-56
# Session ID: mysession1 (your choice)- Auto-generated: 8 characters from UUID4 (e.g.,
a3f5c2d1) - Manual: Any string you provide (e.g.,
office-scan-2025)
VibeDialer tracks comprehensive metadata for each session:
| Field | Description |
|---|---|
| session_id | Unique identifier |
| start_time | When the session started (ISO 8601) |
| end_time | When the session ended (ISO 8601) |
| backend_type | Backend used (simulation, voip, modem) |
| storage_type | Storage backend (csv, sqlite) |
| phone_pattern | Pattern being dialed (e.g., "555-234-56") |
| total_calls | Total number of calls made |
| successful_calls | Number of successful calls |
| modem_detections | Number of modem carriers detected |
| country_code | Country code used (e.g., "1" for USA) |
| randomized | Whether numbers were dialed in random order |
Note: Session metadata is only saved when using SQLite storage. CSV storage only includes session_id in each result row.
By default, when resuming from a file, VibeDialer continues the previous session:
# Initial session
vibedialer dial --storage sqlite --output calls.db 555-234-56
# Session ID: a3f5c2d1 (auto-generated)
# Resume later - continues same session
vibedialer dial --resume calls.db --infer-prefix
# Session ID: a3f5c2d1 (continued from previous session)To force a new session when resuming:
# Force new session even when resuming
vibedialer dial --resume calls.db --infer-prefix --new-session
# Session ID: b7e9f4a2 (new session)| Flag | Description | Default |
|---|---|---|
--session-id |
Manually specify session ID | Auto-gen |
--continue-session |
Continue previous session when resuming | True |
--new-session |
Force new session even when resuming | False |
CSV files include session_id as the first column:
session_id,phone_number,status,timestamp,success,message,carrier_detected,tone_type
a3f5c2d1,555-234-5600,busy,2025-11-16T14:30:00,False,Busy signal,False,
a3f5c2d1,555-234-5601,modem,2025-11-16T14:30:01,True,Modem detected,True,modemYou can filter results by session:
# Filter results for specific session
grep "a3f5c2d1" results.csvSQLite databases store session metadata in a dedicated sessions table:
-- View all sessions
SELECT * FROM sessions;
-- View results for specific session
SELECT * FROM dial_results WHERE session_id = 'a3f5c2d1';
-- Session statistics
SELECT
session_id,
phone_pattern,
total_calls,
successful_calls,
modem_detections
FROM sessions;# Open SQLite database
sqlite3 calls.db
# List all sessions
SELECT session_id, phone_pattern, total_calls, modem_detections
FROM sessions
ORDER BY start_time DESC;
# Get all modem hits for a session
SELECT phone_number, timestamp, message
FROM dial_results
WHERE session_id = 'a3f5c2d1' AND status = 'modem';
# Compare sessions
SELECT session_id, backend_type, total_calls,
(successful_calls * 100.0 / total_calls) as success_rate
FROM sessions;# Session: a3f5c2d1
# Pattern: 555-234-56 (100 numbers)
# Backend: Twilio VoIP
# Started: 2025-11-16T14:30:00
# Ended: 2025-11-16T14:45:00
#
# Results:
# Total calls: 100
# Successful: 45 (45%)
# Modem detections: 5 (5%)
# Busy: 20 (20%)
# No answer: 30 (30%)
# Errors: 5 (5%)- Use SQLite for Session Metadata: CSV only stores session_id, not full metadata
- Name Sessions Meaningfully: Use
--session-id office-scan-2025-11-16for clarity - Continue Sessions on Resume: Default behavior maintains session continuity
- Query Sessions Regularly: Use SQLite queries to track progress
- Group Related Scans: Use same session ID for related scanning operations
VibeDialer enforces strict validation for USA/NANP numbers:
-
Area Code Restrictions:
- First digit must be 2-9
- Cannot be N11 service codes (211, 311, 411, 511, 611, 711, 811, 911)
-
Exchange Code Restrictions:
- First digit must be 2-9
-
Total Length:
- Must be exactly 10 digits
When using range dialing, VibeDialer validates the pattern before generating numbers:
# Valid pattern
vibedialer dial 555-234 # ✓ Valid area code and exchange
# Invalid patterns
vibedialer dial 155-234 # ✗ Area code starts with 1
vibedialer dial 555-156 # ✗ Exchange starts with 1
vibedialer dial 911-234 # ✗ N11 service code
vibedialer dial 55 # ✗ Too short (need at least area code)When generating a range, VibeDialer automatically skips invalid numbers:
# Pattern: 555-234-5
# Generates: 555-234-5000 through 555-234-5999
# Skips any invalid combinations (though all should be valid here)
vibedialer dial 555-234-5Dial 100 numbers in a local exchange:
vibedialer dial 555-234-56This generates and dials:
555-234-5600555-234-5601555-234-5602- ...
555-234-5699
Dial numbers in random order to avoid patterns:
vibedialer dial --random 555-234-56Dial using a real modem:
vibedialer dial --backend modem --modem-port /dev/ttyUSB0 555-234-56Save results to a CSV file:
vibedialer dial --storage csv --output results.csv 555-234-56Resume from a previous session:
# Initial dial (gets interrupted)
vibedialer dial --output session1.csv 555-234-56
# Resume later
vibedialer dial --resume session1.csv --resume-prefix 555-234-56Or let VibeDialer infer the pattern:
vibedialer dial --resume session1.csv --infer-prefixDial UK numbers:
# Single UK number
vibedialer dial --country-code 44 2012345678
# Range of UK numbers
vibedialer dial --country-code 44 201234567Run without the TUI interface:
vibedialer dial --no-interactive 555-234-56When testing, start with a small range to verify your setup:
# Just 10 numbers
vibedialer dial 555-234-560Test without actually dialing:
vibedialer dial --storage dry-run 555-234-56Always save results for later analysis:
vibedialer dial --storage csv --output results.csv 555-234-56Use random order to avoid detection:
vibedialer dial --random 555-234-56For long dialing sessions, use resume functionality:
# Session 1
vibedialer dial --output session.db --storage sqlite 555-234
# Session 2 (resume)
vibedialer dial --resume session.db --infer-prefix| Error Message | Cause | Solution |
|---|---|---|
Pattern must include at least area code |
Pattern too short | Provide at least 3 digits |
Area code must start with 2-9 |
Invalid area code | Use valid area code (200-999) |
Exchange must start with 2-9 |
Invalid exchange code | Use valid exchange (200-999) |
Area code cannot be N11 service code |
Tried to use 911, 411, etc. | Use different area code |
Number too short/long |
Invalid length for country | Check country format requirements |