SOLVED How can I get an analog phone to stop blaring busy

Hey fellow telephony enthusiasts!

So I’m playing around with my Dell T110 (Asterisk 1.8), and this time I’m using some 4-Line Analog RCA phones with an OpenVox A400E card with four FXS ports. Here’s my problem, when the other party hangs up the call before I do, I get a busy tone blaring out of my headset (or even more obnoxious, blaring out of the speakerphone). I contacted OpenVox and they say this is the normal way a call hang up is handled by asterisk. Of course I can’t ask Asterisk because they will tell me to ask in FreePBX *or asterisk so here I am!

From what I remember in my old age, a normal old PSTN phone line from Ma-Bell, would act this way. You are on a phone call with Joe, Joe hangs up,… on your end you hear silence for a moment, then a dial tone. Am I wrong on this? Or is the standard for you to instantaneously hear a busy signal as soon as the other caller hangs up? Can this be changed? I’d appreciate any input!

UPDATE…

I found a macro that worked for what I wanted it to do, if anyone else has my issue…

#1) Add “g” to your dial plan
#2) throw this macro into extensions_custom.conf

[code]; handle hangup macro
; this macro attempts to go though and do something intelligent with the
HANGUPCAUSE and DIALSTATUS
[macro-handle-hangup]
exten => s,1,NoOp(HANGUPCAUSE is ${HANGUPCAUSE} and DIALSTATUS is
${DIALSTATUS})
exten => s,n,GotoIf($[${HANGUPCAUSE} = 0]?s,nohc)
exten => s,n,Goto(hc-${HANGUPCAUSE},1)
exten => s,n(nohc),GotoIf($[${DIALSTATUS} = ANSWER]?hc-16,1)
exten => s,n,GotoIf($[${DIALSTATUS} = BUSY]?hc-17,1)
exten => s,n,GotoIf($[${DIALSTATUS} = NOANSWER]?hc-19,1)
exten => s,n,GotoIf($[${DIALSTATUS} = CONGESTION]?hc-42,1)
exten => s,n,GotoIf($[${DIALSTATUS} = CHANUNAVAIL]?hc-44,1)
exten => s,n,GotoIf($[${DIALSTATUS} = CANCEL]?hc-0,1)
exten => s,n,Goto(hc-0,n)

exten => hc-0,1,NoOp(${HANGUPCAUSE} - Not Defined)
exten => hc-0,n,Goto(ind-congestion,1)
exten => hc-1,1,NoOp(${HANGUPCAUSE} - Unallocated)
exten => hc-1,n,Goto(ind-outofservice,1)
exten => hc-2,1,NoOp(${HANGUPCAUSE} - No Route to Transit Network)
exten => hc-2,n,Goto(ind-congestion,1)
exten => hc-3,1,NoOp(${HANGUPCAUSE} - No Route to Destination)
exten => hc-3,n,Goto(ind-congestion,1)
exten => hc-6,1,NoOp(${HANGUPCAUSE} - Channel Unacceptable)
exten => hc-6,n,Goto(ind-congestion,1)
exten => hc-7,1,NoOp(${HANGUPCAUSE} - Call Awarded Delivered)
exten => hc-7,n,Goto(ind-hangup,1)
exten => hc-16,1,NoOp(${HANGUPCAUSE} - Normal Clearing)
exten => hc-16,n,Goto(ind-hangup,1)
exten => hc-17,1,NoOp(${HANGUPCAUSE} - User Busy)
exten => hc-17,n,Goto(ind-busy,1)
exten => hc-18,1,NoOp(${HANGUPCAUSE} - No User Response)
exten => hc-18,n,Goto(ind-hangup,1)
exten => hc-19,1,NoOp(${HANGUPCAUSE} - No Answer)
exten => hc-19,n,Goto(ind-hangup,1)
exten => hc-21,1,NoOp(${HANGUPCAUSE} - Call Rejected)
exten => hc-21,n,Goto(ind-outofservice,1)
exten => hc-22,1,NoOp(${HANGUPCAUSE} - Number Changed)
exten => hc-22,n,Goto(ind-outofservice,1)
exten => hc-27,1,NoOp(${HANGUPCAUSE} - Destination Out-of-Order)
exten => hc-27,n,Goto(ind-outofservice,1)
exten => hc-28,1,NoOp(${HANGUPCAUSE} - Invalid Number Format)
exten => hc-28,n,Goto(ind-congestion,1)
exten => hc-29,1,NoOp(${HANGUPCAUSE} - Facility Rejected)
exten => hc-29,n,Goto(ind-congestion,1)
exten => hc-30,1,NoOp(${HANGUPCAUSE} - Response to Status Enquiry)
exten => hc-30,n,Goto(ind-hangup,1)
exten => hc-31,1,NoOp(${HANGUPCAUSE} - Normal Unspecified)
exten => hc-31,n,Goto(ind-hangup,1)
exten => hc-34,1,NoOp(${HANGUPCAUSE} - Normal Circuit Congestion)
exten => hc-34,n,Goto(ind-congestion,1)
exten => hc-38,1,NoOp(${HANGUPCAUSE} - Network Out-of-Order)
exten => hc-38,n,Goto(ind-congestion,1)
exten => hc-41,1,NoOp(${HANGUPCAUSE} - Normal Temporary Failure)
exten => hc-41,n,Goto(ind-congestion,1)
exten => hc-42,1,NoOp(${HANGUPCAUSE} - Switch Congestion)
exten => hc-42,n,Goto(ind-congestion,1)
exten => hc-43,1,NoOp(${HANGUPCAUSE} - Access Information Discarded)
exten => hc-43,n,Goto(ind-hangup,1)
exten => hc-44,1,NoOp(${HANGUPCAUSE} - Requested Channel Unavailable)
exten => hc-44,n,Goto(ind-congestion,1)
exten => hc-45,1,NoOp(${HANGUPCAUSE} - Pre-Empted)
exten => hc-45,n,Goto(ind-congestion,1)
exten => hc-50,1,NoOp(${HANGUPCAUSE} - Facility Not Subscribed)
exten => hc-50,n,Goto(ind-congestion,1)
exten => hc-52,1,NoOp(${HANGUPCAUSE} - Outgoing Call Barred)
exten => hc-52,n,Goto(ind-congestion,1)
exten => hc-54,1,NoOp(${HANGUPCAUSE} - Incoming Call Barred)
exten => hc-54,n,Goto(ind-congestion,1)
exten => hc-57,1,NoOp(${HANGUPCAUSE} - Bearer Capability Not Authorized)
exten => hc-57,n,Goto(ind-congestion,1)
exten => hc-58,1,NoOp(${HANGUPCAUSE} - Bearer Capability Not Available)
exten => hc-58,n,Goto(ind-congestion,1)
exten => hc-65,1,NoOp(${HANGUPCAUSE} - Bearer Capability Not Implemented)
exten => hc-65,n,Goto(ind-congestion,1)
exten => hc-66,1,NoOp(${HANGUPCAUSE} - Channel Not Implemented)
exten => hc-66,n,Goto(ind-congestion,1)
exten => hc-69,1,NoOp(${HANGUPCAUSE} - Facility Not Implemented)
exten => hc-69,n,Goto(ind-congestion,1)
exten => hc-81,1,NoOp(${HANGUPCAUSE} - Invalid Call Reference)
exten => hc-81,n,Goto(ind-congestion,1)
exten => hc-88,1,NoOp(${HANGUPCAUSE} - Incompatible Destination)
exten => hc-88,n,Goto(ind-congestion,1)
exten => hc-95,1,NoOp(${HANGUPCAUSE} - Invalid Message - Unspecified)
exten => hc-95,n,Goto(ind-congestion,1)
exten => hc-96,1,NoOp(${HANGUPCAUSE} - Mandatory IE Missing)
exten => hc-96,n,Goto(ind-congestion,1)
exten => hc-97,1,NoOp(${HANGUPCAUSE} - Message Type Nonexistant)
exten => hc-97,n,Goto(ind-congestion,1)
exten => hc-98,1,NoOp(${HANGUPCAUSE} - Wrong Message)
exten => hc-98,n,Goto(ind-congestion,1)
exten => hc-99,1,NoOp(${HANGUPCAUSE} - IE Nonexistant)
exten => hc-99,n,Goto(ind-congestion,1)
exten => hc-100,1,NoOp(${HANGUPCAUSE} - Invalid IE Contents)
exten => hc-100,n,Goto(ind-congestion,1)
exten => hc-101,1,NoOp(${HANGUPCAUSE} - Wrong Call State)
exten => hc-101,n,Goto(ind-congestion,1)
exten => hc-102,1,NoOp(${HANGUPCAUSE} - Recovery on Timer Expire)
exten => hc-102,n,Goto(ind-congestion,1)
exten => hc-103,1,NoOp(${HANGUPCAUSE} - Mandatory IE Length Error)
exten => hc-103,n,Goto(ind-congestion,1)
exten => hc-111,1,NoOp(${HANGUPCAUSE} - Protocol Error)
exten => hc-111,n,Goto(ind-congestion,1)
exten => hc-127,1,NoOp(${HANGUPCAUSE} - Internetworking)
exten => hc-127,n,Goto(ind-congestion,1)

exten => ind-hangup,1,Wait(30)
exten => ind-hangup,n,Hangup
exten => ind-busy,1,Busy
exten => ind-congestion,1,Congestion
exten => ind-outofservice,1,Zapateller[/code]

This is not “in FreePBX”. In FreePBX would be at freepbx.org/forums/.

You may have been confused by misrepresentation in films and TV. At least in the UK, you normally have to hang up before you get a new dial tone.

There isn’t enough information to work what yhour actual configuration is, but you may need to enable disconnect supervision on the FXO line, or you may need to cnfigure DAHDI to recognize the busy tone as a diconnect indication.

Oops sorry about that lol, they said to ask in asterisk or freepbx, basically passing me off. But it was hard talking to them anyway since their tech support is by Skype, and only available after 9pm since they are in China.

In the U.S. if the other party hangs up, it goes to silence, then after a while you hear the lady say “If you’d like to make a call, please hang up and try again”, then only after that is the busy tone.

I have no FXO lines, just a SIP trunk and a 4-port FXS card for four RCA phones

My configs are just the auto generated ones by genconf

/etc/dahdi/system.conf

[code]Autogenerated by /usr/sbin/dahdi_genconf on Mon Jul 15 15:15:31 2013

If you edit this file and execute /usr/sbin/dahdi_genconf again,

your manual changes will be LOST.

Dahdi Configuration File

This file is parsed by the Dahdi Configurator, dahdi_cfg

Span 1: WCTDM/4 “Wildcard TDM400P REV E/F Board 5” (MASTER)

fxoks=1
echocanceller=oslec,1
fxoks=2
echocanceller=oslec,2
fxoks=3
echocanceller=oslec,3
fxoks=4
echocanceller=oslec,4

Global data

loadzone = us
defaultzone = us[/code]

chan_dahdi.conf

[code][trunkgroups]

[channels]
context=from-zaptel
signalling=fxs_ks
rxwink=300 ; Atlas seems to use long (250ms) winks
usecallerid=yes
hidecallerid=no
callwaiting=yes
usecallingpres=yes
callwaitingcallerid=yes
threewaycalling=yes
transfer=yes
canpark=yes
cancallforward=yes
callreturn=yes
echocancel=yes
echocancelwhenbridged=no
faxdetect=incoming
echotraining=800
rxgain=0.0
txgain=0.0
callgroup=1
pickupgroup=1

;Uncomment these lines if you have problems with the disconection of your analog lines
;busydetect=yes
;busycount=6
;callprogress=yes

immediate=no

#include dahdi-channels.conf
#include chan_dahdi_additional.conf[/code]

dahdi-channels.conf

[code]; Autogenerated by /usr/sbin/dahdi_genconf on Mon Jul 15 15:15:31 2013
; If you edit this file and execute /usr/sbin/dahdi_genconf again,
; your manual changes will be LOST.
; Dahdi Channels Configurations (chan_dahdi.conf)
;
; This is not intended to be a complete chan_dahdi.conf. Rather, it is intended
; to be #include-d by /etc/chan_dahdi.conf that will include the global settings
;

; Span 1: WCTDM/4 “Wildcard TDM400P REV E/F Board 5” (MASTER)
;;; line="1 WCTDM/4/0 FXOKS"
signalling=fxo_ks
callerid=“Channel 1” <4001>
mailbox=4001
group=5
context=from-internal
channel => 1
callerid=
mailbox=
group=
context=default

;;; line="2 WCTDM/4/1 FXOKS"
signalling=fxo_ks
callerid=“Channel 2” <4002>
mailbox=4002
group=5
context=from-internal
channel => 2
callerid=
mailbox=
group=
context=default

;;; line="3 WCTDM/4/2 FXOKS"
signalling=fxo_ks
callerid=“Channel 3” <4003>
mailbox=4003
group=5
context=from-internal
channel => 3
callerid=
mailbox=
group=
context=default

;;; line="4 WCTDM/4/3 FXOKS"
signalling=fxo_ks
callerid=“Channel 4” <4004>
mailbox=4004
group=5
context=from-internal
channel => 4
callerid=
mailbox=
group=
context=default
[/code]

You should look at chan_dahdi.conf.sample, starting at:

;
; On trunk interfaces (FXS) and E&M interfaces (E&M, Wink, Feature Group D
; etc, it can be useful to perform busy detection either in an effort to
; detect hangup or for detecting busies. This enables listening for
; the beep-beep busy pattern.
;
;busydetect=yes

and at:

; For FXS (FXO signalled) ports
; switch the line polarity to signal the connected PBX that the current
; call was “hung up” by the remote party
; For FXO (FXS signalled) ports
; In some countries, a polarity reversal is used to signal the disconnect of a
; phone line. If the hanguponpolarityswitch option is selected, the call will
; be considered “hung up” on a polarity reversal.
;
;hanguponpolarityswitch=yes

I thought there was an option to use a temporary open circuit, as well, but I can’t find it.