[Freeswitch-svn] [commit] r10777 - freeswitch/trunk/scripts/aadir
FreeSWITCH SVN
brian at freeswitch.org
Mon Dec 15 10:17:53 PST 2008
Author: brian
Date: Mon Dec 15 13:17:53 2008
New Revision: 10777
Log:
FSSCRIPTS-9 thanks john, sound files will appear by friday for this
Added:
freeswitch/trunk/scripts/aadir/
freeswitch/trunk/scripts/aadir/README
freeswitch/trunk/scripts/aadir/aadir.js
Added: freeswitch/trunk/scripts/aadir/README
==============================================================================
--- (empty file)
+++ freeswitch/trunk/scripts/aadir/README Mon Dec 15 13:17:53 2008
@@ -0,0 +1,6 @@
+This directory contains a javascript auto attendant which queries
+FreeSWITCH for name / extension information rather than using
+hardcoded values. It requires a wave file which says:
+
+ Please spell the name of the person using your telephone keypad
+ last name first. Press 1 for Q or Z.
Added: freeswitch/trunk/scripts/aadir/aadir.js
==============================================================================
--- (empty file)
+++ freeswitch/trunk/scripts/aadir/aadir.js Mon Dec 15 13:17:53 2008
@@ -0,0 +1,242 @@
+/*
+ * File: aadir.js
+ * Purpose: Auto Attendant directory.
+ * Machine: OS:
+ * Author: John Wehle Date: November 6, 2008
+ *
+ * Copyright (c) 2008 Feith Systems and Software, Inc.
+ * All Rights Reserved
+ */
+
+
+var digitTimeOut = 3000;
+var interDigitTimeOut = 1000;
+var absoluteTimeOut = 10000;
+
+
+var base_dir = session.getVariable ("base_dir");
+var domain = session.getVariable ("domain");
+var voicemail_path = base_dir + "/storage/voicemail/default/" + domain + "/";
+
+var file_exts = [ ".wav", ".mp3" ];
+
+var extRE = /^1[0-9][0-9][0-9]$/g;
+var operator = "operator";
+
+var directory;
+var directory_camelcase;
+
+var translations = [ "0",
+ "QZ", "ABC", "DEF",
+ "GHI", "JKL", "MNO",
+ "PQRS", "TUV", "WXYZ" ];
+
+var extension = "";
+var dtmf_digits = "";
+
+
+function load_directory ()
+ {
+ var i;
+ var name;
+ var number;
+
+ var dir = apiExecute ("xml_locate", "directory domain name " + domain);
+ var re = /\s+$/g;
+ var length = dir.search (re);
+
+ if (length == -1)
+ length = dir.length;
+
+ dir = dir.substring (0, length);
+
+ var xdir = new XML (dir);
+
+ directory = new Array ();
+ i = 0;
+
+ re = /[^A-Z0-9\s]/gi;
+
+ for each (var variables in xdir.user.variables) {
+ name = "";
+ number = "";
+
+ for each (variable in variables.variable) {
+ if (variable. at name.toString() == "effective_caller_id_name")
+ name = variable. at value.toString();
+ if (variable. at name.toString() == "effective_caller_id_number")
+ number = variable. at value.toString();
+ }
+
+ if (name.length == 0 || number.length == 0 || number.search (extRE) == -1)
+ continue;
+
+ directory[i] = new Array (2);
+ directory[i][0] = name.replace (re, "");
+ directory[i][1] = number;
+
+ i++;
+ }
+ }
+
+
+function build_camelcase_directory ()
+ {
+ var i;
+ var fname;
+ var lname;
+ var fre = /^[A-Z0-9]+/gi;
+ var lre = /[A-Z0-9]+$/gi;
+
+ directory_camelcase = new Array (directory.length);
+
+ for (i = 0; i < directory.length; i++) {
+ directory_camelcase[i] = new Array (2);
+
+ directory_camelcase[i][0] = "";
+ directory_camelcase[i][1] = 0;
+
+ fname = directory[i][0].match (fre);
+ lname = directory[i][0].match (lre);
+ if (fname.length != 1 || lname.length != 1) {
+ console_log ("err", "Can't parse " + directory[i][0] + " for directory\n");
+ continue;
+ }
+
+ directory_camelcase[i][0] = lname[0] + fname[0];
+ directory_camelcase[i][1] = directory[i][1];
+ }
+ }
+
+
+function directory_lookup (digits)
+ {
+ var i;
+ var match = "";
+ var pattern = "^";
+ var re;
+
+ if (digits.length && digits[0] == 0)
+ return 0;
+
+ for (i = 0; i < digits.length; i++) {
+ if (isNaN (parseInt (digits[i], 10)))
+ return -1;
+ pattern += "[" + translations[parseInt (digits[i], 10)] + "]";
+ }
+
+ re = new RegExp (pattern, "i");
+
+ for (i = 0; i < directory_camelcase.length; i++)
+ if (directory_camelcase[i][0].search (re) != -1) {
+ if (! isNaN (parseInt (match, 10)))
+ return "";
+ match = directory_camelcase[i][1];
+ }
+
+ if (isNaN (parseInt (match, 10)))
+ return -1;
+
+ return match;
+ }
+
+
+function on_dtmf (session, type, obj, arg)
+ {
+
+ if (type == "dtmf") {
+ dtmf_digits += obj.digit;
+ extension = directory_lookup (dtmf_digits)
+ return false;
+ }
+
+ return true;
+ }
+
+
+function directory_prompt ()
+ {
+ var choice;
+ var index;
+ var repeat;
+
+ extension = "";
+ choice = "";
+ repeat = 0;
+
+ while (session.ready () && repeat < 3) {
+
+ /* play phrase - if digit keyed while playing callback will catch them*/
+ session.sayPhrase ("feith_aa_directory", "#", "", on_dtmf, "");
+
+ choice = dtmf_digits;
+
+ while ( isNaN (parseInt (extension, 10)) ) {
+ if (! session.ready ())
+ return "";
+
+ dtmf_digits = session.getDigits (1, '#', digitTimeOut,
+ interDigitTimeOut, absoluteTimeOut);
+ choice += dtmf_digits;
+
+ extension = directory_lookup (choice);
+ }
+
+ if (parseInt (extension, 10) >= 0)
+ break;
+
+ session.sayPhrase ("voicemail_invalid_extension", "#", "", on_dtmf, "");
+
+ dtmf_digits = "";
+ extension = "";
+ choice = "";
+ repeat++;
+
+ session.flushDigits ();
+ }
+
+ return extension;
+ }
+
+
+var choice = "";
+var fd;
+var i;
+var recorded_name;
+
+session.answer ();
+
+session.execute("sleep", "1000");
+
+load_directory ();
+
+build_camelcase_directory ();
+
+dtmf_digits = "";
+session.flushDigits ();
+choice = directory_prompt ();
+
+if (! session.ready ()) {
+ session.hangup();
+ exit();
+ }
+
+if ( isNaN (parseInt (choice, 10)) || parseInt (choice, 10) <= 0) {
+ session.execute ("transfer", operator + " XML default");
+ exit();
+ }
+
+for (i = 0; i < file_exts.length; i++) {
+ recorded_name = voicemail_path + choice + "/recorded_name" + file_exts[i];
+ fd = new File (recorded_name);
+ if (fd.exists) {
+ session.streamFile (recorded_name);
+ break;
+ }
+ }
+
+session.execute ("phrase", "spell," + choice);
+
+session.execute ("transfer", choice + " XML default");
+
+exit();
More information about the Freeswitch-svn
mailing list