Answer status problem

Dear Friends,
I use .call files to send outgoing calls. but I have problem with answer status. it can’t recognize when callee answered therefore they couldn’t hear the message from beggining. I read the forums and learned using these may help:
chan_dahdi:
callprogress=no
polarityonanswerdelay=300
hanguponpolarityswitch=yes
answeronpolarityswitch=yes

sip_custom.conf:
qualify=yes
progressinband=yes
prematuremedia=no

it helped the answered status is right now but it totaly mute. nothing played even when I call by my sip phone it is mute. when disale it every thing is fine except answer status. strange is when it is enable there is no log in asterisk logging. not trace of calls. can you help me or any comments?

Ask your PSTN provider to provide polarity reversal answer supervision. They may well not offer that service, or only offer it on expensive business lines.

Or use a technology (ISDN, SIP etc.), where answer supervision is normal.

Thanks for you considration,
then I developed a dialplan to detect the DIALSTATUS as:
exten => _09!,1,Answer()
same => n,Dial(DAHDI/g0/${EXTEN}@from-internal)
same => n,NoOp(${DIALSTATUS})
same => n,ExecIf($[’${DIALSTATUS}’=‘CHANUNAVAIL’]?NoOp(Channel unavailable. On SIP, peer may not be registered.))
same => n,ExecIf($[’${DIALSTATUS}’=‘BUSY’]?noop(Busy signal. The dial command reached its number but the number is busy.))
same => n,ExecIf($[’${DIALSTATUS}’=‘ANSWER’]?noop(Call is answered.A successful dial. The caller reached the callee.))
same => n,ExecIf($[’${DIALSTATUS}’=‘NOANSWER’]?noop(No answer. The dial command reached its number, the number rang for too long, then the dial timed out.))
same => n,ExecIf($[’${DIALSTATUS}’=‘CANCEL’]?noop(Call is cancelled. The dial command reached its number but the caller hung up before the callee picked up.))
same => n,ExecIf($[’${DIALSTATUS}’=‘CONGESTION’]?noop(Congestion. This status is usually a sign that the dialled number is not recognised.))
same => n,ExecIf($[’${DIALSTATUS}’=‘DONTCALL’]?noop(Privacy mode, callee rejected the call))
same => n,ExecIf($[’${DIALSTATUS}’=‘TORTURE’]?noop(Privacy mode,callee chose to send caller to torture menu))
same => n,ExecIf($[’${DIALSTATUS}’=‘INVALIDARGS’]?noop(Error parsing Dial command arguments))
same => n,Hangup()

and nothing came up, It reports :-- DAHDI/1-1 answered SIP/505-00000135 excatly the time callee starts to ringing.
I studied and thought maybe I can use BackgroundDetect. it starts by music and when ever detect callee is voice start to play the main file I want to! can you help?