Fix. Use api show channels like did not work on fusion with BDR.
This commit is contained in:
@@ -38,7 +38,7 @@ local log = require "resources.functions.log".ring_group
|
|||||||
require "resources.functions.explode";
|
require "resources.functions.explode";
|
||||||
require "resources.functions.base64";
|
require "resources.functions.base64";
|
||||||
require "resources.functions.file_exists";
|
require "resources.functions.file_exists";
|
||||||
require "resources.functions.explode";
|
require "resources.functions.channel_utils"
|
||||||
|
|
||||||
--get the variables
|
--get the variables
|
||||||
domain_name = session:getVariable("domain_name");
|
domain_name = session:getVariable("domain_name");
|
||||||
@@ -439,34 +439,10 @@ local log = require "resources.functions.log".ring_group
|
|||||||
extension_uuid = trim(api:executeString(cmd));
|
extension_uuid = trim(api:executeString(cmd));
|
||||||
--send to user
|
--send to user
|
||||||
local dial_string_to_user = "[sip_invite_domain="..domain_name..","..group_confirm.."leg_timeout="..destination_timeout..","..delay_name.."="..destination_delay..",dialed_extension=" .. row.destination_number .. ",extension_uuid="..extension_uuid .. row.record_session .. "]user/" .. row.destination_number .. "@" .. domain_name;
|
local dial_string_to_user = "[sip_invite_domain="..domain_name..","..group_confirm.."leg_timeout="..destination_timeout..","..delay_name.."="..destination_delay..",dialed_extension=" .. row.destination_number .. ",extension_uuid="..extension_uuid .. row.record_session .. "]user/" .. row.destination_number .. "@" .. domain_name;
|
||||||
if (ring_group_skip_active ~= nil) then
|
if (ring_group_skip_active == "true") then
|
||||||
if (ring_group_skip_active == "true") then
|
local channels = channels_by_number(destination_number, domain_name)
|
||||||
cmd = "show channels like "..destination_number;
|
if (not channels) or #channels == 0 then
|
||||||
reply = trim(api:executeString(cmd));
|
dial_string = dial_string_to_user
|
||||||
--freeswitch.consoleLog("notice", "[ring group] reply "..cmd.." " .. reply .. "\n");
|
|
||||||
exploded_reply = {};
|
|
||||||
exploded_reply = explode(",",reply);
|
|
||||||
|
|
||||||
if (reply == "0 total.") then
|
|
||||||
dial_string = dial_string_to_user
|
|
||||||
else
|
|
||||||
idle_extension=true;
|
|
||||||
|
|
||||||
if (exploded_reply ~= nil) then
|
|
||||||
for i,v in ipairs(exploded_reply) do
|
|
||||||
if(v==destination_number.."@"..domain_name) then
|
|
||||||
idle_extension=false;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if(idle_extension) then
|
|
||||||
dial_string = dial_string_to_user;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else
|
|
||||||
--look inside the reply to check for the correct domain_name
|
|
||||||
dial_string = dial_string_to_user;
|
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
dial_string = dial_string_to_user;
|
dial_string = dial_string_to_user;
|
||||||
|
|||||||
@@ -1,3 +1,29 @@
|
|||||||
|
require 'resources.config'
|
||||||
|
require 'resources.functions.trim'
|
||||||
|
require 'resources.functions.file_exists'
|
||||||
|
require 'resources.functions.database_handle'
|
||||||
|
|
||||||
|
local function create_dbh(name)
|
||||||
|
local dbh = assert(name)
|
||||||
|
if type(name) == 'string' then
|
||||||
|
if name == 'switch' and file_exists(database_dir.."/core.db") then
|
||||||
|
dbh = freeswitch.Dbh("sqlite://"..database_dir.."/core.db")
|
||||||
|
else
|
||||||
|
dbh = database_handle(name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
assert(dbh:connected())
|
||||||
|
return dbh
|
||||||
|
end
|
||||||
|
|
||||||
|
local function dbh_fetch_all(dbh, sql)
|
||||||
|
local result = {}
|
||||||
|
local ok, err = dbh:query(sql, function(row)
|
||||||
|
result[#result + 1] = row
|
||||||
|
end)
|
||||||
|
if not ok then return nil, err end
|
||||||
|
return result
|
||||||
|
end
|
||||||
|
|
||||||
local api = api or freeswitch.API()
|
local api = api or freeswitch.API()
|
||||||
|
|
||||||
@@ -18,3 +44,34 @@ function channel_evalute(uuid, cmd)
|
|||||||
|
|
||||||
return result
|
return result
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function switchname()
|
||||||
|
local result = api:executeString("switchname")
|
||||||
|
|
||||||
|
if result:sub(1, 4) == '-ERR' then return nil, result end
|
||||||
|
if result == '_undef_' then return false end
|
||||||
|
|
||||||
|
return result
|
||||||
|
end
|
||||||
|
|
||||||
|
function channels_by_number(number, domain)
|
||||||
|
local hostname = assert(switchname())
|
||||||
|
local dbh = create_dbh('switch')
|
||||||
|
|
||||||
|
local full_number = number .. '@' .. (domain or '%')
|
||||||
|
|
||||||
|
local sql = ([[select * from channels where hostname='%s' and (
|
||||||
|
(context = '%s' and (cid_name = '%s' or cid_num = '%s'))
|
||||||
|
or name like '%s' or presence_id like '%s' or presence_data like '%s'
|
||||||
|
)
|
||||||
|
order by created_epoch
|
||||||
|
]]):format(hostname,
|
||||||
|
domain, number, number,
|
||||||
|
full_number, full_number, full_number
|
||||||
|
)
|
||||||
|
|
||||||
|
local rows = assert(dbh_fetch_all(dbh, sql))
|
||||||
|
|
||||||
|
dbh:release()
|
||||||
|
return rows
|
||||||
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user