Asterisk IP-PBX
Asterisk IP-PBX — свободное решение компьютерной телефонии с открытым исходным кодом от компании Digium, первоначально разработанное Марком Спенсером. Приложение работает на операционных системах Linux, FreeBSD, OpenBSD и Solaris. Имя проекта произошло от названия символа «*» (звездочка, астериск).
Asterisk в комплексе с необходимым оборудованием обладает всеми возможностями классической АТС, поддерживает множество VoIP протоколов и предоставляет богатые функции управления звонками:
голосовую почту,
конференции,
интерактивное голосовое меню (IVR),
центр обработки вызовов (постановка звонков в очередь и распределение их по агентам используя различные алгоритмы),
запись (CDR)
и прочие функции. Для создания дополнительной функциональности можно воспользоваться собственным языком Asterisk для написания плана нумерации, написав модуль на языке C, либо воспользовавшись AGI — гибким и универсальным интерфейсом для интеграции с внешними системами обработки данных. Модули, выполняющееся через AGI, могут быть написаны на любом языке программирования.
Asterisk распространяется на условиях двойной лицензии, благодаря которой одновременно с основным кодом, распространяемым по открытой лицензии GNU GPL, возможно создание закрытых модулей, содержащих лицензируемый код: например, модуль для поддержки кодека G.729.
Благодаря свободной лицензии Asterisk активно развивается и поддерживается тысячами людей со всей планеты. В течение последних двух лет [когда?] рынок Asterisk-приложений активно развивается в США и уже занял прочное место на рынке IT-технологий (более 1000 компаний, центры поддержки, online-консультации)[источник не указан 135 дней]. В Россию данный продукт попал позже, но интерес российского потребителя растёт, и в первую очередь, благодаря открытости системы. Многие компании применяют Asterisk в своих серийных VoIP-устройствах, например компании Linksys, Nateks[источник не указан 135 дней].
Для того чтобы уйти от проблем, создаваемых двойным лицензированием, был создан форк проекта, в настоящее время называющийся CallWeaver.
Ниже приведены мои конфигурационные файлы. Этого достаточно для базового запуска астериск.
sip.conf
Code:
[general] register = 74951234567:PNKa0n3i@sip.discounttelecom.ru bindport = 5060 bindaddr = 0.0.0.0 context = default allowguest = no allowoverlap = no realm = McConfig VoIP Server externip = 195.128.60.37 nat = no disallow = all allow = alaw allow = ulaw allow = gsm srvlookup = yes language = ru udpbindaddr = 0.0.0.0 tcpenable = no tcpbindaddr = 0.0.0.0 [authentication] [discounttelecom] type = peer insecure = port,invite secret = 12345 username = 74951234567 fromuser = 74951234567 fromdomain = sip.discounttelecom.ru host = sip.discounttelecom.ru port = 5060 registersip = yes dtmfmode = rfc2833 disallow = all allow = alaw allow = gsm canreinvite = no [1000];office manager qualify = yes context = LocalAndPSTNAndMobileAndLD type = friend username = 1000 secret = terranova2039 nat = yes host = dynamic callerid = "IT Crowd" callgroup = 1 pickupgroup = 1 language = ru canreinvite = no disallow = all allow = alaw allow = ulaw allow = gsm mailbox = 1000@sip.fantasyworld.su,1000
extensions.conf
Code:
[general] priorityjumping = yes static = yes writeprotect = no autofallthrough = yes clearglobalvars = no [globals] DYNAMIC_FEATURES = automon [default] include => 74955438950 include => OSoftSipNet include => NSoftSipNet include => LocalOnly include => LocalAndPSTN include => LocalAndPSTNAndMobile include => LocalAndPSTNAndMobileAndLD ;==================== Start SIPNET IN ======================= [74955438950] exten => s,1,Answer exten => s,2,Set(TIMEOUT(digit)=5) exten => s,3,Set(TIMEOUT(response)=5) exten => s,4,Goto(welcome,s,1) exten => s,5,WaitExten(5) exten => s,6,Dial(SIP/1000,20,otmw) exten => s,7,Voicemail exten => s,8,Hangup exten => i,1,Dial(SIP/1000,300,otmw) exten => i,2,Hangup exten => _97XXXX,1,Goto(LocalAndPSTNAndMobileAndLD,${EXTEN},1) ;================== end SIPNET IN ========================== ;================== Start CONTEXT ========================== [OSoftSipNet] exten => _9XXXXXXX,1,Dial(SIP/discounttelecom/${EXTEN:1}) [NSoftSipNet] include => OSoftSipNet exten => _900XXXXXXXX,1,Dial(SIP/discounttelecom/${EXTEN:1}) [LocalOnly] include => NSoftSipNet exten => _XXXX,1,Dial(SIP/${EXTEN:0}) [LocalAndPSTN] include => LocalOnly exten => _97XXXXXXX,1,Dial(SIP/discounttelecom/$8383{EXTEN:1}) [LocalAndPSTNAndMobile] include => LocalAndPSTN exten => _97XXXXXXXXX,1,Dial(SIP/discounttelecom/${EXTEN:1}) [LocalAndPSTNAndMobileAndLD] include => LocalAndPSTNAndMobile exten => _97XXXXXXXXXX,1,Dial(SIP/discounttelecom/${EXTEN:1}) ;================== End CONTEXT ============================ ;=================== Start VOICE MAIL ====================== exten => 8000,1,VoiceMailMain exten => 8000,2,Hangup exten => 8001,1,VoiceMail exten => 8001,2,Hangup ;=================== End VOICE MAIL ======================== ;=================== Start ALL USERS ======================= ;===================1000==================================== exten => 1000,1,GotoIfTime(10:00-15:30|mon-fri|*|*?welcome,s,10) exten => 1000,2,Dial(SIP/1000,15,rtwW) exten => 1000,3,Goto(5) exten => 1000,4,Dial(SIP/1011.300,rtwW) exten => 1000,5,Hangup ;===============1001======================================== ;==================== End ALL USERS ======================== [welcome] exten => s,1,Answer exten => s,2,Set(TIMEOUT(digit)=5) exten => s,3,Set(TIMEOUT(response)=10) exten => s,4,Background(IVR/welcome) exten => s,5,WaitExten(5) exten => s,6,Dial(SIP/1000,10,otmw) exten => s,7,Dial(SIP/1002,13,otmw) exten => s,8,Dial(SIP/1004,16,otmw) exten => s,9,Dial(SIP/1005,19,otmw) exten => s,10,Dial(SIP/1011,22,otmw) exten => s,11,Hangup exten => i,1,Dial(SIP/1000,5,otmw) exten => i,2,Dial(SIP/1002,5,otmw) exten => i,3,Dial(SIP/1004,5,otmw) exten => i,4,Dial(SIP/1005,5,otmw) exten => i,5,Hangup exten => 1,1,Goto(direktor,s,1) exten => 2,1,Goto(manager,s,1) exten => 3,1,Goto(magaziny,s,1) exten => 0001,1,Goto(welcome,s,1) [manager] exten => s,1,Answer exten => s,2,Set(TIMEOUT(digit)=5) exten => s,3,Set(TIMEOUT(response)=10) exten => s,4,Background(IVR/manager) exten => s,5,WaitExten(5) exten => s,6,Hangup exten => i,1,Hangup exten => 1,1,Dial(SIP/1002,60,otmw) exten => 2,1,Dial(SIP/1005,60,otmw) exten => 3,1,Dial(SIP/1009,60,otmw) exten => 0001,1,Goto(welcome,s,1) [magaziny] exten => s,1,Answer exten => s,2,Set(TIMEOUT(digit)=5) exten => s,3,Set(TIMEOUT(response)=10) exten => s,4,Background(IVR/magaziny) exten => s,5,WaitExten(5) exten => s,6,Hangup exten => i,1,Hangup exten => 1,1,Dial(SIP/1010,60,otmw) exten => 2,1,Dial(SIP/1011,60,otmw) exten => 3,1,Dial(SIP/1013,60,otmw) exten => 4,1,Dial(SIP/1006,60,otmw) exten => 0001,1,Goto(welcome,s,1) [direktor] exten => s,1,Answer exten => s,2,Set(TIMEOUT(digit)=5) exten => s,3,Set(TIMEOUT(response)=10) exten => s,4,Background(IVR/direktor) exten => s,5,WaitExten(5) exten => s,6,Hangup exten => i,1,Hangup exten => 1,1,Dial(SIP/1004,60,otmw) exten => 0001,1,Goto(welcome,s,1) ;===================call 1000=============== ; RECEPTION OFFICE exten => *0,1,Dial(SIP/1001&SIP/1002&SIP1005,300,rtwW) exten => 1001,1,Dial(SIP/1001&SIP/1002&SIP/1005,300,rtwW) ; MANAGER exten => 1002,1,Dial(SIP/1002,300,rtwW) exten => 1002,2,Dial(SIP/1010,10,tr) exten => 1002,3,Dial(SIP/1011,10,tr) exten => 1002,4,Hangup ; MANAGER 2 exten => 1005,1,Dial(SIP/1005,300,rtwW) exten => 1005,2,Dial(SIP/1010,10,tr) exten => 1005,3,Dial(SIP/1011,10,tr) exten => 1005,4,Hangup ; DIREKTOR exten => 1004,1,Dial(SIP/1004,300,rtwW) exten => 1004,2,Dial(SIP/1010,10,tr) exten => 1004,3,Dial(SIP/1011,10,tr) exten => 1004,4,Hangup ;NOVOSLOBODSKAYA exten => 1010,1,Dial(SIP/1010,300,rtwW) exten => 1010,2,Dial(SIP/1002,10,tr) exten => 1010,3,Dial(SIP/1004,10,tr) exten => 1010,4,Dial(SIP/1011,10,tr) exten => 1010,5,Hangup ;ALEKSEEVSKAYA exten => 1011,1,Dial(SIP/1011,300,rtwW) exten => 1011,2,Dial(SIP/1002,10,tr) exten => 1011,3,Dial(SIP/1004,10,tr) exten => 1011,4,Dial(SIP/1010,10,tr) exten => 1011,5,Dial(SIP/1006,10.tr) exten => 1011,6,Hangup ;TEST exten => 1013,1,Dial(SIP/1012,300,rtwW) exten => 1013,2,Hangup