freeswitch/scripts/s25vmail/s25vmail.js

194 lines
4.3 KiB
JavaScript
Raw Normal View History

/*
* File: s25vmail.js
* Purpose: Invoke voicemail based on AT&T System 25 PBX voicemail mode codes
* Machine: OS:
* Author: John Wehle Date: June 24, 2008
*
* Copyright (c) 2008 Feith Systems and Software, Inc.
* All Rights Reserved
*
* The message waiting indicator is handled by a separate program.
*/
var id_digits_required = 3;
var digitTimeOut = 3000;
var interDigitTimeOut = 1000;
var absoluteTimeOut = 10000;
var dtmf_digits = "";
function on_dtmf (session, type, obj, arg)
{
if (type == "dtmf") {
dtmf_digits += obj.digit;
}
return true;
}
function prompt_for_id ()
{
var id;
var index;
var repeat;
dtmf_digits = "";
id = "";
repeat = 0;
while (session.ready () && repeat < 3) {
session.flushDigits ();
/* play phrase - if digit keyed while playing callback will catch them*/
session.sayPhrase ("voicemail_enter_id", "#", "", on_dtmf, "");
if (! session.ready ())
return "";
id = dtmf_digits;
if (id.indexOf ('#') == -1) {
dtmf_digits = session.getDigits (5, '#', digitTimeOut,
interDigitTimeOut, absoluteTimeOut);
id += dtmf_digits;
id += '#';
}
/* a valid id must meet the minimum length requirements */
if ((index = id.indexOf ('#')) >= id_digits_required) {
id = id.substring (0,index);
break;
}
dtmf_digits = "";
id = "";
repeat++;
}
return id;
}
var start = "";
var mode = "";
var from = "";
var to = "";
var domain = session.getVariable ("domain");
session.answer ();
start = session.getDigits (1, '', digitTimeOut,
interDigitTimeOut, absoluteTimeOut);
if (start != "#") {
console_log ("err", "Invalid VMAIL start code from PBX\n");
exit();
}
mode = session.getDigits (5, '#', digitTimeOut,
interDigitTimeOut, absoluteTimeOut);
from = session.getDigits (5, '#', digitTimeOut,
interDigitTimeOut, absoluteTimeOut);
to = session.getDigits (5, '#', digitTimeOut,
interDigitTimeOut, absoluteTimeOut);
session.execute("sleep", "1000");
// Verify that the proper parameters are present
switch (mode) {
// Direct Inside Access
case "00":
if (isNaN (parseInt (from, 10))) {
console_log ("err", "Invalid VMAIL calling PDC from PBX\n");
break;
}
session.setVariable ("voicemail_authorized", "false");
session.execute ("voicemail", "check default " + domain + " " + from);
break;
// Direct Dial Access
case "01":
from = prompt_for_id ();
if (! session.ready ()) {
session.hangup();
exit();
}
if (isNaN (parseInt (from, 10))) {
console_log ("err", "Invalid VMAIL mailbox from caller\n");
break;
}
session.setVariable ("voicemail_authorized", "false");
session.execute ("voicemail", "check default " + domain + " " + from);
break;
// Coverage - caller is inside
case "02":
if (isNaN (parseInt (from, 10)) || isNaN (parseInt (to, 10))) {
console_log ("err", "Invalid VMAIL calling or called PDC from PBX\n");
break;
}
session.setVariable ("effective_caller_id_name", "inside caller");
session.setVariable ("effective_caller_id_number", from);
session.execute ("voicemail", "default " + domain + " " + to);
break;
// Coverage - caller is dial
case "03":
if (isNaN (parseInt (to, 10))) {
console_log ("err", "Invalid VMAIL called PDC from PBX\n");
break;
}
session.setVariable ("effective_caller_id_name", "outside caller");
session.setVariable ("effective_caller_id_number", "Unknown");
session.execute ("voicemail", "default " + domain + " " + to);
break;
// Coverage - not yet defined
case "04":
break;
// Leave Word Calling
case "05":
if (isNaN (parseInt (from, 10)) || isNaN (parseInt (to, 10))) {
console_log ("err", "Invalid VMAIL calling or called PDC from PBX\n");
break;
}
break;
// Refresh MW lamps
case "06":
break;
// Voice Port failed to answer
case "08":
if (isNaN (parseInt (to, 10))) {
console_log ("err", "Invalid VMAIL PDC from PBX\n");
break;
}
break;
// Unknown
default:
console_log ("err", "Invalid VMAIL mode code from PBX\n");
break;
}
exit();