Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

Реализация опции, которая запрещает доступ к транку когда бесплатные звонки заканчиваются. [закрыт]

1

Доброго времени суток.

Есть транк на Sipnet.ru, где действует акция бесплатные звонки в Москву и другие города, но с ограничением:

общая продолжительность бесплатных разговоров – не более 1 часа в сутки;

количество вызовов – не более 10 за одни сутки.

Собственно вопрос, как сделать так чтоб пользователям закрывался доступ к Sipnet.ru, как только они используют эти ограничения. То бишь не для каждого в отдельности, а вместе, если один наговорил на час или сделал 10 вызовов, то доступ закрылся всем.

P.S. 1) Для приложения Dial(), есть флаг L( x [: y ][: z ]), который и ограничивает продолжительность звонка - тут все понятно.

2) Счетчик на 10 вызовов через транк думаю поставить тоже не составит труда.

удалить переоткрыть спам изменить тег редактировать

спросил 2012-02-07 06:12:45 +0400

And Gravatar And
11 1 2

Comments

если вы ожидаете ответ типа "вот так" и две строчки, то облом.надо программить.смотрите ответ ниже от switch.

meral ( 2012-02-07 08:58:59 +0400 )редактировать

нет, конечно не ожидаю, сама идея важна, ну а реализацию беру на себя, времени пока хватает

And ( 2012-02-08 05:03:04 +0400 )редактировать

2 Ответа

3

А в чем сложности? сделайте в 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. В крон добавляете скрипт, который раз в сутки обнуляет текущие значения.

Вот как-то так. Правда этот метод не учитывает одновременные звонки через один транк, но это задача уже на много более сложная.

ссылка удалить спам редактировать

ответил 2012-02-07 08:35:50 +0400

switch Gravatar switch
8334 11 7 91
http://lynks.ru/

обновил 2012-02-07 09:04:00 +0400

Comments

1

невижу ничего сложного. ставить груп и добавлять груп к звонку.

meral ( 2012-02-07 08:58:06 +0400 )редактировать
1

ну добавил в группу, а как подсчитать количество минут?

switch ( 2012-02-07 09:02:47 +0400 )редактировать
1

просто. там одна линия в предложении ) если вторая приходит надо занято отдавать.

meral ( 2012-02-07 11:04:53 +0400 )редактировать

а-а-а,

ну так-то да, задача упрощаеццо

switch ( 2012-02-07 11:06:37 +0400 )редактировать
1

ну а то.там же 10 вызвово всегото разрешено в день.

meral ( 2012-02-07 11:07:42 +0400 )редактировать

Думаю, что можно обойтись и без крона. Вносить еще и дату последнего "положительного" звонка. Если она не совпадает при очередном новом звонке, то обнулить все счетчики.

TandemK ( 2012-02-07 16:11:21 +0400 )редактировать

фигня в том, что в условии не сказано о 10 "положительных". а просто о 10)

meral ( 2012-02-07 20:12:21 +0400 )редактировать

meral, switch,TandemK, Думаю достаточно...Этого мне было и надо, так сказать саму концепцию идеи. Пойду реализовывать, но чувствую что дней пять, а то и более придется повозиться. Благодарю за идеи..

And ( 2012-02-08 04:58:11 +0400 )редактировать

угу. тернируйтесь. я оцениваю сложность в 30 минут.

meral ( 2012-02-08 05:15:26 +0400 )редактировать
0

Суммировать время в CDR по транку, за одно можно и количество звонков посчитать.
Смотря куда у Вас CDR настроен...
Как альтернатива, глобальная переменная, суммирующая данные по hangup и cdr(billsec), которая не забывает ежесуточно обнуляться;-)

ссылка удалить спам редактировать

ответил 2012-02-07 08:10:27 +0400

TandemK Gravatar TandemK
175 3 10

обновил 2012-02-07 08:27:23 +0400

Comments

при каждом звонке это суммировать предлагаете? Конечно если астериск стоит на восьмиядерном ксеоне и обслуживает 5..15 абонентов - то можно, да.

switch ( 2012-02-07 09:04:42 +0400 )редактировать
1

Спасибо, switch, преклоняюсь перед Вашим опытом. Я просклерозил внутреннюю БД. Ведь при рестарте астера глобальной переменной придет кирдык...

TandemK ( 2012-02-07 10:53:53 +0400 )редактировать
2

не прийдет. если написать clearglobals=no.у меня есть одна pbx в которой так стейты сохарняются. а базу внутреннюю я чето не очень люблю.я вместо нее использую mysql с нормально настроенным кешированием.

meral ( 2012-02-07 11:06:51 +0400 )редактировать

В принципе согласен с решением. Аналогично использую удобоваримую БД. Насколько понял с наскока, то разрабы тоже от этой идеи отказались и перешли на внешние БД в десятой ветке Астериска.

TandemK ( 2012-02-07 16:05:01 +0400 )редактировать

Закладки и информация

Добавить закладку
1 закладка

подписаться на rss ленту новостей

Статистика

Задан: 2012-02-07 06:12:45 +0400

Просмотрен: 427 раз

Обновлен: Feb 07 '12

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.