Hlavní navigace

Asterisk 14: API, API, API a cloud

17. 10. 2016
Doba čtení: 6 minut

Sdílet

 Autor: Depositphotos
Nová verze Asterisk 14 je „standard“ verzí, která přináší další funkcionalitu zlepšující provoz v cloudu. Zlepšují se možnosti REST API, které otevírá dvířka telekomunikací miliónům vývojářů.

Obecně o Asterisku

Na úvod krátce o Asterisku pro neznalé: 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, kontaktní centra, VoIP Gatewaye a další speciální aplikace. Projekt je sponzorován firmou Digium, která prodává support a komerční produkty.

V České republice existují firmy, které poskytují komerční support nebo produkty nad Asteriskem postavené. Jsou to například Canistec, IPEX a další. Článek obsahuje popis funkcionalit, které by samostatně vydaly na několik článků. Zájemce tedy odkážu na starší články, kde jsou základní popisy fungování.

Asterisk 14 je standardní verze. Tzn. není dlouhodbě podporovaná a tudíž se nehodí pro projekty, u kterých je třeba zajistit dlouhodobou podporu. K tomuto účelu slouží tzv. LTS verze. Standardní verze je určena na projekty, kde je možné dělat jednoduše upgrady, na testování, na ověřování nových funkcí atp.

Release Series

Release Type

Release Date

Security Fix Only

EOL

1.8.X

LTS

2010–10–21

2014–10–21

2015–10–21

10.X

Standard

2011–12–15

2012–12–15

2013–12–15

11.x

LTS

2012–10–25

2016–10–25

2017–10–25

12.x

Standard

2013–12–20

2014–12–20

2015–12–20

13.x

LTS

2014–10–24

2018–10–24

2019–10–24

14.x

Standard

2016–09–26

2017–09–26

2018–09–26

15.x

LTS

2017–10 (tentative)

2021–10 (tentative)

2022–10 (tentative)

Hlavní novinky verze 14

PJSIP DNS reworked

Z důvodu absence některých pokročilých funkcionalit DNS jako je DNSSEC, NAPTR a SRV záznamy pro SIP bylo přepsáno interní CORE DNS API. Podpora SRV/NAPTR umožňuje např. jednoduchý failover připojeného SIP trunku.

Pokud by takto vypadala konfigurace domény sip.myvoipex.net poskytovatele SIP trunku:

NAPTR('sip.myvoipex.net', 50, 90, 'S', 'SIP+D2U', '', '_sip._udp.myvoipex.net'),
SRV('_sip._udp.myvoipex.net', 0, 1, 5060, 'proxy1.myvoipex.net'),
SRV('_sip._udp.myvoipex.net', 0, 1, 5060, 'proxy2.myvoipex.net'),

tak se Asterisk bude střídavě registrovat k proxy1 a proxy2. Pokud by jeden z proxy serverů vypadl, tak se Asterisk bude stále registrovat na funkční. Po úvahách, jakým způsobem DNS API přepracovat, bylo rozhodnuto o použití knihovny libunbound.

Dále bylo potřeba upravit knihovnu PJSIP, aby DNS operace vykonávala pomocí DNS API Asterisku. Tato úprava byla přidána do projektu PJSIP a bude k dispozici v další verzi.

Další informace o těchto úpravách najdete na blogu Asterisku.

Používáte již PJSIP?

offload metody PUBLISH

V protokolu SIP a jeho rozšířeních jsou definovány postupy, jak informat o stavu zařízení – volá/nevolá atp. V praxi to typicky používala sekretářka, aby se podívala, jestli volané osobě může přepojit hovor. Dnes to využívají automatické asistentky, call centrum systémy atd.

Jedná se o metody PUBLISH (publikování změny stavu zařízení), SUBSCRIBE (požádání o zasílání informací o změnách zařízení), NOTIFY (zaslání informací o změně zájemcům). Jelikož tyto metody generují poměrně velký provoz při větším počtu zařízení, zatěžuje to Asterisk.

Nově přidaná funkcionalita umožňuje stav zařízení publikovat na externí entitu. Používá se pojem „event state compositor“. Tato entita agreguje stavy a dále propaguje informace metodou NOTIFY, čímž efektivně uleví Asterisku. V praxi lze použít SIP proxy Kamailio.org.

Další informace o této funkci najdete na blogu Asterisku.

Media remote playback

Další novou funkcionalitou je možnost umístit média mimo server na jakýkoliv http server a média přehrávat. Při prvním použití jsou média kešována.

Funkci je možné výborně využít, pokud máte Asterisk v Dockeru a média soubory se mění. Např. přidáte další hlásku do IVR. V případě Docker image byste ji museli umístit do perzistentního volume, což není žádná sláva. Takto ji můžete nahrát na http server mimo ústřednu a máte vystaráno, i když se Docker restartuje.

Použití je jednoduché.

same => n,Playback(http://sounds.myvoipex.net/id578698/intro.wav)

Více na wiki Asterisku.

Manipulace s médii pomocí ARI

Přibyla možnost přehrávání více souborů a manipulace s nimi. Je možné se posouvat po souborech vpřed/vzad.

POST /channels/12345/play?media=sound:tt-monkeys&media=sound:tt-weasels&media=number:555

Více informací lze nalézt na wiki a blogu Asterisku.

Early media pomocí ARI+Stasis

Do této verze bylo možné pomocí ARI vytvořit hovor pomocí funkce „originate. Tato operace zároveň vytvářela kanál, vytvořila hovor a předala do dialplánu po zvednutí hovoru. To ale znemožňuje některé scénáře před zvednutím hovoru.

Nově je možné kanál vytvořit a okamžitě ho předat ARI aplikaci. V té můžete vytvářet různé „early media“ scénáře a přehrávat hlásky před zvednutím hovoru.

Opus

Opus je jeden z nejlepších audio kodeků na světě. Je povinný ve specifikaci WebRTC. V Asterisku je podporovaný již v dřívějších verzích. Proč teda sakra o něm zase mluvíme? Patenty.

Podpora v Asterisku je pouze typu Pass-through. Tzn. pokud máte 2 zařízení, které umí Opus tak ho použijí. Mějme ale situaci: SW klient a chceme použít Opus kvůli jeho lepší toleranci síťových problémů a nižším požadavkům na rychlost sítě. Druhá strana má klasický SIP telefon s kodekem G711. V tomto případě potřebujeme, aby Asterisk provedl tzv. transcoding. Tuto funkcionalitu Asterisk dlouho neměl.

Vysvětlení důvodů v mailové konferenci vývojářů, které poslal Matthew Jordan. Za vše hovoří část:

Question: This is messed up. If all of this is true, how can we ever innovate in areas where patents have ever been filed?

Answer: You can't. The system is broken.

Pro podporu transcodingu již nějakou dobu existují neoficiální patche. Nyní na konferenci Astricon 2016 v Glendale v Arizoně firma Digium vydala podporu kodeku Opus včetně transcondingu.

Podporu zveřejnila v rámci vydaného Asterisku 14. Bylo to provedeno trochu narychlo až ve verzi 14.0.1, takže informace není zveřejněna ani v hlavních oficiálních novinkách.

Technicky se bohužel jedná o neoblíbený binární modul, který se stahuje při instalaci. Modul navíc posílá anonymní statistiku využívání, kterou si dle vyjádření vynutili právníci. Modul je k dispozici i pro Asterisk 13.

Používáte OPUS?

Menší funkce a upgrady ze starších verzí

Upgrade z verze 13 je bezproblémový a je velmi málo věcí, které by byly zpětně nekompatibilní. Detailní informace naleznete na wiki Asterisku.

Větší změny v Asterisk 13

Od vydání první verze Asterisk 13 už utekla nějaká voda a musím bohužel upozornit na některé změny, které byly provedeny již v řadě 13. „Bohužel“ říkám proto, že vývojáři se začali chovat trochu jako EU a překračují nastavená pravidla.

ARI push (13.5.0)

ARI umožňuje spravovat PJSIP endpointy pomocí REST API.

Statsd (13.7.0)

Pokud už používáte pro sledování metrik nástroje jako je StatsD/Graphite/Grafana, tak se vám bude hodit možnost posílání informací jako je statistika PJSIP endpointů.

Pjsip bundled (13.8.0)

Původním úmyslem při použití knihovny PJSIP jako hlavního SIP stacku Asterisku bylo její využití v linuxových distribucích. Ukázalo se, že sdílené knihovny nelze příliš dobře využívat, protože jejich kompilace byla orientována na použití v SIP klientech, např. typicky malý počet současných hovorů.

Pro ulehčení tedy přibyla možnost kompilace Asterisku s parametrem pjsip bundled:

./configure --with-pjproject-bundled

Tímto způsobem konfigurační proces stáhne pjsip, aplikuje specifické patche a nastaví kompilační parametry vhodné pro Asterisk.

ict ve školství 24

Odbc (13.10.0)

V jedné chvíli se vývojáři rozhodli vyčistit ODBC kód a přejít na connection pooling implementovaný v unixODBC. To se ukázalo jako špatný krok i díky nalezeným chybám v unixODBC. Výsledkem bylo vrácení se k poolingu přímo v Asterisku a jeho přepsání.

Nezapomeňte na bugreporty

Závěrem přeji příjemné zkoušení nové funkcionality. Pokud najdete sílu tak budeme rádi za reportování nalezených problémů na issues.asterisk.org. Tip nakonec: jeden rychlý hovor vydá za hodiny mailování nebo chatování. 

Zdroje

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ů.