Дополнения: различия между версиями
McBurns (обсуждение | вклад) |
Jugin (обсуждение | вклад) |
||
(не показаны 3 промежуточные версии 1 участника) | |||
Строка 6: | Строка 6: | ||
var Device = new CDevice (); | var Device = new CDevice (); | ||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript"> | ||
var FindDevice = new ActiveXObject("CallOffice.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]) { | 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) { // Выводим сообщение об ошибке открытия модема | |||
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;
}
}
В этом случае при ошибке набора номера модем переинициализируется заново, сценарий закрывает соединение с ним, открывает заново и пытается перенабрать номер. Если ошибка повторяется, работа сценария прекращается. Зачастую переинициализации достаточно для того, чтобы модем работал дальше, не требуя вмешательства человека.