Дополнения: различия между версиями

Материал из Call Office Wiki
Перейти к навигации Перейти к поиску
Строка 87: Строка 87:
                                                 break;                                              // останавливаем сценарий по ошибке
                                                 break;                                              // останавливаем сценарий по ошибке
                                             }
                                             }
                                             else {
                                             else {                                                 // Модем открыт заново успешно
                                                 Script.InLogInfo ('Модем переподключен.');
                                                 Script.InLogInfo ('Модем переподключен.');
                                                 try {
                                                 try {

Версия 05:40, 1 октября 2015

На этой странице вы можете найти дополнения, которые можно вставить в текст сценария, чтобы изменить его работу.

Автоматическое определение порта модема Huawei при переподключении

Это дополнение автоматически находит модем по уникальному IMEI в списке подключенных к компьютеру устройств и заменяет его параметрами данные из конфигурации. Приведённый ниже код надо вставить в начале текста сценария после строки:

  var Device = new CDevice ();


   var FindDevice = new ActiveXObject("CallOffice.Device");        // Создаём экземпляр объекта Device

   DeviceList = FindDevice.DeviceList (1).toArray ();              // Получаем список устройств и передаём его в массив

   for (var i in DeviceList) {                                     // Перебираем полученные устройства

      var Dev = DeviceList[i].toArray ();                          // Получаем атрибуты устройства из списка

      if (Dev[1] == 7 && !Dev[5]) {                                // Если это модем Huawei и нет ошибки при обращении к нему

         try {

            FindDevice.Open (Dev[3]);                              // Открываем текущее устройство

            var Response = FindDevice.SendCommand ('ATI1<cr>');    // Получаем ответ на посланную в устройство команду ATI1<cr>

            var SplitATIResult = /IMEI:\s([0-9]{15})/.exec (Response);             // Извлекаем из ответа IMEI устройства

            if (SplitATIResult) {                                  // Если IMEI получен

               var IMEI = SplitATIResult[1];                       // Передаём его в переменную IMEI

               if (IMEI == 'IMEI нужного вам модема') {            // Проверяем на совпадение с нужным IMEI из 15 знаков

                  var DevConfig = Script.SelectConfig (undefined, 'Device');       // Получаем данные устройства из конфигурации
                  DevConfig.OpenString = Dev[3];                   // Переопределяем 
                  DevConfig.Name       = Dev[4];                   // параметры найденными
                  DevConfig.Id         = Dev[3];                   // по IMEI

                  FindDevice.Close ();                             // Закрываем устройство

                  break;                                           // Выходим из цикла поиска нужного модема
               }
            }
         }
         catch (Err) {                                             // Выводим сообщение об ошибке открытия модема

            Script.InLogInfo ('Ошибка проверки модема ' + Dev[4] + '. ' + Err.description);
         }
      
         FindDevice.Close ();                                      // Закрываем устройство, если оно не оказалось нужным
      }
   }

   FindDevice = null;                                              // Уничтожаем экземпляр объекта Device

Вместо строки 'IMEI нужного вам модема' надо вставить IMEI того модема, с которым вы работаете, так же в апострофах: '123456789012345'.


Переинициализация модема при возникновении ошибки

В ситуации, когда модем возвращает какую-то ошибку в результате сбоя в нём, сценарий останавливается. Для того, чтобы этого не случалось, в тексте сценария вместо строки

  var Result = Device.Dial (Phone[i]);   // Набираем номер

можно вставить следующий код:

                                       try {                                                        // Включаем обработку ошибок

                                          var Result = Device.Dial (Phone[i]);                      // Набираем номер
                                       }
                                       catch (Err) {                                                // Обнаружена ошибка набора номера

                                          Script.InLogInfo ('Ошибка соединения ' + Err.Description);
                                          Script.InLogInfo ('Попытка переподключения модема...');

                                          try {

                                             Device.Quit ();                                        // Уничтожаем текущий экземпляр объекта Device
                                             Device = null;
                                             Device = new CDevice ();                               // Создаём новый экземпляр объекта Device
                                             if (!Device.Open ()) {
                                                Script.StopError ('Ошибка переподключения модема'); // Если открыть модем заново не удалось, 
                                                break;                                              // останавливаем сценарий по ошибке
                                             }
                                             else {                                                 // Модем открыт заново успешно
                                                Script.InLogInfo ('Модем переподключен.');
                                                try {
                                                   Result = Device.Dial (Phone[i]);                 // Набираем номер повторно
                                                }
                                                catch (Err) {
                                                   Script.StopError ('Ошибка набора номера после переподключения модема'); // Набрать номер заново не удалось, 
                                                   break;                                                                  // останавливаем сценарий по ошибке
                                                }
                                             }
                                          }
                                          catch (Err) {
                                                Script.StopError ('Ошибка переподключения модема');
                                                break;
                                          }
                                       }

В этом случае при ошибке набора номера модем переинициализируется заново, сценарий закрывает соединение с ним, открывает заново и пытается перенабрать номер. Если ошибка повторяется, работа сценария прекращается. Зачастую переинициализации достаточно для того, чтобы модем работал дальше, не требуя вмешательства человека.