Курсы по использованию Asterisk

IP-телефония — технология будущего. Обучитесь работе с IP-АТС Asterisk для того чтобы внедрить и профессионально использовать при решении коммуникационных задач.

Работайте с Asterisk профессионально!

Многоуровневая защита IP-АТС Asterisk

Телефонные станции очень часто становятся объектами хакерских атак. Узнайте, каким образом необходимо строить многоуровневую защиту для Вашей IP-АТС.

Не оставьте хакерам шансов. Защитите свой Asterisk от атак.

Используйте Веб-Интерфейс для удобства настройки

Панель управление FreePBX позволяет легко и удобно управлять всей системой. Научитесь эффективно использовать FreePBX для решения своих задач.

Управление станцией и статистика в окне браузера.

Научитесь работать с Asterisk из консоли

Для понимания работы с Asterisk необходимо уметь настраивать его вручную с конфигурационными файлами и командной строкой CLI Asterisk.

Научитесь «тонкой» настройке Asterisk

Цель курсов - максимум практики.

Обучение нацелено на практическую работу с IP-оборудованием: платы потоков E1, VoIP-телефонные аппараты, голосовые шлюзы FXS и прочее.

Обучение на реальном оборудовании — залог успеха.

Отображение статуса DND на BLF клавише

База знаний Настройка Asterisk

Поиски в интернете показали, что эта функция и так должна входить в FreePBX, однако в FreePBX 2.10 с последними модулями её, почему-то, не оказалось.

Ниже приведены действия для добавления этой функции в FreePBX:

Переопределяем контексты:

[app-dnd-off], [app-dnd-on] и [app-dnd-toggle] в файле

/etc/asterisk/extensions_override_freepbx.conf

[app-dnd-off]
include => app-dnd-off-custom
exten => *79,1,Answer
exten => *79,n,Wait (1)
exten => *79,n,Macro (user-callerid,)
exten => *79,n,Noop (Deleting: DND/${AMPUSER} ${DB_DELETE (DND/${AMPUSER})})
exten => *79,n,Set (STATE=NOT_INUSE)
exten => *79,n,Gosub (app-dnd-off,sstate,1)
exten => *79,n (hook_1),Playback (do-not-disturb&de-activated)
exten => *79,n,Macro (hangupcall,)
exten => sstate,1,Set (DEVICE_STATE (Custom:DND${AMPUSER})=${STATE})                                                                                                 
exten => sstate,n,Set (DEVICES=${DB (AMPUSER/${AMPUSER}/device)})                                                                                                    
exten => sstate,n,GotoIf ($[»${DEVICES}» =» » ]?return)                                                                                                             
exten => sstate,n,Set (LOOPCNT=${FIELDQTY (DEVICES,&)})                                                                                                              
exten => sstate,n,Set (ITER=1)                                                                                                                                      
exten => sstate,n (begin),Set (DEVICE_STATE (Custom:DEVDND${CUT (DEVICES,&,${ITER})})=${STATE})                                                                        
exten => sstate,n,Set (ITER=$[${ITER} + 1])                                                                                                                         
exten => sstate,n,GotoIf ($[${ITER} ≤ ${LOOPCNT}]?begin)                                                                                                           
exten => sstate,n (return),Return ()
[app-dnd-on]
include => app-dnd-on-custom
exten => *78,1,Answer
exten => *78,n,Wait (1)
exten => *78,n,Macro (user-callerid,)
exten => *78,n,Set (DB (DND/${AMPUSER})=YES)
exten => *78,n,Set (STATE=BUSY)
exten => *78,n,Gosub (app-dnd-on,sstate,1)
exten => *78,n (hook_1),Playback (do-not-disturb&activated)
exten => *78,n,Macro (hangupcall,)
exten => sstate,1,Set (DEVICE_STATE (Custom:DND${AMPUSER})=${STATE})                                                                                                 
exten => sstate,n,Set (DEVICES=${DB (AMPUSER/${AMPUSER}/device)})                                                                                                    
exten => sstate,n,GotoIf ($[»${DEVICES}» =» » ]?return)                                                                                                             
exten => sstate,n,Set (LOOPCNT=${FIELDQTY (DEVICES,&)})                                                                                                              
exten => sstate,n,Set (ITER=1)                                                                                                                                      
exten => sstate,n (begin),Set (DEVICE_STATE (Custom:DEVDND${CUT (DEVICES,&,${ITER})})=${STATE})                                                                        
exten => sstate,n,Set (ITER=$[${ITER} + 1])                                                                                                                         
exten => sstate,n,GotoIf ($[${ITER} ≤ ${LOOPCNT}]?begin)                                                                                                           
exten => sstate,n (return),Return ()
[app-dnd-toggle]
include => app-dnd-toggle-custom
exten => *76,1,Answer
exten => *76,n,Wait (1)
exten => *76,n,Macro (user-callerid,)
exten => *76,n,GotoIf ($[»${DB (DND/${AMPUSER})}» =» »]?activate:deactivate)
exten => *76,n (activate),Set (DB (DND/${AMPUSER})=YES)
exten => *76,n,Set (STATE=BUSY)
exten => *76,n,Gosub (app-dnd-toggle,sstate,1)
exten => *76,n (hook_on),Playback (do-not-disturb&activated)
exten => *76,n,Macro (hangupcall,)
exten => *76,n (deactivate),Noop (Deleting: DND/${AMPUSER} ${DB_DELETE (DND/${AMPUSER})})
exten => *76,n,Set (STATE=NOT_INUSE)
exten => *76,n,Gosub (app-dnd-toggle,sstate,1)
exten => *76,n (hook_off),Playback (do-not-disturb&de-activated)
exten => *76,n,Macro (hangupcall,)
exten => sstate,1,Set (DEVICE_STATE (Custom:DND${AMPUSER})=${STATE})                                                                                                 
exten => sstate,n,Set (DEVICES=${DB (AMPUSER/${AMPUSER}/device)})                                                                                                    
exten => sstate,n,GotoIf ($[»${DEVICES}» =» » ]?return)                                                                                                             
exten => sstate,n,Set (LOOPCNT=${FIELDQTY (DEVICES,&)})                                                                                                              
exten => sstate,n,Set (ITER=1)                                                                                                                                      
exten => sstate,n (begin),Set (DEVICE_STATE (Custom:DEVDND${CUT (DEVICES,&,${ITER})})=${STATE})                                                                        
exten => sstate,n,Set (ITER=$[${ITER} + 1])                                                                                                                         
exten => sstate,n,GotoIf ($[${ITER} ≤ ${LOOPCNT}]?begin)                                                                                                           
exten => sstate,n (return),Return ()

Добавляем хинты для номеров:

Можно добавить хинты в [ext-local-custom], например:

[ext-local-custom]
exten => *76100,hint,Custom:DEVDND100

Но так придется добавлять хинт для каждого номера, и, для наблюдения за состоянием DND придется выделить дополнительную клавишу BLF.

Альтернативно, можно создать новый контекст для SIP SUBSCRIBE.

/etc/asterisk/extensions_custom.conf

[blf-all]
exten => _XXX,hint,SIP/${EXTEN}&Custom:DEVDND${EXTEN}


/etc/asterisk/sip_general_custom.conf


subscribecontext=blf-all

Настраиваем BLF-клавиши на телефоне или перезагружаем телефон, если они уже были настроены. Теперь, если включить DND на любом трёхзначном номере, состояние его хинта станет «Busy» до отключения DND.

 

FreePBX, sip, asterisk