← All Tutorials

ViciDial 'No One Is in Your Session' Error — Causes & Fixes

ViciDial Administration Intermediate 12 min read #69

Master the root causes of ViciDial's most frustrating connection error and implement proven solutions to keep your contact center running smoothly.

Prerequisites

Before diving into this guide, ensure you have:

This guide assumes a standard CentOS/RHEL or Debian ViciDial installation with Asterisk 11.x or higher.

Understanding the "No One Is in Your Session" Error

What the Error Means

The "No One Is in Your Session" error appears in the ViciDial agent screen when:

  1. An agent attempts to dial a contact
  2. The dialer initiates the outbound call
  3. The call connects to the contact
  4. But no agent audio channel is present or properly bridged
  5. The contact hears silence or the agent cannot hear the contact

This is not a call failure at the SIP level—the call technically completes, but the audio bridge between agent and contact never establishes correctly.

Why It Happens

The error occurs due to one of these core issues:

Causes and Diagnosis

Cause 1: SIP Registration Failure

The most common cause—agents appear logged in, but their SIP extension isn't registered to Asterisk.

Diagnosis

Check Asterisk SIP peer status:

asterisk -rx "sip show peers" | grep -i agent

Look for agents with state "UNREACHABLE" or showing as offline.

Check specific agent extension:

asterisk -rx "sip show peer 6001" 

Example output showing a problem:

Name       : 6001
Qualify mem : 12500
Defaddr    : 203.0.113.45:5060
Forcerport : Yes
Useragent  : Zoiper 5.4.33
Status     : UNREACHABLE (18 ms)

The key indicator: UNREACHABLE status.

Fix: Force Re-registration

From the ViciDial web admin interface, navigate to Agent and manually kick the agent offline, then have them log back in:

# Or use the command line to reload SIP configuration
asterisk -rx "sip reload"

Edit /etc/asterisk/sip-vicidial.conf and ensure the agent extension exists:

[6001]
type=friend
host=dynamic
secret=YourSecretPassword123
context=from-internal
dtmfmode=rfc2833
disallow=all
allow=ulaw
allow=gsm
allow=g729
nat=yes
qualify=yes
qualifyfreq=60

Key parameters to verify:

Reload SIP after changes:

asterisk -rx "sip reload"

Verify re-registration:

asterisk -rx "sip show peers" | grep 6001

Cause 2: Database Desynchronization

ViciDial stores live session information in the database. If a crash or improper logout occurs, stale data blocks new sessions.

Diagnosis

Query the database for orphaned sessions:

mysql> USE asterisk;
mysql> SELECT vicidial_id, user, call_date, status FROM vicidial_log 
       WHERE status IN ('INCALL','QUEUE','LIVE') 
       AND call_date < DATE_SUB(NOW(), INTERVAL 2 HOUR);

This query finds calls marked as "LIVE" older than 2 hours—these are definitely stale.

Check the agent's current session status:

mysql> SELECT user_id, status, last_update FROM vicidial_users_log 
       WHERE user_id = 'agent001' 
       ORDER BY last_update DESC LIMIT 1;

If the timestamp is old but status shows "LIVE," the session is orphaned.

Fix: Clean Stale Sessions

Option 1: Update vicidial_log directly

mysql> UPDATE vicidial_log 
       SET status = 'ABANDONED' 
       WHERE status IN ('INCALL','QUEUE','LIVE') 
       AND call_date < DATE_SUB(NOW(), INTERVAL 2 HOUR);

Option 2: Use ViciDial's cleanup script

ViciDial includes a maintenance script. Run it:

sudo -u asterisk /usr/share/astguiclient/ADMIN_cleaning_scripts.pl

This script:

Option 3: Manual agent reset via web interface

  1. Log in to /vicidial/admin.php
  2. Navigate to Agent Management
  3. Find the problematic agent
  4. Click Reset Agent
  5. Confirm the action

Cause 3: Asterisk Channel Bridge Misconfiguration

The Dial() application in Asterisk must properly bridge the agent and contact channels. If the dialplan context is wrong, bridging fails.

Diagnosis

Capture a call attempt in the Asterisk CLI:

asterisk -rx "core set debug 3" # Enable verbose debugging
# Now have an agent attempt a call
# Monitor output in /var/log/asterisk/messages
tail -f /var/log/asterisk/messages | grep -i bridge

Look for lines like:

[2024-01-15 14:23:45] ERROR: Bridge failed: Channel not found
[2024-01-15 14:23:46] WARNING: Cannot create bridge for local/6001

Inspect the dialplan routing:

asterisk -rx "dialplan show from-internal"

Fix: Verify extensions-vicidial.conf Dialplan

Check /etc/asterisk/extensions-vicidial.conf for the agent context:

[from-internal]
exten => _6XXX,1,NoOp(=== AGENT EXTENSION ${EXTEN} ===)
 same => n,Set(CHANNEL(hangup_handler_push)=from-internal,hangup_handler,1)
 same => n,Dial(SIP/${EXTEN},120,tT)
 same => n,Hangup()

exten => hangup_handler,1,NoOp(=== HANGUP HANDLER ===)
 same => n,Hangup()

Ensure the Dial() application uses the correct parameters:

If this is missing or incorrect, add or update it:

cp /etc/asterisk/extensions-vicidial.conf /etc/asterisk/extensions-vicidial.conf.bak
# Edit the file with your editor
nano /etc/asterisk/extensions-vicidial.conf

Reload the dialplan:

asterisk -rx "dialplan reload"

Verify the change:

asterisk -rx "dialplan show from-internal" | grep -A 5 "_6XXX"

Cause 4: Codec Mismatch Between Agent and Contact

When an agent and contact use incompatible audio codecs, no audio passes between them.

Diagnosis

Check the allowed codecs for an agent extension in sip-vicidial.conf:

asterisk -rx "sip show peer 6001" | grep allow

Output example:

allow=ulaw
allow=gsm
allow=g729

Check what codec was negotiated on a specific call:

asterisk -rx "core show channels verbose" | grep 6001

Look for codec information in the channel details.

Fix: Standardize Codec Configuration

Edit /etc/asterisk/sip-vicidial.conf to ensure all agent extensions have compatible codecs:

[general]
disallow=all
allow=ulaw
allow=gsm
allow=g729
allow=opus

Then in individual agent peers:

[6001]
type=friend
host=dynamic
secret=YourSecretPassword123
context=from-internal
disallow=all
allow=ulaw
allow=gsm
allow=g729

Best practice: Order codecs by priority (most compatible first):

disallow=all
allow=ulaw          ; Standard, uncompressed, most compatible
allow=gsm           ; Good compression, good quality
allow=g729          ; High compression, lower quality but bandwidth-efficient

Reload SIP:

asterisk -rx "sip reload"

Cause 5: Firewall and NAT Issues

Media streams between agent and contact may be blocked by firewalls or misconfigured NAT.

Diagnosis

Check Asterisk RTP port range configuration:

grep -i rtp /etc/asterisk/rtp.conf

Expected output:

rtpstart=10000
rtpend=20000

Verify these ports are open on the firewall:

sudo firewall-cmd --list-ports
# or for ufw:
sudo ufw status

Test connectivity from an agent's IP to the ViciDial server:

# On the agent's machine
sudo iptables -I INPUT -p udp --dport 10000:20000 -j ACCEPT
# or using nc (netcat)
nc -u -l -p 10000 &

Fix: Configure Asterisk for NAT

Edit /etc/asterisk/rtp.conf:

[general]
rtpstart=10000
rtpend=20000
rtpbind=0.0.0.0

Edit /etc/asterisk/sip.conf for NAT handling:

[general]
nat=yes
externip=203.0.113.100
localnet=192.168.1.0/255.255.255.0

Configure agent extension for NAT:

[6001]
type=friend
host=dynamic
nat=yes
insecure=port,invite

Reload SIP:

asterisk -rx "sip reload"

Check RTP binding:

asterisk -rx "rtp show stats"

Configuration Examples

Complete SIP Extension Configuration

Here's a production-ready SIP agent extension configuration:

[6001]
type=friend
host=dynamic
secret=SuperSecurePassword2024
context=from-internal
dtmfmode=rfc2833
disallow=all
allow=ulaw
allow=gsm
allow=g729
nat=yes
insecure=port,invite
qualify=yes
qualifyfreq=60
directmedia=no
videosupport=no
maxcallbitrate=384
session-timers=uac
session-expires=1800
minse=90

Key parameters explained:

Complete Dialplan Context for ViciDial

Add this to /etc/asterisk/extensions-vicidial.conf:

[from-internal]
exten => _6XXX,1,NoOp(=== Agent Call from ${CALLERID(num)} ===)
 same => n,Set(CHANNEL(hangup_handler_push)=from-internal,h_agent_hangup,1)
 same => n,Answer()
 same => n,Set(VICIDIAL_AGENT=${EXTEN})
 same => n,Dial(SIP/${EXTEN},120,tT)
 same => n,Hangup()

exten => h_agent_hangup,1,NoOp(=== Agent Hangup Handler ===)
 same => n,Set(CDR(userfield)=${VICIDIAL_AGENT})
 same => n,Hangup()

exten => t,1,Hangup()
exten => T,1,Hangup()

Database Cleanup Script

Create /usr/local/bin/vicidial_cleanup.sh:

#!/bin/bash

# ViciDial Stale Session Cleanup Script
# Run via cron: */30 * * * * /usr/local/bin/vicidial_cleanup.sh

LOG_FILE="/var/log/vicidial_cleanup.log"
MYSQL_USER="root"
MYSQL_PASS="your_password_here"
DB_NAME="asterisk"

echo "[$(date '+%Y-%m-%d %H:%M:%S')] Starting cleanup..." >> $LOG_FILE

# Remove stale LIVE calls older than 4 hours
mysql -u $MYSQL_USER -p$MYSQL_PASS $DB_NAME << EOF >> $LOG_FILE 2>&1
UPDATE vicidial_log 
SET status = 'ABANDONED' 
WHERE status IN ('INCALL', 'QUEUE', 'LIVE') 
AND call_date < DATE_SUB(NOW(), INTERVAL 4 HOUR);

UPDATE vicidial_users_log 
SET status = 'READY' 
WHERE status IN ('INCALL', 'QUEUE', 'LIVE') 
AND last_update < DATE_SUB(NOW(), INTERVAL 4 HOUR);
EOF

echo "[$(date '+%Y-%m-%d %H:%M:%S')] Cleanup completed." >> $LOG_FILE

Make it executable:

chmod +x /usr/local/bin/vicidial_cleanup.sh

Add to crontab to run every 30 minutes:

(crontab -l 2>/dev/null; echo "*/30 * * * * /usr/local/bin/vicidial_cleanup.sh") | crontab -

Advanced Debugging Techniques

Enable Verbose SIP Logging

Temporarily enable SIP debug for a specific agent:

asterisk -rx "sip set debug peer 6001"

This logs all SIP messages for extension 6001. Monitor the logs:

tail -f /var/log/asterisk/messages | grep "6001"

Sample output showing successful registration:

[2024-01-15 14:05:22] VERBOSE[12345] app_dial.c: SIP/6001 to 'SIP/203.0.113.50:5060'
[2024-01-15 14:05:22] DEBUG[12345] chan_sip.c: Reliably Transmitting (NAT):
INVITE sip:203.0.113.50:5060 SIP/2.0
[2024-01-15 14:05:22] VERBOSE[12345] chan_sip.c: Called SIP/203.0.113.50:5060
[2024-01-15 14:05:23] VERBOSE[12345] chan_sip.c: SIP/6001 is ringing
[2024-01-15 14:05:25] VERBOSE[12345] chan_sip.c: SIP/6001 answered SIP/inbound-00a1c2d

Disable debug when finished:

asterisk -rx "sip set debug off"

Check Active Channels and Bridges

View all active channels:

asterisk -rx "core show channels"

Look for your agent extension. Output example:

Channel              State   Application(Data)
SIP/6001-00000a12    6       Dial(SIP/outbound)
SIP/inbound-00000a13 6       Bridged Call(SIP/6001-00000a12)
————————————————————————————————————————————————————————
2 active channels

Get detailed verbose info on a specific channel:

asterisk -rx "core show channel SIP/6001-00000a12"

Inspect ViciDial's Call Log in Real-Time

Check what ViciDial logged for a recent call:

mysql> SELECT vicidial_id, user, lead_id, status, call_date, call_length 
       FROM vicidial_log 
       WHERE user = 'agent001' 
       ORDER BY call_date DESC LIMIT 5;

If a call shows status ABANDONED or NOANSWER but you expected LIVE, the issue occurred at the Asterisk level.

Monitor Asterisk Resource Usage

Check if memory or file descriptors are exhausted:

asterisk -rx "core show uptime"
asterisk -rx "sip show channels"

If channel counts approach your system limit (typically 2000-4000 per server), increase the file descriptor limit:

ulimit -n 65536

Make this permanent in /etc/security/limits.conf:

asterisk soft nofile 65536
asterisk hard nofile 65536

Troubleshooting

Agent Can Log In But Gets "No One Is in Your Session" on Every Call

Step 1: Verify SIP registration:

asterisk -rx "sip show peers" | grep "agent_extension_number"

If UNREACHABLE, have the agent log off and back on.

Step 2: Check the agent's device codec support. Log in to /agc/vicidial.php, initiate a test call, and monitor logs:

tail -f /var/log/asterisk/messages | grep -i "codec\|bridge"

Step 3: Verify dialplan context matches the agent's SIP context:

asterisk -rx "sip show peer AGENT_EXTENSION" | grep context

Calls Connect But One-Way Audio

Possible causes:

Fix:

Edit /etc/asterisk/sip-vicidial.conf:

[general]
directmedia=no

This forces all media through Asterisk, bypassing direct media negotiation which often fails with NAT.

Reload:

asterisk -rx "sip reload"

Stale Database Entries Blocking New Sessions

Run the cleanup script:

/usr/share/astguiclient/ADMIN_cleaning_scripts.pl

Or manually clean via SQL:

UPDATE vicidial_users_log 
SET status = 'READY', calls_today = 0 
WHERE user_id = 'agent001';

High Latency or Occasional Dropouts

Check RTP stats:

asterisk -rx "rtp show stats"

If packet loss is high (>2%), verify network quality and firewall rules. Enable RTP keepalive:

Edit /etc/asterisk/rtp.conf:

[general]
dtmf_payload_type=101
rtpstart=10000
rtpend=20000
rtcpinterval=5000

Restart Asterisk:

sudo systemctl restart asterisk

Summary

The "No One Is in Your Session" error in ViciDial stems from channel bridge failures caused by:

  1. SIP registration issues — Agents not properly registered to Asterisk
  2. Database desynchronization — Stale session records blocking new calls
  3. Dialplan misconfiguration — Incorrect context or bridge parameters
  4. Codec mismatches — Agent and contact using incompatible audio codecs
  5. Firewall/NAT problems — Media path blocked or misconfigured

Immediate fixes:

Prevention:

Advanced debugging:

With these techniques, you'll resolve "No One Is in Your Session" errors quickly and reduce future occurrences through proactive monitoring and maintenance.

Stuck on something specific?

Book a free 30-minute call. I run ViciDial centers across 3 countries and can usually unblock your setup in one session — or build it for you.

Book a Free Consultation