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))