We are faced with an issue related to dial timeout when forwarding calls to extensions outside of Asterisk, in particular cellphones.
On forwarding calls, we have put a timeout on the dial string. We do this because we want the caller to be returned to the operator if there is no answer on the extension which he was transferred to. This is typically set to 20 seconds, because 20 seconds is a standard time with local telcos before voicemail kicks in.
We have, however, noticed that this often leads to issues when transferring calls to cellphones. The reason is that locating a cellphone in the network does not always take the same amount of time. E.g. it can take anywhere from 2-3 seconds to 15 seconds before the cellphone actually starts to ring. The Dial timeout, however, does not take this into account: If set to 20 seconds, it will proceed in the dialplan after those 20 seconds, starting from the time the Dial command was triggered, no matter how long it took before the cellphone actually started ringing. In a lot of cases, hence the cellphone user oftentimes will not experience more than 1-2 rings before the call is lost.
Increasing the 20 second value, on the other hand, will of course lead to some calls being sent to voicemail instead of being returned to the operator.
What hit me, though, is that Asterisk can easily determine if the remote extension (the cellphone, in this example) is actually ringing, because this information is being passed on to Asterisk. E.g. the following info is being passed to the console when I dial a cellphone number:
[2014-12-17 09:23:08] – Called SIP/cellphone@trunk
[2014-12-17 09:23:20] – SIP/trunk-000199ba is making progress passing it to SIP/100-000199b9
The key here is the making progress statement - when that statement appears, the cellphone has started ringing.
So my question: Is there a way for me to set the dial timeout to start counting from when the call is “making progress”, instead of from when the command was initially triggered? Or of course, alternate approaches will do as well.
For your reference, the dial command: Dial(SIP/ext@trunk,20);
Thanks for your input!