Asterisk FreePBX
Бесплатный программный SIP-сервер с гибким функционалом
Установка Asterisk FreePBX
- Скачайте Asterisk FreePBX по ссылке.
примечание
- Дистрибутив представляет собой файл образ .iso с операционной системой Linux и Asterisk.
- Воспользуйтесь инструкцией по установке.
Настройка Asterisk FreePBX
- Зайдите в веб-интерфейс сервера Asterisk, используя IP-адрес, заданный для сервера при установке. Нажмите кнопку "FreePBX Administration".

- Введите логин и пароль администатора.
- Откроется панель администратора (дашборд) сервера Asterisk.

- В меню "Applications" нажмите кнопку "Extensions".

- В терминологии IP-телефонии extensions (внутренние номера) - это уникальный номера, по которым совершаются звонки. К таким номерам относятся в том числе SIP-номера в домофонной сети.
Создайте SIP-абонента, нажав кнопку "+Add New PJSIP Extension" или "+Add New Chan_SIP Extension".

- Задайте основные параметры SIP-абонента.

- User Extension: SIP-номер,
- Display Name: идентификатор Caller ID,
- Secret: пароль.
- При необходимости активируйте голосовую почту на вкладке "Voice Mail". Задайте пароль (только цифры).
В случае пропуска звонка SIP-абонентом автоответчик предложит записать голосовое сообщение после звукового сигнала. После этого SIP-абонент может прослушать голосовую почту, набрав *97 123456 или *98 990 123456, где 123456 - пароль голосовой почты, 990 - SIP-номер.
примечание
- Если установить параметр Require From Same Extension в значение No, то достаточно набрать *97 (без пароля) для прослушивания голосовой почты.

- На вкладке "Find Me / Follow Me" вы можете активировать и настроить переадресацию звонков на несколько других SIP-номеров. Переадресация осуществляется после отсутствия связи с текущим SIP-номером или в случае длительного отсутствия ответа.

- Initial Ring Time: время первой попытки на основной SIP-номер,
- Ring Strategy: стратегия переадресации:
- ringallv2 - звонить на основной номер в течение Initial Ring Time, затем звонить всем в течение Ring Time, не сбрасывая соединения с основным номером,
- ringall - звонить на основной номер, затем сбросить соединение и звонить всем,
- hunt - звонить последовательно на каждый номер в списке,
- memoryhunt - звонить на первый номер в списке затем звонить на первый и второй номер, затем на первый, второй и третий и т.д.
- firstavailable - звонить на первый доступный номер,
- firstnotonphone - звонить только на первый номер, который в состоянии on hook,
- -prim - те же самые стратегии, но если основной номер занят, то переадресация не осуществляется.
- Ring Time: время дозвона при переадресации,
- Follow-Me List: список номеров для переадресации.
- На вкладке "Advanced" посмотрите контекст - from-internal. Далее нажмите кнопку "Submit" в правом нижнем углу для сохранения SIP-абонента.

- Таким образом вы можете создать несколько SIP-абонентов. Далее в верхнем правом углу нажмите красную кнопку "Apply Config", чтобы все изменения вступили в силу на сервере Asterisk.

- Вы можете настроить также отправку Push-уведомлений на панели управления, у которых свернуты приложения i3 pro. Воспользуйтесь инструкцией для этого.
Работа в iRidium studio
- Добавьте и настройте драйвер, как показано на изображении ниже.

Настройка видеодомофона
Видеодомофон настраивается аналогично драйверу SIP в iRidium studio, только следует использовать другой SIP ID (Login ).
Инструкции по настройке конкретных моделей видеодомофонов можно найти здесь.
Настройка попыток дозвона для Asterisk
- Уточните имя контекста - from-internal.

- Добавьте в файл extensions.conf в контекст from-internal следующие строки:

;----------------------------------------------------------------------
; start
; если получил входящий звонок от 2ХХХ, то установи значение переменной nDialIteration=0
exten => _2XXX,1,Set(nDialIteration=0)
; сделай Ringing
exten => _2XXX,2,Ringing()
; dial
; сделать звонок на номер EXTEN (номер того, куда звонят)
exten => _2XXX,n(dial),Dial(PJSIP/${EXTEN}, 10, t)
; если ANSWER, то перейди к enofcall
exten => _2XXX,n,GotoIf($["${DIALSTATUS}"="ANSWER"]?endofcall)
; если NOANSWER, то перейди к redial
exten => _2XXX,n,GotoIf($["${DIALSTATUS}"="NOANSWER"]?redial)
; если CANCEL, то перейди к enofcall
exten => _2XXX,n,GotoIf($["${DIALSTATUS}"="CANCEL"]?endofcall)
; если BUSY, то перейди к enofcall
exten => _2XXX,n,GotoIf($["${DIALSTATUS}"="BUSY"]?endofcall)
; если CONGESTION, то перейди к redial
exten => _2XXX,n,GotoIf($["${DIALSTATUS}"="CONGESTION"]?redial)
; если CHANUNAVAIL, то перейди к redial
exten => _2XXX,n,GotoIf($["${DIALSTATUS}"="CHANUNAVAIL"]?redial)
; redial
; инкремент переменной nDialIteration на +1
exten => _2XXX,n(redial),Set(nDialIteration=$[${nDialIteration}+1])
; подожди 1 сек
exten => _2XXX,n,Wait(1)
; если значение переменной =30, то делай endofcall, иначе делай dial
exten => _2XXX,n,GotoIf($["${nDialIteration}"="30"]?endofcall:dial)
; call end
; завершить звонок
exten => _2XXX,n(endofcall),Hangup()
Демо-проект
Подсказка
Скачайте демо-проект
Проект для панели управления можно запустить на эмуляторе.