aboutsummaryrefslogtreecommitdiffstats
path: root/config/freeswitch_dev
diff options
context:
space:
mode:
authormcrane <mctch@yahoo.com>2009-07-22 05:32:38 -0600
committermcrane <mctch@yahoo.com>2009-07-22 05:32:38 -0600
commit21c87ae73aa3cd317e3eeeab22342a0c25c386f5 (patch)
treeda770672dcfe6e46712da9ef1a462a6308053f71 /config/freeswitch_dev
parent122c1cb7e5efb2e4c0ed1f12617c0cf39ab5dc06 (diff)
downloadpfsense-packages-21c87ae73aa3cd317e3eeeab22342a0c25c386f5.tar.gz
pfsense-packages-21c87ae73aa3cd317e3eeeab22342a0c25c386f5.tar.bz2
pfsense-packages-21c87ae73aa3cd317e3eeeab22342a0c25c386f5.zip
FreeSWITCH package add optional pin number and caller announce to the huntgroup, dialplan default.xml add *97 for general voicemail box access, optional 5 digit extensions, add work around for broken path when clicking on the pfsense logo.
Diffstat (limited to 'config/freeswitch_dev')
-rw-r--r--config/freeswitch_dev/dialplan.default.xml52
-rw-r--r--config/freeswitch_dev/freeswitch.inc568
-rw-r--r--config/freeswitch_dev/freeswitch_hunt_group.tmp32
-rw-r--r--config/freeswitch_dev/freeswitch_hunt_group_edit.tmp31
-rw-r--r--config/freeswitch_dev/index.tmp5
-rw-r--r--config/freeswitch_dev/originate.js84
-rw-r--r--config/freeswitch_dev/please_say_your_name_and_reason_for_calling.wavbin0 -> 35860 bytes
-rw-r--r--config/freeswitch_dev/press_1_to_accept_2_to_reject_or_3_for_voicemail.wavbin0 -> 68104 bytes
8 files changed, 614 insertions, 158 deletions
diff --git a/config/freeswitch_dev/dialplan.default.xml b/config/freeswitch_dev/dialplan.default.xml
index 93ecff16..426dedd8 100644
--- a/config/freeswitch_dev/dialplan.default.xml
+++ b/config/freeswitch_dev/dialplan.default.xml
@@ -177,16 +177,16 @@
<action application="bridge" data="user/${dialed_extension}@${domain_name}"/>
</condition>
</extension>
-
+
<X-PRE-PROCESS cmd="include" data="default/*.xml"/>
-
+
<!--
- dial the extension (1000-1019) for 30 seconds and go to voicemail if the
+ dial the extension 3, 4, or 5 digit extensions for 30 seconds and go to voicemail if the
call fails (continue_on_fail=true), otherwise hang up after a successful
bridge (hangup_after-bridge=true)
-->
<extension name="Local_Extension">
- <condition field="destination_number" expression="(^\d{4}$|^\d{3}$)">
+ <condition field="destination_number" expression="(^\d{5}$|^\d{4}$|^\d{3}$)">
<action application="set" data="dialed_extension=$1"/>
<action application="export" data="dialed_extension=$1"/>
<!-- bind_meta_app can have these args <key> [a|b|ab] [a|b|o|s] <app> -->
@@ -240,24 +240,54 @@
</extension>
-->
+ <!-- voicemail main2 extension -->
+ <extension name="vmain2">
+ <condition field="destination_number" expression="^vmain2$|^\*97$|^\*4000$">
+ <action application="answer"/>
+ <action application="sleep" data="1000"/>
+ <action application="voicemail" data="check default ${domain_name}"/>
+ </condition>
+ </extension>
+
<!-- voicemail main extension -->
<extension name="vmain">
- <condition field="destination_number" expression="^vmain|\*98$">
+ <condition field="destination_number" expression="^vmain$|^\*98$">
<action application="answer"/>
<action application="sleep" data="1000"/>
<action application="voicemail" data="check default ${domain_name} ${sip_from_user}"/>
</condition>
</extension>
-
- <!-- voicemail main2 extension -->
- <extension name="vmain2">
- <condition field="destination_number" expression="^vmain2|\*4000">
+
+ <extension name="send_to_voicemail_5digits">
+ <condition field="destination_number" expression="^\*99(\d{5})$">
<action application="answer"/>
<action application="sleep" data="1000"/>
- <action application="voicemail" data="check default ${domain_name}"/>
+ <action application="set" data="dialed_extension=$1"/>
+ <action application="export" data="dialed_extension=$1"/>
+ <action application="voicemail" data="default ${domain_name} ${dialed_extension}"/>
</condition>
</extension>
-
+
+ <extension name="send_to_voicemail_4digits">
+ <condition field="destination_number" expression="^\*99(\d{4})$">
+ <action application="answer"/>
+ <action application="sleep" data="1000"/>
+ <action application="set" data="dialed_extension=$1"/>
+ <action application="export" data="dialed_extension=$1"/>
+ <action application="voicemail" data="default ${domain_name} ${dialed_extension}"/>
+ </condition>
+ </extension>
+
+ <extension name="send_to_voicemail_3digits">
+ <condition field="destination_number" expression="^\*99(\d{3})$">
+ <action application="answer"/>
+ <action application="sleep" data="1000"/>
+ <action application="set" data="dialed_extension=$1"/>
+ <action application="export" data="dialed_extension=$1"/>
+ <action application="voicemail" data="default ${domain_name} ${dialed_extension}"/>
+ </condition>
+ </extension>
+
<!-- dial via SIP uri -->
<extension name="sip_uri">
<condition field="destination_number" expression="^sip:(.*)$">
diff --git a/config/freeswitch_dev/freeswitch.inc b/config/freeswitch_dev/freeswitch.inc
index 77847d8e..7d25a8e8 100644
--- a/config/freeswitch_dev/freeswitch.inc
+++ b/config/freeswitch_dev/freeswitch.inc
@@ -32,6 +32,8 @@
POSSIBILITY OF SUCH DAMAGE.
*/
+//ob_start("ob_gzhandler");
+
function build_menu() {
//$script_name_array = split ("/", $_SERVER["SCRIPT_NAME"]);
@@ -1062,14 +1064,15 @@ function sync_package_freeswitch_hunt_group()
//$rowhelper['huntgrouptimeout']
//$rowhelper['huntgroupcontext']
//$rowhelper['huntgroupringback']
- //$rowhelper['huntgroupcidnameprefix']
+ //$rowhelper['huntgroupcidnameprefix']
+ //$rowhelper['huntgrouppin']
+ //$rowhelper['huntgroupcallerannounce']
//$rowhelper['huntgroupdescr']
//add each Hunt Group to the dialplan
$a_dialplan_includes = &$config['installedpackages']['freeswitchdialplanincludes']['config'];
$a_dialplan_include_details = &$config['installedpackages']['freeswitchdialplanincludedetails']['config'];
-
if (strlen($rowhelper['huntgroupid']) > 0) {
$action = 'add'; //set default action to add
$i = 0;
@@ -1083,7 +1086,6 @@ function sync_package_freeswitch_hunt_group()
//$row['enabled'];
if ($row['opt1name'] == "huntgroupid" && $row['opt1value'] == $rowhelper['huntgroupid']) {
- //update
$action = 'update';
$dialplanincludeid = $row['dialplanincludeid'];
$extensionname = $row['extensionname'];
@@ -1094,8 +1096,6 @@ function sync_package_freeswitch_hunt_group()
$opt1name = $row['opt1name'];
$opt1value = $row['opt1value'];
$id = $i;
- //echo "update".$i."<br />\n";
-
}
$i++;
}
@@ -1105,99 +1105,268 @@ function sync_package_freeswitch_hunt_group()
$ent = array();
if ($action == 'add') {
+ //create huntgroup extension in the dialplan
+ $ent = array();
+ $dialplanincludeid = guid();
+ $ent['dialplanincludeid'] = $dialplanincludeid;
+ $ent['extensionname'] = $rowhelper['huntgroupname'];
+ $ent['order'] = '9001'; //if update use the existing order number and extension name and desc
+ $ent['context'] = $rowhelper['huntgroupcontext'];
+ $ent['enabled'] = 'true';
+ $ent['descr'] = 'huntgroup';
+ $ent['opt1name'] = 'huntgroupid';
+ $ent['opt1value'] = $rowhelper['huntgroupid'];
+
+ $a_dialplan_includes[] = $ent; //add to the config
+ unset($ent);
+
+ $ent = array();
+ $ent['dialplanincludeid'] = $dialplanincludeid;
+ $ent['tag'] = 'condition'; //condition, action, antiaction
+ $ent['fieldtype'] = 'destination_number';
+ $ent['fielddata'] = '^'.$rowhelper['huntgroupextension'].'$';
+ $a_dialplan_include_details[] = $ent;
+ unset($ent);
+ $huntgroupid = str_replace(array("{", "}"), "", $rowhelper['huntgroupid']);
+
+ $ent = array();
+ $ent['dialplanincludeid'] = $dialplanincludeid;
+ $ent['tag'] = 'action'; //condition, action, antiaction
+ $ent['fieldtype'] = 'javascript';
+ $ent['fielddata'] = 'huntgroup_'.$huntgroupid.'.js';
+ $a_dialplan_include_details[] = $ent;
+ unset($ent);
+
+ unset($huntgroupid);
+
+ }
+ if ($action == 'update') {
+ //update the huntgroup
+ $ent = array();
+ $ent['dialplanincludeid'] = $dialplanincludeid;
+ $ent['extensionname'] = $rowhelper['huntgroupname'];
+ $ent['order'] = $order;
+ $ent['context'] = $context;
+ $ent['enabled'] = $enabled;
+ $ent['descr'] = $descr;
+ $ent['opt1name'] = $opt1name;
+ $ent['opt1value'] = $opt1value;
+
+ //update the config
+ $a_dialplan_includes[$id] = $ent;
+
+ unset($ent);
+ unset($extensionname);
+ unset($order);
+ unset($context);
+ unset($enabled);
+ unset($descr);
+ unset($opt1name);
+ unset($opt1value);
+ unset($id);
+ }
+ unset($action);
+ unset($dialplanincludeid);
+
+ //check whether the fifo queue exists already
+ $action = 'add'; //set default action to add
+ $i = 0;
+ if (count($a_dialplan_includes) > 0) {
+
+ foreach($a_dialplan_includes as $row) {
+
+ //$row['dialplanincludeid'];
+ //$row['extensionname'];
+ //$row['context'];
+ //$row['enabled'];
+
+ if ($row['opt1name'] == "huntgroupfifoid" && $row['opt1value'] == $rowhelper['huntgroupid']) {
+ $action = 'update';
+ $dialplanincludeid = $row['dialplanincludeid'];
+ $extensionname = $row['extensionname'];
+ $order = $row['order'];
+ $context = $row['context'];
+ $enabled = $row['enabled'];
+ $descr = $row['descr'];
+ $opt1name = $row['opt1name'];
+ $opt1value = $row['opt1value'];
+ $id = $i;
+ }
+ $i++;
+ }
+ unset($i);
+ }
+
+ if ($action == 'add') {
+
+ //create a fifo queue for each huntgroup
+ $ent = array();
$dialplanincludeid = guid();
$ent['dialplanincludeid'] = $dialplanincludeid;
- $ent['extensionname'] = $rowhelper['huntgroupname'];
- $ent['order'] = '9001'; //if update use the existing order number and extension name and desc
+ $ent['extensionname'] = $rowhelper['huntgroupname'].'.park';
+ $ent['order'] = '9999'; //if update use the existing order number and extension name and desc
$ent['context'] = $rowhelper['huntgroupcontext'];
$ent['enabled'] = 'true';
- $ent['descr'] = 'huntgroup';
- $ent['opt1name'] = 'huntgroupid';
+ $ent['descr'] = 'fifo '.$rowhelper['huntgroupextension'];
+ $ent['opt1name'] = 'huntgroupfifoid';
$ent['opt1value'] = $rowhelper['huntgroupid'];
+ $a_dialplan_includes[] = $ent; //add to the config
+ unset($ent);
- //add to the config
- $a_dialplan_includes[] = $ent;
- unset($ent);
-
$ent = array();
$ent['dialplanincludeid'] = $dialplanincludeid;
$ent['tag'] = 'condition'; //condition, action, antiaction
$ent['fieldtype'] = 'destination_number';
- $ent['fielddata'] = '^'.$rowhelper['huntgroupextension'].'$';
- $a_dialplan_include_details[] = $ent;
+ $ent['fielddata'] = '^\*'.$rowhelper['huntgroupextension'].'$';
+ $ent['fieldorder'] = '000';
+ $a_dialplan_include_details[] = $ent; //add to the config
+ unset($ent);
+
+ $ent = array();
+ $ent['dialplanincludeid'] = $dialplanincludeid;
+ $ent['tag'] = 'action'; //condition, action, antiaction
+ $ent['fieldtype'] = 'set';
+ $ent['fielddata'] = 'fifo_music=$${hold_music}';
+ $ent['fieldorder'] = '001';
+ $a_dialplan_include_details[] = $ent; //add to the config
unset($ent);
- $huntgroupid = str_replace(array("{", "}"), "", $rowhelper['huntgroupid']);
+ $huntgrouptimeouttype = $rowhelper['huntgrouptimeouttype'];
+ $huntgrouptimeoutdestination = $rowhelper['huntgrouptimeoutdestination'];
+ if ($huntgrouptimeouttype == "voicemail") { $huntgrouptimeoutdestination = '***'.$huntgrouptimeoutdestination; }
$ent = array();
$ent['dialplanincludeid'] = $dialplanincludeid;
$ent['tag'] = 'action'; //condition, action, antiaction
- $ent['fieldtype'] = 'javascript';
- $ent['fielddata'] = 'huntgroup_'.$huntgroupid.'.js';
+ $ent['fieldtype'] = 'set';
+ $ent['fielddata'] = 'fifo_orbit_exten='.$huntgrouptimeoutdestination.':'.$rowhelper['huntgrouptimeout'];
+ $ent['fieldorder'] = '002';
$a_dialplan_include_details[] = $ent;
- unset($ent);
+ unset($ent); //add to the config
- unset($huntgroupid);
-
+ $ent = array();
+ $ent['dialplanincludeid'] = $dialplanincludeid;
+ $ent['tag'] = 'action'; //condition, action, antiaction
+ $ent['fieldtype'] = 'fifo';
+ $ent['fielddata'] = $rowhelper['huntgroupextension'].'@${domain_name} in';
+ $ent['fieldorder'] = '003';
+ $a_dialplan_include_details[] = $ent; //add to the config
+ unset($ent);
}
if ($action == 'update') {
+ //update the huntgroup
+ $ent = array();
+ $ent['dialplanincludeid'] = $dialplanincludeid;
+ $ent['extensionname'] = $rowhelper['huntgroupname'].'.park';
+ $ent['order'] = $order;
+ $ent['context'] = $rowhelper['huntgroupcontext'];
+ $ent['enabled'] = $enabled;
+ $ent['descr'] = 'fifo '.$rowhelper['huntgroupextension'];
+ $ent['opt1name'] = $opt1name;
+ $ent['opt1value'] = $opt1value;
+
+ //update the config
+ $a_dialplan_includes[$id] = $ent;
- $ent['dialplanincludeid'] = $dialplanincludeid;
- $ent['extensionname'] = $rowhelper['huntgroupname'];
- $ent['order'] = $order;
- $ent['context'] = $context;
- $ent['enabled'] = $enabled;
- $ent['descr'] = $descr;
- $ent['opt1name'] = $opt1name;
- $ent['opt1value'] = $opt1value;
+ unset($ent);
+ unset($extensionname);
+ unset($order);
+ unset($context);
+ unset($enabled);
+ unset($descr);
+ unset($opt1name);
+ unset($opt1value);
+ unset($id);
+
+ //delete dialplan include details
+ if (count($a_dialplan_include_details) > 0) {
+ foreach($a_dialplan_include_details as $row) {
+ if ($row['dialplanincludeid'] == $dialplanincludeid) {
+ $id = $i;
+ unset($a_dialplan_include_details[$id]);
+ }
+ $i++;
+ }
+ unset($i);
+ }
- //update the config
- $a_dialplan_includes[$id] = $ent;
+ $ent = array();
+ $ent['dialplanincludeid'] = $dialplanincludeid;
+ $ent['tag'] = 'condition'; //condition, action, antiaction
+ $ent['fieldtype'] = 'destination_number';
+ $ent['fielddata'] = '^\*'.$rowhelper['huntgroupextension'].'$';
+ $ent['fieldorder'] = '000';
+ $a_dialplan_include_details[] = $ent; //add to the config
+ unset($ent);
- unset($ent);
- unset($extensionname);
- unset($order);
- unset($context);
- unset($enabled);
- unset($descr);
- unset($opt1name);
- unset($opt1value);
- unset($id);
+ $ent = array();
+ $ent['dialplanincludeid'] = $dialplanincludeid;
+ $ent['tag'] = 'action'; //condition, action, antiaction
+ $ent['fieldtype'] = 'set';
+ $ent['fielddata'] = 'fifo_music=$${hold_music}';
+ $ent['fieldorder'] = '001';
+ $a_dialplan_include_details[] = $ent; //add to the config
+ unset($ent);
+
+ $huntgrouptimeouttype = $rowhelper['huntgrouptimeouttype'];
+ $huntgrouptimeoutdestination = $rowhelper['huntgrouptimeoutdestination'];
+ if ($huntgrouptimeouttype == "voicemail") { $huntgrouptimeoutdestination = '***'.$huntgrouptimeoutdestination; }
+
+ $ent = array();
+ $ent['dialplanincludeid'] = $dialplanincludeid;
+ $ent['tag'] = 'action'; //condition, action, antiaction
+ $ent['fieldtype'] = 'set';
+ $ent['fielddata'] = 'fifo_orbit_exten='.$huntgrouptimeoutdestination.':'.$rowhelper['huntgrouptimeout'];
+ $ent['fieldorder'] = '002';
+ $a_dialplan_include_details[] = $ent;
+ unset($ent); //add to the config
+
+ $ent = array();
+ $ent['dialplanincludeid'] = $dialplanincludeid;
+ $ent['tag'] = 'action'; //condition, action, antiaction
+ $ent['fieldtype'] = 'fifo';
+ $ent['fielddata'] = $rowhelper['huntgroupextension'].'@${domain_name} in';
+ $ent['fieldorder'] = '003';
+ $a_dialplan_include_details[] = $ent; //add to the config
+ unset($ent);
}
+
write_config();
-
- sync_package_freeswitch_dialplan_includes();
+ sync_package_freeswitch_dialplan_includes();
unset($dialplanincludeid);
} //end if strlen huntgroupid; add the Hunt Group to the dialplan
- //--- begin: pin number ------------------------------------
- if (strlen($rowhelper['huntgrouppin']) > 0) {
- $tmp .= "var pin = '".$rowhelper['huntgrouppin']."';\n";
- $tmp .= "if (pin.length > 0) {\n";
- $tmp .= " var dtmf = new Object();\n";
- $tmp .= " dtmf.digits = \"\";\n";
- $tmp .= " digitmaxlength = 6;\n";
- $tmp .= " session.execute(\"set\", \"playback_terminators=#\");\n";
- $tmp .= " session.streamFile( \"/usr/local/freeswitch/sounds/custom/8000/please_enter_the_pin_number.wav\", mycb, \"dtmf\");\n";
- $tmp .= " session.collectInput( mycb, dtmf, timeoutpin );\n";
- $tmp .= "\n";
- $tmp .= " if (dtmf.digits == pin || pin.length == 0) {\n";
- $tmp .= " //continue\n";
- $tmp .= " }\n";
- $tmp .= " else {\n";
- $tmp .= " console_log( \"info\", \"Pin: \" + dtmf.digits + \" is incorrect\\n\" );\n";
- $tmp .= " session.streamFile( \"/usr/local/freeswitch/sounds/custom/8000/your_pin_number_is_incorect_goodbye.wav\", mycb, \"dtmf\");\n";
- $tmp .= " session.hangup();\n";
- $tmp .= " }\n";
- $tmp .= "}";
- }
- //--- end: pin number ------------------------------------
-
+
+
//Get the list of destinations then build the Hunt Group javascript
$tmp = "";
$tmp .= "\n";
+ $tmp .= "session.answer();\n";
+ $tmp .= "var domain_name = session.getVariable(\"domain_name\");\n";
+ $tmp .= "var extension = '".$rowhelper['huntgroupextension']."';\n";
+ $tmp .= "var result;\n";
+ $tmp .= "var timeoutpin = 7500;\n";
+ $tmp .= "\n";
+ $tmp .= "var objdate = new Date();\n";
+ $tmp .= "var adjusthours = 0; //Adjust Server time that is set to GMT 7 hours\n";
+ $tmp .= "var adjustoperator = \"-\"; //+ or -\n";
+ $tmp .= "if (adjustoperator == \"-\") {\n";
+ $tmp .= "var objdate2 = new Date(objdate.getFullYear(),objdate.getMonth(),objdate.getDate(),(objdate.getHours() - adjusthours),objdate.getMinutes(),objdate.getSeconds());\n";
+ $tmp .= "}\n";
+ $tmp .= "if (adjustoperator == \"+\") {\n";
+ $tmp .= "var objdate2 = new Date(objdate.getFullYear(),objdate.getMonth(),objdate.getDate(),(objdate.getHours() + adjusthours),objdate.getMinutes(),objdate.getSeconds());\n";
+ $tmp .= "}\n";
+ $tmp .= "var Hours = objdate2.getHours();\n";
+ $tmp .= "var Mins = objdate2.getMinutes();\n";
+ $tmp .= "var Seconds = objdate2.getSeconds();\n";
+ $tmp .= "var Month = objdate2.getMonth() + 1;\n";
+ $tmp .= "var Date = objdate2.getDate();\n";
+ $tmp .= "var Year = objdate2.getYear()\n";
+ $tmp .= "var Day = objdate2.getDay()+1;\n";
+ $tmp .= "var exit = false;\n";
+ $tmp .= "\n";
$tmp .= " function get_sofia_contact(extension,domain_name, profile){\n";
$tmp .= " if (profile == \"auto\") {\n";
@@ -1229,57 +1398,131 @@ function sync_package_freeswitch_hunt_group()
$tmp .= " return sofia_contact;\n";
$tmp .= " }\n";
$tmp .= "\n";
+
+ $tmp .= "\n";
+ $tmp .= " function mycb( session, type, obj, arg ) {\n";
+ $tmp .= " try {\n";
+ $tmp .= " if ( type == \"dtmf\" ) {\n";
+ $tmp .= " console_log( \"info\", \"digit: \"+obj.digit+\"\\n\" );\n";
+ $tmp .= " if ( obj.digit == \"#\" ) {\n";
+ $tmp .= " //console_log( \"info\", \"detected pound sign.\\n\" );\n";
+ $tmp .= " exit = true;\n";
+ $tmp .= " return( false );\n";
+ $tmp .= " }\n";
+ $tmp .= "\n";
+ $tmp .= " dtmf.digits += obj.digit;\n";
+ $tmp .= "\n";
+ $tmp .= " if ( dtmf.digits.length >= digitmaxlength ) {\n";
+ $tmp .= " exit = true;\n";
+ $tmp .= " return( false );\n";
+ $tmp .= " }\n";
+ $tmp .= " }\n";
+ $tmp .= " } catch (e) {\n";
+ $tmp .= " console_log( \"err\", e+\"\\n\" );\n";
+ $tmp .= " }\n";
+ $tmp .= " return( true );\n";
+ $tmp .= " } //end function mycb\n";
+ $tmp .= "\n";
+
$tmp .= "\n";
- $tmp .= " dialed_extension = session.getVariable(\"dialed_extension\");\n";
- $tmp .= " domain_name = session.getVariable(\"domain_name\");\n";
- $tmp .= " domain = session.getVariable(\"domain\");\n";
- $tmp .= " us_ring = session.getVariable(\"us-ring\");\n";
- $tmp .= " caller_id_name = session.getVariable(\"caller_id_name\");\n";
- $tmp .= " caller_id_number = session.getVariable(\"caller_id_number\");\n";
- $tmp .= " effective_caller_id_name = session.getVariable(\"effective_caller_id_name\");\n";
- $tmp .= " effective_caller_id_number = session.getVariable(\"effective_caller_id_number\");\n";
- $tmp .= " outbound_caller_id_name = session.getVariable(\"outbound_caller_id_name\");\n";
- $tmp .= " outbound_caller_id_number = session.getVariable(\"outbound_caller_id_number\");\n";
+ $tmp .= "dialed_extension = session.getVariable(\"dialed_extension\");\n";
+ $tmp .= "domain_name = session.getVariable(\"domain_name\");\n";
+ $tmp .= "domain = session.getVariable(\"domain\");\n";
+ $tmp .= "us_ring = session.getVariable(\"us-ring\");\n";
+ $tmp .= "caller_id_name = session.getVariable(\"caller_id_name\");\n";
+ $tmp .= "caller_id_number = session.getVariable(\"caller_id_number\");\n";
+ $tmp .= "effective_caller_id_name = session.getVariable(\"effective_caller_id_name\");\n";
+ $tmp .= "effective_caller_id_number = session.getVariable(\"effective_caller_id_number\");\n";
+ $tmp .= "outbound_caller_id_name = session.getVariable(\"outbound_caller_id_name\");\n";
+ $tmp .= "outbound_caller_id_number = session.getVariable(\"outbound_caller_id_number\");\n";
$tmp .= "\n";
+
+ //pin number requested from caller if provided
+ if (strlen($rowhelper['huntgrouppin']) > 0) {
+ $tmp .= "var pin = '".$rowhelper['huntgrouppin']."';\n";
+ $tmp .= "if (pin.length > 0) {\n";
+ $tmp .= " var dtmf = new Object();\n";
+ $tmp .= " dtmf.digits = \"\";\n";
+ $tmp .= " digitmaxlength = 6;\n";
+ $tmp .= " session.execute(\"set\", \"playback_terminators=#\");\n";
+ $tmp .= " session.streamFile( \"/usr/local/freeswitch/sounds/custom/8000/please_enter_the_pin_number.wav\", mycb, \"dtmf\");\n";
+ $tmp .= " session.collectInput( mycb, dtmf, timeoutpin );\n";
+ $tmp .= "\n";
+ $tmp .= " if (dtmf.digits == pin || pin.length == 0) {\n";
+ $tmp .= " //continue\n";
+ $tmp .= " }\n";
+ $tmp .= " else {\n";
+ $tmp .= " console_log( \"info\", \"Pin: \" + dtmf.digits + \" is incorrect\\n\" );\n";
+ $tmp .= " session.streamFile( \"/usr/local/freeswitch/sounds/custom/8000/your_pin_number_is_incorect_goodbye.wav\", mycb, \"dtmf\");\n";
+ $tmp .= " session.hangup();\n";
+ $tmp .= " }\n";
+ $tmp .= "}\n";
+ $tmp .= "\n";
+ }
+
+ //caller announce requested from caller if provided
+ if ($rowhelper['huntgroupcallerannounce'] == "true") {
+ $tmp .= "function originate(session, sipuri, extension, caller_announce, caller_id_name, caller_id_number) {\n";
+ $tmp .= " caller_id_name = caller_id_name.replace(\" \", \"+\");\n";
+ $tmp .= " apiExecute(\"jsrun\", \"originate.js \"+session.uuid+\" \"+sipuri+\" \"+extension+\" \"+caller_announce+\" \"+caller_id_name+\" \"+caller_id_number);\n";
+ $tmp .= "}";
+ $tmp .= "\n";
+ $tmp .= "var caller_announce = extension+\"_\"+Year+Month+Day+Hours+Mins+Seconds+\".wav\";\n";
+ $tmp .= "session.streamFile( \"/usr/local/freeswitch/sounds/custom/8000/please_say_your_name_and_reason_for_calling.wav\");\n";
+ $tmp .= "session.execute(\"gentones\", \"%(1000, 0, 640)\");\n";
+ $tmp .= "session.execute(\"set\", \"playback_terminators=#\");\n";
+ $tmp .= "session.execute(\"record\", \"/tmp/\"+caller_announce+\" 180 200\");\n";
+ $tmp .= "\n";
+ $tmp .= "result = session.setAutoHangup(false);\n";
+ $tmp .= "session.execute(\"transfer\", \"*\"+extension+\" XML default\");\n";
+ $tmp .= "\n";
+ }
+
//set caller id prefix
- if (strlen($rowhelper['huntgroupcidnameprefix'])> 0) {
- $tmp .= "session.execute(\"set\", \"caller_id_name=".$rowhelper['huntgroupcidnameprefix']."\"+caller_id_name);\n";
- $tmp .= "session.execute(\"set\", \"effective_caller_id_name=".$rowhelper['huntgroupcidnameprefix']."\"+effective_caller_id_name);\n";
- $tmp .= "session.execute(\"set\", \"outbound_caller_id_name=".$rowhelper['huntgroupcidnameprefix']."\"+outbound_caller_id_name);\n";
- }
+ if (strlen($rowhelper['huntgroupcidnameprefix'])> 0) {
+ $tmp .= "session.execute(\"set\", \"caller_id_name=".$rowhelper['huntgroupcidnameprefix']."\"+caller_id_name);\n";
+ $tmp .= "session.execute(\"set\", \"effective_caller_id_name=".$rowhelper['huntgroupcidnameprefix']."\"+effective_caller_id_name);\n";
+ $tmp .= "session.execute(\"set\", \"outbound_caller_id_name=".$rowhelper['huntgroupcidnameprefix']."\"+outbound_caller_id_name);\n";
+ }
- if (isset($rowhelper['huntgroupringback'])){
- if ($rowhelper['huntgroupringback'] == "ring"){
- $tmp .= " session.execute(\"set\", \"ringback=\"+us_ring); //set to ringtone\n";
- $tmp .= " session.execute(\"set\", \"transfer_ringback=\"+us_ring); //set to ringtone\n";
+ //set ring back
+ if (isset($rowhelper['huntgroupringback'])){
+ if ($rowhelper['huntgroupringback'] == "ring"){
+ $tmp .= "session.execute(\"set\", \"ringback=\"+us_ring); //set to ringtone\n";
+ $tmp .= "session.execute(\"set\", \"transfer_ringback=\"+us_ring); //set to ringtone\n";
+ }
+ if ($rowhelper['huntgroupringback'] == "music"){
+ $tmp .= "session.execute(\"set\", \"ringback=\${hold_music}\"); //set to ringtone\n";
+ $tmp .= "session.execute(\"set\", \"transfer_ringback=\${hold_music}\"); //set to ringtone\n";
+ }
}
- if ($rowhelper['huntgroupringback'] == "music"){
- $tmp .= " session.execute(\"set\", \"ringback=\${hold_music}\"); //set to ringtone\n";
- $tmp .= " session.execute(\"set\", \"transfer_ringback=\${hold_music}\"); //set to ringtone\n";
+ else {
+ $tmp .= "session.execute(\"set\", \"ringback=\${hold_music}\"); //set to ringtone\n";
+ $tmp .= "session.execute(\"set\", \"transfer_ringback=\${hold_music}\"); //set to ringtone\n";
}
- }
- else {
- $tmp .= " session.execute(\"set\", \"ringback=\${hold_music}\"); //set to ringtone\n";
- $tmp .= " session.execute(\"set\", \"transfer_ringback=\${hold_music}\"); //set to ringtone\n";
- }
if ($rowhelper['huntgrouptimeout'] > 0) {
- $tmp .= " session.execute(\"set\", \"call_timeout=".$rowhelper['huntgrouptimeout']."\");\n";
- $tmp .= " session.execute(\"set\", \"continue_on_fail=true\");\n";
+ $tmp .= "session.execute(\"set\", \"call_timeout=".$rowhelper['huntgrouptimeout']."\");\n";
+ $tmp .= "session.execute(\"set\", \"continue_on_fail=true\");\n";
}
- $tmp .= " session.execute(\"set\", \"hangup_after_bridge=true\");\n";
+ $tmp .= "session.execute(\"set\", \"hangup_after_bridge=true\");\n";
$tmp .= "\n";
- $tmp .= " //console_log( \"info\", \"dialed extension:\"+dialed_extension+\".\\n\" );\n";
- $tmp .= " //console_log( \"info\", \"domain: \"+domain+\".\\n\" );\n";
- $tmp .= " //console_log( \"info\", \"us_ring: \"+us_ring+\".\\n\" );\n";
- $tmp .= " //console_log( \"info\", \"domain: \"+domain+\".\\n\" );\n";
- $tmp .= " //console_log( \"info\", \"domain_name: \"+domain_name+\".\\n\" );\n";
+ $tmp .= "//console_log( \"info\", \"dialed extension:\"+dialed_extension+\".\\n\" );\n";
+ $tmp .= "//console_log( \"info\", \"domain: \"+domain+\".\\n\" );\n";
+ $tmp .= "//console_log( \"info\", \"us_ring: \"+us_ring+\".\\n\" );\n";
+ $tmp .= "//console_log( \"info\", \"domain: \"+domain+\".\\n\" );\n";
+ $tmp .= "//console_log( \"info\", \"domain_name: \"+domain_name+\".\\n\" );\n";
$tmp .= "\n";
- $tmp .= " //console_log( \"info\", \"action call now don't wait for dtmf\\n\" );\n";
- $tmp .= " if ( session.ready() ) {\n";
- $tmp .= " session.answer();\n";
+ $tmp .= "//console_log( \"info\", \"action call now don't wait for dtmf\\n\" );\n";
+ if ($rowhelper['huntgroupcallerannounce'] == "true") {
+ //do nothing
+ }
+ else {
+ $tmp .= "if ( session.ready() ) {\n";
+ $tmp .= " session.answer();\n";
+ }
$tmp .= "\n";
$a_hunt_group = &$config['installedpackages']['freeswitchhuntgroup']['config'];
@@ -1323,20 +1566,21 @@ function sync_package_freeswitch_hunt_group()
if (strlen($row['destinationnumber']) == 0) { $row['destinationnumber'] = "internal"; }
if ($row['destinationtype'] == "extension") {
- $tmp .= " sofia_contact_".$row['destinationnumber']." = get_sofia_contact(\"".$row['destinationnumber']."\",domain_name, \"".$row['destinationprofile']."\");\n";
+ $tmp .= "sofia_contact_".$row['destinationnumber']." = get_sofia_contact(\"".$row['destinationnumber']."\",domain_name, \"".$row['destinationprofile']."\");\n";
$tmp_sub_array["application"] = "bridge";
$tmp_sub_array["data"] = "sofia_contact_".$row['destinationnumber'];
$tmp_array[$i] = $tmp_sub_array;
- unset($tmp_sub_array);
+ unset($tmp_sub_array);
}
- if ($row['destinationtype'] == "voicemail") {
- $tmp .= " session.execute(\"voicemail\", \"default \${domain} ".$row['destinationnumber']."\");\n";
+ if ($row['destinationtype'] == "voicemail") {
+ $tmp_sub_array["application"] = "voicemail";
+ $tmp .= "session.execute(\"voicemail\", \"default \${domain} ".$row['destinationnumber']."\");\n";
//$tmp_sub_array["application"] = "voicemail";
//$tmp_sub_array["data"] = "default \${domain} ".$row['destinationnumber'];
//$tmp_array[$i] = $tmp_sub_array;
unset($tmp_sub_array);
}
- if ($row['destinationtype'] == "sip uri") {
+ if ($row['destinationtype'] == "sip uri") {
$tmp_sub_array["application"] = "bridge";
$tmp_sub_array["data"] = "\"".$row['destinationnumber']."\"";
$tmp_array[$i] = $tmp_sub_array;
@@ -1350,43 +1594,65 @@ function sync_package_freeswitch_hunt_group()
unset($i);
} //if count
-
+ $i = 0;
+ if(count($tmp_array) > 0) {
+ foreach ($tmp_array as $row) {
+ $tmpdata = $row["data"];
+ if ($row["application"] == "voicemail") { $tmpdata = "***".$tmpdata; }
+ if ($i < 1) {
+ $tmp_buffer = $tmpdata;
+ }
+ else {
+ $tmp_buffer .= "+\",\"+".$tmpdata;
+ }
+ $i++;
+ }
+ }
+ unset($i);
+ $delimiter = ",";
+ $tmp_application = $tmp_array[0]["application"];
switch ($rowhelper['huntgrouptype']) {
case "simultaneous":
//print_r($tmp_array);
- $i = 0;
- if(count($tmp_array) > 0) {
- foreach ($tmp_array as $row) {
- if ($i < 1) {
- $tmp_buffer = $row["data"];
- }
- else {
- $tmp_buffer .= "+\",\"+".$row["data"];
+ if ($rowhelper['huntgroupcallerannounce'] == "true") {
+ $i = 0;
+ if (count($tmp_array) > 0) {
+ foreach ($tmp_array as $row) {
+ $tmpdata = $row["data"];
+ if ($row["application"] == "voicemail") { $tmpdata = "***".$tmpdata; }
+ $tmp .= " result = originate (session, ".$tmpdata.", extension, caller_announce, caller_id_name, caller_id_number);\n";
}
- $i++;
}
}
- unset($i);
-
- $delimiter = ",";
- $tmp_application = $tmp_array[0]["application"];
+ else {
+ $tmp .= "\n";
+ $tmp .= " session.execute(\"".$tmp_application."\", $tmp_buffer);\n";
+ //$tmp .= " session.execute(\"bridge\", sofia_contact_100+\",\"+sofia_contact_101+\",\"+sofia_contact_102+\",\"+sofia_contact_103+\",\"+sofia_contact_104);\n";
+ //$tmp .= " //session.execute(\"bridge\", \"sofia/gateway/flowroute.com/12081231234,\"+sofia_contact_101);\n";
+ }
unset($tmp_array);
-
- $tmp .= "\n";
- $tmp .= " session.execute(\"".$tmp_application."\", $tmp_buffer);\n";
- //$tmp .= " session.execute(\"bridge\", sofia_contact_100+\",\"+sofia_contact_101+\",\"+sofia_contact_102+\",\"+sofia_contact_103+\",\"+sofia_contact_104);\n";
- //$tmp .= " //session.execute(\"bridge\", \"sofia/gateway/flowroute.com/12081231234,\"+sofia_contact_101);\n";
-
break;
case "sequentially":
$tmp .= "\n";
//print_r($tmp_array);
$i = 0;
- if (count($tmp_array) > 0) {
- foreach ($tmp_array as $row) {
- $tmp .= " session.execute(\"".$row["application"]."\", ".$row["data"].");\n";
+ if (count($tmp_array) > 0) {
+ if ($rowhelper['huntgroupcallerannounce'] == "true") {
+ $i = 0;
+ if (count($tmp_array) > 0) {
+ //foreach ($tmp_array as $row) {
+ //$tmpdata = $row["data"];
+ //if ($row["application"] == "voicemail") { $tmpdata = "***".$tmpdata; }
+ $tmp .= " result = originate (session, ".$tmp_buffer.", extension, caller_announce, caller_id_name, caller_id_number);\n";
+ //}
+ }
+ }
+ else {
+ foreach ($tmp_array as $row) {
+ $tmp .= " session.execute(\"".$row["application"]."\", ".$row["data"].");\n";
+ }
}
unset($tmp_array);
}
@@ -1394,7 +1660,6 @@ function sync_package_freeswitch_hunt_group()
break;
}
-
//set the timeout destination
$huntgrouptimeoutdestination = $a_hunt_group[$x]['huntgrouptimeoutdestination'];
$huntgrouptimeouttype = $a_hunt_group[$x]['huntgrouptimeouttype'];
@@ -1402,19 +1667,28 @@ function sync_package_freeswitch_hunt_group()
if ($row['huntgrouptimeouttype'] == "voicemail") { $huntgrouptimeouttype = "voicemail"; }
if ($row['huntgrouptimeouttype'] == "sip uri") { $huntgrouptimeouttype = "bridge"; }
$tmp .= "\n";
- $tmp .= " //timeout\n";
- $tmp .= " session.execute(\"".$huntgrouptimeouttype."\", \"default \${domain} ".$huntgrouptimeoutdestination."\");\n";
-
+ if ($rowhelper['huntgroupcallerannounce'] == "true") {
+ //do nothing
+ }
+ else {
+ $tmp .= " //timeout\n";
+ $tmp .= " session.execute(\"".$huntgrouptimeouttype."\", \"default \${domain} ".$huntgrouptimeoutdestination."\");\n";
+ }
$tmp .= "\n";
- $tmp .= " //clear variables\n";
- $tmp .= " dialed_extension = \"\";\n";
- $tmp .= " new_extension = \"\";\n";
- $tmp .= " domain_name = \"\";\n";
- $tmp .= " domain = \"\";";
+ $tmp .= " //clear variables\n";
+ $tmp .= " dialed_extension = \"\";\n";
+ $tmp .= " new_extension = \"\";\n";
+ $tmp .= " domain_name = \"\";\n";
+ $tmp .= " domain = \"\";";
$tmp .= "\n";
- $tmp .= " } //end if session.ready\n";
+ if ($rowhelper['huntgroupcallerannounce'] == "true") {
+ //do nothing
+ }
+ else {
+ $tmp .= "} //end if session.ready\n";
+ }
$tmp .= "\n";
if (strlen($rowhelper['huntgroupid']) > 0) {
@@ -2748,7 +3022,7 @@ function freeswitch_php_install_command()
global $config;
//exec("/etc/./rc.conf_mount_rw");
- $freeswitch_package_version = "0.9.4.8";
+ $freeswitch_package_version = "0.9.5";
$freeswitch_build_version = "1.0.4 pre 8";
$freeswitch_build_revision = "13784";
@@ -2825,7 +3099,9 @@ function freeswitch_php_install_command()
exec("cd /usr/local/freeswitch/sounds/custom/8000/;fetch ".$download_path."call_forward_has_been_set.wav");
exec("cd /usr/local/freeswitch/sounds/custom/8000/;fetch ".$download_path."call_forward_has_been_deleted.wav");
exec("cd /usr/local/freeswitch/sounds/custom/8000/;fetch ".$download_path."begin_recording.wav");
- exec("cd /usr/local/freeswitch/sounds/custom/8000/;fetch ".$download_path."your_pin_number_is_incorect_goodbye.wav");
+ exec("cd /usr/local/freeswitch/sounds/custom/8000/;fetch ".$download_path."your_pin_number_is_incorect_goodbye.wav");
+ exec("cd /usr/local/freeswitch/sounds/custom/8000/;fetch ".$download_path."please_say_your_name_and_reason_for_calling.wav");
+ exec("cd /usr/local/freeswitch/sounds/custom/8000/;fetch ".$download_path."press_1_to_accept_2_to_reject_or_3_for_voicemail.wav");
//mod_fax
exec("cd /usr/local/freeswitch/mod/;fetch ".$download_path."mod_fax.so");
@@ -2854,7 +3130,12 @@ function freeswitch_php_install_command()
unlink_if_exists("/tmp/edit_area.tgz");
}
+
//rename PHP files from .tmp to .php
+ exec("cd /tmp/;fetch ".$download_path."index.tmp");
+ exec("cp /tmp/index.tmp /usr/local/www/packages/freeswitch/index.php");
+ unlink_if_exists("/tmp/index.tmp");
+
exec("cd /tmp/;fetch ".$download_path."class.smtp.tmp");
exec("cp /tmp/class.smtp.tmp /usr/local/www/packages/freeswitch/class.smtp.php");
unlink_if_exists("/tmp/class.smtp.tmp");
@@ -3012,6 +3293,7 @@ function freeswitch_php_install_command()
unlink_if_exists("/tmp/freeswitch_vars.tmp");
exec("cd /usr/local/freeswitch/scripts/;fetch ".$download_path."disa.js");
+ exec("cd /usr/local/freeswitch/scripts/;fetch ".$download_path."originate.js");
exec("cp /usr/local/freeswitch/htdocs/slim.swf /usr/local/www/packages/freeswitch/slim.swf");
/* freeswitch settings defaults */
diff --git a/config/freeswitch_dev/freeswitch_hunt_group.tmp b/config/freeswitch_dev/freeswitch_hunt_group.tmp
index 911b7d5b..ea3fe44d 100644
--- a/config/freeswitch_dev/freeswitch_hunt_group.tmp
+++ b/config/freeswitch_dev/freeswitch_hunt_group.tmp
@@ -35,7 +35,8 @@ require("/usr/local/pkg/freeswitch.inc");
$a_hunt_group = &$config['installedpackages']['freeswitchhuntgroup']['config'];
-
+$a_dialplan_includes = &$config['installedpackages']['freeswitchdialplanincludes']['config'];
+$a_dialplan_include_details = &$config['installedpackages']['freeswitchdialplanincludedetails']['config'];
if ($_GET['act'] == "del") {
if ($_GET['type'] == 'huntgroup') {
@@ -43,6 +44,35 @@ if ($_GET['act'] == "del") {
if (file_exists("/usr/local/freeswitch/scripts/huntgroup_".$_GET['huntgroupid'].".js")) {
unlink("/usr/local/freeswitch/scripts/huntgroup_".$_GET['huntgroupid'].".js");
}
+ /*
+ //delete dialplan include details
+ if (count($a_dialplan_includes) > 0) {
+ $i = 0;
+ foreach($a_dialplan_includes as $row) {
+ echo $row['opt1value']." == {".$_GET['huntgroupid']."}<br />\n";
+ if ($row['opt1value'] == '{'.$_GET['huntgroupid'].'}') {
+ $dialplanincludeid = $row['dialplanincludeid'];
+ $id = $i;
+ unset($a_dialplan_include_details[$id]);
+ }
+ $i++;
+ }
+ unset($i);
+ }
+
+ //delete dialplan include details
+ if (count($a_dialplan_include_details) > 0) {
+ $i = 0;
+ foreach($a_dialplan_include_details as $row) {
+ if ($row['dialplanincludeid'] == $dialplanincludeid) {
+ $id = $i;
+ unset($a_dialplan_include_details[$id]);
+ }
+ $i++;
+ }
+ unset($i);
+ }
+ */
unset($a_hunt_group[$_GET['id']]);
write_config();
sync_package_freeswitch_hunt_group();
diff --git a/config/freeswitch_dev/freeswitch_hunt_group_edit.tmp b/config/freeswitch_dev/freeswitch_hunt_group_edit.tmp
index 82fa87e0..fe22a78e 100644
--- a/config/freeswitch_dev/freeswitch_hunt_group_edit.tmp
+++ b/config/freeswitch_dev/freeswitch_hunt_group_edit.tmp
@@ -60,6 +60,7 @@ if (isset($id) && $a_hunt_group[$id]) {
$pconfig['huntgroupringback'] = $a_hunt_group[$id]['huntgroupringback'];
$pconfig['huntgroupcidnameprefix'] = $a_hunt_group[$id]['huntgroupcidnameprefix'];
$pconfig['huntgrouppin'] = $a_hunt_group[$id]['huntgrouppin'];
+ $pconfig['huntgroupcallerannounce'] = $a_hunt_group[$id]['huntgroupcallerannounce'];
$pconfig['huntgroupdescr'] = $a_hunt_group[$id]['huntgroupdescr'];
}
@@ -97,9 +98,10 @@ if ($_POST) {
$huntgroupent['huntgrouptimeout'] = $_POST['huntgrouptimeout'];
$huntgroupent['huntgrouptimeoutdestination'] = $_POST['huntgrouptimeoutdestination'];
$huntgroupent['huntgrouptimeouttype'] = $_POST['huntgrouptimeouttype'];
- $huntgroupent['huntgroupringback'] = $_POST['huntgroupringback'];
- $huntgroupent['huntgroupcidnameprefix'] = $_POST['huntgroupcidnameprefix'];
- $huntgroupent['huntgrouppin'] = $_POST['huntgrouppin'];
+ $huntgroupent['huntgroupringback'] = $_POST['huntgroupringback'];
+ $huntgroupent['huntgroupcidnameprefix'] = $_POST['huntgroupcidnameprefix'];
+ $huntgroupent['huntgrouppin'] = $_POST['huntgrouppin'];
+ $huntgroupent['huntgroupcallerannounce'] = $_POST['huntgroupcallerannounce'];
$huntgroupent['huntgroupdescr'] = $_POST['huntgroupdescr'];
if (isset($id) && $a_hunt_group[$id]) {
@@ -296,6 +298,29 @@ display_top_tabs(build_menu());
</td>
</tr>
+ <tr>
+ <td width="22%" valign="top" class="vncell">Caller Announce</td>
+ <td width="78%" class="vtable">
+ <?php
+ echo " <select name='huntgroupcallerannounce' class='formfld'>\n";
+ echo " <option></option>\n";
+ if (htmlspecialchars($pconfig['huntgroupcallerannounce']) == "true") {
+ echo " <option selected='yes'>true</option>\n";
+ }
+ else {
+ echo " <option>true</option>\n";
+ }
+ if (htmlspecialchars($pconfig['huntgroupcallerannounce']) == "false") {
+ echo " <option selected='yes'>false</option>\n";
+ }
+ else {
+ echo " <option>false</option>\n";
+ }
+ echo " </select>\n";
+ ?>
+ </td>
+ </tr>
+
<tr>
<td width="22%" valign="top" class="vncell">Description</td>
<td width="78%" class="vtable">
diff --git a/config/freeswitch_dev/index.tmp b/config/freeswitch_dev/index.tmp
new file mode 100644
index 00000000..68984113
--- /dev/null
+++ b/config/freeswitch_dev/index.tmp
@@ -0,0 +1,5 @@
+<?php
+
+header( 'Location: /' );
+
+?> \ No newline at end of file
diff --git a/config/freeswitch_dev/originate.js b/config/freeswitch_dev/originate.js
new file mode 100644
index 00000000..a7c6fa2e
--- /dev/null
+++ b/config/freeswitch_dev/originate.js
@@ -0,0 +1,84 @@
+var uuid = argv[0];
+var sipuri = argv[1];
+var extension = argv[2];
+var caller_announce = argv[3];
+var caller_id_name = argv[4];
+var caller_id_number = argv[5];
+var tmp_sipuri;
+
+caller_id_name = caller_id_name.replace("+", " ");
+//console_log( "info", "caller_announce: "+caller_announce+"\n" );
+
+function originate (session, sipuri, extension, caller_announce, caller_id_name, caller_id_number) {
+
+ var dtmf = new Object();
+ var cid;
+ dtmf.digits = "";
+ cid = ",origination_caller_id_name="+caller_id_name+",origination_caller_id_number="+caller_id_number;
+
+ new_session = new Session("{ignore_early_media=true"+cid+"}"+sipuri);
+ new_session.execute("set", "call_timeout=30");
+
+ if ( new_session.ready() ) {
+
+ console_log( "info", "followme: new_session uuid "+new_session.uuid+"\n" );
+ console_log( "info", "followme: no dtmf detected\n" );
+
+ digitmaxlength = 1;
+ while (new_session.ready()) {
+
+ if (caller_announce.length > 0) {
+ new_session.streamFile( "/tmp/"+caller_announce);
+ }
+ new_session.streamFile( "/usr/local/freeswitch/sounds/custom/8000/press_1_to_accept_2_to_reject_or_3_for_voicemail.wav");
+ if (new_session.ready()) {
+ if (dtmf.digits.length == 0) {
+ dtmf.digits += new_session.getDigits(1, "#", 10000); // 10 seconds
+ if (dtmf.digits.length == 0) {
+
+ }
+ else {
+ break; //dtmf found end the while loop
+ }
+ }
+ }
+ }
+
+ if ( dtmf.digits.length > "0" ) {
+ if ( dtmf.digits == "1" ) {
+ console_log( "info", "followme: call accepted\n" ); //accept
+ new_session.execute("fifo", extension+"@${domain_name} out nowait");
+ return true;
+ }
+ else if ( dtmf.digits == "2" ) {
+ console_log( "info", "followme: call rejected\n" ); //reject
+ new_session.hangup;
+ return false;
+ }
+ else if ( dtmf.digits == "3" ) {
+ console_log( "info", "followme: call sent to voicemail\n" ); //reject
+ new_session.hangup;
+ exit;
+ return true;
+ }
+
+ }
+ else {
+ console_log( "info", "followme: no dtmf detected\n" ); //reject
+ new_session.hangup;
+ return false;
+ }
+
+ }
+}
+
+sipuri_array = sipuri.split(",");
+for (i = 0; i < sipuri_array.length; i++){
+ tmp_sipuri = sipuri_array[i];
+ console_log("info", "tmp_sipuri: "+tmp_sipuri);
+ result = originate (session, tmp_sipuri, extension, caller_announce, caller_id_name, caller_id_number);
+ if (result) {
+ break;
+ exit;
+ }
+} \ No newline at end of file
diff --git a/config/freeswitch_dev/please_say_your_name_and_reason_for_calling.wav b/config/freeswitch_dev/please_say_your_name_and_reason_for_calling.wav
new file mode 100644
index 00000000..325a879d
--- /dev/null
+++ b/config/freeswitch_dev/please_say_your_name_and_reason_for_calling.wav
Binary files differ
diff --git a/config/freeswitch_dev/press_1_to_accept_2_to_reject_or_3_for_voicemail.wav b/config/freeswitch_dev/press_1_to_accept_2_to_reject_or_3_for_voicemail.wav
new file mode 100644
index 00000000..9c01616a
--- /dev/null
+++ b/config/freeswitch_dev/press_1_to_accept_2_to_reject_or_3_for_voicemail.wav
Binary files differ