Asterisk 11 aka WebRTC Edition

19. 12. 2012
Doba čtení: 7 minut

Sdílet

Po roce je tu opět nová verze ústředny Asterisk. Přináší několik zásadních novinek. Tou nejviditelnější je podpora nadějného protokolu WebRTC, který v budoucnu umožní telefonování přímo z vašeho webového prohlížeče. Kromě toho přibylo několik protokolů pro překonávání NATu a mnoho dalších užitečných drobností.

Obecně o Asterisku

Při prezentaci novinek poslední verze mně bylo vytýkáno, že nemyslím na neznalé uživatele nějakým základním popisem, co je Asterisk vlastně zač. Tímto poučen obdařím začátečníky několika větami a jedním odkazem.

Asterisk je open-source framework pro budování komunikačních systémů a aplikací. Asterisk pohání různé pobočkové ústředny, konferenční servery, VoIP Gatewaye a další speciální aplikace. Projekt je sponzorován firmou Digium, která prodává support a komerční produkty.

První verzi dal k dispozici Mark Spencer v roce 1999. Mark Spencer je mimo jiné také původním autorem programu dnes známého pod jménem Pidgin. Pokud si chcete Asterisk vyzkoušet, doporučuji například seriál Pobočková VoIP ústředna Asterisk.

V České republice existují firmy, které poskytují komerční support nebo produkty nad Asteriskem postavené. Jsou to například Canistec, IPEX a další.

Statistika vývoje

bitcoin_skoleni

Jako obvykle poskytnu i trochu čísel pro milovníky statistik. Pro vydání verze 11 bylo nutné udělat následující práci:

  • 118 vývojářů se podílelo na 1554 úpravách přijatých přes issues.asterisk.org
  • 82 testerů se podílelo na 238 testech reportovaných problémů
  • 280 uživatelů se podílelo na reportování 567 problémů, které byly ve verzi  11 vyřešeny
  • 2667 souborů bylo změněno; proběhlo celkem 1239762 přidání a 57186 mazání

Asterisk 11 je takzvaně dlouho podporovaná verze (LTS). Znamená to, že společnost Digium zajistí bezpečnostní opravy této verze až do roku 2016.

Release Series

Release Type

Release Date

Security Fix Only

EOL

1.2.X

21.11.2005

7.8.2007

21.11.2010

1.4.X

LTS

23.12.2006

21.4.2011

21.4.2012

1.6.0.X

Standard

1.10.2008

1.5.2010

1.10.2010

1.6.1.X

Standard

27.4.2009

1.5.2010

27.4.2011

1.6.2.X

Standard

18.12.2009

21.4.2011

21.4.2012

1.8.X

LTS

21.10.2010

21.10.2014

21.10.2015

10.X

Standard

15.12.2011

15.12.2012

15.12.2013

11.x

LTS

25.10.2012

25.10.2016

25.10.2017

12.x

Standard

2013–10 (tentative)

2014–10 (tentative)

2015–10 (tentative)

13.x

LTS

2014–10 (tentative)

2018–10 (tentative)

2019–10 (tentative)

Hlavní novinky verze 11

Největší novinkou z hlediska vývoje a přesunu technologií k webu je podpora protokolu WebRTC. Jde je webový standard iniciovaný Googlem, který má umožnit real-time komunikaci v prohlížeči bez nutnosti dalších modulů jako Flash, Java, atd. Více v článku WebRTC: online komunikace bez plug-inů v prohlížeči.

Google koupil společnosti GIPS a On2 technologies a následně zveřejnil audio a videokodeky a další technologie jako AEC (echo cancelator) ve prospěch nového otevřeného webového standardu.

Bohužel ani zveřejnění video kodeku VP8 v projektu WebM k volnému použití nezabránilo společnostem sdruženým v MPEG LA (konkurenční kodek H.264), aby začalo formovat patent pool s cílem zabránit šíření VP8. Toto je nyní prošetřováno.

Z výše uvedených důvodů bohužel zatím stále není jasné, jaké videokodeky budou ve finálním standardu mandatorní. V oblasti audio kodeků to naštěstí vypadá bez problémů a jako mandatorní jsou kodeky G711 a Opus.

WebRTC standard má potenciál umožnit audio/video komunikaci nezávisle na operačním systému nebo zařízení.

Nutnou podmínkou pro fungování WebRTC dle současné specifikace je šifrování hovoru. Primárně pro WebRTC tedy přibyla podpora DTLS-SRTP. DTLS je použito k zabezpečení výměny klíčů v SRTP a je to druhá podporovaná možnost v Asterisku. První možností je TLS, jehož podpora je už ve verzi 1.8.

Další nutností pro fungování WebRTC je podpora technologií, které se vypořádají s NATy a Firewally. To jsou protokoly ICE, STUN a TURN. Podpora pro ně byla implementována do RTP enginu Asterisku.

Pokud si chcete vyzkoušet SIP HTML5 klienta napojeného na Asterisk, doporučuji projekt Sipml5. Konfigurace sip účtu musí vypadat takto:

Sip.conf:


[webuser]
type=friend
context=from_webuser
callerid=webuser <300>
host=dynamic
call-limit=1
transport=ws,wss,udp
avpf=yes
encryption=yes
secret=tajne_heslo
icesupport = yes
videosupport=no ; Asterisk zatim nepodporuje VP8!

http.conf:


[general]
enabled=yes
bindaddr=0.0.0.0

Pozor: Při mém testování s Chrome 23 fungovala signalizace, ale audio nebylo slyšet. Dle vývojářů je to striktnějšími SDP v Chrome a kvůli tomu se špatně domluví správné porty. Budu rád, pokud se podělíte se svými zkušenostmi v diskuzi. Na IRC zazněla věta „WebRTC is moving target“, což je zatím bohužel pravda.

Další menší novinky a úpravy

Aplikace

ConfBridge

  • Do menu byla přidána akce admin_toggle_mute_participants, která vypne/zapne umlčení ne-admin účastníků konference.

V případě že tato akce nastane, je možné pomocí konfiguračních direktiv sound_participants_unmuted a sound_participants_muted nastavit, jaká se přehraje účastníkům hláška.

  • Další akce participant_count umožňuje oznámit v konferenci počet účastníků.

  • V profilu uživatele konference je možné nadefinovat, jaká oznámení budou tomuto uživateli přehrávána.

Dial

  • V aplikaci Dial přibyly parametry ‚b‘ a ‚B‘. Ty umožňují spustit Gosub předtím, než bude aplikace Dial spuštěna. To lze z výhodou využít pro přehlednější psaní dialplánu. Další informace a ukázky najdete na wiki.asterisk.org.

MixMonitor

  • Mixmonitor nyní používá unikátní ID, které může být použito k zastavení nahrávání pomocí StopMixMonitor a uvedení ID.

  • Parametr ‚m‘ umožňuje uložit nahrávku do hlasové schránky a použít standardní mechanismy voicemailu pro přehrání této nahrávky.

Fronta ( Queue )

  • Přidány možnosti autopausebusy a autopauseunavail pro automatické zapauzování agenta call centra, pokud jeho zařízení reportuje, že je obsazené nebo odpojené.

Voicemail (hlasová schránka)

  • Přidána aplikace VoiceMailPlayMsg .Tato aplikace umožňuje přehrát konkrétní hlasový vzkaz z hlasové schránky

Funkce

  • Hangup handlers(HH) můžou být „pověšeny“ na běžící hovor pomocí funkce CHANNEL. Hangup handlers se spustí v okamžiku kdy je hovor ukončen podobně jako funguje speciální extenze h . Rozdíl mezi HH a extenzí h je v tom, že HH následují hovor, ať je kdekoliv v dialplánu, a pro své provádění používají GoSub.

  • Pomocí FAXOPT(faxdetect) můžeme zapnout detekci faxu u příchozího hovoru.

  • Přidána funkce PRESENCE_STATE, která umožňuje získat informace o stavu prezence z jakéhokoliv poskytovatele presence.

  • Přidána funkce AMI_CLIENT, která umožňuje kontrolovat stav otevřených relací pro daného uživatele. Využít lze např., pokud v dialplánu chceme generovat nějakou událost pro AMI. Když zjistíme, že daný uživatel není k AMI vůbec přihlášen, událost negenerujeme.

Kanály (Channel Drivers)

chan_motif

  • Vytvořen nový kanál pro podporu Google Talku a Jingle. Chan_motif podporuje audio,video, dtmf a také funkce držení hovoru (hold/unhold) a informace o vyzvánění.

Tuto funkcionalitu lze využít pro službu volání do pevných sítí – Google Voice. V České republice bohužel není služba dostupná.

Pro správnou funkce je potřeba zapnout podporu protokolu ICE:


[general]
icesupport=yes

Podrobné informace jsou k dispozici na wiki.asterisk.org.

chan_sip

  • Přidána podpora zapnutí/vypnutí nahrávání na základě SIP hlavičky „Record:“

  • Do SIP kanálu přidána podpora udržování spojení přes NAT formou prázdného paketu. Konfigurační direktiva se jmenuje keepalive.

  • Přibyla možnost změny „tónů“ země pomocí volby ‚tonezone‘. Jedná se například o signalizaci obsazovacího tónu. Tyto normy u nás specifikuje ČTÚ (Český Telekomunikační Úřad)

  • Přidána podpora WebSocketů. Jedná se o funkci nutnou pro fungování protokolu WebRTC.

Konfigurační parametr je  transport = ws,wss

Wss je včetně SSL šifrování, ws je bez šifrování.

  • RTP egine nyní podporuje protokol ICE, který usnadňuje komunikaci přes NAT.

AMI (Asterisk Manager Interface)

  • Přidán příkaz SIPpeerstatus, který zobrazí informace o SIP zařízení.

  • U příkazu Hangup je nyní možné použít regulární výraz takže je možné ukončit více běžících hovorů najednou. Může se hodit např. u fraudů.

  • Události z AMI jsou konečně zdokumentovány a automaticky exportovány do wiki na wiki.asterisk.org.

  • Přidán příkaz PresenceState. Tento příkaz zobrazí stav pro daného poskytovatele prezence.

  • Přidán příkaz MessageSend. Pomocí tohoto příkazu můžete posílat jak SIP SIMLE, tak XMPP zprávy přes AMI rozhraní.

Logování

  • Každá událost v logu je nyní označena tzv. „callid“, které je specifické pro daný hovor. Pro daný hovor lze tedy nyní velmi jednoduše vyhledat všechny související hlášky.

  • Velmi příjemnou úpravou je změna úrovně logování.

V případě, že se připojíte pomocí asterisk –r  k běžící instanci, můžete pomocí core set verbose X, kde X je číslo, měnit úroveň zobrazování hlášek. Pokud se připojí na stejnou instanci kolega v jiném terminálu tak se mu zobrazí stejná úroveň, kterou jste nastavil vy. Toto je ve verzi 11 změněno a nastavená úroveň se týká pouze vašeho připojení.

Dejte si pozor, pokud používáte na příkazy aliasy. Doporučuji přečíst příslušnou sekci v [2].

Resource Moduly

Kalendáře

Do proměnné CALENDAR_SUCCESS se ukládá hodnota 1 v případě, že se pomocí funkceCALENDAR_WRITE podařilo do kalendáře zapsat.

res_corosync

  • Přibyl nový modul res_corosync jako náhrada za res_ais. Modul používá Corosync cluster enginer k vytvoření lokálního clusteru Asterisků. Tento cluster potom může sdílet informace o čekajících hlasových zprávách (MWI) a informace o stavu zařízení (Device State presence information).

res_xmpp

  • Modul je náhrada za předchozí modul res_jabber. Z pohledu funkce se nic nemění, přepis byl pouze interní.

Reference

[1] wiki.asterisk.org/wiki/dis­play/AST/New+in+11

[2] wiki.asterisk.org/wiki/dis­play/AST/Upgrading+to+Aste­risk+11

Autor článku

Autor pracuje ve společnosti IPEX a.s. a ve volném čase se zabývá podporou open-source komunikačních projektů.