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

Материал из Call Office Wiki
Перейти к навигации Перейти к поиску
 
(не показаны 3 промежуточные версии 1 участника)
Строка 6: Строка 6:
   var Device = new CDevice ();
   var Device = new CDevice ();


'''Внимание!''' В коде нет обработки ошибок. Если она необходима, вам надо будет сделать её самим.
 


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


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


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


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


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


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


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


        var SplitATIResult = /IMEI:\s([0-9]{15})/.exec (Response);             // Извлекаем из ответа IMEI устройства
            var Response = FindDevice.SendCommand ('ATI1<cr>');   // Получаем ответ на посланную в устройство команду ATI1<cr>


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


             var IMEI = SplitATIResult[1];                      // Передаём его в переменную IMEI
             if (SplitATIResult) {                                  // Если IMEI получен


            if (IMEI == 'IMEI нужного вам модема') {            // Проверяем на совпадение с нужным IMEI из 15 знаков
              var IMEI = SplitATIResult[1];                      // Передаём его в переменную IMEI


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


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


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


   FindDevice = null;                                          // Уничтожаем экземпляр объекта Device
   FindDevice = null;                                             // Уничтожаем экземпляр объекта Device
</syntaxhighlight>
 
Вместо строки''' 'IMEI нужного вам модема' ''' надо вставить IMEI того модема, с которым вы работаете, так же в апострофах:''' '123456789012345'.'''
 
----
==Переинициализация модема при возникновении ошибки==
 
В ситуации, когда модем возвращает какую-то ошибку в результате сбоя в нём, сценарий останавливается. Для того, чтобы этого не случалось, в тексте сценария вместо строки
 
  var Result = Device.Dial (Phone[i]);  // Набираем номер
 
можно вставить следующий код:
 
<syntaxhighlight lang="javascript">
 
                                      try {                                                        // Включаем обработку ошибок
                                           var Result = Device.Dial (Phone[i]);                      // Набираем номер
                                      }
                                      catch (Err) {                                                // Обнаружена ошибка набора номера
 
                                          Script.InLogInfo ('Ошибка соединения ' + Err.Description);
                                          Script.InLogInfo ('Попытка переподключения модема...');
 
                                          try {
 
                                            Device.Quit ();                                        // Уничтожаем текущий экземпляр объекта Device
 
                                            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;
                                          }
                                      }
</syntaxhighlight>
</syntaxhighlight>
В этом случае при ошибке набора номера модем переинициализируется заново, сценарий закрывает соединение с ним, открывает заново и пытается перенабрать номер. Если ошибка повторяется, работа сценария прекращается. Зачастую переинициализации достаточно для того, чтобы модем работал дальше, не требуя вмешательства человека.
----

Текущая версия на 11:28, 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 = 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;
                                          }
                                       }

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