There seems to have been a change in FreePBX 2.5, which is a step backwards in usefulness, IMHO, related to DISA.
One thing I am very vigilant about with any phone system install, is the use of appropriate, non-ambiguous dial plans (for Asterisk, Zap channels, and SIP phones).
When someone dials a three-digit internal extension, I want their system to dial *immediately*, not waiting a few seconds until they finish dialing. Same with outgoing calls. I make sure there is no ambiguity in the dial plan, so they never need to wait for a timeout or press # after their dialing. Explaining to a customer that they have to wait for a timeout, or modify their dialing behaviour, isn't acceptable, IMHO.
Customers (and myself) greatly appreciate a tight, unambiguous dialplan in daily usage. It makes a system feel more responsive and professional all around. I like to do a professional job for customers.
In FreePBX 2.4, the [disa] contexts all called the DISA() app with the from-internal context; from-internal has all of the non-ambiguous dial plan goodness, so when you dial in from outside, enter an extension or an outside number, things would dial immediately. Again, very responsive, no timeouts, no need for #.
In FreePBX 2.5, the [disa] contexts instead call DISA() with a new [disa-dial] context, which includes a horrible "_." pattern in it; this 100% guarantees needing to wait for a digit timeout.
When I upgraded them to 2.5 my customers (and myself, at first!) though all the DISAs were broken, not realizing that if we waited for 10 seconds or pressed #, it would complete the call. ("_." are dial-plan sins in my book, although I do use something like them for international dialing, which can be so varied in length, it's justified.)
I realize I can crank down the timeout, but I don't see this as a solution; you still have to wait, and if you end up pausing to check/read the number you're dialing, things time out. Things were done in the right manner in 2.4, and now they're worse...
I tried adding a [dial-disa-custom] context that includes my from-internal context, but as long as that "_." pattern is in [dial-disa], things still end up waiting for the digit tiemout, which is unacceptable...
Any other elegant suggestions for getting the old, immediately-dial-upon-dialplan-match behaviour back? I guess I'll hack the FreePBX source for now, but I always prefer avoiding that where possible (so my patch doesn't get clobbered on the next module update).
I realize the [disa-dial] adds utility, in going back to the dialtone after a failed DISA dial attempt; but it's too great a cost, in ruining the immediacy of a good dial plan's dialing...
Another thing broken in FreePBX's 2.5 DISA: the optional "Caller ID" field seems to be ignored. It used to be possible to have a user dial in through a DISA, and appear to be a specific internal extension; this is quite useful, having the appearance of coming from that user's extension (for purposes of callbacks, voicemail, etc.) This config field now seems to be ignored.
(Also, in 2.5, inboud CID-only routes seem to have broken; where an empty DID field used to be "s", which worked, they are now replaced with "_." [my nemesis, again!], which loses out to the catch-all inbound route. An easy fix for this is to put an "s" in the DID field for any CID-only route, to get the old, working behaviour back. This is with Asterisk 1.4.19.)
(I should add that I absolutely *love* FreePBX, and it makes working with Asterisk so incredibly convenient. I appreciate all the work that the team has done on the project. My comments are mainly intended to continue the incremental improvements with this awesome package!)