Столкнулся недавно с задачей по маршрутизации звонков между несколькими FreePBX соединенными SIP-транками. Необходимо вызов пришедший из одного SIP-транка на определенный номерной план передать в другой SIP-транк.
Имеется три АТС на базе FreePBX (13, 14) — FreePBX «A» (номерной план 1ХХ), FreePBX «B» (номерной план 2ХХ), FreePBX «C» (номерной план 3ХХ). Которые соединены между собой SIP-транками следующим образом:
FreePBX «A» <—-SIP TRUNK «A»—-> FreePBX «B» <—-SIP TRUNK «B»—-> FreePBX «C»
Для наглядности рассмотрим к примеру ситуацию когда необходимо дозваниваться с FreePBX «A» (1ХХ) до абонентов находящихся в FreePBX «С» (3ХХ) и в обратном направлении.
Можно конечно решить задачу соединив отдельным SIP-транком FreePBX «A» и FreePBX «С», но рассмотрим другой вариант, когда к примеру нет возможности соединить их на прямую, тогда в этом случае посредником для звонков будет выступать FreePBX «B», т.к. он имеет связь по SIP-транку с FreePBX «С» и FreePBX «A».
Заходим на FreePBX «B» в файл /etc/asterisk/extensions_custom.conf добавляем обработки:
Контекст outbound-allroutes содержит в себе все правила исходящей маршрутизации, посмотреть эту секцию можно в файле /etc/asterisk/extensions_additional.conf:
Вместо контекста outbound-allroutes можно указать конкретные исходящие маршруты, для 3XX — outrt-6, а для 1ХХ — outrt-6. В случае указания outbound-allroutes, то поиск подходящего исходящего маршрута будет перебором по очереди.