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

Материал из Call Office Wiki
Перейти к навигации Перейти к поиску
 
(не показаны 2 промежуточные версии этого же участника)
Строка 73: Строка 73:


<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
               Script.WaitPause ();                                 // Ожидание, если нажали на Паузу
               Script.WaitPause ();                                     // Ожидание, если нажали на Паузу


               Script.InLogInfo ('Ожидание входящего звонка...');
               Script.InLogInfo ('Ожидание входящего звонка...');
Строка 95: Строка 95:
</syntaxhighlight>
</syntaxhighlight>


:В переменную '''StartTime''' заносится время начала разговора, при соответствующих настройках сценария включается запись разговора.
:В переменную '''StartTime''' заносится время начала разговора.
 
:Определяется переменная '''Recording''' класса '''CRecording''', отвечающая за запись ответа абонента, при соответствующих настройках сценария включается запись разговора.


:Определяется переменная '''DataSearch''' класса '''CDataSearch''', отвечающая за поиск номера телефона в базе данных.
:Определяется переменная '''DataSearch''' класса '''CDataSearch''', отвечающая за поиск номера телефона в базе данных.
Строка 174: Строка 176:
</syntaxhighlight>
</syntaxhighlight>


:Завершается, если была включена, запись разговора, записывается ответ абонента, если в конфигурации определена запись после произнесения сообщения.
:Завершается, если была включена, запись разговора, записывается ответ абонента, если в конфигурации определена запись после произнесения сообщения. После завершения записи устройство «кладёт трубку».


<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
Строка 181: Строка 183:


                     Device.HangUp ();                        // Кладём трубку
                     Device.HangUp ();                        // Кладём трубку
</syntaxhighlight>


:Увеличивается значение счётчика успешных звонков, обновляется информация в окне статистики.
<syntaxhighlight lang="javascript">
                     Info.All++;                              // Увеличиваем счетчик принятых звонков в статистике
                     Info.All++;                              // Увеличиваем счетчик принятых звонков в статистике
                     Info.Update (DataSearch.IsSearch ());    // Показываем статистику
                     Info.Update (DataSearch.IsSearch ());    // Показываем статистику
</syntaxhighlight>
:Определяется переменная '''DataWrite''' класса '''CDataWrite''', отвечающая за запись в базу данных информации о звонке. Если это указано в конфигурации, записывается информация о поступившем звонке в базу данных.
:В журнал выводится информация о том, что звонок обработан.


<syntaxhighlight lang="javascript">
                     var DataWrite = new CDataWrite ();
                     var DataWrite = new CDataWrite ();


                     DataWrite.WriteResult (Database, Phone);  // Записываем звонок, если необходимо
                     DataWrite.WriteResult (Database, Phone);  // Записываем звонок, если необходимо


                     if (Phone) Script.InLogInfo ('Входящий звонок от %s обработан.', Phone);
                     if (!empty (Phone)) Script.InLogInfo ('Входящий звонок от %s обработан.', Phone);
                     else       Script.InLogInfo ('Входящий звонок обработан.');
                     else               Script.InLogInfo ('Входящий звонок обработан.');


                     break;
                     break;
</syntaxhighlight>


:В случае, если ожидание прервано пользователем.
<syntaxhighlight lang="javascript">
                   case 4:
                   case 4:
                     break;
                     break;
Строка 204: Строка 220:
         }
         }
       }
       }
</syntaxhighlight>
:Блок, выполняемый в случае, если нет поиска и записи в базу данных.
<syntaxhighlight lang="javascript">
       else {                                                  // Без записи и поиска в БД
       else {                                                  // Без записи и поиска в БД


         while (Time.WaitTime ()) {                            // Выполняем, пока совпадает время работы
         while (Time.WaitTime ()) {                            // Выполняем, пока совпадает время работы
</syntaxhighlight>
:При нажатии кнопки «Пауза» ожидается действие пользователя. Если пауза не нажата, выводится в журнал текст «Ожидание входящего звонка...». Если указано расписание работы, то время ожидания звонка определяется функцией '''Time.TimeOut ()''', если расписание не включено, то ожидание бесконечное. При входящем звонке (метод [[Объект_Device/Методы/WaitForIncoming|WaitForIncoming]] возвращает ноль) обрабатывается входящий звонок.
<syntaxhighlight lang="javascript">
            Script.WaitPause ();                                      // Ожидание, если нажали на Паузу


             Script.InLogInfo ('Ожидание входящего звонка...');
             Script.InLogInfo ('Ожидание входящего звонка...');


             switch (Device.WaitForCall (Time.TimeOut (), 1)) {    // Ждем звонка заданное время
             switch (Device.WaitForIncoming (Time.TimeOut (), 1)) {    // Ждем звонка заданное время


               case 0:                    // Звонок поступил
               case 0:                    // Звонок поступил
</syntaxhighlight>
:В переменную '''Phone''' заносится номер, с которого поступил входящий звонок (только цифры). Если номер определился, выводим в журнал сообщение о входящем звонке с указанием номера, если не определился, то просто о входящем звонке. Добавляется глобальная переменная сценария '''Phone''', содержащая полученный номер телефона.


                   var Phone = Device.GetCallerId ();
<syntaxhighlight lang="javascript">
                   var Phone = ('' + Device.GetCallerId ()).replace (new RegExp (/[^0-9]*/g), '');


                   if (Phone) Script.InLogInfo ('Входящий звонок от %s поступил', Phone);
                   if (!empty (Phone)) Script.InLogInfo ('Входящий звонок от %s поступил', Phone);
                   else       Script.InLogInfo ('Входящий звонок поступил');
                   else               Script.InLogInfo ('Входящий звонок поступил');


                   Script.AddVariable ('Phone', Phone);
                   Script.AddVariable ('Phone', Phone);


                   if (Script.IsStop ()) break;
                   if (Script.IsStop ()) break;
</syntaxhighlight>


:В переменную '''StartTime''' заносится время начала разговора.
:Определяется переменная '''Recording''' класса '''CRecording''', отвечающая за запись ответа абонента, при соответствующих настройках сценария включается запись разговора.
<syntaxhighlight lang="javascript">
                   var StartTime = new Date ();        // Время начала разговора
                   var StartTime = new Date ();        // Время начала разговора


Строка 240: Строка 277:
                   Info.Update (false);                  // Показываем статистику
                   Info.Update (false);                  // Показываем статистику


                   if (Phone) Script.InLogInfo ('Входящий звонок от %s обработан.', Phone);
                   if (!empty (Phone)) Script.InLogInfo ('Входящий звонок от %s обработан.', Phone);
                   else       Script.InLogInfo ('Входящий звонок обработан.');
                   else               Script.InLogInfo ('Входящий звонок обработан.');


                   break;
                   break;

Текущая версия на 07:50, 31 октября 2013

Первая часть скрипта подготавливает классы и объекты, необходимые для работы скрипта. Описание дано в комментариях к каждой строке за исключением класса Script, который отвечает за непосредственное выполнение скрипта.
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.SetDebug включается/отключается режим вывода дополнительных отладочных сообщений во время работы сценария. Как правило, это излишняя информация. Включать данный параметр рекомендуется только в случае, если сценарий выполняется некорректно и надо отправить разработчикам журнал с большим количеством информации. Без передачи параметра (true/false) функция включает режим отображения так, как установлено в конфигурации.
Script.SetDebug ();
Команда Script.InLogInfo позволяет выводить информацию в журнал в интерфейсе программы и одновременно записывать её в системный журнал. В данном случае будет отметка о том, что сценарий загрузил все необходимые данные и запустился.
Script.InLogInfo ('Старт');

try {
Далее определяется переменная Device класса CDevice, отвечающая за управление нашим устройством приёма звонков (модем, SIP и т.д.). Используется метод Open для устройства с проверкой успешности.
Определяется переменная Info класса CInfo, отвечающая за отображение статистики во вкладке «Журнал». Проводится первый подсчёт статистики на основе выбранных в конфигурации параметров.
   var Device = new CDevice ();

   var Info = new CInfo ();

   if (Device.Open ()) {                                          // Если устройство открыто успешно
Далее определяются переменные: AnswerMode класса CAnswerMode, отвечающая за режим обработки входящих звонков, Time класса CTime, отвечающая за работу с временем и расписание.
      var AnswerMode = new CAnswerMode ();
      var Time       = new CTime       ();
Блок, выполняемый, если есть поиск в базе данных или запись звонков в базу данных.
      if (AnswerMode.IsDatabase ()) {                                // Если есть запись или поиск телефона в базе
Определяется переменная Database класса CDatabase, отвечающая за работу с источником данных. Проверяется соединение с базой данных.
         var Database = new CDatabase ();

         if (Database.Open ()) {                                     // Если соединение с базой данных успешное
Проверяется время наступления работы, если определено расписание.
            while (Time.WaitTime ()) {                               // Выполняем, пока совпадает время работы
При нажатии кнопки «Пауза» ожидается действие пользователя. Если пауза не нажата, выводится в журнал текст «Ожидание входящего звонка...». Если указано расписание работы, то время ожидания звонка определяется функцией Time.TimeOut (), если расписание не включено, то ожидание бесконечное. При входящем звонке (метод WaitForIncoming возвращает ноль) обрабатывается входящий звонок.
               Script.WaitPause ();                                      // Ожидание, если нажали на Паузу

               Script.InLogInfo ('Ожидание входящего звонка...');

               switch (Device.WaitForIncoming (Time.TimeOut (), 1)) {    // Ждем звонка заданное время

                  case 0:                    // Звонок поступил
В переменную Phone заносится номер, с которого поступил входящий звонок (только цифры). Если номер определился, выводим в журнал сообщение о входящем звонке с указанием номера, если не определился, то просто о входящем звонке. Добавляется глобальная переменная сценария Phone, содержащая полученный номер телефона.
                     var Phone = ('' + Device.GetCallerId ()).replace (new RegExp (/[^0-9]*/g), '');

                     if (!empty (Phone)) Script.InLogInfo ('Входящий звонок от %s поступил', Phone);
                     else                Script.InLogInfo ('Входящий звонок поступил');

                     Script.AddVariable ('Phone', Phone);

                     if (Script.IsStop ()) break;
В переменную StartTime заносится время начала разговора.
Определяется переменная Recording класса CRecording, отвечающая за запись ответа абонента, при соответствующих настройках сценария включается запись разговора.
Определяется переменная DataSearch класса CDataSearch, отвечающая за поиск номера телефона в базе данных.
                     var StartTime = new Date ();                    // Время начала разговора

                     var Recording = new CRecording ();

                     Recording.Start (Device);                       // проверка на включение записи разговора перед сообщением

                     var DataSearch = new CDataSearch ();
При включенном поиске номера телефона в базе данных определяется переменная Record, содержащая записи базы данных с указанным номером телефона. Если записи есть и номер телефона определён, производится переход к произнесению сообщения для найденных номеров телефонов.
                     if (DataSearch.IsSearch ()) {                   // если есть поиск в базе данных

                        var Record = DataSearch.GetRecord (Database, Phone);     // выбираем записи в БД

                        if (Record.Fetch () && Phone) {                          // Нашли телефон, произносим для него сообщение
Определяется переменная Sound класса CSound, отвечающая за произнесение сообщений для найденных номеров ('Found'). Выводится сообщение в журнал о произнесении сообщения и произносится определённое конфигурацией звуковое сообщение. В статистике добавляется успешно принятый звонок.
                           var Sound = new CSound ('Found');

                           Script.InLogInfo ('Номер абонента найден в базе данных');
                           Script.InLogInfo ('Начало передачи сообщения');
                           Sound.Say (Device, Record);

                           Info.Ok++;                          // добавляем найденный телефон в статистику
                        }
Определяется переменная Sound класса CSound, отвечающая за произнесение сообщений для ненайденных номеров ('NotFound'). Выводится сообщение в журнал о произнесении сообщения и произносится определённое конфигурацией звуковое сообщение. В статистике добавляется неизвестный принятый звонок.
                        else {                                 // Не нашли, произносим общее для не найденных

                           var Sound = new CSound ('NotFound');

                           Script.InLogInfo ('Номер абонента не найден в базе данных');
                           Script.InLogInfo ('Начало передачи сообщения');
                           Sound.Say (Device, Record);

                           Info.Fail++;                        // добавляем неизвестный телефон в статистику
                        }
Завершается, если была включена, запись разговора, записывается ответ абонента, если в конфигурации определена запись после произнесения сообщения.
                        Recording.Stop (Device, Record);       // Завершаем запись разговора, если была включена
Закрывается соединение с выбранными по номеру телефона записями.
                        Record.Close ();

                     }
Определяется переменная Sound класса CSound, отвечающая за произнесение сообщения для всех входящих без поиска в базе данных ('ForAll'). Выводится сообщение в журнал о произнесении сообщения и произносится определённое конфигурацией звуковое сообщение.
                     else {                                    // Поиск не включен, произноcим общее сообщение для всех

                        var Sound = new CSound ('ForAll');

                        Script.InLogInfo ('Начало передачи сообщения');

                        Sound.Say (Device, Record);
Завершается, если была включена, запись разговора, записывается ответ абонента, если в конфигурации определена запись после произнесения сообщения. После завершения записи устройство «кладёт трубку».
                        Recording.Stop (Device);               // Завершаем запись разговора, если была включена
                     }

                     Device.HangUp ();                         // Кладём трубку
Увеличивается значение счётчика успешных звонков, обновляется информация в окне статистики.
                     Info.All++;                               // Увеличиваем счетчик принятых звонков в статистике
                     Info.Update (DataSearch.IsSearch ());     // Показываем статистику
Определяется переменная DataWrite класса CDataWrite, отвечающая за запись в базу данных информации о звонке. Если это указано в конфигурации, записывается информация о поступившем звонке в базу данных.
В журнал выводится информация о том, что звонок обработан.
                     var DataWrite = new CDataWrite ();

                     DataWrite.WriteResult (Database, Phone);  // Записываем звонок, если необходимо

                     if (!empty (Phone)) Script.InLogInfo ('Входящий звонок от %s обработан.', Phone);
                     else                Script.InLogInfo ('Входящий звонок обработан.');

                     break;
В случае, если ожидание прервано пользователем.
                  case 4:
                     break;
               }

               if (Script.IsStop ()) break;
            }

            Database.Close ();      // Закрываем БД
         }
      }
Блок, выполняемый в случае, если нет поиска и записи в базу данных.
      else {                                                   // Без записи и поиска в БД

         while (Time.WaitTime ()) {                            // Выполняем, пока совпадает время работы
При нажатии кнопки «Пауза» ожидается действие пользователя. Если пауза не нажата, выводится в журнал текст «Ожидание входящего звонка...». Если указано расписание работы, то время ожидания звонка определяется функцией Time.TimeOut (), если расписание не включено, то ожидание бесконечное. При входящем звонке (метод WaitForIncoming возвращает ноль) обрабатывается входящий звонок.
            Script.WaitPause ();                                      // Ожидание, если нажали на Паузу

            Script.InLogInfo ('Ожидание входящего звонка...');

            switch (Device.WaitForIncoming (Time.TimeOut (), 1)) {    // Ждем звонка заданное время

               case 0:                    // Звонок поступил
В переменную Phone заносится номер, с которого поступил входящий звонок (только цифры). Если номер определился, выводим в журнал сообщение о входящем звонке с указанием номера, если не определился, то просто о входящем звонке. Добавляется глобальная переменная сценария Phone, содержащая полученный номер телефона.
                  var Phone = ('' + Device.GetCallerId ()).replace (new RegExp (/[^0-9]*/g), '');

                  if (!empty (Phone)) Script.InLogInfo ('Входящий звонок от %s поступил', Phone);
                  else                Script.InLogInfo ('Входящий звонок поступил');

                  Script.AddVariable ('Phone', Phone);

                  if (Script.IsStop ()) break;
В переменную StartTime заносится время начала разговора.
Определяется переменная Recording класса CRecording, отвечающая за запись ответа абонента, при соответствующих настройках сценария включается запись разговора.
                  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 (!empty (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 ('Стоп');