Доброго времени суток.
Есть транк на Sipnet.ru, где действует акция бесплатные звонки в Москву и другие города, но с ограничением:
общая продолжительность бесплатных разговоров – не более 1 часа в сутки;
количество вызовов – не более 10 за одни сутки.
Собственно вопрос, как сделать так чтоб пользователям закрывался доступ к Sipnet.ru, как только они используют эти ограничения. То бишь не для каждого в отдельности, а вместе, если один наговорил на час или сделал 10 вызовов, то доступ закрылся всем.
P.S. 1) Для приложения Dial(), есть флаг L( x [: y ][: z ]), который и ограничивает продолжительность звонка - тут все понятно.
2) Счетчик на 10 вызовов через транк думаю поставить тоже не составит труда.
А в чем сложности? сделайте в ASTDB записи вроде
/sipnet/max_sec 3600
/sipnet/cur_sec 0
/sipnet/max_count 10
/sipnet/cur_count 0
во время звонка проверяйте cur_count
меньше чем max_count
или нет, тоже самое и для длительности. Затем считаете оставшуюся длительность для транка, умножаете на 1000 и подставляете в опцию L
команды dial
(у нее аргумент должен быть в миллисекундах). В опцию M
команды диал вставите макрос, который устанавливает флаги что соединение состоялось, инкременируете cur_count
После завершения звонка в экстеншене h
делаете обработку: если звонок состоялся, то значение CDR(billsec)
прибавляете к /sipnet/cur_sec
. В крон добавляете скрипт, который раз в сутки обнуляет текущие значения.
Вот как-то так. Правда этот метод не учитывает одновременные звонки через один транк, но это задача уже на много более сложная.
Суммировать время в CDR по транку, за одно можно и количество звонков посчитать.
Смотря куда у Вас CDR настроен...
Как альтернатива, глобальная переменная, суммирующая данные по hangup и cdr(billsec), которая не забывает ежесуточно обнуляться;-)
Задан: Feb 7 '12
Просмотрен: 876 раз
Обновлен: Feb 07 '12
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.
если вы ожидаете ответ типа "вот так" и две строчки, то облом.надо программить.смотрите ответ ниже от switch.
meral (Feb 7 '12)editнет, конечно не ожидаю, сама идея важна, ну а реализацию беру на себя, времени пока хватает
And (Feb 8 '12)edit