Commit
Большая часть интерфейсных новинок уже отображается по-русски, поэтому должно помочь разобраться в настройке.
Логика распределения...
1.Обработка RANDOM TRUNKS считается возможной бесконечное количество раз за сессию.
2.Если в списке RANDOM TRANKS задать один или несколько транков с нулевым процентом и один или больше с процентами >0, то в случае если все процентные окажутся недоступными для прохождения исходящего вызова (например, все линии заняты), то такой вызов будет пропущен через "нулевой%" транк с наибольшим количеством оставшихся исходящих минут (транки с незаданными минутами считаются как с бесконечным кол-вом минут)
3.Если все RANDOM транки задать с нулевым процентом, то исходящий вызов будет пропущен через наименее нагруженный транк (напоминаю, что транки с незаданными в них минутами считаются как с бесконечным кол-вом минут).
4.FAILOVER TRUNK A/B и RUNDOM TRUNKS действуют вне зависимости от START DATE A/B и EXPIRY DATE A/B, но обязательно установить DIAL PREFIX A/B. Например, если все звонки хотим обрабатывать через RUNDOM TRANKS A/B или FAILOVER TRUNK A/B, то в DIALPREFIX A/B заносим « _X. ».
С пустым DIALPREFIX A/B ни одно подправило не обработается.
5.Если RUNDOM TRUNKS не заданы или звонок пришел уже после их обработки в этом или другом транке, то обработка передаётся на нижележащие правила И в случае если они не будут удовлетворены, то только тогда обработка будет передана через заданный FAILOVERTRUNK A/B.
6.Блок правил «А» (First Destination Limited) всегда обрабатывается первым, поэтому, можно ему задать префикс на избранные направления (например « _0044(1|2). »), а в блоке «В» указать все направления « _X. ».
1.Обработка RANDOM TRUNKS считается возможной бесконечное количество раз за сессию.
2.Если в списке RANDOM TRANKS задать один или несколько транков с нулевым процентом и один или больше с процентами >0, то в случае если все процентные окажутся недоступными для прохождения исходящего вызова (например, все линии заняты), то такой вызов будет пропущен через "нулевой%" транк с наибольшим количеством оставшихся исходящих минут (транки с незаданными минутами считаются как с бесконечным кол-вом минут)
3.Если все RANDOM транки задать с нулевым процентом, то исходящий вызов будет пропущен через наименее нагруженный транк (напоминаю, что транки с незаданными в них минутами считаются как с бесконечным кол-вом минут).
4.FAILOVER TRUNK A/B и RUNDOM TRUNKS действуют вне зависимости от START DATE A/B и EXPIRY DATE A/B, но обязательно установить DIAL PREFIX A/B. Например, если все звонки хотим обрабатывать через RUNDOM TRANKS A/B или FAILOVER TRUNK A/B, то в DIALPREFIX A/B заносим « _X. ».
С пустым DIALPREFIX A/B ни одно подправило не обработается.
5.Если RUNDOM TRUNKS не заданы или звонок пришел уже после их обработки в этом или другом транке, то обработка передаётся на нижележащие правила И в случае если они не будут удовлетворены, то только тогда обработка будет передана через заданный FAILOVERTRUNK A/B.
6.Блок правил «А» (First Destination Limited) всегда обрабатывается первым, поэтому, можно ему задать префикс на избранные направления (например « _0044(1|2). »), а в блоке «В» указать все направления « _X. ».
Скачать последнюю версию в архиве: https://github.com/nixonch/a2billing/archives/master
... или клонировать с помощью git:
- # git clone git://github.com/nixonch/a2billing.git
- # git pull
- /путь к a2b/DataBase/mysql-5.x/UPDATE-a2billing-nixonch.sh
Удачи!
_________________
https://github.com/nixonch/a2billing
Последний раз редактировалось: nixon (Пт Апр 26, 2013 08:31)
На днях попробую, отпишусь.
_________________
«Choose a job you love, and you will never have to work a day in your life» — Confucius
Что именно хочется: иметь возможность равномерно распределять исходящие звонки между имеющимися (или только заданными) транками.
Думаю это можно реализовать полностью через php но есть вариант с наименьшим программингом: добавить четвертый параметр вызова AGI a2billing.php и передавать в нем имя транка (или провайдера) через который должен пойти звонок. В этом случае сам балансинг будет в диалплане через RAND(). Уверен, данную фичу по достоинству оценят, например теже владельцы дешевых GSM карт (datacard) и не только.. Кто возьмется?
ps: если вкрутите в пост с аттачем патча кнопку Donate то лично обещаю нажать на неё
_________________
«Choose a job you love, and you will never have to work a day in your life» — Confucius
( Донейт - клик ми)
_________________
NoOne has no fun
проще всего реализовать такое - добавить новый ключ запуска a2billing.php где передавать имя транка для принудительного его использования для данного конкретного звонка. и сделать RAND() через диалплан астериска.
сложнее - добавить rand() функционал на php в билинг. буду благодарен любой реализации.
_________________
«Choose a job you love, and you will never have to work a day in your life» — Confucius
- Сейчас к каждому транку можно задать по два направления с ограничением минут, фейловер транком и другими ограничениями.
- Добавлен перекрывающий OutCID в настройках каждого транка.
- Добавлен возвратный звонок - чтобы люди, на телефоны которых звонили ваши пользователи, могли перезвонив на высветившийся номер попасть в источник беспокойства. Настройки этого добавлены как в админском так и в клиентском интерфейсе.
- Добавлена возможность для пользователя включать себе и выключать запись разговоров и соответственно в списке звонков прослушивать.
Ставьте. Hадеюсь, интуитивно понятно будет.
Апдейт на мой форк ничего не должен поменять в работе вашей системы. За исключением того, что возможно с *1.4 не всё будет гладко.
Не забываем апдейтнуть базу (файл DataBase/mysql-5.x/UPDATE-a2billing-nixonch.sh).
Все углы вроде уже откатал. Новые идеи приветствуются.
_________________
https://github.com/nixonch/a2billing
Последний раз редактировалось: nixon (Ср Дек 05, 2012 08:07)
спасибо огромное!
| nixon писал(а): |
| Жду только ответа от areski по проблеме с интерфейсом и сразу включу равномерное распределение. |
пожалуй подожду этого момента, тогда уже скачаю и погляжу.
Added after 1 hours 44 minutes:
картинку лучше сюда аттачем крепить сразу, все эти файлосервисы крайне ненадежны и срок жизни там очень мал.
_________________
«Choose a job you love, and you will never have to work a day in your life» — Confucius
_________________
«Choose a job you love, and you will never have to work a day in your life» — Confucius
Вот что-то мне кажется, что это лишнее. Уже есть настраиваемые лимиты по каждому транку. Таким образом простой равномерности через RAND будет достаточно. А если лимиты по какому-то из ранд транков уже превышены, то этот транк не будет участвовать в распределении. Может быть сделаю распределение по минимальной продолжительности, но тоже не вижу пока нужды.
А пока добавил русский в админ-интерфейс и горку переводов https://github.com/nixonch/a2billing/commit/4a253d238f95a07a81a2c88737e6f2065aefa374
_________________
https://github.com/nixonch/a2billing
| nixon писал(а): |
| Задавать распределение по количеству успешных звонков? |
Просто по количеству звонков. Я читал что RAND() в астериске очень точно делает эту работу, тоесть если поставить скажем 60%/20%/10% то из ста звонков они распределятся соответственно как 60/20/10 с высокой точностью и "равномерно" по заданной формуле. Кстати в данном примере оставшиеся 10 звонков пойдут в никуда или на заданный заранее для таких случаев "дефолтный" транк. Я уверен это будет очень полезная возможность и не думаю что такое есть в каждом коммерческом билинге.
_________________
«Choose a job you love, and you will never have to work a day in your life» — Confucius
| anest писал(а): |
| в данном примере оставшиеся 10 звонков пойдут в никуда или на заданный заранее для таких случаев "дефолтный" транк |
_________________
https://github.com/nixonch/a2billing
_________________
«Choose a job you love, and you will never have to work a day in your life» — Confucius
При наличии ограничений в виде предельной продолжительности звонков в сутки, как представляешь распределение в процентном соотношении? Ведь там где 60%, могут и с одного звонка выговорить все разрешенные минуты.
Предлагаю так... после того как осмыслишь в работе существующий функционал, напиши алгоритм твоего распределения с учётом полученного опыта. Потому что пока не вижу как это натянуть на мой код.
_________________
https://github.com/nixonch/a2billing
насчет распределения - я же уже написал, ничего не нужно мыслить больше - мне не нужно распределение по минутам, зачем их сюда приплетать. мне нужно тупо распределение по количеству звонков. Я уже приводил пример выше, посмотри описание на RAND() и что народ пишет по ней хотябы в этом форуме. эта функция РАВНОМЕРНО распределяет КОЛИЧЕСТВО звонков. тоесть если задать 30% в один транк то из 100 звонков в него ровно 30 и уйдет. (только не спрашивай меня как она это делает, я не знаю)
собственно мне надо какойто простой механизм задания в билинге этого процента на конкретный транк, только и всего. если сделать пропускать ключем в скрипт название транка на который этот звонок гарантированно пойдет то можно вообще не заморачиваться насчет логики распределения, rand() в астериске сама все сделает. правда проценты эти я уже в диалплане буду выставлять но и на том уже спасибо скажу.
счас вот какая еще мысль в голову пришла: а транки исходящие в базе билинга имеют порядковый номер какойнить? если да то может проще тогда добавить ключ в команде вызова где и передавать "принудительный транк" - если там задано число - гоним звонок только через этот транк. такое сложно сделать? ну и гдето надо сделать чтоб посмотреть какой номер за каким транком в данный момент.
если можешь такое сделать, я нарисую диалплан к этому всему, может посмотришь как это все в деле будет выглядеть и если наступит просветление - может захочешь часть из диалплана в php перенести потом.. но пока и так здорово помогло бы...
_________________
«Choose a job you love, and you will never have to work a day in your life» — Confucius
| anest писал(а): |
| мне не нужно распределение по минутам, зачем их сюда приплетать. мне нужно тупо распределение по количеству звонков. |
| Цитата: |
| если сделать пропускать ключем в скрипт название транка на который этот звонок гарантированно пойдет, то можно вообще не заморачиваться насчет логики распределения, rand() в астериске сама все сделает. правда проценты эти я уже в диалплане буду выставлять но и на том уже спасибо скажу. |
| Цитата: |
| счас вот какая еще мысль в голову пришла: а транки исходящие в базе билинга имеют порядковый номер какой-нить? если да то может проще тогда добавить ключ в команде вызова где и передавать "принудительный транк" - если там задано число - гоним звонок только через этот транк. такое сложно сделать? ну и гдето надо сделать чтоб посмотреть какой номер за каким транком в данный момент. |
_________________
https://github.com/nixonch/a2billing
Последний раз редактировалось: nixon (Ср Янв 19, 2011 02:41)
_________________
«Choose a job you love, and you will never have to work a day in your life» — Confucius
_________________
https://github.com/nixonch/a2billing