diff --git a/app/dialplan/resources/switch/conf/dialplan/250_conf-xfer.xml b/app/dialplan/resources/switch/conf/dialplan/250_conf-xfer.xml new file mode 100644 index 0000000000..46aefb1243 --- /dev/null +++ b/app/dialplan/resources/switch/conf/dialplan/250_conf-xfer.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/dialplan/resources/switch/conf/dialplan/890_local_extension.xml b/app/dialplan/resources/switch/conf/dialplan/890_local_extension.xml index 45052ad2e8..b9623c8d7a 100644 --- a/app/dialplan/resources/switch/conf/dialplan/890_local_extension.xml +++ b/app/dialplan/resources/switch/conf/dialplan/890_local_extension.xml @@ -13,10 +13,12 @@ + + diff --git a/resources/install/scripts/app/ring_groups/index.lua b/resources/install/scripts/app/ring_groups/index.lua index c2366e41b1..86f06c43a0 100644 --- a/resources/install/scripts/app/ring_groups/index.lua +++ b/resources/install/scripts/app/ring_groups/index.lua @@ -424,7 +424,7 @@ local log = require "resources.functions.log".ring_group extension_uuid = trim(api:executeString(cmd)); --send to user local dial_string_to_user = "[sip_invite_domain="..domain_name..",call_direction="..call_direction..","..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; - dial_string = dial_string_to_user; + dial_string = dial_string_to_user; elseif (tonumber(destination_number) == nil) then --sip uri dial_string = "[sip_invite_domain="..domain_name..",call_direction="..call_direction..","..group_confirm.."leg_timeout="..destination_timeout..","..delay_name.."="..destination_delay.."]" .. row.destination_number; @@ -525,6 +525,11 @@ local log = require "resources.functions.log".ring_group session:execute("set", "hangup_after_bridge=true"); session:execute("set", "continue_on_fail=true"); + -- support conf-xfer feature + -- do + -- local uuid = api:executeString("create_uuid") + -- session:execute("export", "conf_xfer_number=xfer-" .. uuid .. "-" .. domain_name) + -- end --set bind digit action local bind_target = 'peer' if session:getVariable("sip_authorized") == "true" then @@ -535,6 +540,7 @@ local log = require "resources.functions.log".ring_group "local,*2,exec:record_session," .. record_file, "local,*3,exec:execute_extension,cf XML " .. context, "local,*4,exec:execute_extension,att_xfer XML " .. context, + -- "local,*0,exec:execute_extension,conf_xfer_from_dialplan XML conf-xfer@" .. context } for _, str in ipairs(bindings) do session:execute("bind_digit_action", str .. "," .. bind_target) diff --git a/resources/install/scripts/resources/functions/channel_utils.lua b/resources/install/scripts/resources/functions/channel_utils.lua index 3676f87d7d..c60d5a74cf 100644 --- a/resources/install/scripts/resources/functions/channel_utils.lua +++ b/resources/install/scripts/resources/functions/channel_utils.lua @@ -23,6 +23,20 @@ function channel_evalute(uuid, cmd) return result end +function channel_transfer(uuid, ext, typ, ctx) + local cmd = ("uuid_transfer %s %s %s %s"):format(uuid, ext, typ, ctx) + local result = trim(api:executeString(cmd)) + if result:sub(1, 4) == '-ERR' then return nil, result end + if result == '_undef_' then return false end + return result +end + +function channel_kill(uuid, cause) + cause = cause or 'CALL_REJECTED' + local res = trim(api:executeString("uuid_kill " .. uuid .. " " .. cause)) + return res == '+OK' +end + function channel_display(uuid, text) local cmd = ("uuid_display %s '%s'"):format(uuid, text) local result = trim(api:executeString(cmd))