Макрос обзвона
simroulette
Обучающий макрос для SR-Organizer-24-3-Smart. Обзвон ведется в 1 поток, последовательно по всем 24 СИМ-картам. Телефонные номера выбираются последовательно из файла /phones.
@echo: Start // Очищаем окно терминала и выводим слово "Start"
@buffer // Выводим содержимое буфера
var:a=0 // Присваиваем переменной "a" значение 0, эта переменная будет содержать строку файла, в которой в столбик содержатся телефоны для обзвона
var:m=1 // m=1 - заносим в переменную номер текущего модема
var:c=1 // c=1 - заносим в переменную номер текущей карты
[loop]
@echo: Модем #(m) / Карта #(c)
buffer.write:modem(m).card:(c) // Записываем в буфер команду "modem(m).card:(c)", команда выбирает модем и карту для этого модема, при этом вместо переменных в команду подставятся их текущие значения, например: "modem1.card:1"
exec // Исполняем команду из буфера
m.event:event=modemState,macro=calling:test,action=add // Этой командой мы устанавливаем "слушателя" события modemState. Так как мы переключили карту, нам нужно дождаться, пока ее статус изменится, с неактивного (-1) на активный (1 или 5), в этом случае наш макрос будет запущен устройством от метки "test"
pause 200000 // Продолжаем макрос на случай, если карта так и не станет активной, в этом случае ждем 200 секунд
.command:hangup,1 // Отправляем команду "Положить трубку"
var:c+1 // Увеличиваем счетчик карт на 1
var:c>8 // Если мы не дошли до 8 карт - продолжаем цикл
unless loop
var:c=1 // Если дошли до 8 карт, опять заносим в счетчик 1 карту
var:m+1 // Увеличиваем счетчик модемов
var:m>3 // Если мы не прошли все 3 модема - продолжаем цикл
unless loop
@echo: Готово! // Если все 3 модема обработаны - выводим в выходной поток слово "Готово"
stop // Останавливаем макрос
[test]
.var:m // Выбранный модем обновил свой статус, и устройство запустило наш макрос с этого места. Проверяем текущий статус модема и, в зависимости от значения, продолжаем работу или завершаем обработку события, переходя на метку "end"
buffer.test:-1
if end // Если -1 - завершаем обработку события
buffer.test:1
if call // Если 1 - выполняем действие
buffer.test:3
if call // Если 3 (нет регистрации в сети) - предполагаем, что авторизация все-таки состоится и выполняем действие
buffer.test:5
if call // Если 5 - выполняем действие
buffer.test:6
unless end // Если не 6 (карта отсутствует) - завершаем обработку события
@echo: Модем #(m) / Карта #(c): Ошибка подключения к сети
return:event // Если карта отсутствует - сообщаем об ошибке и завершаем обработку события
[call]
buffer.file.load:/phones,(a) // Загружаем в буфер строку с очередным номером для обзвона
buffer
if ok // Если строка с телефоном не пуста - продолжаем
var:a=0 // Если список телефонов для обзвона закончился - начинаем заново
return:event // Завершаем обработку события
[ok]
var:a+1
buffer.prefix:.call: // Добавляем в начало буфера команду ".call:"
buffer.postfix:(44)(m) // Добавляем в конец буфера "," и номер модема из переменной m. Получаем строку .call:[номер_телефона],[номер_модема]
exec // Исполняем команду из буфера
@echo: Идет вызов...
return:event // Завершаем обработку события
[end]
@echo: Подключение к сети...
return:event // Завершаем обработку события
@buffer // Выводим содержимое буфера
var:a=0 // Присваиваем переменной "a" значение 0, эта переменная будет содержать строку файла, в которой в столбик содержатся телефоны для обзвона
var:m=1 // m=1 - заносим в переменную номер текущего модема
var:c=1 // c=1 - заносим в переменную номер текущей карты
[loop]
@echo: Модем #(m) / Карта #(c)
buffer.write:modem(m).card:(c) // Записываем в буфер команду "modem(m).card:(c)", команда выбирает модем и карту для этого модема, при этом вместо переменных в команду подставятся их текущие значения, например: "modem1.card:1"
exec // Исполняем команду из буфера
m.event:event=modemState,macro=calling:test,action=add // Этой командой мы устанавливаем "слушателя" события modemState. Так как мы переключили карту, нам нужно дождаться, пока ее статус изменится, с неактивного (-1) на активный (1 или 5), в этом случае наш макрос будет запущен устройством от метки "test"
pause 200000 // Продолжаем макрос на случай, если карта так и не станет активной, в этом случае ждем 200 секунд
.command:hangup,1 // Отправляем команду "Положить трубку"
var:c+1 // Увеличиваем счетчик карт на 1
var:c>8 // Если мы не дошли до 8 карт - продолжаем цикл
unless loop
var:c=1 // Если дошли до 8 карт, опять заносим в счетчик 1 карту
var:m+1 // Увеличиваем счетчик модемов
var:m>3 // Если мы не прошли все 3 модема - продолжаем цикл
unless loop
@echo: Готово! // Если все 3 модема обработаны - выводим в выходной поток слово "Готово"
stop // Останавливаем макрос
[test]
.var:m // Выбранный модем обновил свой статус, и устройство запустило наш макрос с этого места. Проверяем текущий статус модема и, в зависимости от значения, продолжаем работу или завершаем обработку события, переходя на метку "end"
buffer.test:-1
if end // Если -1 - завершаем обработку события
buffer.test:1
if call // Если 1 - выполняем действие
buffer.test:3
if call // Если 3 (нет регистрации в сети) - предполагаем, что авторизация все-таки состоится и выполняем действие
buffer.test:5
if call // Если 5 - выполняем действие
buffer.test:6
unless end // Если не 6 (карта отсутствует) - завершаем обработку события
@echo: Модем #(m) / Карта #(c): Ошибка подключения к сети
return:event // Если карта отсутствует - сообщаем об ошибке и завершаем обработку события
[call]
buffer.file.load:/phones,(a) // Загружаем в буфер строку с очередным номером для обзвона
buffer
if ok // Если строка с телефоном не пуста - продолжаем
var:a=0 // Если список телефонов для обзвона закончился - начинаем заново
return:event // Завершаем обработку события
[ok]
var:a+1
buffer.prefix:.call: // Добавляем в начало буфера команду ".call:"
buffer.postfix:(44)(m) // Добавляем в конец буфера "," и номер модема из переменной m. Получаем строку .call:[номер_телефона],[номер_модема]
exec // Исполняем команду из буфера
@echo: Идет вызов...
return:event // Завершаем обработку события
[end]
@echo: Подключение к сети...
return:event // Завершаем обработку события