mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-08-13 17:38:59 +00:00
FSSCRIPTS-8 Thanks John
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@10776 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
193
scripts/s25vmail/s25vmail.js
Normal file
193
scripts/s25vmail/s25vmail.js
Normal file
@@ -0,0 +1,193 @@
|
||||
/*
|
||||
* 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();
|
Reference in New Issue
Block a user