Incorrect dialstatus detection

Hi all,
i’m working on Asterisk 1.2.22 using a TDM400P card with an fxo module.
I need to know if a call from an extension to a number, via zap channel, has been answered or not, or if the number is busy.
My dialplan is pretty simple:
exten => _X.,1,Dial(ZAP/4/${EXTEN}|20)
exten => _X.,n,NoOp(Dial Status: ${DIALSTATUS})
Moreover i added in zapata.conf:
busydetect=yes
busycount=4
callprogress=yes

This is what it happens:
when i call a cellphone, the call is interrupted after 20 seconds with the CLI showing a “nobody pickedup in 20000ms”. DIALSTATUS is NOANSWER of course (by the way, the call was answered by the cellphone). The same happens when i call a pstn number of a region (i’m in italy). But when i call a number of another region it works correctly.
Is there an explanation? And especially, is there a solution to it?
Moreover, is there a way to make the Asterisk Manager show an event with the result of the call?

P.S. I apologize for the double post, i had a connection problem.

Could it be a hardware problem?
Is it reliable the tdm400p?