123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- /*
- * 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.groups.group.users.user.variables) {
- name = "";
- number = "";
- for each (variable in variables.variable) {
- if (variable.@name.toString() == "effective_caller_id_name")
- name = variable.@value.toString();
- if (variable.@name.toString() == "effective_caller_id_number")
- number = variable.@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();
|