From 46adde4a22904d17a248ce8c089a20b4d4ab773f Mon Sep 17 00:00:00 2001 From: Nate Date: Fri, 25 Sep 2020 16:58:44 -0600 Subject: [PATCH] Voicemail: Use phrases instead of direct sounds. --- app/scripts/app_defaults.php | 1 + .../resources/functions/advanced.lua | 32 +- .../resources/functions/change_password.lua | 246 +++--- .../resources/functions/check_password.lua | 190 ++--- .../resources/functions/choose_greeting.lua | 6 +- .../resources/functions/delete_recording.lua | 2 +- .../resources/functions/forward_add_intro.lua | 241 +++--- .../functions/forward_to_extension.lua | 6 +- .../resources/functions/get_voicemail_id.lua | 84 +- .../functions/listen_to_recording.lua | 60 +- .../voicemail/resources/functions/macro.lua | 730 +++++++++--------- .../resources/functions/main_menu.lua | 16 +- .../resources/functions/menu_messages.lua | 2 +- .../resources/functions/play_greeting.lua | 226 +++--- .../resources/functions/record_greeting.lua | 9 +- .../resources/functions/record_menu.lua | 28 +- .../resources/functions/record_message.lua | 14 +- .../resources/functions/record_name.lua | 4 +- .../resources/functions/send_email.lua | 17 +- .../resources/functions/tutorial.lua | 394 +++++----- app/voicemails/app_defaults.php | 57 ++ .../switch/languages/ar/vm/voicemail.xml | 181 +++++ .../switch/languages/de/vm/voicemail.xml | 181 +++++ .../switch/languages/en/vm/voicemail.xml | 181 +++++ .../switch/languages/es/vm/voicemail.xml | 181 +++++ .../switch/languages/fr/vm/voicemail.xml | 181 +++++ .../switch/languages/he/vm/voicemail.xml | 181 +++++ .../switch/languages/it/vm/voicemail.xml | 181 +++++ .../switch/languages/nl/vm/voicemail.xml | 181 +++++ .../switch/languages/pt/vm/voicemail.xml | 181 +++++ .../switch/languages/ro/vm/voicemail.xml | 181 +++++ .../switch/languages/ru/vm/voicemail.xml | 181 +++++ .../switch/languages/sv/vm/voicemail.xml | 181 +++++ .../switch/languages/tr/vm/voicemail.xml | 181 +++++ .../switch/languages/uk/vm/voicemail.xml | 181 +++++ resources/templates/conf/languages/ar/ar.xml | 4 +- .../conf/languages/ar/vm/voicemail.xml | 181 +++++ resources/templates/conf/languages/de/de.xml | 2 +- .../conf/languages/de/vm/voicemail.xml | 181 +++++ resources/templates/conf/languages/en/en.xml | 2 +- .../conf/languages/en/vm/voicemail.xml | 181 +++++ resources/templates/conf/languages/es/es.xml | 2 +- .../conf/languages/es/vm/voicemail.xml | 181 +++++ resources/templates/conf/languages/fr/fr.xml | 2 +- .../conf/languages/fr/vm/voicemail.xml | 181 +++++ resources/templates/conf/languages/he/he.xml | 2 +- .../conf/languages/he/vm/voicemail.xml | 181 +++++ resources/templates/conf/languages/it/it.xml | 2 +- .../conf/languages/it/vm/voicemail.xml | 181 +++++ resources/templates/conf/languages/nl/nl.xml | 2 +- .../conf/languages/nl/vm/voicemail.xml | 181 +++++ resources/templates/conf/languages/pt/pt.xml | 2 +- .../conf/languages/pt/vm/voicemail.xml | 181 +++++ resources/templates/conf/languages/ro/ro.xml | 2 +- .../conf/languages/ro/vm/voicemail.xml | 181 +++++ resources/templates/conf/languages/ru/ru.xml | 2 +- .../conf/languages/ru/vm/voicemail.xml | 181 +++++ resources/templates/conf/languages/sv/sv.xml | 2 +- .../conf/languages/sv/vm/voicemail.xml | 181 +++++ resources/templates/conf/languages/tr/tr.xml | 2 +- .../conf/languages/tr/vm/voicemail.xml | 181 +++++ resources/templates/conf/languages/uk/uk.xml | 2 +- .../conf/languages/uk/vm/voicemail.xml | 181 +++++ 63 files changed, 6266 insertions(+), 1197 deletions(-) create mode 100644 app/voicemails/app_defaults.php create mode 100644 app/voicemails/resources/switch/languages/ar/vm/voicemail.xml create mode 100644 app/voicemails/resources/switch/languages/de/vm/voicemail.xml create mode 100644 app/voicemails/resources/switch/languages/en/vm/voicemail.xml create mode 100644 app/voicemails/resources/switch/languages/es/vm/voicemail.xml create mode 100644 app/voicemails/resources/switch/languages/fr/vm/voicemail.xml create mode 100644 app/voicemails/resources/switch/languages/he/vm/voicemail.xml create mode 100644 app/voicemails/resources/switch/languages/it/vm/voicemail.xml create mode 100644 app/voicemails/resources/switch/languages/nl/vm/voicemail.xml create mode 100644 app/voicemails/resources/switch/languages/pt/vm/voicemail.xml create mode 100644 app/voicemails/resources/switch/languages/ro/vm/voicemail.xml create mode 100644 app/voicemails/resources/switch/languages/ru/vm/voicemail.xml create mode 100644 app/voicemails/resources/switch/languages/sv/vm/voicemail.xml create mode 100644 app/voicemails/resources/switch/languages/tr/vm/voicemail.xml create mode 100644 app/voicemails/resources/switch/languages/uk/vm/voicemail.xml create mode 100644 resources/templates/conf/languages/ar/vm/voicemail.xml create mode 100644 resources/templates/conf/languages/de/vm/voicemail.xml create mode 100644 resources/templates/conf/languages/en/vm/voicemail.xml create mode 100644 resources/templates/conf/languages/es/vm/voicemail.xml create mode 100644 resources/templates/conf/languages/fr/vm/voicemail.xml create mode 100644 resources/templates/conf/languages/he/vm/voicemail.xml create mode 100644 resources/templates/conf/languages/it/vm/voicemail.xml create mode 100644 resources/templates/conf/languages/nl/vm/voicemail.xml create mode 100644 resources/templates/conf/languages/pt/vm/voicemail.xml create mode 100644 resources/templates/conf/languages/ro/vm/voicemail.xml create mode 100644 resources/templates/conf/languages/ru/vm/voicemail.xml create mode 100644 resources/templates/conf/languages/sv/vm/voicemail.xml create mode 100644 resources/templates/conf/languages/tr/vm/voicemail.xml create mode 100644 resources/templates/conf/languages/uk/vm/voicemail.xml diff --git a/app/scripts/app_defaults.php b/app/scripts/app_defaults.php index 6d9c3cb37f..554f478b3a 100644 --- a/app/scripts/app_defaults.php +++ b/app/scripts/app_defaults.php @@ -26,6 +26,7 @@ //process this only one time if ($domains_processed == 1) { + $obj = new scripts; $obj->copy_files(); $obj->write_config(); diff --git a/app/scripts/resources/scripts/app/voicemail/resources/functions/advanced.lua b/app/scripts/resources/scripts/app/voicemail/resources/functions/advanced.lua index 050a2007e6..720d05d41e 100644 --- a/app/scripts/resources/scripts/app/voicemail/resources/functions/advanced.lua +++ b/app/scripts/resources/scripts/app/voicemail/resources/functions/advanced.lua @@ -29,34 +29,12 @@ dtmf_digits = ''; --flush dtmf digits from the input buffer session:flushDigits(); - --To record a greeting press 1 + + --play entire menu using phrases if (session:ready()) then - dtmf_digits = macro(session, "to_record_greeting", 1, 100, ''); - end - --To choose greeting press 2 - if (session:ready()) then - if (string.len(dtmf_digits) == 0) then - dtmf_digits = macro(session, "choose_greeting", 1, 100, ''); - end - end - --To record your name 3 - if (session:ready()) then - if (string.len(dtmf_digits) == 0) then - dtmf_digits = macro(session, "to_record_name", 1, 100, ''); - end - end - --To change your password press 6 - if (session:ready()) then - if (string.len(dtmf_digits) == 0) then - dtmf_digits = macro(session, "change_password", 1, 100, ''); - end - end - --For the main menu press 0 - if (session:ready()) then - if (string.len(dtmf_digits) == 0) then - dtmf_digits = macro(session, "main_menu", 1, 5000, ''); - end + dtmf_digits = session:playAndGetDigits(1, 1, max_tries, digit_timeout, "#", "phrase:voicemail_config_menu:1:2:3:6:0", "", "\\d+"); end + --process the dtmf if (session:ready()) then if (dtmf_digits == "1") then @@ -82,7 +60,7 @@ if (timeouts <= max_timeouts) then advanced(); else - macro(session, "goodbye", 1, 1000, ''); + session:execute("playback", "phrase:voicemail_goodbye"); session:hangup(); end end diff --git a/app/scripts/resources/scripts/app/voicemail/resources/functions/change_password.lua b/app/scripts/resources/scripts/app/voicemail/resources/functions/change_password.lua index 72abc5c670..c9e85820d5 100644 --- a/app/scripts/resources/scripts/app/voicemail/resources/functions/change_password.lua +++ b/app/scripts/resources/scripts/app/voicemail/resources/functions/change_password.lua @@ -1,123 +1,123 @@ --- Part of FusionPBX --- Copyright (C) 2013 Mark J Crane --- All rights reserved. --- --- Redistribution and use in source and binary forms, with or without --- modification, are permitted provided that the following conditions are met: --- --- 1. Redistributions of source code must retain the above copyright notice, --- this list of conditions and the following disclaimer. --- --- 2. Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in the --- documentation and/or other materials provided with the distribution. --- --- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, --- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY --- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE --- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, --- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF --- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS --- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN --- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) --- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE --- POSSIBILITY OF SUCH DAMAGE. - ---check the voicemail password - function change_password(voicemail_id, menu) - if (session:ready()) then - --flush dtmf digits from the input buffer - session:flushDigits(); - --set password valitity in case of hangup - valid_password = "false"; - --please enter your password followed by pound - dtmf_digits = ''; - password = macro(session, "password_new", 20, 5000, ''); - if (password_complexity ~= "true") then - valid_password = "true"; - end - --check password comlexity - if (password_complexity == "true") then - --check for length - if (string.len(password) < tonumber(password_min_length)) then - password_error_flag = "1"; - dtmf_digits = ''; - --freeswitch.consoleLog("notice", "[voicemail] Not long enough \n"); - macro(session, "password_below_minimum", 20, 3000, password_min_length); - timeouts = 0; - if (menu == "tutorial") then - change_password(voicemail_id, "tutorial"); - end - if (menu == "advanced") then - change_password(voicemail_id, "advanced"); - end - end - - --check for repeating digits - local repeating = {"000", "111", "222", "333", "444", "555", "666", "777", "888", "999"}; - for i = 1, 10 do - if (string.match(password, repeating[i])) then - password_error_flag = "1"; - dtmf_digits = ''; - --freeswitch.consoleLog("notice", "[voicemail] You can't use repeating digits like ".. repeating[i] .." \n"); - macro(session, "password_not_secure", 20, 3000); - timeouts = 0; - if (menu == "tutorial") then - change_password(voicemail_id, "tutorial"); - end - if (menu == "advanced") then - change_password(voicemail_id, "advanced"); - end - end - end - - --check for squential digits - local sequential = {"012", "123", "345", "456", "567", "678", "789", "987"}; - for i = 1, 8 do - if (string.match(password, sequential[i])) then - password_error_flag = "1"; - dtmf_digits = ''; - --freeswitch.consoleLog("notice", "[voicemail] You can't use sequential digits like ".. sequential[i] .." \n"); - macro(session, "password_not_secure", 20, 3000); - timeouts = 0; - if (menu == "tutorial") then - change_password(voicemail_id, "tutorial"); - end - if (menu == "advanced") then - change_password(voicemail_id, "advanced"); - end - end - end - --password is valid - if (password_error_flag ~= "1") then - freeswitch.consoleLog("notice", "[voicemail] Password is valid! \n"); - valid_password = "true"; - end - end - --update the voicemail password - if (valid_password == "true") then - local sql = [[UPDATE v_voicemails - set voicemail_password = :password - WHERE domain_uuid = :domain_uuid - AND voicemail_id = :voicemail_id - AND voicemail_enabled = 'true' ]]; - local params = {password = password, domain_uuid = domain_uuid, - voicemail_id = voicemail_id}; - if (debug["sql"]) then - freeswitch.consoleLog("notice", "[voicemail] SQL: " .. sql .. "; params:" .. json.encode(params) .. "\n"); - end - dbh:query(sql, params); - end - --has been changed to - dtmf_digits = ''; - macro(session, "password_changed", 20, 3000, password); - --advanced menu - timeouts = 0; - if (menu == "advanced") then - advanced(); - end - if (menu == "tutorial") then - tutorial("record_greeting"); - end - end - end +-- Part of FusionPBX +-- Copyright (C) 2013 Mark J Crane +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- +-- 1. Redistributions of source code must retain the above copyright notice, +-- this list of conditions and the following disclaimer. +-- +-- 2. Redistributions in binary form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in the +-- documentation and/or other materials provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +-- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +-- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +-- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +-- POSSIBILITY OF SUCH DAMAGE. + +--check the voicemail password + function change_password(voicemail_id, menu) + if (session:ready()) then + --flush dtmf digits from the input buffer + session:flushDigits(); + --set password valitity in case of hangup + valid_password = "false"; + --please enter your password followed by pound + dtmf_digits = ''; + password = session:playAndGetDigits(1, 20, max_tries, 5000, "#", "phrase:voicemail_enter_new_pass", "", "\\d+"); + if (password_complexity ~= "true") then + valid_password = "true"; + end + --check password comlexity + if (password_complexity == "true") then + --check for length + if (string.len(password) < tonumber(password_min_length)) then + password_error_flag = "1"; + dtmf_digits = ''; + --freeswitch.consoleLog("notice", "[voicemail] Not long enough \n"); + session:execute("playback", "phrase:voicemail_password_below_minimum:" .. password_min_length); + timeouts = 0; + if (menu == "tutorial") then + change_password(voicemail_id, "tutorial"); + end + if (menu == "advanced") then + change_password(voicemail_id, "advanced"); + end + end + + --check for repeating digits + local repeating = {"000", "111", "222", "333", "444", "555", "666", "777", "888", "999"}; + for i = 1, 10 do + if (string.match(password, repeating[i])) then + password_error_flag = "1"; + dtmf_digits = ''; + --freeswitch.consoleLog("notice", "[voicemail] You can't use repeating digits like ".. repeating[i] .." \n"); + session:execute("playback", "phrase:voicemail_password_not_secure"); + timeouts = 0; + if (menu == "tutorial") then + change_password(voicemail_id, "tutorial"); + end + if (menu == "advanced") then + change_password(voicemail_id, "advanced"); + end + end + end + + --check for squential digits + local sequential = {"012", "123", "234", "345", "456", "567", "678", "789", "987", "876", "765", "654", "543", "432", "321", "210"}; + for i = 1, 8 do + if (string.match(password, sequential[i])) then + password_error_flag = "1"; + dtmf_digits = ''; + --freeswitch.consoleLog("notice", "[voicemail] You can't use sequential digits like ".. sequential[i] .." \n"); + session:execute("playback", "phrase:voicemail_password_not_secure"); + timeouts = 0; + if (menu == "tutorial") then + change_password(voicemail_id, "tutorial"); + end + if (menu == "advanced") then + change_password(voicemail_id, "advanced"); + end + end + end + --password is valid + if (password_error_flag ~= "1") then + freeswitch.consoleLog("notice", "[voicemail] Password is valid! \n"); + valid_password = "true"; + end + end + --update the voicemail password + if (valid_password == "true") then + local sql = [[UPDATE v_voicemails + set voicemail_password = :password + WHERE domain_uuid = :domain_uuid + AND voicemail_id = :voicemail_id + AND voicemail_enabled = 'true' ]]; + local params = {password = password, domain_uuid = domain_uuid, + voicemail_id = voicemail_id}; + if (debug["sql"]) then + freeswitch.consoleLog("notice", "[voicemail] SQL: " .. sql .. "; params:" .. json.encode(params) .. "\n"); + end + dbh:query(sql, params); + end + --has been changed to + dtmf_digits = ''; + session:execute("playback", "phrase:voicemail_change_pass_repeat_success:" .. password); + --advanced menu + timeouts = 0; + if (menu == "advanced") then + advanced(); + end + if (menu == "tutorial") then + tutorial("record_greeting"); + end + end + end diff --git a/app/scripts/resources/scripts/app/voicemail/resources/functions/check_password.lua b/app/scripts/resources/scripts/app/voicemail/resources/functions/check_password.lua index 6c49834f9c..10a685789d 100644 --- a/app/scripts/resources/scripts/app/voicemail/resources/functions/check_password.lua +++ b/app/scripts/resources/scripts/app/voicemail/resources/functions/check_password.lua @@ -1,95 +1,95 @@ --- Part of FusionPBX --- Copyright (C) 2013 Mark J Crane --- All rights reserved. --- --- Redistribution and use in source and binary forms, with or without --- modification, are permitted provided that the following conditions are met: --- --- 1. Redistributions of source code must retain the above copyright notice, --- this list of conditions and the following disclaimer. --- --- 2. Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in the --- documentation and/or other materials provided with the distribution. --- --- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, --- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY --- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE --- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, --- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF --- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS --- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN --- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) --- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE --- POSSIBILITY OF SUCH DAMAGE. - ---check the voicemail password - function check_password(voicemail_id, password_tries) - if (session:ready()) then - - --flush dtmf digits from the input buffer - session:flushDigits(); - - --please enter your id followed by pound - if (voicemail_id) then - --do nothing - else - timeouts = 0; - voicemail_id = get_voicemail_id(); - if (debug["info"]) then - freeswitch.consoleLog("notice", "[voicemail] voicemail id: " .. voicemail_id .. "\n"); - end - end - - --get the voicemail settings from the database - if (voicemail_id) then - if (session:ready()) then - local sql = [[SELECT * FROM v_voicemails - WHERE domain_uuid = :domain_uuid - AND voicemail_id = :voicemail_id - AND voicemail_enabled = 'true' ]]; - local params = {domain_uuid = domain_uuid, voicemail_id = voicemail_id}; - if (debug["sql"]) then - freeswitch.consoleLog("notice", "[voicemail] SQL: " .. sql .. "; params:" .. json.encode(params) .. "\n"); - end - dbh:query(sql, params, function(row) - voicemail_uuid = string.lower(row["voicemail_uuid"]); - voicemail_password = row["voicemail_password"]; - greeting_id = row["greeting_id"]; - voicemail_mail_to = row["voicemail_mail_to"]; - voicemail_attach_file = row["voicemail_attach_file"]; - voicemail_local_after_email = row["voicemail_local_after_email"]; - end); - end - end - - --end the session if this is an invalid voicemail box - if (not voicemail_uuid) or (#voicemail_uuid == 0) then - return session:hangup(); - end - - --please enter your password followed by pound - min_digits = 2; - max_digits = 20; - digit_timeout = 5000; - max_tries = 3; - password = session:playAndGetDigits(min_digits, max_digits, max_tries, digit_timeout, "#", "phrase:voicemail_enter_pass:#", "", "\\d+"); - --freeswitch.consoleLog("notice", "[voicemail] password: " .. password .. "\n"); - - --compare the password from the database with the password provided by the user - if (voicemail_password ~= password) then - --incorrect password - dtmf_digits = ''; - macro(session, "password_not_valid", 1, 1000, ''); - if (session:ready()) then - password_tries = password_tries + 1; - if (password_tries < max_tries) then - check_password(voicemail_id, password_tries); - else - macro(session, "goodbye", 1, 1000, ''); - session:hangup(); - end - end - end - end - end +-- Part of FusionPBX +-- Copyright (C) 2013 Mark J Crane +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- +-- 1. Redistributions of source code must retain the above copyright notice, +-- this list of conditions and the following disclaimer. +-- +-- 2. Redistributions in binary form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in the +-- documentation and/or other materials provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +-- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +-- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +-- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +-- POSSIBILITY OF SUCH DAMAGE. + +--check the voicemail password + function check_password(voicemail_id, password_tries) + if (session:ready()) then + + --flush dtmf digits from the input buffer + session:flushDigits(); + + --please enter your id followed by pound + if (voicemail_id) then + --do nothing + else + timeouts = 0; + voicemail_id = get_voicemail_id(); + if (debug["info"]) then + freeswitch.consoleLog("notice", "[voicemail] voicemail id: " .. voicemail_id .. "\n"); + end + end + + --get the voicemail settings from the database + if (voicemail_id) then + if (session:ready()) then + local sql = [[SELECT * FROM v_voicemails + WHERE domain_uuid = :domain_uuid + AND voicemail_id = :voicemail_id + AND voicemail_enabled = 'true' ]]; + local params = {domain_uuid = domain_uuid, voicemail_id = voicemail_id}; + if (debug["sql"]) then + freeswitch.consoleLog("notice", "[voicemail] SQL: " .. sql .. "; params:" .. json.encode(params) .. "\n"); + end + dbh:query(sql, params, function(row) + voicemail_uuid = string.lower(row["voicemail_uuid"]); + voicemail_password = row["voicemail_password"]; + greeting_id = row["greeting_id"]; + voicemail_mail_to = row["voicemail_mail_to"]; + voicemail_attach_file = row["voicemail_attach_file"]; + voicemail_local_after_email = row["voicemail_local_after_email"]; + end); + end + end + + --end the session if this is an invalid voicemail box + if (not voicemail_uuid) or (#voicemail_uuid == 0) then + return session:hangup(); + end + + --please enter your password followed by pound + min_digits = 2; + max_digits = 20; + digit_timeout = 5000; + max_tries = 3; + password = session:playAndGetDigits(min_digits, max_digits, max_tries, digit_timeout, "#", "phrase:voicemail_enter_pass:#", "", "\\d+"); + --freeswitch.consoleLog("notice", "[voicemail] password: " .. password .. "\n"); + + --compare the password from the database with the password provided by the user + if (voicemail_password ~= password) then + --incorrect password + dtmf_digits = ''; + session:execute("playback", "phrase:voicemail_fail_auth"); + if (session:ready()) then + password_tries = password_tries + 1; + if (password_tries < max_tries) then + check_password(voicemail_id, password_tries); + else + session:execute("playback", "phrase:voicemail_goodbye"); + session:hangup(); + end + end + end + end + end diff --git a/app/scripts/resources/scripts/app/voicemail/resources/functions/choose_greeting.lua b/app/scripts/resources/scripts/app/voicemail/resources/functions/choose_greeting.lua index 09e56e11f1..73d68cde58 100644 --- a/app/scripts/resources/scripts/app/voicemail/resources/functions/choose_greeting.lua +++ b/app/scripts/resources/scripts/app/voicemail/resources/functions/choose_greeting.lua @@ -34,7 +34,7 @@ --select the greeting if (session:ready()) then dtmf_digits = ''; - greeting_id = macro(session, "choose_greeting_choose", 1, 5000, ''); + greeting_id = session:playAndGetDigits(1, 1, max_tries, 5000, "#", "phrase:voicemail_choose_greeting", "", "\\d+"); end --check to see if the greeting file exists @@ -137,7 +137,7 @@ --greeting selected if (session:ready()) then dtmf_digits = ''; - macro(session, "greeting_selected", 1, 100, greeting_id); + session:execute("playback", "phrase:voicemail_greeting_selected:" .. greeting_id); end --advanced menu @@ -149,7 +149,7 @@ --invalid greeting_id if (session:ready()) then dtmf_digits = ''; - greeting_id = macro(session, "choose_greeting_fail", 1, 100, ''); + session:execute("playback", "phrase:voicemail_choose_greeting_fail"); end --send back to choose the greeting diff --git a/app/scripts/resources/scripts/app/voicemail/resources/functions/delete_recording.lua b/app/scripts/resources/scripts/app/voicemail/resources/functions/delete_recording.lua index da50805eb3..1278cdceaf 100644 --- a/app/scripts/resources/scripts/app/voicemail/resources/functions/delete_recording.lua +++ b/app/scripts/resources/scripts/app/voicemail/resources/functions/delete_recording.lua @@ -29,7 +29,7 @@ if (session ~= nil) then if (session:ready()) then dtmf_digits = ''; - macro(session, "message_deleted", 1, 100, ''); + session:execute("playback", "phrase:voicemail_ack:deleted"); end end diff --git a/app/scripts/resources/scripts/app/voicemail/resources/functions/forward_add_intro.lua b/app/scripts/resources/scripts/app/voicemail/resources/functions/forward_add_intro.lua index ccd2b155e4..cb0526115d 100644 --- a/app/scripts/resources/scripts/app/voicemail/resources/functions/forward_add_intro.lua +++ b/app/scripts/resources/scripts/app/voicemail/resources/functions/forward_add_intro.lua @@ -1,120 +1,121 @@ --- Part of FusionPBX --- Copyright (C) 2016 Mark J Crane --- All rights reserved. --- --- Redistribution and use in source and binary forms, with or without --- modification, are permitted provided that the following conditions are met: --- --- 1. Redistributions of source code must retain the above copyright notice, --- this list of conditions and the following disclaimer. --- --- 2. Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in the --- documentation and/or other materials provided with the distribution. --- --- THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, --- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY --- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE --- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, --- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF --- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS --- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN --- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) --- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE --- POSSIBILITY OF SUCH DAMAGE. - ---define a function to forward a message to an extension - function forward_add_intro(voicemail_id, uuid) - - --flush dtmf digits from the input buffer - session:flushDigits(); - - --request whether to add the intro - --To add an introduction to this message press 1 - add_intro_id = session:playAndGetDigits(1, 1, 3, 5000, "#*", "phrase:voicemail_forward_prepend:1:2", "phrase:invalid_entry", "\\d+"); - freeswitch.consoleLog("notice", "[voicemail][forward add intro] "..add_intro_id.."\n"); - if (add_intro_id == '1') then - - --load libraries - local Database = require "resources.functions.database"; - local Settings = require "resources.functions.lazy_settings"; - - --connect to the database - local db = dbh or Database.new('system'); - - --get the settings. - local settings = Settings.new(db, domain_name, domain_uuid); - local max_len_seconds = settings:get('voicemail', 'max_len_seconds', 'boolean') or 300; - - --record your message at the tone press any key or stop talking to end the recording - if (session:ready()) then - session:sayPhrase("voicemail_record_greeting", "", "en") - end - - --set the file full path - message_location = voicemail_dir.."/"..voicemail_id.."/msg_"..uuid.."."..vm_message_ext; - message_intro_location = voicemail_dir.."/"..voicemail_id.."/intro_"..uuid.."."..vm_message_ext; - - --record the message introduction - -- syntax is session:recordFile(file_name, max_len_secs, silence_threshold, silence_secs) - silence_seconds = 5; - if (storage_path == "http_cache") then - result = session:recordFile(message_intro_location, max_len_seconds, record_silence_threshold, silence_seconds); - else - mkdir(voicemail_dir.."/"..voicemail_id); - if (vm_message_ext == "mp3") then - shout_exists = trim(api:execute("module_exists", "mod_shout")); - if (shout_exists == "true") then - freeswitch.consoleLog("notice", "using mod_shout for mp3 encoding\n"); - --record in mp3 directly - result = session:recordFile(message_intro_location, max_len_seconds, record_silence_threshold, silence_seconds); - else - --create initial wav recording - result = session:recordFile(message_intro_location, max_len_seconds, record_silence_threshold, silence_seconds); - --use lame to encode, if available - if (file_exists("/usr/bin/lame")) then - freeswitch.consoleLog("notice", "using lame for mp3 encoding\n"); - --convert the wav to an mp3 (lame required) - resample = "/usr/bin/lame -b 32 --resample 8 -m s "..voicemail_dir.."/"..voicemail_id.."/intro_"..uuid..".wav "..message_intro_location; - session:execute("system", resample); - --delete the wav file, if mp3 exists - if (file_exists(message_intro_location)) then - os.remove(voicemail_dir.."/"..voicemail_id.."/intro_"..uuid..".wav"); - else - vm_message_ext = "wav"; - end - else - freeswitch.consoleLog("notice", "neither mod_shout or lame found, defaulting to wav\n"); - vm_message_ext = "wav"; - end - end - else - result = session:recordFile(message_intro_location, max_len_seconds, record_silence_threshold, silence_seconds); - end - end - - --save the merged file into the database as base64 - if (storage_type == "base64") then - local file = require "resources.functions.file" - - --get the content of the file - local file_content = assert(file.read_base64(message_intro_location)); - - --save the merged file as base64 - local sql = [[UPDATE SET v_voicemail_messages - SET message_intro_base64 = :file_content - WHERE domain_uuid = :domain_uuid - AND voicemail_message_uuid = :uuid]]; - local params = {file_content = file_content, domain_uuid = domain_uuid, uuid = uuid}; - - if (debug["sql"]) then - freeswitch.consoleLog("notice", "[voicemail] SQL: " .. sql .. "; params: " .. json.encode(params) .. "\n"); - end - - local dbh = Database.new('system', 'base64') - dbh:query(sql, params) - dbh:release() - end - end - - end +-- Part of FusionPBX +-- Copyright (C) 2016 Mark J Crane +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- +-- 1. Redistributions of source code must retain the above copyright notice, +-- this list of conditions and the following disclaimer. +-- +-- 2. Redistributions in binary form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in the +-- documentation and/or other materials provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +-- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +-- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +-- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +-- POSSIBILITY OF SUCH DAMAGE. + +--define a function to forward a message to an extension + function forward_add_intro(voicemail_id, uuid) + + --flush dtmf digits from the input buffer + session:flushDigits(); + + --request whether to add the intro + --To add an introduction to this message press 1 + add_intro_id = session:playAndGetDigits(1, 1, 3, 5000, "#*", "phrase:voicemail_forward_prepend:1:2", "phrase:invalid_entry", "\\d+"); + freeswitch.consoleLog("notice", "[voicemail][forward add intro] "..add_intro_id.."\n"); + if (add_intro_id == '1') then + + --load libraries + local Database = require "resources.functions.database"; + local Settings = require "resources.functions.lazy_settings"; + + --connect to the database + local db = dbh or Database.new('system'); + + --get the settings. + local settings = Settings.new(db, domain_name, domain_uuid); + local max_len_seconds = settings:get('voicemail', 'max_len_seconds', 'boolean') or 300; + + --record your message at the tone press any key or stop talking to end the recording + if (session:ready()) then + --session:sayPhrase("voicemail_record_greeting", "", "en") + session:execute("playback", "phrase:voicemail_record_greeting"); + end + + --set the file full path + message_location = voicemail_dir.."/"..voicemail_id.."/msg_"..uuid.."."..vm_message_ext; + message_intro_location = voicemail_dir.."/"..voicemail_id.."/intro_"..uuid.."."..vm_message_ext; + + --record the message introduction + -- syntax is session:recordFile(file_name, max_len_secs, silence_threshold, silence_secs) + silence_seconds = 5; + if (storage_path == "http_cache") then + result = session:recordFile(message_intro_location, max_len_seconds, record_silence_threshold, silence_seconds); + else + mkdir(voicemail_dir.."/"..voicemail_id); + if (vm_message_ext == "mp3") then + shout_exists = trim(api:execute("module_exists", "mod_shout")); + if (shout_exists == "true") then + freeswitch.consoleLog("notice", "using mod_shout for mp3 encoding\n"); + --record in mp3 directly + result = session:recordFile(message_intro_location, max_len_seconds, record_silence_threshold, silence_seconds); + else + --create initial wav recording + result = session:recordFile(message_intro_location, max_len_seconds, record_silence_threshold, silence_seconds); + --use lame to encode, if available + if (file_exists("/usr/bin/lame")) then + freeswitch.consoleLog("notice", "using lame for mp3 encoding\n"); + --convert the wav to an mp3 (lame required) + resample = "/usr/bin/lame -b 32 --resample 8 -m s "..voicemail_dir.."/"..voicemail_id.."/intro_"..uuid..".wav "..message_intro_location; + session:execute("system", resample); + --delete the wav file, if mp3 exists + if (file_exists(message_intro_location)) then + os.remove(voicemail_dir.."/"..voicemail_id.."/intro_"..uuid..".wav"); + else + vm_message_ext = "wav"; + end + else + freeswitch.consoleLog("notice", "neither mod_shout or lame found, defaulting to wav\n"); + vm_message_ext = "wav"; + end + end + else + result = session:recordFile(message_intro_location, max_len_seconds, record_silence_threshold, silence_seconds); + end + end + + --save the merged file into the database as base64 + if (storage_type == "base64") then + local file = require "resources.functions.file" + + --get the content of the file + local file_content = assert(file.read_base64(message_intro_location)); + + --save the merged file as base64 + local sql = [[UPDATE SET v_voicemail_messages + SET message_intro_base64 = :file_content + WHERE domain_uuid = :domain_uuid + AND voicemail_message_uuid = :uuid]]; + local params = {file_content = file_content, domain_uuid = domain_uuid, uuid = uuid}; + + if (debug["sql"]) then + freeswitch.consoleLog("notice", "[voicemail] SQL: " .. sql .. "; params: " .. json.encode(params) .. "\n"); + end + + local dbh = Database.new('system', 'base64') + dbh:query(sql, params) + dbh:release() + end + end + + end diff --git a/app/scripts/resources/scripts/app/voicemail/resources/functions/forward_to_extension.lua b/app/scripts/resources/scripts/app/voicemail/resources/functions/forward_to_extension.lua index 87600af207..1912db47c3 100644 --- a/app/scripts/resources/scripts/app/voicemail/resources/functions/forward_to_extension.lua +++ b/app/scripts/resources/scripts/app/voicemail/resources/functions/forward_to_extension.lua @@ -35,18 +35,18 @@ --request the forward_voicemail_id if (session:ready()) then dtmf_digits = ''; - forward_voicemail_id = macro(session, "forward_enter_extension", 20, 5000, ''); + forward_voicemail_id = session:playAndGetDigits(1, 20, max_tries, digit_timeout, "#", "phrase:voicemail_forward_message_enter_extension:#", "", "\\d+"); if (session:ready()) then if (string.len(forward_voicemail_id) == 0) then dtmf_digits = ''; - forward_voicemail_id = macro(session, "forward_enter_extension", 20, 5000, ''); + forward_voicemail_id = session:playAndGetDigits(1, 20, max_tries, digit_timeout, "#", "phrase:voicemail_forward_message_enter_extension:#", "", "\\d+"); end end end if (session:ready()) then if (string.len(forward_voicemail_id) == 0) then dtmf_digits = ''; - forward_voicemail_id = macro(session, "forward_enter_extension", 20, 5000, ''); + forward_voicemail_id = session:playAndGetDigits(1, 20, max_tries, digit_timeout, "#", "phrase:voicemail_forward_message_enter_extension:#", "", "\\d+"); end end diff --git a/app/scripts/resources/scripts/app/voicemail/resources/functions/get_voicemail_id.lua b/app/scripts/resources/scripts/app/voicemail/resources/functions/get_voicemail_id.lua index e5c303a179..3f3c49261c 100644 --- a/app/scripts/resources/scripts/app/voicemail/resources/functions/get_voicemail_id.lua +++ b/app/scripts/resources/scripts/app/voicemail/resources/functions/get_voicemail_id.lua @@ -1,43 +1,43 @@ --- Part of FusionPBX --- Copyright (C) 2013 Mark J Crane --- All rights reserved. --- --- Redistribution and use in source and binary forms, with or without --- modification, are permitted provided that the following conditions are met: --- --- 1. Redistributions of source code must retain the above copyright notice, --- this list of conditions and the following disclaimer. --- --- 2. Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in the --- documentation and/or other materials provided with the distribution. --- --- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, --- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY --- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE --- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, --- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF --- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS --- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN --- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) --- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE --- POSSIBILITY OF SUCH DAMAGE. - ---get the voicemail id - function get_voicemail_id() - session:flushDigits(); - dtmf_digits = ''; - voicemail_id = macro(session, "voicemail_id", 20, 5000, ''); - if (string.len(voicemail_id) == 0) then - if (session:ready()) then - timeouts = timeouts + 1; - if (timeouts < max_timeouts) then - voicemail_id = get_voicemail_id(); - else - macro(session, "goodbye", 1, 1000, ''); - session:hangup(); - end - end - end - return voicemail_id; +-- Part of FusionPBX +-- Copyright (C) 2013 Mark J Crane +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- +-- 1. Redistributions of source code must retain the above copyright notice, +-- this list of conditions and the following disclaimer. +-- +-- 2. Redistributions in binary form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in the +-- documentation and/or other materials provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +-- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +-- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +-- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +-- POSSIBILITY OF SUCH DAMAGE. + +--get the voicemail id + function get_voicemail_id() + session:flushDigits(); + dtmf_digits = ''; + voicemail_id = session:playAndGetDigits(1, 20, max_tries, digit_timeout, "#", "phrase:voicemail_enter_id:#", "", "\\d+"); + if (string.len(voicemail_id) == 0) then + if (session:ready()) then + timeouts = timeouts + 1; + if (timeouts < max_timeouts) then + voicemail_id = get_voicemail_id(); + else + session:execute("playback", "phrase:voicemail_goodbye"); + session:hangup(); + end + end + end + return voicemail_id; end \ No newline at end of file diff --git a/app/scripts/resources/scripts/app/voicemail/resources/functions/listen_to_recording.lua b/app/scripts/resources/scripts/app/voicemail/resources/functions/listen_to_recording.lua index b0f6d10b47..831202b0ad 100644 --- a/app/scripts/resources/scripts/app/voicemail/resources/functions/listen_to_recording.lua +++ b/app/scripts/resources/scripts/app/voicemail/resources/functions/listen_to_recording.lua @@ -24,7 +24,7 @@ -- POSSIBILITY OF SUCH DAMAGE. --define function to listen to the recording - function listen_to_recording (message_number, uuid, created_epoch, caller_id_name, caller_id_number) + function listen_to_recording (message_number, uuid, created_epoch, caller_id_name, caller_id_number, message_status) --set default values dtmf_digits = ''; @@ -43,20 +43,14 @@ --say the message number if (session:ready()) then if (string.len(dtmf_digits) == 0) then - dtmf_digits = macro(session, "message_number", 1, 100, ''); - end - end - --say the number - if (session:ready()) then - if (string.len(dtmf_digits) == 0) then - session:say(message_number, default_language, "number", "pronounced"); + session:execute("playback", "phrase:voicemail_say_message_number:" .. message_status .. ":" .. message_number); end end --say the caller id number if (session:ready() and caller_id_number ~= nil) then if (vm_say_caller_id_number ~= nil) then if (vm_say_caller_id_number == "true") then - session:streamFile(sounds_dir.."/"..default_language.."/"..default_dialect.."/"..default_voice.."/voicemail/vm-message_from.wav"); + session:streamFile(sounds_dir.."/"..default_language.."/"..default_dialect.."/"..default_voice.."/voicemail/vm-from.wav"); session:say(caller_id_number, default_language, "name_spelled", "iterated"); end end @@ -162,40 +156,11 @@ os.remove(voicemail_dir.."/"..voicemail_id.."/intro_"..uuid.."."..vm_message_ext); os.remove(voicemail_dir.."/"..voicemail_id.."/msg_"..uuid.."."..vm_message_ext); end - --to listen to the recording press 1 - if (session:ready()) then - if (string.len(dtmf_digits) == 0) then - dtmf_digits = macro(session, "listen_to_recording", 1, 100, ''); - end - end - --to save the recording press 2 - if (session:ready()) then - if (string.len(dtmf_digits) == 0) then - dtmf_digits = macro(session, "save_recording", 1, 100, ''); - end - end - --to return the call now press 5 - if (session:ready()) then - if (string.len(dtmf_digits) == 0) then - dtmf_digits = macro(session, "return_call", 1, 100, ''); - end - end - --to delete the recording press 7 - if (session:ready()) then - if (string.len(dtmf_digits) == 0) then - dtmf_digits = macro(session, "delete_recording", 1, 100, ''); - end - end - --to forward this message press 8 - if (session:ready()) then - if (string.len(dtmf_digits) == 0) then - dtmf_digits = macro(session, "to_forward_message", 1, 100, ''); - end - end - --to forward this recording to your email press 9 - if (session:ready()) then - if (string.len(dtmf_digits) == 0) then - dtmf_digits = macro(session, "forward_to_email", 1, 3000, ''); + + --post listen options + if (session:ready()) then + if (string.len(dtmf_digits) == 0) then + dtmf_digits = session:playAndGetDigits(1, 1, max_tries, digit_timeout, "#", "phrase:voicemail_listen_file_options:1:2:5:7:8:9:0", "", "\\d+"); end end --wait for more digits @@ -210,7 +175,7 @@ listen_to_recording(message_number, uuid, created_epoch, caller_id_name, caller_id_number); elseif (dtmf_digits == "2") then message_saved(voicemail_id, uuid); - macro(session, "message_saved", 1, 100, ''); + session:execute("playback", "phrase:voicemail_ack:saved"); elseif (dtmf_digits == "5") then message_saved(voicemail_id, uuid); return_call(caller_id_number); @@ -224,11 +189,11 @@ elseif (dtmf_digits == "8") then forward_to_extension(voicemail_id, uuid); dtmf_digits = ''; - macro(session, "message_saved", 1, 100, ''); + session:execute("playback", "phrase:voicemail_ack:saved"); elseif (dtmf_digits == "9") then send_email(voicemail_id, uuid); dtmf_digits = ''; - macro(session, "emailed", 1, 100, ''); + session:execute("playback", "phrase:voicemail_ack:emailed"); elseif (dtmf_digits == "*") then timeouts = 0; main_menu(); @@ -237,7 +202,8 @@ session:transfer("0", "XML", context); else message_saved(voicemail_id, uuid); - macro(session, "message_saved", 1, 100, ''); + session:execute("playback", "phrase:voicemail_ack:saved"); end + session:execute("sleep", "400"); end end diff --git a/app/scripts/resources/scripts/app/voicemail/resources/functions/macro.lua b/app/scripts/resources/scripts/app/voicemail/resources/functions/macro.lua index c310eddc44..a6802fc098 100644 --- a/app/scripts/resources/scripts/app/voicemail/resources/functions/macro.lua +++ b/app/scripts/resources/scripts/app/voicemail/resources/functions/macro.lua @@ -1,365 +1,365 @@ --- Part of FusionPBX --- Copyright (C) 2013 - 2016 Mark J Crane --- All rights reserved. --- --- Redistribution and use in source and binary forms, with or without --- modification, are permitted provided that the following conditions are met: --- --- 1. Redistributions of source code must retain the above copyright notice, --- this list of conditions and the following disclaimer. --- --- 2. Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in the --- documentation and/or other materials provided with the distribution. --- --- THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, --- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY --- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE --- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, --- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF --- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS --- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN --- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) --- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE --- POSSIBILITY OF SUCH DAMAGE. - ---define the macro function - function macro(session, name, max_digits, max_timeout, param) - if (session:ready()) then - --create an empty table - actions = {} - - --Please enter your id followed by - if (name == "voicemail_id") then - table.insert(actions, {app="streamFile",data="phrase:voicemail_enter_id:#"}); - end - --Please enter your id followed by - if (name == "voicemail_password") then - table.insert(actions, {app="streamFile",data="phrase:voicemail_enter_pass:#"}); - end - --the person at extension 101 is not available record your message at the tone press any key or stop talking to end the recording - if (name == "person_not_available_record_message") then - table.insert(actions, {app="streamFile",data="voicemail/vm-person.wav"}); - --pronounce the voicemail_id - if (voicemail_alternate_greet_id and string.len(voicemail_alternate_greet_id) > 0) then - table.insert(actions, {app="say.number.iterated",data=voicemail_alternate_greet_id}); - elseif (voicemail_greet_id and string.len(voicemail_greet_id) > 0) then - table.insert(actions, {app="say.number.iterated",data=voicemail_greet_id}); - else - table.insert(actions, {app="say.number.iterated",data=voicemail_id}); - end - table.insert(actions, {app="streamFile",data="voicemail/vm-not_available.wav"}); - end - --record your message at the tone press any key or stop talking to end the recording - if (name == "record_message") then - table.insert(actions, {app="streamFile",data="voicemail/vm-record_message.wav"}); - end - --beep - if (name == "record_beep") then - table.insert(actions, {app="tone_stream",data="L=1;%(1000, 0, 640)"}); - end - --to listen to the recording press 1 - if (name == "to_listen_to_recording") then - table.insert(actions, {app="streamFile",data="voicemail/vm-listen_to_recording.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); - table.insert(actions, {app="streamFile",data="digits/1.wav"}); - end - --to save the recording press 2 - if (name == "to_save_recording") then - table.insert(actions, {app="streamFile",data="voicemail/vm-save_recording.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); - table.insert(actions, {app="streamFile",data="digits/2.wav"}); - end - --to rerecord press 3 - if (name == "to_rerecord") then - table.insert(actions, {app="streamFile",data="voicemail/vm-rerecord.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); - table.insert(actions, {app="streamFile",data="digits/3.wav"}); - end - --You have zero new messages - if (name == "new_messages") then - table.insert(actions, {app="streamFile",data="phrase:voicemail_message_count:" .. param .. ":new"}) - end - --You have zero saved messages - if (name == "saved_messages") then - table.insert(actions, {app="streamFile",data="phrase:voicemail_message_count:" .. param .. ":saved"}) - end - --To listen to new messages press 1 - if (name == "listen_to_new_messages") then - table.insert(actions, {app="streamFile",data="voicemail/vm-listen_new.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); - table.insert(actions, {app="streamFile",data="digits/1.wav"}); - end - --To listen to saved messages press 2 - if (name == "listen_to_saved_messages") then - table.insert(actions, {app="streamFile",data="voicemail/vm-listen_saved.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); - table.insert(actions, {app="streamFile",data="digits/2.wav"}); - end - - --For advanced options press 5 - if (name == "advanced") then - table.insert(actions, {app="streamFile",data="voicemail/vm-advanced.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); - table.insert(actions, {app="streamFile",data="digits/5.wav"}); - end - --Advanced Options Menu - --To record a greeting press 1 - if (name == "to_record_greeting") then - table.insert(actions, {app="streamFile",data="voicemail/vm-to_record_greeting.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); - table.insert(actions, {app="streamFile",data="digits/1.wav"}); - end - --Choose a greeting between 1 and 9 - if (name == "choose_greeting_choose") then - table.insert(actions, {app="streamFile",data="voicemail/vm-choose_greeting_choose.wav"}); - end - --Greeting invalid value - if (name == "choose_greeting_fail") then - table.insert(actions, {app="streamFile",data="voicemail/vm-choose_greeting_fail.wav"}); - end - --Record your greeting at the tone press any key or stop talking to end the recording - if (name == "record_greeting") then - table.insert(actions, {app="streamFile",data="voicemail/vm-record_greeting.wav"}); - table.insert(actions, {app="tone_stream",data="L=1;%(1000, 0, 640)"}); - end - --To choose greeting press 2 - if (name == "choose_greeting") then - table.insert(actions, {app="streamFile",data="voicemail/vm-choose_greeting.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); - table.insert(actions, {app="streamFile",data="digits/2.wav"}); - end - --Greeting 1 selected - if (name == "greeting_selected") then - table.insert(actions, {app="streamFile",data="voicemail/vm-greeting.wav"}); - table.insert(actions, {app="streamFile",data="digits/"..param..".wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-selected.wav"}); - end - - --To record your name 3 - if (name == "to_record_name") then - table.insert(actions, {app="streamFile",data="voicemail/vm-record_name2.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); - table.insert(actions, {app="streamFile",data="digits/3.wav"}); - end - --At the tone please record your name press any key or stop talking to end the recording - if (name == "record_name") then - table.insert(actions, {app="streamFile",data="voicemail/vm-record_name1.wav"}); - table.insert(actions, {app="tone_stream",data="L=1;%(2000, 0, 640)"}); - end - --To change your password press 6 - if (name == "change_password") then - table.insert(actions, {app="streamFile",data="voicemail/vm-change_password.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); - table.insert(actions, {app="streamFile",data="digits/6.wav"}); - end - --For the main menu press 0 - if (name == "main_menu") then - table.insert(actions, {app="streamFile",data="voicemail/vm-main_menu.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); - table.insert(actions, {app="streamFile",data="digits/0.wav"}); - end - --To exit press * - if (name == "to_exit_press") then - table.insert(actions, {app="streamFile",data="voicemail/vm-to_exit.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); - table.insert(actions, {app="streamFile",data="digits/star.wav"}); - end - --Additional Macros - --Please enter your new password then press the # key # - if (name == "password_new") then - table.insert(actions, {app="streamFile",data="voicemail/vm-enter_new_pin.wav"}); - end - --Has been changed to - if (name == "password_changed") then - table.insert(actions, {app="streamFile",data="voicemail/vm-has_been_changed_to.wav"}); - table.insert(actions, {app="say.number.iterated",data=param}); - end - --Login Incorrect - --if (name == "password_not_valid") then - -- table.insert(actions, {app="streamFile",data="voicemail/vm-password_not_valid.wav"}); - --end - --Login Incorrect - if (name == "password_not_valid") then - table.insert(actions, {app="streamFile",data="voicemail/vm-fail_auth.wav"}); - end - --Too many failed attempts - if (name == "too_many_failed_attempts") then - table.insert(actions, {app="streamFile",data="voicemail/vm-abort.wav"}); - end - --Message number - if (name == "message_number") then - table.insert(actions, {app="streamFile",data="voicemail/vm-message_number.wav"}); - end - --To listen to the recording press 1 - if (name == "listen_to_recording") then - table.insert(actions, {app="streamFile",data="voicemail/vm-listen_to_recording.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); - table.insert(actions, {app="streamFile",data="digits/1.wav"}); - end - --To save the recording press 2 - if (name == "save_recording") then - table.insert(actions, {app="streamFile",data="voicemail/vm-save_recording.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); - table.insert(actions, {app="streamFile",data="digits/2.wav"}); - end - --To delete the recording press 7 - if (name == "delete_recording") then - table.insert(actions, {app="streamFile",data="voicemail/vm-delete_recording.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); - table.insert(actions, {app="streamFile",data="digits/7.wav"}); - end - --Message deleted - if (name == "message_deleted") then - table.insert(actions, {app="streamFile",data="voicemail/vm-message.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-deleted.wav"}); - end - --To return the call now press 5 - if (name == "return_call") then - table.insert(actions, {app="streamFile",data="voicemail/vm-return_call.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); - table.insert(actions, {app="streamFile",data="digits/5.wav"}); - end - --To add an introduction to this message press 1 - if (name == "forward_add_intro") then - table.insert(actions, {app="streamFile",data="voicemail/vm-forward_add_intro.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); - table.insert(actions, {app="streamFile",data="digits/1.wav"}); - end - --To forward this message press 8 - if (name == "to_forward_message") then - table.insert(actions, {app="streamFile",data="voicemail/vm-to_forward.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); - table.insert(actions, {app="streamFile",data="digits/8.wav"}); - end - --Please enter the extension to forward this message to followed by # - if (name == "forward_enter_extension") then - table.insert(actions, {app="streamFile",data="voicemail/vm-forward_enter_ext.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-followed_by.wav"}); - table.insert(actions, {app="streamFile",data="ascii/35.wav"}); - end - --To forward this recording to your email press 9 - if (name == "forward_to_email") then - table.insert(actions, {app="streamFile",data="voicemail/vm-forward_to_email.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); - table.insert(actions, {app="streamFile",data="digits/9.wav"}); - end - --Emailed - if (name == "emailed") then - table.insert(actions, {app="streamFile",data="voicemail/vm-emailed.wav"}); - end - --Please enter the extension to send this message to followed by # - --if (name == "send_message_to_extension") then - -- table.insert(actions, {app="streamFile",data="voicemail/vm-zzz.wav"}); - --end - --Message saved - if (name == "message_saved") then - table.insert(actions, {app="streamFile",data="voicemail/vm-message.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-saved.wav"}); - end - --Your recording is below the minimal acceptable length, please try again. - if (name == "too_small") then - table.insert(actions, {app="streamFile",data="voicemail/vm-too-small.wav"}); - end - --Goodbye - if (name == "goodbye") then - table.insert(actions, {app="streamFile",data="voicemail/vm-goodbye.wav"}); - end - --Password is not secure - if (name == "password_not_secure") then - table.insert(actions, {app="streamFile",data="voicemail/vm-password_is_not_secure.wav"}); - end - --Password is below minimum length - if (name == "password_below_minimum") then - table.insert(actions, {app="streamFile",data="voicemail/vm-pin_below_minimum_length.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-minimum_pin_length_is.wav"}); - table.insert(actions, {app="streamFile",data="digits/"..param..".wav"}); - end - --Tutorial - --Tutorial intro - if (name == "tutorial_intro") then - table.insert(actions, {app="streamFile",data="voicemail/vm-tutorial_yes_no.wav"}); - end - - --Tutorial to record your name 1 - if (name == "tutorial_to_record_name") then - table.insert(actions, {app="streamFile",data="voicemail/vm-tutorial_record_name.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-record_name2.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); - table.insert(actions, {app="streamFile",data="digits/1.wav"}); - end - - --Tutorial to change your password press 1 - if (name == "tutorial_change_password") then - table.insert(actions, {app="streamFile",data="voicemail/vm-tutorial_change_pin.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-change_password.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); - table.insert(actions, {app="streamFile",data="digits/1.wav"}); - end - - --Tutorial to record your greeting press 1 - if (name == "tutorial_record_greeting") then - table.insert(actions, {app="streamFile",data="voicemail/vm-to_record_greeting.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); - table.insert(actions, {app="streamFile",data="digits/1.wav"}); - end - - --Tutorial To skip - if (name == "tutorial_skip") then - table.insert(actions, {app="streamFile",data="ivr/ivr-to_skip.wav"}); - table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); - table.insert(actions, {app="streamFile",data="digits/2.wav"}); - end - - --if actions table exists then process it - if (actions) then - --set default values - tries = 1; - timeout = 100; - --loop through the action and data - for key, row in pairs(actions) do - -- freeswitch.consoleLog("notice", "[voicemail] app: " .. row.app .. " data: " .. row.data .. "\n"); - if (session:ready()) then - if (string.len(dtmf_digits) == 0) then - if (row.app == "streamFile") then - if string.find(row.data, ':', nil, true) then - session:streamFile(row.data); - else - session:streamFile(sounds_dir.."/"..default_language.."/"..default_dialect.."/"..default_voice.."/"..row.data); - end - elseif (row.app == "playback") then - session:streamFile(sounds_dir.."/"..default_language.."/"..default_dialect.."/"..default_voice.."/"..row.data); - elseif (row.app == "tone_stream") then - session:streamFile("tone_stream://"..row.data); - elseif (row.app == "silence_stream") then - session:streamFile("silence_stream://100"..row.data); - elseif (row.app == "playAndGetDigits") then - --playAndGetDigits - if (not file_exists(sounds_dir.."/"..default_language.."/"..default_dialect.."/"..default_voice.."/"..row.data)) then - dtmf_digits = session:playAndGetDigits(min_digits, max_digits, tries, timeout, "#", sounds_dir.."/"..default_language.."/"..default_dialect.."/"..default_voice.."/"..row.data, "", "\\d+", max_timeout); - else - dtmf_digits = session:playAndGetDigits(min_digits, max_digits, tries, timeout, "#", row.data, "", "\\d+", max_timeout); - end - elseif (row.app == "say.number.pronounced") then - session:say(row.data, default_language, "number", "pronounced"); - elseif (row.app == "say.number.iterated") then - session:say(row.data, default_language, "number", "iterated"); - end - --session:streamFile("silence_stream://100"); - end --if - end --session:ready - end --for - --get the remaining digits - if (session:ready()) then - if (string.len(dtmf_digits) < max_digits) then - dtmf_digits = dtmf_digits .. session:getDigits(max_digits, "#", max_timeout); - end - end - --return dtmf the digits - return dtmf_digits; - else - --no dtmf digits to return - return ''; - end - end - end +-- Part of FusionPBX +-- Copyright (C) 2013 - 2016 Mark J Crane +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- +-- 1. Redistributions of source code must retain the above copyright notice, +-- this list of conditions and the following disclaimer. +-- +-- 2. Redistributions in binary form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in the +-- documentation and/or other materials provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +-- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +-- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +-- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +-- POSSIBILITY OF SUCH DAMAGE. + +--define the macro function + function macro(session, name, max_digits, max_timeout, param) + if (session:ready()) then + --create an empty table + actions = {} + + --Please enter your id followed by + if (name == "voicemail_id") then + table.insert(actions, {app="streamFile",data="phrase:voicemail_enter_id:#"}); + end + --Please enter your id followed by + if (name == "voicemail_password") then + table.insert(actions, {app="streamFile",data="phrase:voicemail_enter_pass:#"}); + end + --the person at extension 101 is not available record your message at the tone press any key or stop talking to end the recording + if (name == "person_not_available_record_message") then + table.insert(actions, {app="streamFile",data="voicemail/vm-person.wav"}); + --pronounce the voicemail_id + if (voicemail_alternate_greet_id and string.len(voicemail_alternate_greet_id) > 0) then + table.insert(actions, {app="say.number.iterated",data=voicemail_alternate_greet_id}); + elseif (voicemail_greet_id and string.len(voicemail_greet_id) > 0) then + table.insert(actions, {app="say.number.iterated",data=voicemail_greet_id}); + else + table.insert(actions, {app="say.number.iterated",data=voicemail_id}); + end + table.insert(actions, {app="streamFile",data="voicemail/vm-not_available.wav"}); + end + --record your message at the tone press any key or stop talking to end the recording + if (name == "record_message") then + table.insert(actions, {app="streamFile",data="voicemail/vm-record_message.wav"}); + end + --beep + if (name == "record_beep") then + table.insert(actions, {app="tone_stream",data="L=1;%(1000, 0, 640)"}); + end + --to listen to the recording press 1 + if (name == "to_listen_to_recording") then + table.insert(actions, {app="streamFile",data="voicemail/vm-listen_to_recording.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); + table.insert(actions, {app="streamFile",data="digits/1.wav"}); + end + --to save the recording press 2 + if (name == "to_save_recording") then + table.insert(actions, {app="streamFile",data="voicemail/vm-save_recording.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); + table.insert(actions, {app="streamFile",data="digits/2.wav"}); + end + --to rerecord press 3 + if (name == "to_rerecord") then + table.insert(actions, {app="streamFile",data="voicemail/vm-rerecord.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); + table.insert(actions, {app="streamFile",data="digits/3.wav"}); + end + --You have zero new messages + if (name == "new_messages") then + table.insert(actions, {app="streamFile",data="phrase:voicemail_message_count:" .. param .. ":new"}) + end + --You have zero saved messages + if (name == "saved_messages") then + table.insert(actions, {app="streamFile",data="phrase:voicemail_message_count:" .. param .. ":saved"}) + end + --To listen to new messages press 1 + if (name == "listen_to_new_messages") then + table.insert(actions, {app="streamFile",data="voicemail/vm-listen_new.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); + table.insert(actions, {app="streamFile",data="digits/1.wav"}); + end + --To listen to saved messages press 2 + if (name == "listen_to_saved_messages") then + table.insert(actions, {app="streamFile",data="voicemail/vm-listen_saved.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); + table.insert(actions, {app="streamFile",data="digits/2.wav"}); + end + + --For advanced options press 5 + if (name == "advanced") then + table.insert(actions, {app="streamFile",data="voicemail/vm-advanced.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); + table.insert(actions, {app="streamFile",data="digits/5.wav"}); + end + --Advanced Options Menu + --To record a greeting press 1 + if (name == "to_record_greeting") then + table.insert(actions, {app="streamFile",data="voicemail/vm-to_record_greeting.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); + table.insert(actions, {app="streamFile",data="digits/1.wav"}); + end + --Choose a greeting between 1 and 9 + if (name == "choose_greeting_choose") then + table.insert(actions, {app="streamFile",data="voicemail/vm-choose_greeting_choose.wav"}); + end + --Greeting invalid value + if (name == "choose_greeting_fail") then + table.insert(actions, {app="streamFile",data="voicemail/vm-choose_greeting_fail.wav"}); + end + --Record your greeting at the tone press any key or stop talking to end the recording + if (name == "record_greeting") then + table.insert(actions, {app="streamFile",data="voicemail/vm-record_greeting.wav"}); + table.insert(actions, {app="tone_stream",data="L=1;%(1000, 0, 640)"}); + end + --To choose greeting press 2 + if (name == "choose_greeting") then + table.insert(actions, {app="streamFile",data="voicemail/vm-choose_greeting.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); + table.insert(actions, {app="streamFile",data="digits/2.wav"}); + end + --Greeting 1 selected + if (name == "greeting_selected") then + table.insert(actions, {app="streamFile",data="voicemail/vm-greeting.wav"}); + table.insert(actions, {app="streamFile",data="digits/"..param..".wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-selected.wav"}); + end + + --To record your name 3 + if (name == "to_record_name") then + table.insert(actions, {app="streamFile",data="voicemail/vm-record_name2.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); + table.insert(actions, {app="streamFile",data="digits/3.wav"}); + end + --At the tone please record your name press any key or stop talking to end the recording + if (name == "record_name") then + table.insert(actions, {app="streamFile",data="voicemail/vm-record_name1.wav"}); + table.insert(actions, {app="tone_stream",data="L=1;%(2000, 0, 640)"}); + end + --To change your password press 6 + if (name == "change_password") then + table.insert(actions, {app="streamFile",data="voicemail/vm-change_password.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); + table.insert(actions, {app="streamFile",data="digits/6.wav"}); + end + --For the main menu press 0 + if (name == "main_menu") then + table.insert(actions, {app="streamFile",data="voicemail/vm-main_menu.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); + table.insert(actions, {app="streamFile",data="digits/0.wav"}); + end + --To exit press * + if (name == "to_exit_press") then + table.insert(actions, {app="streamFile",data="voicemail/vm-to_exit.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); + table.insert(actions, {app="streamFile",data="digits/star.wav"}); + end + --Additional Macros + --Please enter your new password then press the # key # + if (name == "password_new") then + table.insert(actions, {app="streamFile",data="voicemail/vm-enter_new_pin.wav"}); + end + --Has been changed to + if (name == "password_changed") then + table.insert(actions, {app="streamFile",data="voicemail/vm-has_been_changed_to.wav"}); + table.insert(actions, {app="say.number.iterated",data=param}); + end + --Login Incorrect + --if (name == "password_not_valid") then + -- table.insert(actions, {app="streamFile",data="voicemail/vm-password_not_valid.wav"}); + --end + --Login Incorrect + if (name == "password_not_valid") then + table.insert(actions, {app="streamFile",data="voicemail/vm-fail_auth.wav"}); + end + --Too many failed attempts + if (name == "too_many_failed_attempts") then + table.insert(actions, {app="streamFile",data="voicemail/vm-abort.wav"}); + end + --Message number + if (name == "message_number") then + table.insert(actions, {app="streamFile",data="voicemail/vm-message_number.wav"}); + end + --To listen to the recording press 1 + if (name == "listen_to_recording") then + table.insert(actions, {app="streamFile",data="voicemail/vm-listen_to_recording.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); + table.insert(actions, {app="streamFile",data="digits/1.wav"}); + end + --To save the recording press 2 + if (name == "save_recording") then + table.insert(actions, {app="streamFile",data="voicemail/vm-save_recording.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); + table.insert(actions, {app="streamFile",data="digits/2.wav"}); + end + --To delete the recording press 7 + if (name == "delete_recording") then + table.insert(actions, {app="streamFile",data="voicemail/vm-delete_recording.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); + table.insert(actions, {app="streamFile",data="digits/7.wav"}); + end + --Message deleted + if (name == "message_deleted") then + table.insert(actions, {app="streamFile",data="voicemail/vm-message.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-deleted.wav"}); + end + --To return the call now press 5 + if (name == "return_call") then + table.insert(actions, {app="streamFile",data="voicemail/vm-return_call.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); + table.insert(actions, {app="streamFile",data="digits/5.wav"}); + end + --To add an introduction to this message press 1 + if (name == "forward_add_intro") then + table.insert(actions, {app="streamFile",data="voicemail/vm-forward_add_intro.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); + table.insert(actions, {app="streamFile",data="digits/1.wav"}); + end + --To forward this message press 8 + if (name == "to_forward_message") then + table.insert(actions, {app="streamFile",data="voicemail/vm-to_forward.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); + table.insert(actions, {app="streamFile",data="digits/8.wav"}); + end + --Please enter the extension to forward this message to followed by # + if (name == "forward_enter_extension") then + table.insert(actions, {app="streamFile",data="voicemail/vm-forward_enter_ext.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-followed_by.wav"}); + table.insert(actions, {app="streamFile",data="ascii/35.wav"}); + end + --To forward this recording to your email press 9 + if (name == "forward_to_email") then + table.insert(actions, {app="streamFile",data="voicemail/vm-forward_to_email.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); + table.insert(actions, {app="streamFile",data="digits/9.wav"}); + end + --Emailed + if (name == "emailed") then + table.insert(actions, {app="streamFile",data="voicemail/vm-emailed.wav"}); + end + --Please enter the extension to send this message to followed by # + --if (name == "send_message_to_extension") then + -- table.insert(actions, {app="streamFile",data="voicemail/vm-zzz.wav"}); + --end + --Message saved + if (name == "message_saved") then + table.insert(actions, {app="streamFile",data="voicemail/vm-message.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-saved.wav"}); + end + --Your recording is below the minimal acceptable length, please try again. + if (name == "too_small") then + table.insert(actions, {app="streamFile",data="voicemail/vm-too-small.wav"}); + end + --Goodbye + if (name == "goodbye") then + table.insert(actions, {app="streamFile",data="voicemail/vm-goodbye.wav"}); + end + --Password is not secure + if (name == "password_not_secure") then + table.insert(actions, {app="streamFile",data="voicemail/vm-password_is_not_secure.wav"}); + end + --Password is below minimum length + if (name == "password_below_minimum") then + table.insert(actions, {app="streamFile",data="voicemail/vm-pin_below_minimum_length.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-minimum_pin_length_is.wav"}); + table.insert(actions, {app="streamFile",data="digits/"..param..".wav"}); + end + --Tutorial + --Tutorial intro + if (name == "tutorial_intro") then + table.insert(actions, {app="streamFile",data="voicemail/vm-tutorial_yes_no.wav"}); + end + + --Tutorial to record your name 1 + if (name == "tutorial_to_record_name") then + table.insert(actions, {app="streamFile",data="voicemail/vm-tutorial_record_name.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-record_name2.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); + table.insert(actions, {app="streamFile",data="digits/1.wav"}); + end + + --Tutorial to change your password press 1 + if (name == "tutorial_change_password") then + table.insert(actions, {app="streamFile",data="voicemail/vm-tutorial_change_pin.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-change_password.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); + table.insert(actions, {app="streamFile",data="digits/1.wav"}); + end + + --Tutorial to record your greeting press 1 + if (name == "tutorial_record_greeting") then + table.insert(actions, {app="streamFile",data="voicemail/vm-to_record_greeting.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); + table.insert(actions, {app="streamFile",data="digits/1.wav"}); + end + + --Tutorial To skip + if (name == "tutorial_skip") then + table.insert(actions, {app="streamFile",data="ivr/ivr-to_skip.wav"}); + table.insert(actions, {app="streamFile",data="voicemail/vm-press.wav"}); + table.insert(actions, {app="streamFile",data="digits/2.wav"}); + end + + --if actions table exists then process it + if (actions) then + --set default values + tries = 1; + timeout = 100; + --loop through the action and data + for key, row in pairs(actions) do + -- freeswitch.consoleLog("notice", "[voicemail] app: " .. row.app .. " data: " .. row.data .. "\n"); + if (session:ready()) then + if (string.len(dtmf_digits) == 0) then + if (row.app == "streamFile") then + if string.find(row.data, ':', nil, true) then + session:streamFile(row.data); + else + session:streamFile(sounds_dir.."/"..default_language.."/"..default_dialect.."/"..default_voice.."/"..row.data); + end + elseif (row.app == "playback") then + session:streamFile(sounds_dir.."/"..default_language.."/"..default_dialect.."/"..default_voice.."/"..row.data); + elseif (row.app == "tone_stream") then + session:streamFile("tone_stream://"..row.data); + elseif (row.app == "silence_stream") then + session:streamFile("silence_stream://100"..row.data); + elseif (row.app == "playAndGetDigits") then + --playAndGetDigits + if (not file_exists(sounds_dir.."/"..default_language.."/"..default_dialect.."/"..default_voice.."/"..row.data)) then + dtmf_digits = session:playAndGetDigits(min_digits, max_digits, tries, timeout, "#", sounds_dir.."/"..default_language.."/"..default_dialect.."/"..default_voice.."/"..row.data, "", "\\d+", max_timeout); + else + dtmf_digits = session:playAndGetDigits(min_digits, max_digits, tries, timeout, "#", row.data, "", "\\d+", max_timeout); + end + elseif (row.app == "say.number.pronounced") then + session:say(row.data, default_language, "number", "pronounced"); + elseif (row.app == "say.number.iterated") then + session:say(row.data, default_language, "number", "iterated"); + end + --session:streamFile("silence_stream://100"); + end --if + end --session:ready + end --for + --get the remaining digits + if (session:ready()) then + if (string.len(dtmf_digits) < max_digits) then + dtmf_digits = dtmf_digits .. session:getDigits(max_digits, "#", max_timeout); + end + end + --return dtmf the digits + return dtmf_digits; + else + --no dtmf digits to return + return ''; + end + end + end diff --git a/app/scripts/resources/scripts/app/voicemail/resources/functions/main_menu.lua b/app/scripts/resources/scripts/app/voicemail/resources/functions/main_menu.lua index 6f9054ea77..ee12c4fe6a 100644 --- a/app/scripts/resources/scripts/app/voicemail/resources/functions/main_menu.lua +++ b/app/scripts/resources/scripts/app/voicemail/resources/functions/main_menu.lua @@ -37,6 +37,7 @@ session:answer(); session:execute("sleep", "1000"); end + --new voicemail count if (session:ready()) then local sql = [[SELECT count(*) as new_messages FROM v_voicemail_messages @@ -50,7 +51,7 @@ dbh:query(sql, params, function(row) new_messages = row["new_messages"]; end); - dtmf_digits = macro(session, "new_messages", 1, 100, new_messages); + dtmf_digits = session:playAndGetDigits(0, 1, max_tries, 300, "#", "phrase:voicemail_message_count:" .. new_messages .. ":new", "", "\\d+"); end --saved voicemail count if (session:ready()) then @@ -66,25 +67,26 @@ dbh:query(sql, params, function(row) saved_messages = row["saved_messages"]; end); - dtmf_digits = macro(session, "saved_messages", 1, 100, saved_messages); + dtmf_digits = session:playAndGetDigits(0, 1, max_tries, 300, "#", "phrase:voicemail_message_count:" .. saved_messages .. ":saved", "", "\\d+"); end end + --to listen to new message if (session:ready() and new_messages ~= '0') then if (string.len(dtmf_digits) == 0) then - dtmf_digits = macro(session, "listen_to_new_messages", 1, 100, ''); + dtmf_digits = session:playAndGetDigits(0, 1, max_tries, 100, "#", "phrase:voicemail_main_menu:new:1", "", "\\d+"); end end --to listen to saved message if (session:ready() and saved_messages ~= '0') then if (string.len(dtmf_digits) == 0) then - dtmf_digits = macro(session, "listen_to_saved_messages", 1, 100, ''); + dtmf_digits = session:playAndGetDigits(0, 1, max_tries, 100, "#", "phrase:voicemail_main_menu:saved:2", "", "\\d+"); end end --for advanced options if (session:ready()) then if (string.len(dtmf_digits) == 0) then - dtmf_digits = macro(session, "advanced", 1, 100, ''); + dtmf_digits = session:playAndGetDigits(0, 1, max_tries, 3000, "#", "phrase:voicemail_main_menu:advanced:5", "", "\\d+"); end end --to exit press # @@ -106,7 +108,7 @@ main_menu(); elseif (dtmf_digits == "*") then dtmf_digits = ''; - macro(session, "goodbye", 1, 100, ''); + session:execute("playback", "phrase:voicemail_goodbye"); session:hangup(); else if (session:ready()) then @@ -114,7 +116,7 @@ if (timeouts < max_timeouts) then main_menu(); else - macro(session, "goodbye", 1, 1000, ''); + session:execute("playback", "phrase:voicemail_goodbye"); session:hangup(); end end diff --git a/app/scripts/resources/scripts/app/voicemail/resources/functions/menu_messages.lua b/app/scripts/resources/scripts/app/voicemail/resources/functions/menu_messages.lua index 317e7ccea6..ef19160e9b 100644 --- a/app/scripts/resources/scripts/app/voicemail/resources/functions/menu_messages.lua +++ b/app/scripts/resources/scripts/app/voicemail/resources/functions/menu_messages.lua @@ -82,7 +82,7 @@ if (debug["info"]) then freeswitch.consoleLog("notice", message_number.." "..string.lower(row["voicemail_message_uuid"]).." "..row["created_epoch"]); end - listen_to_recording(message_number, string.lower(row["voicemail_message_uuid"]), row["created_epoch"], row["caller_id_name"], row["caller_id_number"]); + listen_to_recording(message_number, string.lower(row["voicemail_message_uuid"]), row["created_epoch"], row["caller_id_name"], row["caller_id_number"], message_status); end end); end diff --git a/app/scripts/resources/scripts/app/voicemail/resources/functions/play_greeting.lua b/app/scripts/resources/scripts/app/voicemail/resources/functions/play_greeting.lua index 2d10b673a2..e4a67f498d 100644 --- a/app/scripts/resources/scripts/app/voicemail/resources/functions/play_greeting.lua +++ b/app/scripts/resources/scripts/app/voicemail/resources/functions/play_greeting.lua @@ -1,109 +1,117 @@ --- Part of FusionPBX --- Copyright (C) 2013 Mark J Crane --- All rights reserved. --- --- Redistribution and use in source and binary forms, with or without --- modification, are permitted provided that the following conditions are met: --- --- 1. Redistributions of source code must retain the above copyright notice, --- this list of conditions and the following disclaimer. --- --- 2. Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in the --- documentation and/or other materials provided with the distribution. --- --- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, --- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY --- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE --- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, --- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF --- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS --- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN --- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) --- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE --- POSSIBILITY OF SUCH DAMAGE. - - local Database = require"resources.functions.database" - ---play the greeting - function play_greeting() - timeout = 100; - tries = 1; - max_timeout = 200; - - --voicemail prompt - if (skip_greeting == "true") then - --skip the greeting - else - if (session:ready()) then - --set the greeting based on the voicemail_greeting_number variable - if (voicemail_greeting_number ~= nil) then - if (string.len(voicemail_greeting_number) > 0) then - greeting_id = voicemail_greeting_number; - end - end - - --play the greeting - dtmf_digits = ''; - if (string.len(greeting_id) > 0) then - - --sleep - session:execute("playback","silence_stream://200"); - - --get the greeting from the database - if (storage_type == "base64") then - local dbh = Database.new('system', 'base64/read') - - local sql = [[SELECT * FROM v_voicemail_greetings - WHERE domain_uuid = :domain_uuid - AND voicemail_id = :voicemail_id - AND greeting_id = :greeting_id ]]; - local params = {domain_uuid = domain_uuid, voicemail_id = voicemail_id, - greeting_id = greeting_id}; - if (debug["sql"]) then - freeswitch.consoleLog("notice", "[voicemail] SQL: " .. sql .. "; params:" .. json.encode(params) .. "\n"); - end - local saved - dbh:query(sql, params, function(row) - --set the voicemail message path - mkdir(voicemail_dir.."/"..voicemail_id); - greeting_location = voicemail_dir.."/"..voicemail_id.."/greeting_"..greeting_id..".wav"; --vm_message_ext; - - --if not found, save greeting to local file system - --saved = file_exists(greeting_location) - --if not saved then - if (string.len(row["greeting_base64"]) > 32) then - --include the file io - local file = require "resources.functions.file" - - --write decoded string to file - saved = file.write_base64(greeting_location, row["greeting_base64"]); - end - --end - end); - dbh:release(); - - if saved then - --play the greeting - dtmf_digits = session:playAndGetDigits(min_digits, max_digits, tries, timeout, "#", voicemail_dir.."/"..voicemail_id.."/greeting_"..greeting_id..".wav", "", ".*", max_timeout); - --session:execute("playback",voicemail_dir.."/"..voicemail_id.."/greeting_"..greeting_id..".wav"); - - --delete the greeting (retain local for better responsiveness) - --os.remove(voicemail_dir.."/"..voicemail_id.."/greeting_"..greeting_id..".wav"); - end - elseif (storage_type == "http_cache") then - dtmf_digits = session:playAndGetDigits(min_digits, max_digits, tries, timeout, "#", voicemail_dir.."/"..voicemail_id.."/greeting_"..greeting_id..".wav", "", ".*", max_timeout); - --session:execute("playback",storage_path.."/"..voicemail_id.."/greeting_"..greeting_id..".wav"); - else - dtmf_digits = session:playAndGetDigits(min_digits, max_digits, tries, timeout, "#", voicemail_dir.."/"..voicemail_id.."/greeting_"..greeting_id..".wav", "",".*", max_timeout); - --session:execute("playback",voicemail_dir.."/"..voicemail_id.."/greeting_"..greeting_id..".wav"); - end - - else - --default greeting - session:execute("playback","silence_stream://200"); - dtmf_digits = macro(session, "person_not_available_record_message", 1, 200); - end - end - end - end +-- Part of FusionPBX +-- Copyright (C) 2013 Mark J Crane +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- +-- 1. Redistributions of source code must retain the above copyright notice, +-- this list of conditions and the following disclaimer. +-- +-- 2. Redistributions in binary form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in the +-- documentation and/or other materials provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +-- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +-- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +-- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +-- POSSIBILITY OF SUCH DAMAGE. + + local Database = require"resources.functions.database" + +--play the greeting + function play_greeting() + timeout = 100; + tries = 1; + max_timeout = 200; + + --voicemail prompt + if (skip_greeting == "true") then + --skip the greeting + else + if (session:ready()) then + --set the greeting based on the voicemail_greeting_number variable + if (voicemail_greeting_number ~= nil) then + if (string.len(voicemail_greeting_number) > 0) then + greeting_id = voicemail_greeting_number; + end + end + + --play the greeting + dtmf_digits = ''; + if (string.len(greeting_id) > 0) then + + --sleep + session:execute("playback","silence_stream://200"); + + --get the greeting from the database + if (storage_type == "base64") then + local dbh = Database.new('system', 'base64/read') + + local sql = [[SELECT * FROM v_voicemail_greetings + WHERE domain_uuid = :domain_uuid + AND voicemail_id = :voicemail_id + AND greeting_id = :greeting_id ]]; + local params = {domain_uuid = domain_uuid, voicemail_id = voicemail_id, + greeting_id = greeting_id}; + if (debug["sql"]) then + freeswitch.consoleLog("notice", "[voicemail] SQL: " .. sql .. "; params:" .. json.encode(params) .. "\n"); + end + local saved + dbh:query(sql, params, function(row) + --set the voicemail message path + mkdir(voicemail_dir.."/"..voicemail_id); + greeting_location = voicemail_dir.."/"..voicemail_id.."/greeting_"..greeting_id..".wav"; --vm_message_ext; + + --if not found, save greeting to local file system + --saved = file_exists(greeting_location) + --if not saved then + if (string.len(row["greeting_base64"]) > 32) then + --include the file io + local file = require "resources.functions.file" + + --write decoded string to file + saved = file.write_base64(greeting_location, row["greeting_base64"]); + end + --end + end); + dbh:release(); + + if saved then + --play the greeting + dtmf_digits = session:playAndGetDigits(min_digits, max_digits, tries, timeout, "#", voicemail_dir.."/"..voicemail_id.."/greeting_"..greeting_id..".wav", "", ".*", max_timeout); + --session:execute("playback",voicemail_dir.."/"..voicemail_id.."/greeting_"..greeting_id..".wav"); + + --delete the greeting (retain local for better responsiveness) + --os.remove(voicemail_dir.."/"..voicemail_id.."/greeting_"..greeting_id..".wav"); + end + elseif (storage_type == "http_cache") then + dtmf_digits = session:playAndGetDigits(min_digits, max_digits, tries, timeout, "#", voicemail_dir.."/"..voicemail_id.."/greeting_"..greeting_id..".wav", "", ".*", max_timeout); + --session:execute("playback",storage_path.."/"..voicemail_id.."/greeting_"..greeting_id..".wav"); + else + dtmf_digits = session:playAndGetDigits(min_digits, max_digits, tries, timeout, "#", voicemail_dir.."/"..voicemail_id.."/greeting_"..greeting_id..".wav", "",".*", max_timeout); + --session:execute("playback",voicemail_dir.."/"..voicemail_id.."/greeting_"..greeting_id..".wav"); + end + + else + --default greeting + session:execute("playback","silence_stream://200"); + --determine the voicemail_id to say + if (voicemail_alternate_greet_id and string.len(voicemail_alternate_greet_id) > 0) then + voicemail_id_say = voicemail_alternate_greet_id; + elseif (voicemail_greet_id and string.len(voicemail_greet_id) > 0) then + voicemail_id_say = voicemail_greet_id; + else + voicemail_id_say = voicemail_id; + end + dtmf_digits = session:playAndGetDigits(0, 1, 1, 200, "#", "phrase:voicemail_play_greeting:" .. voicemail_id_say, "", "\\d+"); + end + end + end + end diff --git a/app/scripts/resources/scripts/app/voicemail/resources/functions/record_greeting.lua b/app/scripts/resources/scripts/app/voicemail/resources/functions/record_greeting.lua index ab3cef37ea..eaf0155506 100644 --- a/app/scripts/resources/scripts/app/voicemail/resources/functions/record_greeting.lua +++ b/app/scripts/resources/scripts/app/voicemail/resources/functions/record_greeting.lua @@ -51,7 +51,7 @@ if (greeting_id == nil) then if (session:ready()) then dtmf_digits = ''; - greeting_id = macro(session, "choose_greeting_choose", 1, 5000, ''); + greeting_id = session:playAndGetDigits(1, 1, max_tries, 5000, "#", "phrase:voicemail_choose_greeting", "", "\\d+"); freeswitch.consoleLog("notice", "[voicemail] greeting_id: " .. greeting_id .. "\n"); end end @@ -69,7 +69,9 @@ --record your greeting at the tone press any key or stop talking to end the recording if (session:ready()) then dtmf_digits = ''; - macro(session, "record_greeting", 1, 100, ''); + session:execute("playback", "phrase:voicemail_record_greeting"); + session:execute("sleep", "1000"); + session:streamFile("tone_stream://L=1;%(1000, 0, 640)"); end --store the voicemail greeting @@ -104,7 +106,8 @@ --invalid greeting_id if (session:ready()) then dtmf_digits = ''; - macro(session, "choose_greeting_fail", 1, 100, ''); + session:execute("playback", "phrase:voicemail_choose_greeting_fail"); + session:execute("sleep", "500"); end --send back to choose the greeting diff --git a/app/scripts/resources/scripts/app/voicemail/resources/functions/record_menu.lua b/app/scripts/resources/scripts/app/voicemail/resources/functions/record_menu.lua index 864f2c7704..6891500bb7 100644 --- a/app/scripts/resources/scripts/app/voicemail/resources/functions/record_menu.lua +++ b/app/scripts/resources/scripts/app/voicemail/resources/functions/record_menu.lua @@ -30,22 +30,10 @@ dtmf_digits = ''; --flush dtmf digits from the input buffer session:flushDigits(); - --to listen to the recording press 1 + --to listen to the recording press 1, to save the recording press 2, to re-record press 3 if (session:ready()) then if (string.len(dtmf_digits) == 0) then - dtmf_digits = macro(session, "to_listen_to_recording", 1, 100, ''); - end - end - --to save the recording press 2 - if (session:ready()) then - if (string.len(dtmf_digits) == 0) then - dtmf_digits = macro(session, "to_save_recording", 1, 100, ''); - end - end - --to re-record press 3 - if (session:ready()) then - if (string.len(dtmf_digits) == 0) then - dtmf_digits = macro(session, "to_rerecord", 1, 3000, ''); + dtmf_digits = session:playAndGetDigits(0, 1, max_tries, 3000, "#", "phrase:voicemail_record_file_options:1:2:3", "", "\\d+"); end end --process the dtmf @@ -59,10 +47,11 @@ elseif (dtmf_digits == "2") then --save the message dtmf_digits = ''; - macro(session, "message_saved", 1, 100, ''); + session:execute("playback", "phrase:voicemail_ack:saved"); + session:execute("sleep", "500"); if (type == "message") then --goodbye - macro(session, "goodbye", 1, 100, ''); + session:execute("playback", "phrase:voicemail_goodbye"); --hangup the call session:hangup(); end @@ -204,7 +193,7 @@ --hangup if (session:ready()) then dtmf_digits = ''; - macro(session, "goodbye", 1, 100, ''); + session:execute("playback", "phrase:voicemail_goodbye"); session:hangup(); end else @@ -215,8 +204,9 @@ else if (type == "message") then dtmf_digits = ''; - macro(session, "message_saved", 1, 100, ''); - macro(session, "goodbye", 1, 1000, ''); + session:execute("playback", "phrase:voicemail_ack:saved"); + session:execute("sleep", "300"); + session:execute("playback", "phrase:voicemail_goodbye"); session:hangup(); end if (type == "greeting") then diff --git a/app/scripts/resources/scripts/app/voicemail/resources/functions/record_message.lua b/app/scripts/resources/scripts/app/voicemail/resources/functions/record_message.lua index 3e107e2f99..5031eede56 100644 --- a/app/scripts/resources/scripts/app/voicemail/resources/functions/record_message.lua +++ b/app/scripts/resources/scripts/app/voicemail/resources/functions/record_message.lua @@ -344,10 +344,10 @@ --skip the instructions else if (dtmf_digits and string.len(dtmf_digits) == 0) then - dtmf_digits = macro(session, "record_message", 1, 100); + dtmf_digits = session:playAndGetDigits(0, 1, 1, 500, "#", "phrase:voicemail_record_message", "", "\\d+"); end end - + --voicemail ivr options if (session:ready()) then if (dtmf_digits == nil) then @@ -455,7 +455,7 @@ --play the beep dtmf_digits = ''; - result = macro(session, "record_beep", 1, 100); + session:streamFile("tone_stream://L=1;%(1000, 0, 640)"); --start epoch start_epoch = os.time(); @@ -526,7 +526,8 @@ if (session:ready()) then --your recording is below the minimal acceptable length, please try again dtmf_digits = ''; - macro(session, "too_small", 1, 100); + session:execute("playback", "phrase:voicemail_ack:too-small"); + session:execute("sleep", "500"); --record your message at the tone timeouts = timeouts + 1; if (timeouts < max_timeouts) then @@ -543,8 +544,9 @@ if (skip_instructions == "true") then --save the message dtmf_digits = ''; - macro(session, "message_saved", 1, 100, ''); - macro(session, "goodbye", 1, 100, ''); + session:execute("playback", "phrase:voicemail_ack:saved"); + session:execute("sleep", "300"); + session:execute("playback", "phrase:voicemail_goodbye"); --hangup the call session:hangup(); else diff --git a/app/scripts/resources/scripts/app/voicemail/resources/functions/record_name.lua b/app/scripts/resources/scripts/app/voicemail/resources/functions/record_name.lua index 549340db89..bad6a37bbf 100644 --- a/app/scripts/resources/scripts/app/voicemail/resources/functions/record_name.lua +++ b/app/scripts/resources/scripts/app/voicemail/resources/functions/record_name.lua @@ -32,7 +32,9 @@ --play the name record dtmf_digits = ''; - macro(session, "record_name", 1, 100, ''); + session:execute("playback", "phrase:voicemail_record_name"); + session:execute("sleep", "1000"); + session:streamFile("tone_stream://L=1;%(1000, 0, 640)"); --prepate to record -- syntax is session:recordFile(file_name, max_len_secs, silence_threshold, silence_secs) diff --git a/app/scripts/resources/scripts/app/voicemail/resources/functions/send_email.lua b/app/scripts/resources/scripts/app/voicemail/resources/functions/send_email.lua index 5d598c19ec..9cea840773 100644 --- a/app/scripts/resources/scripts/app/voicemail/resources/functions/send_email.lua +++ b/app/scripts/resources/scripts/app/voicemail/resources/functions/send_email.lua @@ -1,5 +1,5 @@ -- Part of FusionPBX --- Copyright (C) 2013 - 2020 Mark J Crane +-- Copyright (C) 2013 Mark J Crane -- All rights reserved. -- -- Redistribution and use in source and binary forms, with or without @@ -73,18 +73,11 @@ dbh = Database.new('system', 'base64/read') end - --get the time zone - local time_zone = settings:get('domain', 'time_zone', 'name'); - if (time_zone == nil) then - time_zone = 'UTC'; - end - --get voicemail message details - local sql = [[SELECT to_char(timezone(:time_zone, to_timestamp(created_epoch)), 'Day DD Mon YYYY HH:MM:SS PM') as message_date, * - FROM v_voicemail_messages + local sql = [[SELECT * FROM v_voicemail_messages WHERE domain_uuid = :domain_uuid AND voicemail_message_uuid = :uuid]] - local params = {domain_uuid = domain_uuid, uuid = uuid, time_zone = time_zone}; + local params = {domain_uuid = domain_uuid, uuid = uuid}; if (debug["sql"]) then freeswitch.consoleLog("notice", "[voicemail] SQL: " .. sql .. "; params:" .. json.encode(params) .. "\n"); end @@ -94,7 +87,6 @@ created_epoch = row["created_epoch"]; caller_id_name = row["caller_id_name"]; caller_id_number = row["caller_id_number"]; - message_date = row["message_date"]; message_length = row["message_length"]; --message_status = row["message_status"]; --message_priority = row["message_priority"]; @@ -122,10 +114,9 @@ --format the message length and date message_length_formatted = format_seconds(message_length); if (debug["info"]) then - freeswitch.consoleLog("notice", "[voicemail] message date: " .. message_date .. "\n"); freeswitch.consoleLog("notice", "[voicemail] message length: " .. message_length .. "\n"); end - --local message_date = os.date("%A, %d %b %Y %I:%M %p", created_epoch); + local message_date = os.date("%A, %d %b %Y %I:%M %p", created_epoch); --connect to the database local dbh = Database.new('system'); diff --git a/app/scripts/resources/scripts/app/voicemail/resources/functions/tutorial.lua b/app/scripts/resources/scripts/app/voicemail/resources/functions/tutorial.lua index 414220ffe7..8da6d8aac5 100644 --- a/app/scripts/resources/scripts/app/voicemail/resources/functions/tutorial.lua +++ b/app/scripts/resources/scripts/app/voicemail/resources/functions/tutorial.lua @@ -1,197 +1,197 @@ --- Part of FusionPBX --- Copyright (C) 2013 Mark J Crane --- All rights reserved. --- --- Redistribution and use in source and binary forms, with or without --- modification, are permitted provided that the following conditions are met: --- --- 1. Redistributions of source code must retain the above copyright notice, --- this list of conditions and the following disclaimer. --- --- 2. Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in the --- documentation and/or other materials provided with the distribution. --- --- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, --- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY --- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE --- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, --- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF --- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS --- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN --- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) --- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE --- POSSIBILITY OF SUCH DAMAGE. - ---define function main menu - function tutorial (menu) - if (voicemail_uuid) then - --intro menu - if (menu == "intro") then - --clear the value - dtmf_digits = ''; - --flush dtmf digits from the input buffer - session:flushDigits(); - --play the tutorial press 1, to skip 2 - if (session:ready()) then - if (string.len(dtmf_digits) == 0) then - dtmf_digits = macro(session, "tutorial_intro", 1, 3000, ''); - end - end - --process the dtmf - if (session:ready()) then - if (dtmf_digits == "1") then - timeouts = 0; - tutorial("record_name"); - elseif (dtmf_digits == "2") then - timeouts = 0; - tutorial("finish"); - else - if (session:ready()) then - timeouts = timeouts + 1; - if (timeouts < max_timeouts) then - tutorial("intro"); - else - timeouts = 0; - tutorial("finish"); - end - end - end - end - end - --record name menu - if (menu == "record_name") then - --clear the value - dtmf_digits = ''; - --flush dtmf digits from the input buffer - session:flushDigits(); - --play the record name press 1 - if (session:ready()) then - if (string.len(dtmf_digits) == 0) then - dtmf_digits = macro(session, "tutorial_to_record_name", 1, 100, ''); - end - end - --skip the name and go to password press 2 - if (session:ready()) then - if (string.len(dtmf_digits) == 0) then - dtmf_digits = macro(session, "tutorial_skip", 1, 3000, ''); - end - end - --process the dtmf - if (session:ready()) then - if (dtmf_digits == "1") then - timeouts = 0; - record_name("tutorial"); - elseif (dtmf_digits == "2") then - timeouts = 0; - tutorial("change_password"); - else - if (session:ready()) then - timeouts = timeouts + 1; - if (timeouts < max_timeouts) then - tutorial("record_name"); - else - tutorial("change_password"); - end - end - end - end - end - --change password menu - if (menu == "change_password") then - --clear the value - dtmf_digits = ''; - --flush dtmf digits from the input buffer - session:flushDigits(); - --to change your password press 1 - if (session:ready()) then - if (string.len(dtmf_digits) == 0) then - dtmf_digits = macro(session, "tutorial_change_password", 1, 100, ''); - end - end - --skip the password and go to greeting press 2 - if (session:ready()) then - if (string.len(dtmf_digits) == 0) then - dtmf_digits = macro(session, "tutorial_skip", 1, 3000, ''); - end - end - --process the dtmf - if (session:ready()) then - if (dtmf_digits == "1") then - timeouts = 0; - change_password(voicemail_id, "tutorial"); - elseif (dtmf_digits == "2") then - timeouts = 0; - tutorial("record_greeting"); - else - if (session:ready()) then - timeouts = timeouts + 1; - if (timeouts < max_timeouts) then - tutorial("change_password"); - else - tutorial("record_greeting"); - end - end - end - end - end - --change greeting menu - if (menu == "record_greeting") then - --clear the value - dtmf_digits = ''; - --flush dtmf digits from the input buffer - session:flushDigits(); - --to record a greeting press 1 - if (session:ready()) then - if (string.len(dtmf_digits) == 0) then - dtmf_digits = macro(session, "tutorial_record_greeting", 1, 100, ''); - end - end - --skip the record greeting press 2. finishes the tutorial and routes to main menu - if (session:ready()) then - if (string.len(dtmf_digits) == 0) then - dtmf_digits = macro(session, "tutorial_skip", 1, 3000, ''); - end - end - --process the dtmf - if (session:ready()) then - if (dtmf_digits == "1") then - timeouts = 0; - record_greeting(nil, "tutorial"); - elseif (dtmf_digits == "2") then - timeouts = 0; - tutorial("finish"); - else - if (session:ready()) then - timeouts = timeouts + 1; - if (timeouts < max_timeouts) then - tutorial("record_greeting"); - else - tutorial("finish"); - end - end - end - end - end - if (menu == "finish") then - --clear the value - dtmf_digits = ''; - --flush dtmf digits from the input buffer - session:flushDigits(); - --update play tutorial in the datebase - local sql = [[UPDATE v_voicemails - set voicemail_tutorial = 'false' - WHERE domain_uuid = :domain_uuid - AND voicemail_id = :voicemail_id - AND voicemail_enabled = 'true' ]]; - local params = {domain_uuid = domain_uuid, - voicemail_id = voicemail_id}; - if (debug["sql"]) then - freeswitch.consoleLog("notice", "[voicemail] SQL: " .. sql .. "; params:" .. json.encode(params) .. "\n"); - end - dbh:query(sql, params); - --go to main menu - main_menu(); - end - end - end +-- Part of FusionPBX +-- Copyright (C) 2013 Mark J Crane +-- All rights reserved. +-- +-- Redistribution and use in source and binary forms, with or without +-- modification, are permitted provided that the following conditions are met: +-- +-- 1. Redistributions of source code must retain the above copyright notice, +-- this list of conditions and the following disclaimer. +-- +-- 2. Redistributions in binary form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in the +-- documentation and/or other materials provided with the distribution. +-- +-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +-- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +-- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +-- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +-- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +-- POSSIBILITY OF SUCH DAMAGE. + +--define function main menu + function tutorial (menu) + if (voicemail_uuid) then + --intro menu + if (menu == "intro") then + --clear the value + dtmf_digits = ''; + --flush dtmf digits from the input buffer + session:flushDigits(); + --play the tutorial press 1, to skip 2 + if (session:ready()) then + if (string.len(dtmf_digits) == 0) then + dtmf_digits = session:playAndGetDigits(0, 1, max_tries, 3000, "#", "phrase:tutorial_intro", "", "\\d+"); + end + end + --process the dtmf + if (session:ready()) then + if (dtmf_digits == "1") then + timeouts = 0; + tutorial("record_name"); + elseif (dtmf_digits == "2") then + timeouts = 0; + tutorial("finish"); + else + if (session:ready()) then + timeouts = timeouts + 1; + if (timeouts < max_timeouts) then + tutorial("intro"); + else + timeouts = 0; + tutorial("finish"); + end + end + end + end + end + --record name menu + if (menu == "record_name") then + --clear the value + dtmf_digits = ''; + --flush dtmf digits from the input buffer + session:flushDigits(); + --play the record name press 1 + if (session:ready()) then + if (string.len(dtmf_digits) == 0) then + dtmf_digits = session:playAndGetDigits(0, 1, max_tries, 200, "#", "phrase:tutorial_record_name:1", "", "\\d+"); + end + end + --skip the name and go to password press 2 + if (session:ready()) then + if (string.len(dtmf_digits) == 0) then + dtmf_digits = session:playAndGetDigits(0, 1, max_tries, 3000, "#", "phrase:tutorial_skip:2", "", "\\d+"); + end + end + --process the dtmf + if (session:ready()) then + if (dtmf_digits == "1") then + timeouts = 0; + record_name("tutorial"); + elseif (dtmf_digits == "2") then + timeouts = 0; + tutorial("change_password"); + else + if (session:ready()) then + timeouts = timeouts + 1; + if (timeouts < max_timeouts) then + tutorial("record_name"); + else + tutorial("change_password"); + end + end + end + end + end + --change password menu + if (menu == "change_password") then + --clear the value + dtmf_digits = ''; + --flush dtmf digits from the input buffer + session:flushDigits(); + --to change your password press 1 + if (session:ready()) then + if (string.len(dtmf_digits) == 0) then + dtmf_digits = session:playAndGetDigits(0, 1, max_tries, 200, "#", "phrase:tutorial_change_password:1", "", "\\d+"); + end + end + --skip the password and go to greeting press 2 + if (session:ready()) then + if (string.len(dtmf_digits) == 0) then + dtmf_digits = session:playAndGetDigits(0, 1, max_tries, 3000, "#", "phrase:tutorial_skip:2", "", "\\d+"); + end + end + --process the dtmf + if (session:ready()) then + if (dtmf_digits == "1") then + timeouts = 0; + change_password(voicemail_id, "tutorial"); + elseif (dtmf_digits == "2") then + timeouts = 0; + tutorial("record_greeting"); + else + if (session:ready()) then + timeouts = timeouts + 1; + if (timeouts < max_timeouts) then + tutorial("change_password"); + else + tutorial("record_greeting"); + end + end + end + end + end + --change greeting menu + if (menu == "record_greeting") then + --clear the value + dtmf_digits = ''; + --flush dtmf digits from the input buffer + session:flushDigits(); + --to record a greeting press 1 + if (session:ready()) then + if (string.len(dtmf_digits) == 0) then + dtmf_digits = session:playAndGetDigits(0, 1, max_tries, 200, "#", "phrase:tutorial_record_greeting:1", "", "\\d+"); + end + end + --skip the record greeting press 2. finishes the tutorial and routes to main menu + if (session:ready()) then + if (string.len(dtmf_digits) == 0) then + dtmf_digits = session:playAndGetDigits(0, 1, max_tries, 3000, "#", "phrase:tutorial_skip:2", "", "\\d+"); + end + end + --process the dtmf + if (session:ready()) then + if (dtmf_digits == "1") then + timeouts = 0; + record_greeting(nil, "tutorial"); + elseif (dtmf_digits == "2") then + timeouts = 0; + tutorial("finish"); + else + if (session:ready()) then + timeouts = timeouts + 1; + if (timeouts < max_timeouts) then + tutorial("record_greeting"); + else + tutorial("finish"); + end + end + end + end + end + if (menu == "finish") then + --clear the value + dtmf_digits = ''; + --flush dtmf digits from the input buffer + session:flushDigits(); + --update play tutorial in the datebase + local sql = [[UPDATE v_voicemails + set voicemail_tutorial = 'false' + WHERE domain_uuid = :domain_uuid + AND voicemail_id = :voicemail_id + AND voicemail_enabled = 'true' ]]; + local params = {domain_uuid = domain_uuid, + voicemail_id = voicemail_id}; + if (debug["sql"]) then + freeswitch.consoleLog("notice", "[voicemail] SQL: " .. sql .. "; params:" .. json.encode(params) .. "\n"); + end + dbh:query(sql, params); + --go to main menu + main_menu(); + end + end + end diff --git a/app/voicemails/app_defaults.php b/app/voicemails/app_defaults.php new file mode 100644 index 0000000000..39b4b6d1c1 --- /dev/null +++ b/app/voicemails/app_defaults.php @@ -0,0 +1,57 @@ + + Portions created by the Initial Developer are Copyright (C) 2008-2016 + the Initial Developer. All Rights Reserved. + + Contributor(s): + Mark J Crane +*/ + +//process this only one time +if ($domains_processed == 1) { + + // process change from using macros to phrases + $languages_path = $_SESSION['switch']['phrases']['dir']; + if ($languages_path && file_exists($languages_path)) { + $folder_contents = scandir($languages_path); + if (is_array($folder_contents) && @sizeof($folder_contents) != 0) { + foreach ($folder_contents as $language_abbreviation) { + if ($language_abbreviation == '.' || $language_abbreviation == '..') { continue; } + // adjust language xml to include all xml phrase files in the vm folder + $language_xml_path = $languages_path.'/'.$language_abbreviation.'/'.$language_abbreviation.'.xml'; + if (file_exists($language_xml_path)) { + $language_xml_content = file_get_contents($language_xml_path); + $language_xml_content = str_replace('data="vm/sounds.xml"', 'data="vm/*.xml"', $language_xml_content); + @file_put_contents($language_xml_path, $language_xml_content); + } + // copy voicemail.xml to language/xx/vm folders + $voicemail_xml_source = $_SERVER['PROJECT_ROOT'].'/app/voicemail/resources/switch/languages/'.$language_abbreviation.'/vm/voicemail.xml'; + $voicemail_xml_target = $languages_path.'/'.$language_abbreviation.'/vm/voicemail.xml'; + if (!file_exists($voicemail_xml_target)) { + @copy($voicemail_xml_source, $voicemail_xml_target); + } + } + } + } + unset($languages_path, $folder_contents, $language_abbreviation, $language_xml_path, $language_xml_content, $voicemail_xml_source, $voicemail_xml_target); + +} + +?> \ No newline at end of file diff --git a/app/voicemails/resources/switch/languages/ar/vm/voicemail.xml b/app/voicemails/resources/switch/languages/ar/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/app/voicemails/resources/switch/languages/ar/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/voicemails/resources/switch/languages/de/vm/voicemail.xml b/app/voicemails/resources/switch/languages/de/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/app/voicemails/resources/switch/languages/de/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/voicemails/resources/switch/languages/en/vm/voicemail.xml b/app/voicemails/resources/switch/languages/en/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/app/voicemails/resources/switch/languages/en/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/voicemails/resources/switch/languages/es/vm/voicemail.xml b/app/voicemails/resources/switch/languages/es/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/app/voicemails/resources/switch/languages/es/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/voicemails/resources/switch/languages/fr/vm/voicemail.xml b/app/voicemails/resources/switch/languages/fr/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/app/voicemails/resources/switch/languages/fr/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/voicemails/resources/switch/languages/he/vm/voicemail.xml b/app/voicemails/resources/switch/languages/he/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/app/voicemails/resources/switch/languages/he/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/voicemails/resources/switch/languages/it/vm/voicemail.xml b/app/voicemails/resources/switch/languages/it/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/app/voicemails/resources/switch/languages/it/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/voicemails/resources/switch/languages/nl/vm/voicemail.xml b/app/voicemails/resources/switch/languages/nl/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/app/voicemails/resources/switch/languages/nl/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/voicemails/resources/switch/languages/pt/vm/voicemail.xml b/app/voicemails/resources/switch/languages/pt/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/app/voicemails/resources/switch/languages/pt/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/voicemails/resources/switch/languages/ro/vm/voicemail.xml b/app/voicemails/resources/switch/languages/ro/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/app/voicemails/resources/switch/languages/ro/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/voicemails/resources/switch/languages/ru/vm/voicemail.xml b/app/voicemails/resources/switch/languages/ru/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/app/voicemails/resources/switch/languages/ru/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/voicemails/resources/switch/languages/sv/vm/voicemail.xml b/app/voicemails/resources/switch/languages/sv/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/app/voicemails/resources/switch/languages/sv/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/voicemails/resources/switch/languages/tr/vm/voicemail.xml b/app/voicemails/resources/switch/languages/tr/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/app/voicemails/resources/switch/languages/tr/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/voicemails/resources/switch/languages/uk/vm/voicemail.xml b/app/voicemails/resources/switch/languages/uk/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/app/voicemails/resources/switch/languages/uk/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/templates/conf/languages/ar/ar.xml b/resources/templates/conf/languages/ar/ar.xml index 0133450806..23f7ddacb8 100644 --- a/resources/templates/conf/languages/ar/ar.xml +++ b/resources/templates/conf/languages/ar/ar.xml @@ -1,10 +1,10 @@ - + - + diff --git a/resources/templates/conf/languages/ar/vm/voicemail.xml b/resources/templates/conf/languages/ar/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/resources/templates/conf/languages/ar/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/templates/conf/languages/de/de.xml b/resources/templates/conf/languages/de/de.xml index 86e1f07019..5f024e79e8 100644 --- a/resources/templates/conf/languages/de/de.xml +++ b/resources/templates/conf/languages/de/de.xml @@ -4,7 +4,7 @@ - + diff --git a/resources/templates/conf/languages/de/vm/voicemail.xml b/resources/templates/conf/languages/de/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/resources/templates/conf/languages/de/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/templates/conf/languages/en/en.xml b/resources/templates/conf/languages/en/en.xml index 0133450806..621abcfe5e 100644 --- a/resources/templates/conf/languages/en/en.xml +++ b/resources/templates/conf/languages/en/en.xml @@ -4,7 +4,7 @@ - + diff --git a/resources/templates/conf/languages/en/vm/voicemail.xml b/resources/templates/conf/languages/en/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/resources/templates/conf/languages/en/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/templates/conf/languages/es/es.xml b/resources/templates/conf/languages/es/es.xml index c7dfd03cd2..228308ba8f 100644 --- a/resources/templates/conf/languages/es/es.xml +++ b/resources/templates/conf/languages/es/es.xml @@ -4,7 +4,7 @@ - + diff --git a/resources/templates/conf/languages/es/vm/voicemail.xml b/resources/templates/conf/languages/es/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/resources/templates/conf/languages/es/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/templates/conf/languages/fr/fr.xml b/resources/templates/conf/languages/fr/fr.xml index 339e7ec939..4d8adc2ea2 100644 --- a/resources/templates/conf/languages/fr/fr.xml +++ b/resources/templates/conf/languages/fr/fr.xml @@ -4,7 +4,7 @@ - + diff --git a/resources/templates/conf/languages/fr/vm/voicemail.xml b/resources/templates/conf/languages/fr/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/resources/templates/conf/languages/fr/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/templates/conf/languages/he/he.xml b/resources/templates/conf/languages/he/he.xml index fb0c48ed70..e5a5fe51e3 100644 --- a/resources/templates/conf/languages/he/he.xml +++ b/resources/templates/conf/languages/he/he.xml @@ -4,7 +4,7 @@ - + diff --git a/resources/templates/conf/languages/he/vm/voicemail.xml b/resources/templates/conf/languages/he/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/resources/templates/conf/languages/he/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/templates/conf/languages/it/it.xml b/resources/templates/conf/languages/it/it.xml index 420e5ecca0..5745d7ba27 100644 --- a/resources/templates/conf/languages/it/it.xml +++ b/resources/templates/conf/languages/it/it.xml @@ -4,7 +4,7 @@ - + diff --git a/resources/templates/conf/languages/it/vm/voicemail.xml b/resources/templates/conf/languages/it/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/resources/templates/conf/languages/it/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/templates/conf/languages/nl/nl.xml b/resources/templates/conf/languages/nl/nl.xml index a8b9e34dc9..ee04ecd119 100644 --- a/resources/templates/conf/languages/nl/nl.xml +++ b/resources/templates/conf/languages/nl/nl.xml @@ -4,7 +4,7 @@ - + diff --git a/resources/templates/conf/languages/nl/vm/voicemail.xml b/resources/templates/conf/languages/nl/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/resources/templates/conf/languages/nl/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/templates/conf/languages/pt/pt.xml b/resources/templates/conf/languages/pt/pt.xml index efd9efd5eb..0005d507a2 100644 --- a/resources/templates/conf/languages/pt/pt.xml +++ b/resources/templates/conf/languages/pt/pt.xml @@ -4,7 +4,7 @@ - + diff --git a/resources/templates/conf/languages/pt/vm/voicemail.xml b/resources/templates/conf/languages/pt/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/resources/templates/conf/languages/pt/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/templates/conf/languages/ro/ro.xml b/resources/templates/conf/languages/ro/ro.xml index 06ee6beaf0..a7a98280b7 100644 --- a/resources/templates/conf/languages/ro/ro.xml +++ b/resources/templates/conf/languages/ro/ro.xml @@ -4,7 +4,7 @@ - + diff --git a/resources/templates/conf/languages/ro/vm/voicemail.xml b/resources/templates/conf/languages/ro/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/resources/templates/conf/languages/ro/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/templates/conf/languages/ru/ru.xml b/resources/templates/conf/languages/ru/ru.xml index a4c09f1bcf..40c1bfbbea 100644 --- a/resources/templates/conf/languages/ru/ru.xml +++ b/resources/templates/conf/languages/ru/ru.xml @@ -5,7 +5,7 @@ - + diff --git a/resources/templates/conf/languages/ru/vm/voicemail.xml b/resources/templates/conf/languages/ru/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/resources/templates/conf/languages/ru/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/templates/conf/languages/sv/sv.xml b/resources/templates/conf/languages/sv/sv.xml index 7585eb7209..f3643289b8 100644 --- a/resources/templates/conf/languages/sv/sv.xml +++ b/resources/templates/conf/languages/sv/sv.xml @@ -4,7 +4,7 @@ - + diff --git a/resources/templates/conf/languages/sv/vm/voicemail.xml b/resources/templates/conf/languages/sv/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/resources/templates/conf/languages/sv/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/templates/conf/languages/tr/tr.xml b/resources/templates/conf/languages/tr/tr.xml index affa2b63c9..7334d71996 100644 --- a/resources/templates/conf/languages/tr/tr.xml +++ b/resources/templates/conf/languages/tr/tr.xml @@ -4,7 +4,7 @@ - + diff --git a/resources/templates/conf/languages/tr/vm/voicemail.xml b/resources/templates/conf/languages/tr/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/resources/templates/conf/languages/tr/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/templates/conf/languages/uk/uk.xml b/resources/templates/conf/languages/uk/uk.xml index 9f405558d7..2225209b61 100644 --- a/resources/templates/conf/languages/uk/uk.xml +++ b/resources/templates/conf/languages/uk/uk.xml @@ -4,7 +4,7 @@ - + diff --git a/resources/templates/conf/languages/uk/vm/voicemail.xml b/resources/templates/conf/languages/uk/vm/voicemail.xml new file mode 100644 index 0000000000..a44695c05d --- /dev/null +++ b/resources/templates/conf/languages/uk/vm/voicemail.xml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file