mirror of
https://github.com/fusionpbx/fusionpbx.git
synced 2026-01-06 11:43:50 +00:00
Update events.lua
This commit is contained in:
@@ -17,336 +17,10 @@
|
||||
-- Mark J Crane <markjcrane@fusionpbx.com>
|
||||
-- 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 <markjcrane@fusionpbx.com>
|
||||
-- Copyright (C) 2018
|
||||
-- Start the script
|
||||
-- <!-- Subscribe to events -->
|
||||
-- <hook event="CUSTOM" subclass="SMS::SEND_MESSAGE" script="app/messages/resources/events.lua"/>
|
||||
|
||||
--prepare the api object
|
||||
api = freeswitch.API();
|
||||
|
||||
Reference in New Issue
Block a user