FreePBX
Термины
Direct Inward Dialing (DID) - полный номер телефона, на который поступил входящий звонок. Для FreePBX - уникальный идентификатор, по которому происходит маршрутизация звонков. Именно благодаря ему FreePBX отличает звонок в тех поддержку от звонка в отдел продаж.
Транк (trunk) - это виртуальный канал связи, который соединяет вашу АТС с телефонным провайдером. Через него проходят все звонки (входящие и исходящие), при этом он позволяет обрабатывать несколько вызовов одновременно.
Проблемы
Маршрутизация звонков с ВиртуальнойАТС Ростелеком
При работе с несколькими транками, которые зарегистрированы у крупных провайдеров (например, Ростелеком), вы можете столкнуться с тем, что провайдер не присылает DID.
Допустим, у вас настроено два номера и для каждого из них создан свой отдельный входящий маршрут в FreePBX. Однако при поступлении звонка на любой из этих номеров провайдер не передает системе информацию о том, какой именно номер был набран.
В результате FreePBX не может найти соответствующий маршрут по DID, и вся логика маршрутизации ломается или же работает неправильно. Чаще всего это приводит к тому, что все входящие вызовы направляются по одному маршруту по умолчанию, игнорируя созданные вами правила.
Поскольку система не получает DID извне, мы должны "подсказать" его самостоятельно. Идея заключается в том, чтобы перехватить входящий звонок еще до того, как он попадет в стандартный механизм маршрутизации, и принудительно присвоить ему правильный DID.
Для этого мы создадим для каждого транка (читай: для каждого городского номера) свой собственный кастомный контекст. Этот контекст — небольшой сценарий, который будет выполнять простую команду: «Если звонок пришел с этого транка, значит, его DID равен 78311234567 (любой нужный номер)». После этого звонок, уже с корректным DID, отправляется на дальнейшую обработку, и вся ваша стандартная маршрутизация начинает работать как часы.
- 1. Подключитесь к вашему серверу.
- 2. Добавьте в конец файла extensions_override_freepbx.conf (этот файл не затрагивается обновлениями системы)
[from-pstn-route1] exten => _.,1,NoOp(--- Перехват 's' с транка! Назначаю DID 7831-123-45-67 ---) exten => _.,n,Set(CALLERID(dnid)=78311234567); exten => _.,n,Goto(from-pstn,78311234567,1)
Давайте разберём что делает каждая строка:
[from-pstn-route1]
<- после from-pstn- может быть любое нужное название.
exten => _.,1,NoOp(--- Перехват 's' с транка! Назначаю DID 7831-123-45-67 ---)
- логгирование.
exten => _.,n,Set(CALLERID(dnid)=78311234567);
- установка DID на 78311234567. На месте номера может быть любой нужный нам номер.
exten => _.,n,Goto(from-pstn,78311234567,1)
- отправка звонка в главный контекст с нужный нам DID. Номер должен быть такой-же как и в строке выше
После изменения конфигурации не забудьте перезагрузить командой fwconsole reload --verbose
Контекст мы сделали, но работать наша магия пока не будет. Для этого нужно:
- 1. Зайдите в панель управления FreePBX.
- 2. Перейдите в Connectivity -> Trunks и откройте настройки нужного вам транка.
- 3. Откройте вкладку pjsip settings
- 4. В поле контекст впишите нужный вам контекст и примените изменения
После этого машрутизация должна заработать как часы