[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