Transfers to fixed-length extensions without timeouts possible?

Hi all again…

The system is FreePBX 15 with Asterisk 16.
When i’m in a call, and i have initiated either an attended transfer
or a blind transfer (by ** or ## repectivly), i have to enter
the destination number within about 3 seconds.
When i’m too slow, i hear the message:
“I am sorry, but that’s not a valid Extension, please try again”.

When i’m fast enough, after i entered the number, i have to
wait for about 3 seconds until the transfer is started, or hit
the # key to instantly start the transfer.

i’d really like to change that behaviour.

All my extensions and ringgroups are 2-digit, from 20 to 68.

So maybe it is possible to take advantage from that and:

1)	Disable the timeout. Wait until both digits are
	entered, so that the user is given more time to enter the
	correct extension number

2)	Initiate the transfer as soon as both digits are entered.
	This eliminates the need to press # or to wait for the
	expiration of the additional 3 seconds timeout waiting time,
	which is normally added by the timeout functionality.

Is that possible? how can it be done?


1 Like

I would have hoped that Asterisk stopped looking as soon as the maximum number of digits was reached, but I always did transfers as SIP transfers, where the phone decided, so I’m not sure for features.

Also answered at Comfortable transfers to fixed-length extensions without timeouts - Asterisk Support - Asterisk Community

In the Asterisk forum i was told that asterisk already has the wanted functionality:
If it’s not possible for any further extension to match, the transfer is startet immediately.

The reason why i still have the 3 seconds delay after entering both extension digits may be that in my FreePBX configuration it is possible to in-call transfer to external numbers, which are of course longer than 2 digits.

So the new questiuon is:
In FreePBX, how can i disable in-call transfers to external numbers?

Asterisk also has to recognize that the longest destination number is 2-digits long…

I’ve never done it before, but I think to get this to work you would have to create your own transfer context with acceptable dial patterns explicitly defined and no includes. The Asterisk global var, TRANSFER_CONTEXT controls what context is used for transfers, you can redefine it in “/etc/asterisk/globals_custom.conf”

Edit: here’s a starting point. I can’t comment of whether this is wise or not, there may be unforeseen consequences to overriding FreePBX dialplan.

in globals_custom.conf:


in extensions_custom.conf:

include => ext-local

Why are you using DTMF-based transfers at all? What IP phone or other device is doing the transfer?

For frequently performed transfers (from a receptionist’s phone, or transferring to an assistant or supervisor), set up BLF keys. One touch completes the transfer instantly, and you can also see whether the destination is in use before initiating it.

For other uses, press the Transfer key then dial the extension. The phone can likely be programmed to dial immediately after the second digit. If you set up your system to dial external with the initial 0 (you always need to dial the area code), then there will be no conflict with external numbers. If you want the ability to dial local external numbers without the area code, you can press # after the extension number to avoid the delay. This is a total of 4 keypresses, e.g. TRAN 2 3 #.

thank you both.

stewart, we use many cordless DECT phones which don’t have BLF keys, and i assume they
cannot be configured to transfer after the second digit.

lorne, thank you for your suggestions. i will start working on it.
i’m not very good at asterisk concepts so far…

If these phones have an analog interface (connected to FreePBX through an ATA or an FXS card), you should be able to transfer the call by pressing the flash key, then dialing e.g. 23#

If you have IP DECT phones, please post make/model.

We only have IP phones. The DECT phones are Gigaset S650H Pro and S700H Pro (Firmware is about the same), and the Base station is a Gigaset N670 IP Pro.

We have many different types of phones, DECT phones, wall phones without any special keys, office phones with lots of BLFs, and everything inbetween.
Our people also often wander around and use any near phone. That’s the reason why i prefer a consistent user interface, e.g. transferring should work the same way on every phone, therefore we use ** for attended transfers and ## for blind transfers. this works the same on any phone. It’s just the
timeout that’s annoying…

Is it too complicated to have HR explain to your ‘impatient’ users also dial # at the end?

Hi Lorne,
thank you for putting me on the right track, i got it working.

i followed your suggestion and put my own xfer context in extensions.custom.conf and enabled it like you said in globals_custom.conf.
As a source for the new context, i used the original context found in
which was:

; Place to put most internal dialplan, will be visible during normal calls and blind transfers.
include => from-internal-custom
include => from-internal-additional ; auto-generated
exten => h,1,Macro(hangupcall)

Since the new context would act exactly as the original, i changed the new context a bit:
The line
include => from-internal-additional ; auto-generated
includes a context which includes many more contexts,
including the one which activates the outbound routes for in-call transfers.
This include must be disabled, so i commented out that line.
In it’s place i included the contents of the context. but commented out this line:
;include => outbound-allroutes

Source: the context [from-internal-additional] is part of the file

now the new context looks like this:

include => from-internal-custom
;include => from-internal-additional ; auto-generated, jede Menge

include => from-internal-additional-custom
include => app-callwaiting-cwoff
include => app-callwaiting-cwon
include => ext-meetme
include => app-daynight-toggle
include => ext-findmefollow
include => fmgrps
include => app-calltrace
include => app-echo-test
include => app-speakingclock
include => app-miscapps
include => park-hints
include => app-parking
include => app-pbdirectory
include => ext-queues
include => app-recordings
include => ext-group
include => grps
include => app-speeddial
include => timeconditions-toggles
include => vmblast-grp
include => app-dialvm
include => app-vmmain
include => app-blacklist
include => ext-local-confirm
include => findmefollow-ringallv2
include => app-chanspy
include => ext-local
;include => outbound-allroutes
include => restapps-device-hints
exten => h,1,Hangup

exten => h,1,Macro(hangupcall)

thats all, it works with both, attended und blind transfers without timeouts!

Thanks again!

1 Like

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.