by mcargile » Tue Apr 24, 2007 1:18 pm
So we have run into an interesting problem. One of our customers has a full DS3's worth of T1s through Quest. Quest is doing some funny things. They are not sending the correct D channels message when we dial a disconnected number but they send an in band alert and on the B channel play the original switch audio with SIT and announcement which is not detected by Dial(). Through the whole time Dial() stays in ringing. This is a stretch of the ISDN protocol however is not technically a violation. Asterisk is seeing the call as still ringing and will timeout the Dial() sending the call into the hang up extension. Vicidial is thinking that there is another line available however the CO does not release the B Channel for another few seconds and we can still hear the audio on the B channel using ZapScan(). This causes multiple problems:
A. The disconnected number is not detected and ends up as a NoAnswer being dialed over and over again.
B. Vicidial is trying to dial out on the channel when it is not available yet.
Our current bandage for this problem is to decrease the number of trunks the server can dial out on and to put a wait in the h extension to slow down the reusing of the lines. This however is not ideal as it means our client is not dialing at max capacity and it has not necessarily fixed the issue it has just made it appear far less. We are looking to put some checks in the dial plan that would check for available lines before dialing and would wait till one is available. We plan to put this check after the call to the logging agi but before the dial so that Vicidial thinks that the line is in use.
This does not fix the overall problem however because the disconnects are not being handled properly and we are basically fooling Vicidial in order to get proper results.
We are hoping to get Quest to change this behavior to be more in line with the ISDN standard, but this might end up being like running head first into a brick wall. We are going to try other things to force Asterisk to do the tone detection even though these are PRI circuits.
This does however point out a problem with the current implementation of Vicidial which is the the assumption that if a call is hung up it's channel is available. We can either add a check to the hang up agi to see if the channel is really released, which has the problem that the channel might already be in use again by the time the check is run. Or we can add a check on the dialing agi to see if channels are available before we dial though there is a delay between the check and the actual dial.
Last edited by
mcargile on Mon Aug 20, 2007 11:51 am, edited 1 time in total.
Michael Cargile | Director of Engineering | ViciDialGroup | http://www.vicidial.com
The official source for VICIDIAL services and support. 1-888-894-VICI (8424)