diff --git a/resources/install/scripts/app/messages/resources/events.lua b/resources/install/scripts/app/messages/resources/events.lua index b5ffa42a11..2b125b3230 100644 --- a/resources/install/scripts/app/messages/resources/events.lua +++ b/resources/install/scripts/app/messages/resources/events.lua @@ -17,336 +17,10 @@ -- 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 +-- Start the script + -- + -- --prepare the api object api = freeswitch.API();