Calculate timeout for Follow-me (#4528)
* Calculate timeout for Follow-me Need to calculate the timeout for Enterprise RG members that have extensions with follow-me. The RG timeout should always take precedence over a follow-me timeout value. What we do is take the delay of the follow-me destination and subtract that from the ring group timeout to give us the total timeout of the destination. Example: RG 1: x1000 (Delay=0, Timeout=10) RG 2: x2000 (Delay=10, Timeout=10) x2000 has follow-me enabled FM 1: x2000 (Delay=0, Timeout=15) FM 2: x3000 (Delay=5, Timeout=20) In this example we would want x2000 ring for 10 seconds and x3000 to ring for 5 seconds. What if we changed this... FM 2: x3000 (Delay 15, Timeout=20) In this example we wouldn't want x3000 to ring at all because it would start to ring after the RG timeout has expired. Our calculated value would be a negative value, -5. These negative values don't work as leg_timeouts in the dialstring, so we need to test for them. * Update index.lua * Update index.lua
This commit is contained in:
parent
a4661f196a
commit
f174a9f5af
|
|
@ -547,6 +547,15 @@
|
||||||
new_key = #destinations + 1;
|
new_key = #destinations + 1;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--Calculate the destination_timeout for follow-me destinations.
|
||||||
|
--The call should honor ring group timeouts with rg delays, follow-me timeouts and follow-me delays factored in.
|
||||||
|
--Destinations with a timeout of 0 or negative numbers should be ignored.
|
||||||
|
if (tonumber(field.destination_timeout) < (tonumber(row.destination_timeout) - tonumber(field.destination_delay))) then
|
||||||
|
new_destination_timeout = field.destination_timeout;
|
||||||
|
else
|
||||||
|
new_destination_timeout = row.destination_timeout - field.destination_delay;
|
||||||
|
end
|
||||||
|
|
||||||
--add to the destinations array
|
--add to the destinations array
|
||||||
destinations[new_key] = {}
|
destinations[new_key] = {}
|
||||||
destinations[new_key]['ring_group_strategy'] = row.ring_group_strategy;
|
destinations[new_key]['ring_group_strategy'] = row.ring_group_strategy;
|
||||||
|
|
@ -561,7 +570,7 @@
|
||||||
destinations[new_key]['domain_name'] = field.domain_name;
|
destinations[new_key]['domain_name'] = field.domain_name;
|
||||||
destinations[new_key]['destination_number'] = field.destination_number;
|
destinations[new_key]['destination_number'] = field.destination_number;
|
||||||
destinations[new_key]['destination_delay'] = field.destination_delay + row.destination_delay;
|
destinations[new_key]['destination_delay'] = field.destination_delay + row.destination_delay;
|
||||||
destinations[new_key]['destination_timeout'] = field.destination_timeout;
|
destinations[new_key]['destination_timeout'] = new_destination_timeout;
|
||||||
destinations[new_key]['destination_prompt'] = field.destination_prompt;
|
destinations[new_key]['destination_prompt'] = field.destination_prompt;
|
||||||
destinations[new_key]['group_confirm_key'] = row.group_confirm_key;
|
destinations[new_key]['group_confirm_key'] = row.group_confirm_key;
|
||||||
destinations[new_key]['group_confirm_file'] = row.group_confirm_file;
|
destinations[new_key]['group_confirm_file'] = row.group_confirm_file;
|
||||||
|
|
@ -613,6 +622,7 @@
|
||||||
--process the destinations
|
--process the destinations
|
||||||
x = 1;
|
x = 1;
|
||||||
for key, row in pairs(destinations) do
|
for key, row in pairs(destinations) do
|
||||||
|
if (tonumber(row.destination_timeout) > 0) then
|
||||||
--set the values from the database as variables
|
--set the values from the database as variables
|
||||||
ring_group_strategy = row.ring_group_strategy;
|
ring_group_strategy = row.ring_group_strategy;
|
||||||
ring_group_timeout_app = row.ring_group_timeout_app;
|
ring_group_timeout_app = row.ring_group_timeout_app;
|
||||||
|
|
@ -818,6 +828,7 @@
|
||||||
--increment the value of x
|
--increment the value of x
|
||||||
x = x + 1;
|
x = x + 1;
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
--session execute
|
--session execute
|
||||||
if (session:ready()) then
|
if (session:ready()) then
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue