I still haven’t figured this out totally and I’m still at a loss…
Here’s some more specifics. I coded a custom voice mail system because the built in Asterisk one was lacking some features I wanted. I wrote it using AGI, and it actually works extremely well.
I have a timeout on recording, so if the caller records too long, it hangs up on them.
But I also have a “press pound for more options” menu that I wrote.
And for some odd reason, calls are ending up in that menu, even though they are disconnected. That menu loop, which waits for user input then repeats the menu if nothing was entered, ended up looping indefinitely, holding my ZAP channel open! What I ended up doing for that instance was to recode the script so if it recites the menu 3 times and still nohting, it hangs up.
A call would not end up in the post-recording IVR menu unless a user specifically pushed the pound key, which would mean there was something live on the line initially… So the only conclusion is that the ZAP card is for some reason not detecting hangups consistently from the ZAP channel.
My PSTN uses a disconnect signal wherein the voltage on the line drops for about 0.5 seconds, after which it returns and the error tone (fast busy) starts to play. Most of the time my Wildcard picks up on this disconnect signal with no issue and ends the call - but as I said it doesn’t seem to do so all the time.
And on top of that, does anyone have any suggestions for the other issue I mentioned - where someone calls my PSTN line, lets it ring once, then hangs up, and when Asterisk picks it up, it’s greeted with a dialtone, and again holds the line open (at least until my scripts explicitly time out)? Apparently someone out there is messing with me because I’m getting a lot of calls like this - calls where Asterisk picks up to the tune of a dialtone (I figured this out using monitor recording)
The only short-term solution as I said so far is that I’ve adjusted my scripts to automaticaly disconnect after so much user inactivity. But since my VM system does allow recording times up to like 200 seconds, that means one of these calls holds the line off-hook for at least 200 seconds (recording a VM consisting of a dialtone, followed by the telco “hang up and try agian”, folllowed by fast busy, blah blah) and then three loops of the post-record IVr, before it finally gives up.
Here’s a thought…Is there any Asterisk application that could listen to the line and check for certain tones (i.e. a dialtone, a fast busy, etc)? I could run that application from within AGI using Exec and for example if dialtone or fast busy is detected immediately end the call at that time.