From 00526b43346685bfb33f7f2428e0fbca7b7ecaf4 Mon Sep 17 00:00:00 2001 From: agree Date: Tue, 27 Apr 2021 11:55:19 -0400 Subject: [PATCH 1/2] Add presence support for ring groups --- .../resources/scripts/app/ring_groups/index.lua | 4 ++++ .../scripts/resources/functions/send_presence.lua | 12 ++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 app/scripts/resources/scripts/resources/functions/send_presence.lua diff --git a/app/scripts/resources/scripts/app/ring_groups/index.lua b/app/scripts/resources/scripts/app/ring_groups/index.lua index 61d72800cb..858c584cb6 100644 --- a/app/scripts/resources/scripts/app/ring_groups/index.lua +++ b/app/scripts/resources/scripts/app/ring_groups/index.lua @@ -47,6 +47,7 @@ require "resources.functions.file_exists"; require "resources.functions.channel_utils" require "resources.functions.format_ringback" + require "resources.functions.send_presence"; --- include libs local route_to_bridge = require "resources.functions.route_to_bridge" @@ -978,6 +979,9 @@ freeswitch.consoleLog("NOTICE", "[ring group] app_data: "..app_data.."\n"); -- log.noticef("bridge begin: originate_disposition:%s answered:%s ready:%s bridged:%s", session:getVariable("originate_disposition"), session:answered() and "true" or "false", session:ready() and "true" or "false", session:bridged() and "true" or "false") if (ring_group_strategy ~= "rollover") then + if (session:getVariable("ring_group_send_presence") == "true") then + send_presence(uuid, ring_group_extension.."@"..domain_name, "early"); + end session:execute("bridge", app_data); end -- log.noticef("bridge done: originate_disposition:%s answered:%s ready:%s bridged:%s", session:getVariable("originate_disposition"), session:answered() and "true" or "false", session:ready() and "true" or "false", session:bridged() and "true" or "false") diff --git a/app/scripts/resources/scripts/resources/functions/send_presence.lua b/app/scripts/resources/scripts/resources/functions/send_presence.lua new file mode 100644 index 0000000000..a5a8859ea0 --- /dev/null +++ b/app/scripts/resources/scripts/resources/functions/send_presence.lua @@ -0,0 +1,12 @@ +function send_presence(uuid, from, state, direction) + local event = freeswitch.Event('PRESENCE_IN'); + event:addHeader('Unique-ID', uuid); + event:addHeader('proto', "any"); + event:addHeader('from', from); + event:addHeader('login', from); + event:addHeader('event_type', "presence"); + event:addHeader('alt_event_type', "dialog"); + event:addHeader('Presence-Call-Direction', direction or 'outbound'); + event:addHeader('answer-state', state); + event:fire(); +end \ No newline at end of file From 17d35e650159888246e7cef68583b53e66ce2587 Mon Sep 17 00:00:00 2001 From: agree Date: Tue, 27 Apr 2021 23:34:36 -0400 Subject: [PATCH 2/2] Ring group presence add missing channel variable without presence_id set freeswitch won't update any presence changes for a call --- app/scripts/resources/scripts/app/ring_groups/index.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/app/scripts/resources/scripts/app/ring_groups/index.lua b/app/scripts/resources/scripts/app/ring_groups/index.lua index 858c584cb6..a62cb75a86 100644 --- a/app/scripts/resources/scripts/app/ring_groups/index.lua +++ b/app/scripts/resources/scripts/app/ring_groups/index.lua @@ -980,6 +980,7 @@ -- log.noticef("bridge begin: originate_disposition:%s answered:%s ready:%s bridged:%s", session:getVariable("originate_disposition"), session:answered() and "true" or "false", session:ready() and "true" or "false", session:bridged() and "true" or "false") if (ring_group_strategy ~= "rollover") then if (session:getVariable("ring_group_send_presence") == "true") then + session:setVariable("presence_id", ring_group_extension.."@"..domain_name ); send_presence(uuid, ring_group_extension.."@"..domain_name, "early"); end session:execute("bridge", app_data);