FreePBX балансування транків або розподіл вихідних дзвінків
Опубліковано в Asterisk

Стандартними засобами FreePBX цю проблему вирішити трудомістко, і тому спільнотою PBX Open Source Software Alliance розробили зовнішній модуль для FreePBX, називається він trunkbalance. Модуль безкоштовний і будь-який бажаючий може надіслати свої/свій патч з доповненнями та виправленнями у git. Для тестування та опису функціонування даного модуля ми використовуємо FreePBX 2.12 та Asterisk версії 11 (LTS). Модуль встановлюється досить стандартно для FreePBX і думаю тут, на розгляд зупиняється особливо не варто.
Після встановлення ми бачимо налаштування модуля:

Як видно можна вводити обмеження за часом, днями тижня, місяцем (розділ Billing Cycle Configuration), маршрутизувати згідно з тимчасовою групою, встановлювати ліміти за часом розмови та кількістю скоєних викликів.
Але для нас найважливішим є балансування (розподіл) викликів між транками (розділ Load Balancing Configuration).
Необхідні налаштування ми робимо в полі Load Ratio (Коефіцієнт навантаження).
Load Ratio (LR): Якщо LR встановлено цілим числом, більшим за 1, модуль буде випадковимдозволити або забороняти вихідний виклик, тільки на основі співвідношення навантаження. Тут немає визначення, попереднього використання транка і модуль, не намагається обчислити кількість хвилин або дзвінків. Якщо ви хочете, випадково рівномірно збалансувати вихідні виклики трьох (n) транків, необхідно створити 2 (n-1) збалансованих транків, в цьому модулі, один з відношенням навантаження 3 (n) і один з коефіцієнтом навантаження 2 (n-1) . При визначенні вихідного маршруту (Outbound Route) необхідно прописати транки, так щоб збалансований транк з LR=3 буде першим, LR = 2 буде другим і стандартний транк буде третім. Імовірність при першому дзвінку, у першого транку 1/3, ймовірність на другий виклик 1/3 (точніше, половина з 2/3, що залишилися) у другого транку і третій транк отримає 1/3 (або всі з тих, що залишилися). Щоб вимкнути це правило, введіть 1.
У нас є три транки gsm-01; gsm-02 та gsm-03. Відповідно створюємо два транки: balance-gsm-01 і balance-gsm-02 у нашому модулі, з коефіцієнт навантаження LR=3 і LR=2 відповідно.
У вихідному маршруті прописуємо транки у такому порядку:

У результаті отримуємо необхідне нам балансування, де перший транк LR=(n), а наступний LR=(n-1).