TDM Card Setup - Query on # for Quick dial Out

I recently added an TDM card to a PiaF 1.3 box. Before, when I had SIP Linksys ATA extensions, I could press # after a number to make it dial instantly. So, I could have 3 digit extensions and I could dial e.g 201# and the number would be dialled instantly, the same doesn’t work with ZAP extensions, where can I specify the dialplan for these?.

Well, it got a bit more confusing. On my POTS Line connected to the FXO port of theTDM card, # actually works, I can call my home POTS line, get pointed to a DISA, and then dial any number, 3 digit extensions followed by hash, full numbers followed by hash, and the numbers get dialled instantly. On the ZAP extensions when I’m home though, when I dial any number followed by hash, it seems # is not recognised as a special character to dialout without waiting for timeout, but is actually dialled as part of the number, 2 examples:

902 is a special code the VSP VoipTalk has, it plays back a message stating whether the IP Phone trunk has registered properly or not - it is not a local extension on my system. The dialplan send this number out the the VoipTalk trunk

– Executing [[email protected]:11] MacroExit(“Zap/4-1”, “”) in new stack
– Executing [[email protected]:12] ExecIf(“Zap/4-1”, “1|AGI|fixlocalprefix”) in new stack
– Launched AGI Script /var/lib/asterisk/agi-bin/fixlocalprefix

fixlocalprefix: Using pattern 01224+XXXXXX
fixlocalprefix: Using pattern 0[128]XXXXXXXXX
fixlocalprefix: Using pattern XX.
== fixlocalprefix: Dialpattern XX. matched. 902# -> 902#
– AGI Script fixlocalprefix completed, returning 0
– Executing [[email protected]:13] Set(“Zap/4-1”, “OUTNUM=902#”) in new stack
– Executing [[email protected]:14] Set(“Zap/4-1”, “custom=SIP/VoipTalk”) in new stack
– Executing [[email protected]:15] ExecIf(“Zap/4-1”, “0|Set|DIAL_TRUNK_OPTIONS=M(setmusic^)tT”) in new stack
– Executing [[email protected]:16] Macro(“Zap/4-1”, “dialout-trunk-predial-hook|”) in new stack
– Executing [[email protected]:1] MacroExit(“Zap/4-1”, “”) in new stack
– Executing [[email protected]:17] GotoIf(“Zap/4-1”, “0?bypass|1”) in new stack
– Executing [[email protected]:18] GotoIf(“Zap/4-1”, “0?customtrunk”) in new stack
– Executing [[email protected]:19] Dial(“Zap/4-1”, “SIP/VoipTalk/902#|300|tT”) in new stack
– Called VoipTalk/902#
– SIP/VoipTalk-0a27b4b0 is circuit-busy


502 is a local extension on the PiaF box.

Executing [502#@from-internal:1] ResetCDR(“Zap/4-1”, “”) in new stack
– Executing [502#@from-internal:2] NoCDR(“Zap/4-1”, “”) in new stack
– Executing [502#@from-internal:3] Wait(“Zap/4-1”, “1”) in new stack
– Executing [502#@from-internal:4] Playback(“Zap/4-1”, “silence/1&cannot-complete-as-dialed&check-number-dial-again|noanswer”) in new stack

Again, it seems the system is trying to dial 502#, instead of just 502

Any ideas?

hello, anyone, I’ve googled n googled, no one else seems to have reported this problem!!! :frowning:

on a sip phone the # is normally used to tell the phone to send the string now, assuming you have a generic dial plan in the phone that allows any number string to be a valid number. A Sip phone will not send a dial pattern until it either matches a valid pattern, times out, or is forced with a #.

Now with analog phones attached directly everything you dial is sent to the server right the second you press the keys and the server acts on it when it matches a pattern in the servers dial plan. So don’t press the # as it will treat it as a part of the dial string.

If your dial plans are setup correctly when it see’s a 3 digit dialing starting with a 9 it should just do it. You don’t have a requirement to dial a 9 to get a outside line do you? If so then you have a logic issue. does 902 match the extension pattern for 902 or does it match the pattern 90[128]XXXXXXXXX In which case it will wait for the dialing timeout to occur before attempting to match it.

If that is the case I’d highly recommend changing one or the other. That’s either require a different digit to get a outside line that is not used for anything internal or stop using 9 series internal extensions.

Thanks for the detailed reply fsk. As far as I understand the outbound route patterns match numbers to be dialled out through trunks. Internal extensions don’t follow the OB route. I have set up lots of quick dial codes like these:

exten => 5441,1,Swift(Home - Father)
exten => 5441,2,Dial(Local/[email protected],120,r) ; Home Father
exten => 5441,3,Hangup

At the moment, once 5441 is dialled, I have to wait 3 seconds before the number is actually dialled, shouldn’t the # be able to make the numbers dial instantly?.


hum… We have 43 SIP phones and 2 analog Polycom conference room phones on a tdm400. when using them and dialing internal or external we’ve never had a pause issue. I’d know as I have a CEO who is impatient and I’d have heard complaints if she had to wait 3 seconds for anything to connect (meetme rooms for example). So we’ve never had the issue.

But we also have all internal numbers as 3 digits period, including shortcuts like what you have done. So maybe the issue is tied to that in some way?

Still, irrespective of dialplans etc, # should cause an instant dial-out, I don’t seem to have that avaialble for ZAP externsions, is there a conf file where this needs enabling?.

It looks like something is misconfigured in either your Trunks --> Dial Rules or Outbound Routes --> Dial Pattterns.
I’d cast a critical eye over the speed dial too, just to be sure.

== fixlocalprefix: Dialpattern XX. matched. 902# -> 902#

It looks less like the # is being passed on, but rather that you have set to be added somewhere in the system.
That’s why both internal and external calls are getting the # added on.

Once you’ve found and removed that extra #, you’ll find the system will work just as you expect it to.


In the examples I posted, I had actually dialled the numbers WITH the #, with things working as they should, the # should’ve been taken as a signal to dial out instantly, the trunk should’ve sent out 902 to the service provider. Similarly, dialling 502# (502 being a local extensions), Asterisk should dial 502, taking # to be a signal to the number instantly, without waiting for the timeout, however, yet again, the system tries to dial 502# (502#@from-internal:…) and then fails.


Is there any reason that you believe the # should not be accepted as a dialable digit? My understanding is that the use of # as an instant dial shortcut is a hack to get around limitations of some VoIP hardware, but ZAP hardware works like a traditional analog phone, what you dial is what it sends.

The point I was trying to make, albeit rather poorly, is that in normal usage when # is used to send digit timeout to the PABX, it doesn’t appear in the logs as the system strips it off the dialled number.
So, in your example, what you should see in the logs when you dial 502# is simply 502

The fact that the # is present in your log, leads me to suspect that either:

a) The system is ignoring it’s own default programming, or
b) an extra # is being introduced somewhere.

Assuming it’s not a) then the logical places to look are Trunks and Speed Dials.

You’re right magpye, the # shouldn’t be dialled by * as part of the number, yet that is exactly what is happening.

Checked trunks, outbound routes, speed dials, there is NO +# anywhere. The very same setup used to work fine when I had Linksys SPA extensions. When I got the TDM clone, I re-installed PiaF 1.3 on the machine, and configured everythign by hand exactly as it was before.

– Executing [[email protected]:19] Dial(“Zap/4-1”, “SIP/VoipTalk/902#|300|tT”) in new stack

Looks like your Asterisk Dial command options/Outbound Route (in General Settings) set to tT, which might explain why the system is handing the # on
If so, try changing them to tr and see if that improves the situation.

I’ll try that when I get home in the evening, however, # STILL works on the one SPA1001 SIP extension I’ve got left connected to the system. Alos, if I call the PSTN line conntected to the FXO port of the TDM card and access DISA, # still works to immediatelt dial out the numbers I press!!!.

Just checked the two settings:

They are:

Asterisk Dial Command: TtrwW
Asterisk Outbound Dial command options: tTWw

So, “r” is present in the dial command, and the pop-up hints on the General Settings tell you NOT to use r on Outbound Trunk!!!

My apologies, I meant to specify tr for only Asterisk Dial command options, not the Outbound Dial.
I usually leave Outbound Dial blank, but if you have a real need for caller and callee to initiate recordings, just use Ww

Oh well, in that case, the r already exists, and can’t be the cause of the problem :frowning:

I think having the T in either field is the problem, not the r

Wouldn’t that prevent me (when calling or receving a call at home on any extension) from transferring calls??

Nope, removing T didn’t fix things either. :frowning:

Hmm…time to look elsewhere then.
Tell us how you’ve got your extensions set up, are they on FXS ports, are they SIP phones, or is this an ATA ?
Have you tried dialling with a soft phone and what was the results ?

I’m also confused why if 502 is a local extension, the system has put it to a TDM port.
I’ve got a very similar setup to yours (PiaF, TDM,ATA’s), and I can’t recreate your fault even if I try.
In fact, the more I re-read your comments, the fact that both the SIP phone and the DISA work with # indicates that the issue may not be with FreePBX.

Look at your analogue extension setup with renewed suspicion.