Scripts (версия 3.xx)/Приём звонков: различия между версиями
Перейти к навигации
Перейти к поиску
McBurns (обсуждение | вклад) (Новая страница: « Category:Помощь (версия 3.xx)») |
McBurns (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
<syntaxhighlight lang="javascript"> | |||
eval (GetFileContent ('Common\\Classes\\Script.js')); | |||
var Script = new Script (); // Основной класс сценария | |||
// =================== Подключение модулей =================== | |||
eval (Script.GetFileContent ('Common\\Classes\\Database.js')); // База данных | |||
eval (Script.GetFileContent ('Common\\Classes\\Time.js')); // Расписание | |||
eval (Script.GetFileContent ('Common\\Classes\\Sound.js')); // Воспроизведение звуков | |||
eval (Script.GetFileContent ('Common\\Classes\\Device.js')); // Устройство | |||
eval (Script.GetFileContent ('Common\\Classes\\Recording.js')); // Запись разговора | |||
eval (Script.GetFileContent ('Common\\Classes\\DataSearch.js')); // Поиск данных | |||
eval (Script.GetFileContent ('Solutions\\Basic\\IncomingCall\\Info.js')); // Информация и статистика | |||
eval (Script.GetFileContent ('Solutions\\Basic\\IncomingCall\\CDataWrite.js')); // Запись данных | |||
eval (Script.GetFileContent ('Solutions\\Basic\\IncomingCall\\CAnswerMode.js')); // Режим обработки входящего звонка | |||
// =================== Начало работы сценария =================== | |||
Script.InLogInfo ('Старт'); | |||
try { | |||
var Device = new CDevice (); | |||
var Info = new CInfo (); | |||
if (Device.Open ()) { // Если устройство открыто успешно | |||
var AnswerMode = new CAnswerMode (); | |||
var Time = new CTime (); | |||
if (AnswerMode.IsDatabase ()) { // Если есть запись или поиск телефона в базе | |||
var Database = new CDatabase (); | |||
if (Database.Open ()) { // Если соединение с базой данных успешное | |||
while (Time.WaitTime ()) { // Выполняем, пока совпадает время работы | |||
Script.WaitPause (); // Ожидание, если нажали на Паузу | |||
Script.InLogInfo ('Ожидание входящего звонка...'); | |||
switch (Device.WaitForCall (Time.TimeOut (), 1)) { // Ждем звонка заданное время | |||
case 0: // Звонок поступил | |||
var Phone = ('' + Device.GetCallerId ()).replace (new RegExp (/[^0-9]*/g), ''); | |||
if (Phone) Script.InLogInfo ('Входящий звонок от %s поступил', Phone); | |||
else Script.InLogInfo ('Входящий звонок поступил'); | |||
Script.AddVariable ('Phone', Phone); | |||
if (Script.IsStop ()) break; | |||
var StartTime = new Date (); // Время начала разговора | |||
var Recording = new CRecording (); | |||
Recording.Start (Device); // проверка на включение записи разговора перед сообщением | |||
var DataSearch = new CDataSearch (); | |||
if (DataSearch.IsSearch ()) { // если есть поиск в базе данных | |||
var Record = DataSearch.GetRecord (Database, Phone); // выбираем записи в БД | |||
if (Record.Fetch () && Phone) { // Нашли телефон, произносим для него сообщение | |||
var Sound = new CSound ('Found'); | |||
Script.InLogInfo ('Номер абонента найден в базе данных'); | |||
Script.InLogInfo ('Начало передачи сообщения'); | |||
Sound.Say (Device, Record); | |||
Info.Ok++; // добавляем найденный телефон в статистику | |||
} | |||
else { // Не нашли, произносим общее для не найденных | |||
var Sound = new CSound ('NotFound'); | |||
Script.InLogInfo ('Номер абонента не найден в базе данных'); | |||
Script.InLogInfo ('Начало передачи сообщения'); | |||
Sound.Say (Device, Record); | |||
Info.Fail++; // добавляем неизвестный телефон в статистику | |||
} | |||
Recording.Stop (Device, Record); // Завершаем запись разговора, если была включена | |||
Record.Close (); | |||
} | |||
else { // Поиск не включен, произноcим общее сообщение для всех | |||
var Sound = new CSound ('ForAll'); | |||
Script.InLogInfo ('Начало передачи сообщения'); | |||
Sound.Say (Device, Record); | |||
Recording.Stop (Device); // Завершаем запись разговора, если была включена | |||
} | |||
Device.HangUp (); // Кладём трубку | |||
Info.All++; // Увеличиваем счетчик принятых звонков в статистике | |||
Info.Update (DataSearch.IsSearch ()); // Показываем статистику | |||
var DataWrite = new CDataWrite (); | |||
DataWrite.WriteResult (Database, Phone); // Записываем звонок, если необходимо | |||
if (Phone) Script.InLogInfo ('Входящий звонок от %s обработан.', Phone); | |||
else Script.InLogInfo ('Входящий звонок обработан.'); | |||
break; | |||
case 4: | |||
break; | |||
} | |||
if (Script.IsStop ()) break; | |||
} | |||
Database.Close (); // Закрываем БД | |||
} | |||
} | |||
else { // Без записи и поиска в БД | |||
while (Time.WaitTime ()) { // Выполняем, пока совпадает время работы | |||
Script.InLogInfo ('Ожидание входящего звонка...'); | |||
switch (Device.WaitForCall (Time.TimeOut (), 1)) { // Ждем звонка заданное время | |||
case 0: // Звонок поступил | |||
var Phone = Device.GetCallerId (); | |||
if (Phone) Script.InLogInfo ('Входящий звонок от %s поступил', Phone); | |||
else Script.InLogInfo ('Входящий звонок поступил'); | |||
Script.AddVariable ('Phone', Phone); | |||
if (Script.IsStop ()) break; | |||
var StartTime = new Date (); // Время начала разговора | |||
var Recording = new CRecording (); | |||
Recording.Start (Device); // проверка на включение записи разговора перед сообщением | |||
var Sound = new CSound ('ForAll'); | |||
Sound.Say (Device); | |||
Recording.Stop (Device); // Завершаем запись разговора, если была включена | |||
Device.HangUp (); // Кладём трубку | |||
Info.All++; // Увеличиваем счетчик принятых звонков в статистике | |||
Info.Update (false); // Показываем статистику | |||
if (Phone) Script.InLogInfo ('Входящий звонок от %s обработан.', Phone); | |||
else Script.InLogInfo ('Входящий звонок обработан.'); | |||
break; | |||
case 4: | |||
break; | |||
} | |||
if (Script.IsStop ()) break; | |||
} | |||
} | |||
Device.Close (); // Закрываем устройство | |||
} | |||
} | |||
catch (Err) { | |||
Script.InLogError ('Ошибка при работe сценария. %s. Код ошибки: %s', Err.description, Err.number); | |||
if (Database) Database.Close (); | |||
if (Device ) Device.Close (); | |||
} | |||
Script.InLogInfo ('Стоп'); | |||
</syntaxhighlight> | |||
[[Category:Помощь (версия 3.xx)]] | [[Category:Помощь (версия 3.xx)]] |
Версия 09:31, 18 октября 2013
eval (GetFileContent ('Common\\Classes\\Script.js'));
var Script = new Script (); // Основной класс сценария
// =================== Подключение модулей ===================
eval (Script.GetFileContent ('Common\\Classes\\Database.js')); // База данных
eval (Script.GetFileContent ('Common\\Classes\\Time.js')); // Расписание
eval (Script.GetFileContent ('Common\\Classes\\Sound.js')); // Воспроизведение звуков
eval (Script.GetFileContent ('Common\\Classes\\Device.js')); // Устройство
eval (Script.GetFileContent ('Common\\Classes\\Recording.js')); // Запись разговора
eval (Script.GetFileContent ('Common\\Classes\\DataSearch.js')); // Поиск данных
eval (Script.GetFileContent ('Solutions\\Basic\\IncomingCall\\Info.js')); // Информация и статистика
eval (Script.GetFileContent ('Solutions\\Basic\\IncomingCall\\CDataWrite.js')); // Запись данных
eval (Script.GetFileContent ('Solutions\\Basic\\IncomingCall\\CAnswerMode.js')); // Режим обработки входящего звонка
// =================== Начало работы сценария ===================
Script.InLogInfo ('Старт');
try {
var Device = new CDevice ();
var Info = new CInfo ();
if (Device.Open ()) { // Если устройство открыто успешно
var AnswerMode = new CAnswerMode ();
var Time = new CTime ();
if (AnswerMode.IsDatabase ()) { // Если есть запись или поиск телефона в базе
var Database = new CDatabase ();
if (Database.Open ()) { // Если соединение с базой данных успешное
while (Time.WaitTime ()) { // Выполняем, пока совпадает время работы
Script.WaitPause (); // Ожидание, если нажали на Паузу
Script.InLogInfo ('Ожидание входящего звонка...');
switch (Device.WaitForCall (Time.TimeOut (), 1)) { // Ждем звонка заданное время
case 0: // Звонок поступил
var Phone = ('' + Device.GetCallerId ()).replace (new RegExp (/[^0-9]*/g), '');
if (Phone) Script.InLogInfo ('Входящий звонок от %s поступил', Phone);
else Script.InLogInfo ('Входящий звонок поступил');
Script.AddVariable ('Phone', Phone);
if (Script.IsStop ()) break;
var StartTime = new Date (); // Время начала разговора
var Recording = new CRecording ();
Recording.Start (Device); // проверка на включение записи разговора перед сообщением
var DataSearch = new CDataSearch ();
if (DataSearch.IsSearch ()) { // если есть поиск в базе данных
var Record = DataSearch.GetRecord (Database, Phone); // выбираем записи в БД
if (Record.Fetch () && Phone) { // Нашли телефон, произносим для него сообщение
var Sound = new CSound ('Found');
Script.InLogInfo ('Номер абонента найден в базе данных');
Script.InLogInfo ('Начало передачи сообщения');
Sound.Say (Device, Record);
Info.Ok++; // добавляем найденный телефон в статистику
}
else { // Не нашли, произносим общее для не найденных
var Sound = new CSound ('NotFound');
Script.InLogInfo ('Номер абонента не найден в базе данных');
Script.InLogInfo ('Начало передачи сообщения');
Sound.Say (Device, Record);
Info.Fail++; // добавляем неизвестный телефон в статистику
}
Recording.Stop (Device, Record); // Завершаем запись разговора, если была включена
Record.Close ();
}
else { // Поиск не включен, произноcим общее сообщение для всех
var Sound = new CSound ('ForAll');
Script.InLogInfo ('Начало передачи сообщения');
Sound.Say (Device, Record);
Recording.Stop (Device); // Завершаем запись разговора, если была включена
}
Device.HangUp (); // Кладём трубку
Info.All++; // Увеличиваем счетчик принятых звонков в статистике
Info.Update (DataSearch.IsSearch ()); // Показываем статистику
var DataWrite = new CDataWrite ();
DataWrite.WriteResult (Database, Phone); // Записываем звонок, если необходимо
if (Phone) Script.InLogInfo ('Входящий звонок от %s обработан.', Phone);
else Script.InLogInfo ('Входящий звонок обработан.');
break;
case 4:
break;
}
if (Script.IsStop ()) break;
}
Database.Close (); // Закрываем БД
}
}
else { // Без записи и поиска в БД
while (Time.WaitTime ()) { // Выполняем, пока совпадает время работы
Script.InLogInfo ('Ожидание входящего звонка...');
switch (Device.WaitForCall (Time.TimeOut (), 1)) { // Ждем звонка заданное время
case 0: // Звонок поступил
var Phone = Device.GetCallerId ();
if (Phone) Script.InLogInfo ('Входящий звонок от %s поступил', Phone);
else Script.InLogInfo ('Входящий звонок поступил');
Script.AddVariable ('Phone', Phone);
if (Script.IsStop ()) break;
var StartTime = new Date (); // Время начала разговора
var Recording = new CRecording ();
Recording.Start (Device); // проверка на включение записи разговора перед сообщением
var Sound = new CSound ('ForAll');
Sound.Say (Device);
Recording.Stop (Device); // Завершаем запись разговора, если была включена
Device.HangUp (); // Кладём трубку
Info.All++; // Увеличиваем счетчик принятых звонков в статистике
Info.Update (false); // Показываем статистику
if (Phone) Script.InLogInfo ('Входящий звонок от %s обработан.', Phone);
else Script.InLogInfo ('Входящий звонок обработан.');
break;
case 4:
break;
}
if (Script.IsStop ()) break;
}
}
Device.Close (); // Закрываем устройство
}
}
catch (Err) {
Script.InLogError ('Ошибка при работe сценария. %s. Код ошибки: %s', Err.description, Err.number);
if (Database) Database.Close ();
if (Device ) Device.Close ();
}
Script.InLogInfo ('Стоп');