Дополнения: различия между версиями
McBurns (обсуждение | вклад) |
Jugin (обсуждение | вклад) |
||
(не показана 1 промежуточная версия 1 участника) | |||
Строка 70: | Строка 70: | ||
try { // Включаем обработку ошибок | try { // Включаем обработку ошибок | ||
var Result = Device.Dial (Phone[i]); // Набираем номер | var Result = Device.Dial (Phone[i]); // Набираем номер | ||
} | } | ||
Строка 81: | Строка 80: | ||
Device.Quit (); // Уничтожаем текущий экземпляр объекта Device | Device.Quit (); // Уничтожаем текущий экземпляр объекта Device | ||
Device = new CDevice (); // Создаём новый экземпляр объекта Device | Device = new CDevice (); // Создаём новый экземпляр объекта Device | ||
if (!Device.Open ()) { | if (!Device.Open ()) { | ||
Script.StopError ('Ошибка переподключения модема'); // Если открыть модем заново не удалось, | Script.StopError ('Ошибка переподключения модема'); // Если открыть модем заново не удалось, | ||
break; // останавливаем сценарий по ошибке | break; // останавливаем сценарий по ошибке | ||
} | } | ||
else { | else { // Модем открыт заново успешно | ||
Script.InLogInfo ('Модем переподключен.'); | Script.InLogInfo ('Модем переподключен.'); | ||
try { | try { | ||
Result = Device.Dial (Phone[i]); // Набираем номер повторно | Result = Device.Dial (Phone[i]); // Набираем номер повторно |
Текущая версия на 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;
}
}
В этом случае при ошибке набора номера модем переинициализируется заново, сценарий закрывает соединение с ним, открывает заново и пытается перенабрать номер. Если ошибка повторяется, работа сценария прекращается. Зачастую переинициализации достаточно для того, чтобы модем работал дальше, не требуя вмешательства человека.