From bd1551a36981c814fd0e269d33689a1c76b92cb8 Mon Sep 17 00:00:00 2001 From: markjcrane Date: Tue, 15 Sep 2015 08:49:37 -0600 Subject: [PATCH] Add multi-lingual support to the missed call emails. --- .../scripts/app/failure_handler/index.lua | 84 ++++++++++++------- .../install/scripts/app/hangup/index.lua | 82 +++++++++++------- .../resources/templates/en/us/email_body.tpl | 1 + .../templates/en/us/email_subject.tpl | 1 + .../install/scripts/app/ring_groups/index.lua | 79 +++++++++++------ 5 files changed, 164 insertions(+), 83 deletions(-) create mode 100644 resources/install/scripts/app/missed_calls/resources/templates/en/us/email_body.tpl create mode 100644 resources/install/scripts/app/missed_calls/resources/templates/en/us/email_subject.tpl diff --git a/resources/install/scripts/app/failure_handler/index.lua b/resources/install/scripts/app/failure_handler/index.lua index 6e174911ce..72410b3ddf 100644 --- a/resources/install/scripts/app/failure_handler/index.lua +++ b/resources/install/scripts/app/failure_handler/index.lua @@ -31,43 +31,69 @@ require "resources.functions.config"; require "resources.functions.explode"; require "resources.functions.trim"; + require "resources.functions.base64"; --check the missed calls function missed() if (missed_call_app ~= nil and missed_call_data ~= nil) then if (missed_call_app == "email") then - headers = '{"X-FusionPBX-Domain-UUID":"'..domain_uuid..'",'; - headers = headers..'"X-FusionPBX-Domain-Name":"'..domain_name..'",'; - headers = headers..'"X-FusionPBX-Call-UUID":"'..uuid..'",'; - headers = headers..'"X-FusionPBX-Email-Type":"missed"}'; + --set the sounds path for the language, dialect and voice + default_language = session:getVariable("default_language"); + default_dialect = session:getVariable("default_dialect"); + default_voice = session:getVariable("default_voice"); + if (not default_language) then default_language = 'en'; end + if (not default_dialect) then default_dialect = 'us'; end + if (not default_voice) then default_voice = 'callie'; end - subject = "Missed Call from ${caller_id_name} <${caller_id_number}>"; - subject = subject:gsub("${caller_id_name}", caller_id_name); - subject = subject:gsub("${caller_id_number}", caller_id_number); - subject = subject:gsub("${sip_to_user}", sip_to_user); - subject = subject:gsub("${dialed_user}", dialed_user); + --prepare the files + file_subject = scripts_dir.."/app/missed_calls/resources/templates/"..default_language.."/"..default_dialect.."/email_subject.tpl"; + file_body = scripts_dir.."/app/missed_calls/resources/templates/"..default_language.."/"..default_dialect.."/email_body.tpl"; + if (not file_exists(file_subject)) then + file_subject = scripts_dir.."/app/missed_calls/resources/templates/en/us/email_subject.tpl"; + file_body = scripts_dir.."/app/missed_calls/resources/templates/en/us/email_body.tpl"; + end + + --prepare the headers + headers = '{"X-FusionPBX-Domain-UUID":"'..domain_uuid..'",'; + headers = headers..'"X-FusionPBX-Domain-Name":"'..domain_name..'",'; + headers = headers..'"X-FusionPBX-Call-UUID":"'..uuid..'",'; + headers = headers..'"X-FusionPBX-Email-Type":"missed"}'; - body = "Missed Call from ${caller_id_name} <${caller_id_number}> to ${sip_to_user} ext ${dialed_user}"; - body = body:gsub("${caller_id_name}", caller_id_name); - body = body:gsub("${caller_id_number}", caller_id_number); - body = body:gsub("${sip_to_user}", sip_to_user); - body = body:gsub("${dialed_user}", dialed_user); + --prepare the subject + local f = io.open(file_subject, "r"); + local subject = f:read("*all"); + f:close(); + subject = subject:gsub("${caller_id_name}", caller_id_name); + subject = subject:gsub("${caller_id_number}", caller_id_number); + subject = subject:gsub("${sip_to_user}", sip_to_user); + subject = subject:gsub("${dialed_user}", dialed_user); + subject = trim(subject); + subject = '=?utf-8?B?'..base64.encode(subject)..'?='; - body = body:gsub(" ", " "); - body = body:gsub("%s+", ""); - body = body:gsub(" ", " "); - body = body:gsub("\n", ""); - body = body:gsub("\n", ""); - body = body:gsub("'", "'"); - body = body:gsub([["]], """); - body = trim(body); - - cmd = "luarun email.lua "..missed_call_data.." "..missed_call_data.." "..headers.." '"..subject.."' '"..body.."'"; - if (debug["info"]) then - freeswitch.consoleLog("notice", "[missed call] cmd: " .. cmd .. "\n"); - end - api = freeswitch.API(); - result = api:executeString(cmd); + --prepare the body + local f = io.open(file_body, "r"); + local body = f:read("*all"); + f:close(); + body = body:gsub("${caller_id_name}", caller_id_name); + body = body:gsub("${caller_id_number}", caller_id_number); + body = body:gsub("${sip_to_user}", sip_to_user); + body = body:gsub("${dialed_user}", dialed_user); + body = body:gsub(" ", " "); + body = body:gsub("%s+", ""); + body = body:gsub(" ", " "); + body = body:gsub("\n", ""); + body = body:gsub("\n", ""); + body = body:gsub("'", "'"); + body = body:gsub([["]], """); + body = trim(body); + + --send the email + cmd = "luarun email.lua "..missed_call_data.." "..missed_call_data.." "..headers.." '"..subject.."' '"..body.."'"; + if (debug["info"]) then + freeswitch.consoleLog("notice", "[missed call] cmd: " .. cmd .. "\n"); + end + api = freeswitch.API(); + result = api:executeString(cmd); end end end diff --git a/resources/install/scripts/app/hangup/index.lua b/resources/install/scripts/app/hangup/index.lua index 9a77d819cc..425f2f2f52 100644 --- a/resources/install/scripts/app/hangup/index.lua +++ b/resources/install/scripts/app/hangup/index.lua @@ -28,7 +28,8 @@ require "resources.functions.config"; require "resources.functions.explode"; require "resources.functions.trim"; - -- require "resources.functions.file_exists"; + require "resources.functions.base64"; + require "resources.functions.file_exists"; --create the api object api = freeswitch.API(); @@ -37,37 +38,62 @@ function missed() if (missed_call_app ~= nil and missed_call_data ~= nil) then if (missed_call_app == "email") then - headers = '{"X-FusionPBX-Domain-UUID":"'..domain_uuid..'",'; - headers = headers..'"X-FusionPBX-Domain-Name":"'..domain_name..'",'; - headers = headers..'"X-FusionPBX-Call-UUID":"'..uuid..'",'; - headers = headers..'"X-FusionPBX-Email-Type":"missed"}'; + --set the sounds path for the language, dialect and voice + default_language = session:getVariable("default_language"); + default_dialect = session:getVariable("default_dialect"); + default_voice = session:getVariable("default_voice"); + if (not default_language) then default_language = 'en'; end + if (not default_dialect) then default_dialect = 'us'; end + if (not default_voice) then default_voice = 'callie'; end - subject = "Missed Call from ${caller_id_name} <${caller_id_number}>"; - subject = subject:gsub("${caller_id_name}", caller_id_name); - subject = subject:gsub("${caller_id_number}", caller_id_number); - subject = subject:gsub("${sip_to_user}", sip_to_user); - subject = subject:gsub("${dialed_user}", dialed_user); + --prepare the files + file_subject = scripts_dir.."/app/missed_calls/resources/templates/"..default_language.."/"..default_dialect.."/email_subject.tpl"; + file_body = scripts_dir.."/app/missed_calls/resources/templates/"..default_language.."/"..default_dialect.."/email_body.tpl"; + if (not file_exists(file_subject)) then + file_subject = scripts_dir.."/app/missed_calls/resources/templates/en/us/email_subject.tpl"; + file_body = scripts_dir.."/app/missed_calls/resources/templates/en/us/email_body.tpl"; + end - body = "Missed Call from ${caller_id_name} <${caller_id_number}> to ${sip_to_user} ext ${dialed_user}"; - body = body:gsub("${caller_id_name}", caller_id_name); - body = body:gsub("${caller_id_number}", caller_id_number); - body = body:gsub("${sip_to_user}", sip_to_user); - body = body:gsub("${dialed_user}", dialed_user); + --prepare the headers + headers = '{"X-FusionPBX-Domain-UUID":"'..domain_uuid..'",'; + headers = headers..'"X-FusionPBX-Domain-Name":"'..domain_name..'",'; + headers = headers..'"X-FusionPBX-Call-UUID":"'..uuid..'",'; + headers = headers..'"X-FusionPBX-Email-Type":"missed"}'; - body = body:gsub(" ", " "); - body = body:gsub("%s+", ""); - body = body:gsub(" ", " "); - body = body:gsub("\n", ""); - body = body:gsub("\n", ""); - body = body:gsub("'", "'"); - body = body:gsub([["]], """); - body = trim(body); + --prepare the subject + local f = io.open(file_subject, "r"); + local subject = f:read("*all"); + f:close(); + subject = subject:gsub("${caller_id_name}", caller_id_name); + subject = subject:gsub("${caller_id_number}", caller_id_number); + subject = subject:gsub("${sip_to_user}", sip_to_user); + subject = subject:gsub("${dialed_user}", dialed_user); + subject = trim(subject); + subject = '=?utf-8?B?'..base64.encode(subject)..'?='; - cmd = "luarun email.lua "..missed_call_data.." "..missed_call_data.." "..headers.." '"..subject.."' '"..body.."'"; - if (debug["info"]) then - freeswitch.consoleLog("notice", "[missed call] cmd: " .. cmd .. "\n"); - end - result = api:executeString(cmd); + --prepare the body + local f = io.open(file_body, "r"); + local body = f:read("*all"); + f:close(); + body = body:gsub("${caller_id_name}", caller_id_name); + body = body:gsub("${caller_id_number}", caller_id_number); + body = body:gsub("${sip_to_user}", sip_to_user); + body = body:gsub("${dialed_user}", dialed_user); + body = body:gsub(" ", " "); + body = body:gsub("%s+", ""); + body = body:gsub(" ", " "); + body = body:gsub("\n", ""); + body = body:gsub("\n", ""); + body = body:gsub("'", "'"); + body = body:gsub([["]], """); + body = trim(body); + + --send the emails + cmd = "luarun email.lua "..missed_call_data.." "..missed_call_data.." "..headers.." '"..subject.."' '"..body.."'"; + if (debug["info"]) then + freeswitch.consoleLog("notice", "[missed call] cmd: " .. cmd .. "\n"); + end + result = api:executeString(cmd); end end end diff --git a/resources/install/scripts/app/missed_calls/resources/templates/en/us/email_body.tpl b/resources/install/scripts/app/missed_calls/resources/templates/en/us/email_body.tpl new file mode 100644 index 0000000000..cde2b1bac3 --- /dev/null +++ b/resources/install/scripts/app/missed_calls/resources/templates/en/us/email_body.tpl @@ -0,0 +1 @@ +Missed Call from ${caller_id_name} <${caller_id_number}> to ${sip_to_user} ext ${dialed_user} \ No newline at end of file diff --git a/resources/install/scripts/app/missed_calls/resources/templates/en/us/email_subject.tpl b/resources/install/scripts/app/missed_calls/resources/templates/en/us/email_subject.tpl new file mode 100644 index 0000000000..0b961e6975 --- /dev/null +++ b/resources/install/scripts/app/missed_calls/resources/templates/en/us/email_subject.tpl @@ -0,0 +1 @@ +Missed Call from ${caller_id_name} <${caller_id_number}> \ No newline at end of file diff --git a/resources/install/scripts/app/ring_groups/index.lua b/resources/install/scripts/app/ring_groups/index.lua index a8c0b8e266..31a31ee532 100644 --- a/resources/install/scripts/app/ring_groups/index.lua +++ b/resources/install/scripts/app/ring_groups/index.lua @@ -34,6 +34,8 @@ --include functions require "resources.functions.trim"; require "resources.functions.explode"; + require "resources.functions.base64"; + require "resources.functions.file_exists"; --get the variables domain_name = session:getVariable("domain_name"); @@ -119,36 +121,61 @@ function missed() if (missed_call_app ~= nil and missed_call_data ~= nil) then if (missed_call_app == "email") then - headers = '{"X-FusionPBX-Domain-UUID":"'..domain_uuid..'",'; - headers = headers..'"X-FusionPBX-Domain-Name":"'..domain_name..'",'; - headers = headers..'"X-FusionPBX-Call-UUID":"'..uuid..'",'; - headers = headers..'"X-FusionPBX-Email-Type":"missed"}'; + --set the sounds path for the language, dialect and voice + default_language = session:getVariable("default_language"); + default_dialect = session:getVariable("default_dialect"); + default_voice = session:getVariable("default_voice"); + if (not default_language) then default_language = 'en'; end + if (not default_dialect) then default_dialect = 'us'; end + if (not default_voice) then default_voice = 'callie'; end - subject = "Missed Call from ${caller_id_name} <${caller_id_number}> ${ring_group_name}"; - subject = subject:gsub("${caller_id_name}", caller_id_name); - subject = subject:gsub("${caller_id_number}", caller_id_number); - subject = subject:gsub("${ring_group_name}", ring_group_name); + --prepare the files + file_subject = scripts_dir.."/app/missed_calls/resources/templates/"..default_language.."/"..default_dialect.."/email_subject.tpl"; + file_body = scripts_dir.."/app/missed_calls/resources/templates/"..default_language.."/"..default_dialect.."/email_body.tpl"; + if (not file_exists(file_subject)) then + file_subject = scripts_dir.."/app/missed_calls/resources/templates/en/us/email_subject.tpl"; + file_body = scripts_dir.."/app/missed_calls/resources/templates/en/us/email_body.tpl"; + end - body = "Missed Call from ${caller_id_name} <${caller_id_number}> to ${ring_group_name}"; - body = body:gsub("${caller_id_name}", caller_id_name); - body = body:gsub("${caller_id_number}", caller_id_number); - body = body:gsub("${ring_group_name}", ring_group_name); + --prepare the headers + headers = '{"X-FusionPBX-Domain-UUID":"'..domain_uuid..'",'; + headers = headers..'"X-FusionPBX-Domain-Name":"'..domain_name..'",'; + headers = headers..'"X-FusionPBX-Call-UUID":"'..uuid..'",'; + headers = headers..'"X-FusionPBX-Email-Type":"missed"}'; - body = body:gsub(" ", " "); - body = body:gsub("%s+", ""); - body = body:gsub(" ", " "); - body = body:gsub("\n", ""); - body = body:gsub("\n", ""); - body = body:gsub("'", "'"); - body = body:gsub([["]], """); - body = trim(body); + --prepare the subject + local f = io.open(file_subject, "r"); + local subject = f:read("*all"); + f:close(); + subject = subject:gsub("${caller_id_name}", caller_id_name); + subject = subject:gsub("${caller_id_number}", caller_id_number); + subject = subject:gsub("${ring_group_name}", ring_group_name); + subject = trim(subject); + subject = '=?utf-8?B?'..base64.encode(subject)..'?='; - cmd = "luarun email.lua "..missed_call_data.." "..missed_call_data.." "..headers.." '"..subject.."' '"..body.."'"; - if (debug["info"]) then - freeswitch.consoleLog("notice", "[missed call] cmd: " .. cmd .. "\n"); - end - api = freeswitch.API(); - result = api:executeString(cmd); + --prepare the body + local f = io.open(file_body, "r"); + local body = f:read("*all"); + f:close(); + body = body:gsub("${caller_id_name}", caller_id_name); + body = body:gsub("${caller_id_number}", caller_id_number); + body = body:gsub("${ring_group_name}", ring_group_name); + body = body:gsub(" ", " "); + body = body:gsub("%s+", ""); + body = body:gsub(" ", " "); + body = body:gsub("\n", ""); + body = body:gsub("\n", ""); + body = body:gsub("'", "'"); + body = body:gsub([["]], """); + body = trim(body); + + --send the email + cmd = "luarun email.lua "..missed_call_data.." "..missed_call_data.." "..headers.." '"..subject.."' '"..body.."'"; + if (debug["info"]) then + freeswitch.consoleLog("notice", "[missed call] cmd: " .. cmd .. "\n"); + end + api = freeswitch.API(); + result = api:executeString(cmd); end end end