diff --git a/resources/install/scripts/app/messages/resources/events.lua b/resources/install/scripts/app/messages/resources/events.lua new file mode 100644 index 0000000000..b5ffa42a11 --- /dev/null +++ b/resources/install/scripts/app/messages/resources/events.lua @@ -0,0 +1,661 @@ +-- +-- Version: MPL 1.1 +-- +-- The contents of this file are subject to the Mozilla Public License Version +-- 1.1 (the "License"); you may not use this file except in compliance with +-- the License. You may obtain a copy of the License at +-- http://www.mozilla.org/MPL/ +-- +-- Software distributed under the License is distributed on an "AS IS" basis, +-- WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +-- for the specific language governing rights and limitations under the +-- License. +-- +-- The Original Code is FusionPBX +-- +-- The Initial Developer of the Original Code is +-- Mark J Crane +-- Copyright (C) 2018 + +--prepare the api object + api = freeswitch.API(); + +--define the functions + require "resources.functions.trim"; + require "resources.functions.explode"; + require "resources.functions.base64"; + +--include the database class + local Database = require "resources.functions.database"; + +--set debug + debug["sql"] = false; + +--get the events + --serialize the data for the console + --freeswitch.consoleLog("notice","[events] " .. event:serialize("xml") .. "\n"); + --freeswitch.consoleLog("notice","[evnts] " .. event:serialize("json") .. "\n"); + +--intialize settings + --from_user = ''; + +--get the event variables + uuid = event:getHeader("Core-UUID"); + from_user = event:getHeader("from_user"); + from_host = event:getHeader("from_host"); + to_user = event:getHeader("to_user"); + to_host = event:getHeader("to_host"); + content_type = event:getHeader("type"); + message_content = event:getBody(); + +--set required variables + if (from_user ~= nil and from_host ~= nil) then + message_from = from_user .. '@' .. from_host; + end + if (to_user ~= nil and to_host ~= nil) then + message_to = to_user .. '@' .. to_host; + end + message_type = 'message'; + +--connect to the database + dbh = Database.new('system'); + +--exits the script if we didn't connect properly + assert(dbh:connected()); + +--set debug + debug["sql"] = true; + +--include json library + local json + if (debug["sql"]) then + json = require "resources.functions.lunajson" + end + +--check if the from user exits + if (from_user ~= nil and from_host ~= nil) then + cmd = "user_exists id ".. from_user .." "..from_host; + freeswitch.consoleLog("notice", "[messages][from] user exists " .. cmd .. "\n"); + from_user_exists = api:executeString(cmd); + else + from_user_exists = 'false'; + end + +--check if the to user exits + if (to_user ~= nil and to_host ~= nil) then + cmd = "user_exists id ".. to_user .." "..to_host; + freeswitch.consoleLog("notice", "[messages][to] user exists " .. cmd .. "\n"); + to_user_exists = api:executeString(cmd); + else + to_user_exists = 'false'; + end + +--add the message + if (from_user_exists == 'true') then + --set the direction + message_direction = 'send'; + + --get the from user_uuid + cmd = "user_data ".. from_user .."@"..from_host.." var domain_uuid"; + domain_uuid = trim(api:executeString(cmd)); + + --get the from user_uuid + cmd = "user_data ".. from_user .."@"..from_host.." var user_uuid"; + user_uuid = trim(api:executeString(cmd)); + + --get the from contact_uuid + cmd = "user_data ".. to_user .."@"..to_host.." var contact_uuid"; + contact_uuid = trim(api:executeString(cmd)); + + --create a new uuid and add it to the uuid list + message_uuid = api:executeString("create_uuid"); + + --sql statement + sql = "INSERT INTO v_messages "; + sql = sql .."( "; + sql = sql .."domain_uuid, "; + sql = sql .."message_uuid, "; + sql = sql .."user_uuid, "; + if (contact_uuid ~= null) then + sql = sql .."contact_uuid, "; + end + sql = sql .."message_direction, "; + sql = sql .."message_date, "; + sql = sql .."message_type, "; + if (message_from ~= null) then + sql = sql .."message_from, "; + end + sql = sql .."message_to, "; + sql = sql .."message_content "; + sql = sql ..") "; + sql = sql .."VALUES ( "; + sql = sql ..":domain_uuid, "; + sql = sql ..":message_uuid, "; + sql = sql ..":user_uuid, "; + if (contact_uuid ~= null) then + sql = sql ..":contact_uuid, "; + end + sql = sql ..":message_direction, "; + sql = sql .."now(), "; + sql = sql ..":message_type, "; + if (message_from ~= null) then + sql = sql ..":message_from, "; + end + sql = sql ..":message_to, "; + sql = sql ..":message_content "; + sql = sql ..") "; + + --set the parameters + local params= {} + params['domain_uuid'] = domain_uuid; + params['message_uuid'] = message_uuid; + params['user_uuid'] = user_uuid; + if (contact_uuid ~= null) then + params['contact_uuid'] = contact_uuid; + end + params['message_direction'] = message_direction; + params['message_type'] = message_type; + if (message_from ~= null) then + params['message_from'] = message_from; + end + params['message_to'] = message_to; + params['message_content'] = message_content; + + --show debug info + if (debug["sql"]) then + freeswitch.consoleLog("notice", "[call_center] SQL: " .. sql .. "; params:" .. json.encode(params) .. "\n"); + end + + --run the query + dbh:query(sql, params); + end + if (to_user_exists == 'true') then + --sql statement + sql = "INSERT INTO v_messages "; + sql = sql .."( "; + sql = sql .."domain_uuid, "; + sql = sql .."message_uuid, "; + sql = sql .."user_uuid, "; + if (contact_uuid ~= null) then + sql = sql .."contact_uuid, "; + end + sql = sql .."message_direction, "; + sql = sql .."message_date, "; + sql = sql .."message_type, "; + if (message_from ~= null) then + sql = sql .."message_from, "; + end + sql = sql .."message_to, "; + sql = sql .."message_content "; + sql = sql ..") "; + sql = sql .."VALUES ( "; + sql = sql ..":domain_uuid, "; + sql = sql ..":message_uuid, "; + sql = sql ..":user_uuid, "; + if (contact_uuid ~= null) then + sql = sql ..":contact_uuid, "; + end + sql = sql ..":message_direction, "; + sql = sql .."now(), "; + sql = sql ..":message_type, "; + if (message_from ~= null) then + sql = sql ..":message_from, "; + end + sql = sql ..":message_to, "; + sql = sql ..":message_content "; + sql = sql ..") "; + + --set the direction + message_direction = 'receive'; + + --get the from user_uuid + cmd = "user_data ".. to_user .."@"..to_host.." var domain_uuid"; + domain_uuid = trim(api:executeString(cmd)); + + --get the from user_uuid + cmd = "user_data ".. to_user .."@"..to_host.." var user_uuid"; + user_uuid = trim(api:executeString(cmd)); + + --get the from contact_uuid + cmd = "user_data ".. to_user .."@"..to_host.." var contact_uuid"; + contact_uuid = trim(api:executeString(cmd)); + + --create a new uuid and add it to the uuid list + message_uuid = api:executeString("create_uuid"); + + --set the parameters + local params= {} + params['domain_uuid'] = domain_uuid; + params['message_uuid'] = message_uuid; + params['user_uuid'] = user_uuid; + if (contact_uuid ~= null) then + params['contact_uuid'] = contact_uuid; + end + params['message_direction'] = message_direction; + params['message_type'] = message_type; + params['message_from'] = message_from; + params['message_to'] = message_to; + params['message_content'] = message_content; + + --show debug info + if (debug["sql"]) then + freeswitch.consoleLog("notice", "[call_center] SQL: " .. sql .. "; params:" .. json.encode(params) .. "\n"); + end + + --run the query + dbh:query(sql, params); + + else + + --get setttings needed to send the message + require "resources.functions.settings"; + settings = settings(domain_uuid); + if (settings['message'] ~= nil) then + http_method = ''; + if (settings['message']['http_method'] ~= nil) then + if (settings['message']['http_method']['text'] ~= nil) then + http_method = settings['message']['http_method']['text']; + end + end + + http_content_type = ''; + if (settings['message']['http_content_type'] ~= nil) then + if (settings['message']['http_content_type']['text'] ~= nil) then + http_content_type = settings['message']['http_content_type']['text']; + end + end + + http_destination = ''; + if (settings['message']['http_destination'] ~= nil) then + if (settings['message']['http_destination']['text'] ~= nil) then + http_destination = settings['message']['http_destination']['text']; + end + end + + http_auth_enabled = 'false'; + if (settings['message']['http_auth_enabled'] ~= nil) then + if (settings['message']['http_auth_enabled']['boolean'] ~= nil) then + http_auth_enabled = settings['message']['http_auth_enabled']['boolean']; + end + end + + http_auth_type = ''; + if (settings['message']['http_auth_type'] ~= nil) then + if (settings['message']['http_auth_type']['text'] ~= nil) then + http_auth_type = settings['message']['http_auth_type']['text']; + end + end + + http_auth_user = ''; + if (settings['message']['http_auth_user'] ~= nil) then + if (settings['message']['http_auth_user']['text'] ~= nil) then + http_auth_user = settings['message']['http_auth_user']['text']; + end + end + + http_auth_password = ''; + if (settings['message']['http_auth_password'] ~= nil) then + if (settings['message']['http_auth_password']['text'] ~= nil) then + http_auth_password = settings['message']['http_auth_password']['text']; + end + end + end + + --get the sip user outbound_caller_id + if (from_user ~= nil and from_host ~= nil) then + cmd = "user_data ".. from_user .."@"..from_host.." var outbound_caller_id_number"; + from = trim(api:executeString(cmd)); + else + from = ''; + end + + --replace variables for their value + http_destination = http_destination:gsub("${from}", from); + + --send to the provider using curl + if (to_user ~= nil) then + cmd = [[curl ]].. http_destination ..[[ ]] + cmd = cmd .. [[-H "Content-Type: ]]..http_content_type..[[" ]]; + if (http_auth_type == 'basic') then + cmd = cmd .. [[-H "Authorization: Basic ]]..base64.encode(http_auth_user..":"..http_auth_password)..[[" ]]; + end + cmd = cmd .. [[-d '{"to":"]]..to_user..[[","text":"]]..message_content..[["}']] + result = api:executeString("system "..cmd); + --status = os.execute (cmd); + + --debug - log the command + freeswitch.consoleLog("notice", "[message] " .. cmd.. "\n"); + end + + + end +-- +-- Version: MPL 1.1 +-- +-- The contents of this file are subject to the Mozilla Public License Version +-- 1.1 (the "License"); you may not use this file except in compliance with +-- the License. You may obtain a copy of the License at +-- http://www.mozilla.org/MPL/ +-- +-- Software distributed under the License is distributed on an "AS IS" basis, +-- WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +-- for the specific language governing rights and limitations under the +-- License. +-- +-- The Original Code is FusionPBX +-- +-- The Initial Developer of the Original Code is +-- Mark J Crane +-- Copyright (C) 2018 + +--prepare the api object + api = freeswitch.API(); + +--define the functions + require "resources.functions.trim"; + require "resources.functions.explode"; + require "resources.functions.base64"; + +--include the database class + local Database = require "resources.functions.database"; + +--set debug + debug["sql"] = false; + +--get the events + --serialize the data for the console + --freeswitch.consoleLog("notice","[events] " .. event:serialize("xml") .. "\n"); + --freeswitch.consoleLog("notice","[evnts] " .. event:serialize("json") .. "\n"); + +--intialize settings + --from_user = ''; + +--get the event variables + uuid = event:getHeader("Core-UUID"); + from_user = event:getHeader("from_user"); + from_host = event:getHeader("from_host"); + to_user = event:getHeader("to_user"); + to_host = event:getHeader("to_host"); + content_type = event:getHeader("type"); + message_content = event:getBody(); + +--set required variables + if (from_user ~= nil and from_host ~= nil) then + message_from = from_user .. '@' .. from_host; + end + if (to_user ~= nil and to_host ~= nil) then + message_to = to_user .. '@' .. to_host; + end + message_type = 'message'; + +--connect to the database + dbh = Database.new('system'); + +--exits the script if we didn't connect properly + assert(dbh:connected()); + +--set debug + debug["sql"] = true; + +--include json library + local json + if (debug["sql"]) then + json = require "resources.functions.lunajson" + end + +--check if the from user exits + if (from_user ~= nil and from_host ~= nil) then + cmd = "user_exists id ".. from_user .." "..from_host; + freeswitch.consoleLog("notice", "[messages][from] user exists " .. cmd .. "\n"); + from_user_exists = api:executeString(cmd); + else + from_user_exists = 'false'; + end + +--check if the to user exits + if (to_user ~= nil and to_host ~= nil) then + cmd = "user_exists id ".. to_user .." "..to_host; + freeswitch.consoleLog("notice", "[messages][to] user exists " .. cmd .. "\n"); + to_user_exists = api:executeString(cmd); + else + to_user_exists = 'false'; + end + +--add the message + if (from_user_exists == 'true') then + --set the direction + message_direction = 'send'; + + --get the from user_uuid + cmd = "user_data ".. from_user .."@"..from_host.." var domain_uuid"; + domain_uuid = trim(api:executeString(cmd)); + + --get the from user_uuid + cmd = "user_data ".. from_user .."@"..from_host.." var user_uuid"; + user_uuid = trim(api:executeString(cmd)); + + --get the from contact_uuid + cmd = "user_data ".. to_user .."@"..to_host.." var contact_uuid"; + contact_uuid = trim(api:executeString(cmd)); + + --create a new uuid and add it to the uuid list + message_uuid = api:executeString("create_uuid"); + + --sql statement + sql = "INSERT INTO v_messages "; + sql = sql .."( "; + sql = sql .."domain_uuid, "; + sql = sql .."message_uuid, "; + sql = sql .."user_uuid, "; + if (contact_uuid ~= null) then + sql = sql .."contact_uuid, "; + end + sql = sql .."message_direction, "; + sql = sql .."message_date, "; + sql = sql .."message_type, "; + if (message_from ~= null) then + sql = sql .."message_from, "; + end + sql = sql .."message_to, "; + sql = sql .."message_content "; + sql = sql ..") "; + sql = sql .."VALUES ( "; + sql = sql ..":domain_uuid, "; + sql = sql ..":message_uuid, "; + sql = sql ..":user_uuid, "; + if (contact_uuid ~= null) then + sql = sql ..":contact_uuid, "; + end + sql = sql ..":message_direction, "; + sql = sql .."now(), "; + sql = sql ..":message_type, "; + if (message_from ~= null) then + sql = sql ..":message_from, "; + end + sql = sql ..":message_to, "; + sql = sql ..":message_content "; + sql = sql ..") "; + + --set the parameters + local params= {} + params['domain_uuid'] = domain_uuid; + params['message_uuid'] = message_uuid; + params['user_uuid'] = user_uuid; + if (contact_uuid ~= null) then + params['contact_uuid'] = contact_uuid; + end + params['message_direction'] = message_direction; + params['message_type'] = message_type; + if (message_from ~= null) then + params['message_from'] = message_from; + end + params['message_to'] = message_to; + params['message_content'] = message_content; + + --show debug info + if (debug["sql"]) then + freeswitch.consoleLog("notice", "[call_center] SQL: " .. sql .. "; params:" .. json.encode(params) .. "\n"); + end + + --run the query + dbh:query(sql, params); + end + if (to_user_exists == 'true') then + --sql statement + sql = "INSERT INTO v_messages "; + sql = sql .."( "; + sql = sql .."domain_uuid, "; + sql = sql .."message_uuid, "; + sql = sql .."user_uuid, "; + if (contact_uuid ~= null) then + sql = sql .."contact_uuid, "; + end + sql = sql .."message_direction, "; + sql = sql .."message_date, "; + sql = sql .."message_type, "; + if (message_from ~= null) then + sql = sql .."message_from, "; + end + sql = sql .."message_to, "; + sql = sql .."message_content "; + sql = sql ..") "; + sql = sql .."VALUES ( "; + sql = sql ..":domain_uuid, "; + sql = sql ..":message_uuid, "; + sql = sql ..":user_uuid, "; + if (contact_uuid ~= null) then + sql = sql ..":contact_uuid, "; + end + sql = sql ..":message_direction, "; + sql = sql .."now(), "; + sql = sql ..":message_type, "; + if (message_from ~= null) then + sql = sql ..":message_from, "; + end + sql = sql ..":message_to, "; + sql = sql ..":message_content "; + sql = sql ..") "; + + --set the direction + message_direction = 'receive'; + + --get the from user_uuid + cmd = "user_data ".. to_user .."@"..to_host.." var domain_uuid"; + domain_uuid = trim(api:executeString(cmd)); + + --get the from user_uuid + cmd = "user_data ".. to_user .."@"..to_host.." var user_uuid"; + user_uuid = trim(api:executeString(cmd)); + + --get the from contact_uuid + cmd = "user_data ".. to_user .."@"..to_host.." var contact_uuid"; + contact_uuid = trim(api:executeString(cmd)); + + --create a new uuid and add it to the uuid list + message_uuid = api:executeString("create_uuid"); + + --set the parameters + local params= {} + params['domain_uuid'] = domain_uuid; + params['message_uuid'] = message_uuid; + params['user_uuid'] = user_uuid; + if (contact_uuid ~= null) then + params['contact_uuid'] = contact_uuid; + end + params['message_direction'] = message_direction; + params['message_type'] = message_type; + params['message_from'] = message_from; + params['message_to'] = message_to; + params['message_content'] = message_content; + + --show debug info + if (debug["sql"]) then + freeswitch.consoleLog("notice", "[call_center] SQL: " .. sql .. "; params:" .. json.encode(params) .. "\n"); + end + + --run the query + dbh:query(sql, params); + + else + + --get setttings needed to send the message + require "resources.functions.settings"; + settings = settings(domain_uuid); + if (settings['message'] ~= nil) then + http_method = ''; + if (settings['message']['http_method'] ~= nil) then + if (settings['message']['http_method']['text'] ~= nil) then + http_method = settings['message']['http_method']['text']; + end + end + + http_content_type = ''; + if (settings['message']['http_content_type'] ~= nil) then + if (settings['message']['http_content_type']['text'] ~= nil) then + http_content_type = settings['message']['http_content_type']['text']; + end + end + + http_destination = ''; + if (settings['message']['http_destination'] ~= nil) then + if (settings['message']['http_destination']['text'] ~= nil) then + http_destination = settings['message']['http_destination']['text']; + end + end + + http_auth_enabled = 'false'; + if (settings['message']['http_auth_enabled'] ~= nil) then + if (settings['message']['http_auth_enabled']['boolean'] ~= nil) then + http_auth_enabled = settings['message']['http_auth_enabled']['boolean']; + end + end + + http_auth_type = ''; + if (settings['message']['http_auth_type'] ~= nil) then + if (settings['message']['http_auth_type']['text'] ~= nil) then + http_auth_type = settings['message']['http_auth_type']['text']; + end + end + + http_auth_user = ''; + if (settings['message']['http_auth_user'] ~= nil) then + if (settings['message']['http_auth_user']['text'] ~= nil) then + http_auth_user = settings['message']['http_auth_user']['text']; + end + end + + http_auth_password = ''; + if (settings['message']['http_auth_password'] ~= nil) then + if (settings['message']['http_auth_password']['text'] ~= nil) then + http_auth_password = settings['message']['http_auth_password']['text']; + end + end + end + + --get the sip user outbound_caller_id + if (from_user ~= nil and from_host ~= nil) then + cmd = "user_data ".. from_user .."@"..from_host.." var outbound_caller_id_number"; + from = trim(api:executeString(cmd)); + else + from = ''; + end + + --replace variables for their value + http_destination = http_destination:gsub("${from}", from); + + --send to the provider using curl + if (to_user ~= nil) then + cmd = [[curl ]].. http_destination ..[[ ]] + cmd = cmd .. [[-H "Content-Type: ]]..http_content_type..[[" ]]; + if (http_auth_type == 'basic') then + cmd = cmd .. [[-H "Authorization: Basic ]]..base64.encode(http_auth_user..":"..http_auth_password)..[[" ]]; + end + cmd = cmd .. [[-d '{"to":"]]..to_user..[[","text":"]]..message_content..[["}']] + result = api:executeString("system "..cmd); + --status = os.execute (cmd); + + --debug - log the command + freeswitch.consoleLog("notice", "[message] " .. cmd.. "\n"); + end + + end