2014-08-09 05:25:42 +02:00
--
-- FusionPBX
-- 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>
2016-11-06 07:15:59 +01:00
-- Copyright (C) 2010-2016
2014-08-09 05:25:42 +02:00
-- the Initial Developer. All Rights Reserved.
--
-- Contributor(s):
-- Luis Daniel Lucio Quiroz <dlucio@okay.com.mx>
2014-11-04 16:29:05 +01:00
-- Riccardo Granchi <riccardo.granchi@nems.it>
--
2016-03-11 14:21:52 +01:00
-- add this in Inbound Routes before transfer to use it:
2014-11-04 16:29:05 +01:00
-- action set caller_id_name=${luarun cidlookup.lua ${uuid}}
2014-08-09 05:25:42 +02:00
--debug
debug [ " sql " ] = true ;
--define the trim function
2015-08-11 04:06:33 +02:00
require " resources.functions.trim "
2014-08-09 05:25:42 +02:00
--define the explode function
2015-08-11 04:06:33 +02:00
require " resources.functions.explode "
2014-08-09 05:25:42 +02:00
--create the api object
api = freeswitch.API ( ) ;
uuid = argv [ 1 ] ;
if not uuid or uuid == " " then return end ;
caller = api : executeString ( " uuid_getvar " .. uuid .. " caller_id_number " ) ;
callee = api : executeString ( " uuid_getvar " .. uuid .. " destination_number " ) ;
2014-11-04 16:29:05 +01:00
--clean local country prefix from caller (ex: +39 or 0039 in Italy)
exitCode = api : executeString ( " uuid_getvar " .. uuid .. " default_exitcode " ) ;
countryCode = api : executeString ( " uuid_getvar " .. uuid .. " default_countrycode " ) ;
if ( ( countryCode ~= nil ) and ( string.len ( countryCode ) > 0 ) ) then
2016-03-11 14:21:52 +01:00
2014-11-04 16:29:05 +01:00
countryPrefix = " + " .. countryCode ;
2016-03-11 14:21:52 +01:00
2014-11-04 16:29:05 +01:00
if ( string.sub ( caller , 1 , string.len ( countryPrefix ) ) == countryPrefix ) then
cleanCaller = string.sub ( caller , string.len ( countryPrefix ) + 1 ) ;
freeswitch.consoleLog ( " NOTICE " , " [cidlookup] ignoring local international prefix " .. countryPrefix .. " : " .. caller .. " ==> " .. cleanCaller .. " \n " ) ;
caller = cleanCaller ;
else
if ( ( exitCode ~= nil ) and ( string.len ( exitCode ) > 0 ) ) then
2016-03-11 14:21:52 +01:00
2014-11-04 16:29:05 +01:00
countryPrefix = exitCode .. countryCode ;
if ( string.sub ( caller , 1 , string.len ( countryPrefix ) ) == countryPrefix ) then
cleanCaller = string.sub ( caller , string.len ( countryPrefix ) + 1 ) ;
freeswitch.consoleLog ( " NOTICE " , " [cidlookup] ignoring local international prefix " .. countryPrefix .. " : " .. caller .. " ==> " .. cleanCaller .. " \n " ) ;
caller = cleanCaller ;
end ;
end ;
2016-03-11 14:21:52 +01:00
end ;
2014-11-04 16:29:05 +01:00
end ;
2014-08-09 05:25:42 +02:00
--include config.lua
2015-08-11 04:06:33 +02:00
require " resources.functions.config " ;
2014-08-09 05:25:42 +02:00
2016-11-06 07:15:59 +01:00
--connect to the database
require " resources.functions.database_handle " ;
dbh = database_handle ( ' system ' ) ;
if ( database [ " type " ] == " mysql " ) then
sql = " SELECT CONCAT(v_contacts.contact_name_given, ' ', v_contacts.contact_name_family,' (',v_contact_phones.phone_type,')') AS name FROM v_contacts " ;
elseif ( database [ " type " ] == " pgsql " ) then
sql = " SELECT CASE WHEN contact_name_given = '' THEN v_contacts.contact_organization ELSE v_contacts.contact_name_given || ' ' || v_contacts.contact_name_family || ' (' || v_contact_phones.phone_label || ')' END AS name FROM v_contacts " ;
else
sql = " SELECT v_contacts.contact_name_given || ' ' || v_contacts.contact_name_family || ' (' || v_contact_phones.phone_type || ')' AS name FROM v_contacts " ;
end
sql = sql .. " INNER JOIN v_contact_phones ON v_contact_phones.contact_uuid = v_contacts.contact_uuid " ;
sql = sql .. " INNER JOIN v_destinations ON v_destinations.domain_uuid = v_contacts.domain_uuid " ;
sql = sql .. " WHERE v_contact_phones.phone_number = ' " .. caller .. " '
if ( debug [ " sql " ] ) then
freeswitch.consoleLog ( " notice " , " [cidlookup] " .. sql .. " \n " ) ;
end
status = dbh : query ( sql , function ( row )
name = row.name ;
end ) ;
if ( name == nil ) then
freeswitch.consoleLog ( " NOTICE " , " [cidlookup] caller name from contacts db is nil \n " ) ;
else
freeswitch.consoleLog ( " NOTICE " , " [cidlookup] caller name from contacts db: " .. name .. " \n " ) ;
end
--check if there is a record, if it not then use cidlookup
if ( ( name == nil ) or ( string.len ( name ) == 0 ) ) then
cidlookup_exists = api : executeString ( " module_exists cidlookup " ) ;
if ( cidlookup_exists == " true " ) then
name = api : executeString ( " cidlookup " .. caller ) ;
end
end
--set the caller id name
if ( ( name ~= nil ) and ( string.len ( name ) > 0 ) ) then
freeswitch.consoleLog ( " NOTICE " , " [cidlookup] uuid_setvar " .. uuid .. " caller_id_name " .. name ) ;
api : executeString ( " uuid_setvar " .. uuid .. " caller_id_name " .. name ) ;
freeswitch.consoleLog ( " NOTICE " , " [cidlookup] uuid_setvar " .. uuid .. " effective_caller_id_name " .. name ) ;
api : executeString ( " uuid_setvar " .. uuid .. " effective_caller_id_name " .. name ) ;
end