Scripts (версия 3.xx)/Приём звонков: различия между версиями

Материал из Call Office Wiki
Перейти к навигации Перейти к поиску
(Новая страница: « Category:Помощь (версия 3.xx)»)
 
Строка 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 ('Стоп');