Asterisk + Java OpenSource Telefonie für alle Thomas Kruse Sun Campus Ambassador thomas.kruse@sun.com
Zum Referenten Thomas Kruse Als Softwareentwickler und Berater im Bereich Java, Webentwicklung und Telefonieintegration tätig Mitgründer der Java Usergroup Münsterland: jug-muenster.de Sun Campus Ambassador an der WWU Münster 2
Agenda PSTN, PBX, VoIP, WTF? Asterisk Integrationsoptionen Asterisk-Java Beispiele Betrieb Q&A 3
Was ist ein Telefon(netz) in Wahrheit? 4
Telefonie Prinzipien Im Prinzip: Töne von A nach B transportieren per Leitung > Kabel legen (1877) Switched Telephone Network (STN) > Phone Switch (mit Telefon oder PBX) > PBX: Private Branch exchange > Verbindung zwischen STN: TRUNK 5
Manuelle Vermittlung (1902) 6
Telefonnetz Öffentliches Telefonnetz (PSTN) > Vermittlungsstelle: Kabel stecken (1881) > Automatische Vermittlung (1892-1923) > BASA (1928) Internationale Verbindung > Wählplan und Abrechnung > E.164 definiert eindeutig jeden Endpunkt > 2-3 Ziffern Ländercode (49 Deutschland) > Bis zu12 Ziffern nationales Netz (NDC) und Zielrufnummer (SN) 7
Das digitale Zeitalter 8
Das digitale Zeitalter Digitalisierung > Paketvermittlung statt Leitungsvermittlung (VoP: ATM) > Töne, Bilder, Texte: Die neuen Netze transportieren nur Daten > Mobile Telekommunikation > Neue Anwendungen (z.b. Call-In-TV) 9
Ein Protokoll für alle(s) IP als Protokoll für Daten und Sprache: VoIP > Ursprünglich von Netzbetreibern als günstiger Ersatz für permanente TRUNKs > Dynamisch, kann Internet oder private Netze nutzen > SIP + RDP: Vermittlung von Media > Standard findet auch bei Geschäftskunden und Endkunden Einzug 10
Kabelsalat und Vendor Lock-in Früher: > Telefone und Kabel nicht zwischen verschiedenen Anbietern kompatibel > Eigene Protokolle im Geschäftsumfeld > ISDN nur für Privatanwender interessant Heute (oder Morgen...): > SIP ist Standard für Endgeräte und PBX > Ein Kabel pro Arbeitsplatz/Telefon: Ethernet > Internet ist günstiger als PSTN für Gespräche - Skype 11
12 Asterisk
Asterisk PBX in Software und frei > GNU GPL > Solaris, Linux, BSD > Anwendungen > Telefonvermittlung > Anrufbeantworter > Konferenzen > Call-Center Anwendungen > Sprachdialogsysteme (IVR) > Keine spezielle Hardware erforderlich 13
Asterisk vs. herkömmliche PBX Kostenfrei > Software GPL Geringe Betriebskosten > Standard PC Hardware > Unix Administrator Einfache Integration Hohe Flexibilität Kommerzieller Support verfügbar 14 Hohe Kosten > Anschaffung / Miete > Wartungsvertrag > Konfigurationen Integration aufwändig > Proprietäre Schnittstellen Geringe Flexibilität Kommerzieller Support
Asterisk Anbindung VoIP > SIP > IAX > H.323 > Skype >... Klassische Telefonnetz > ISDN BRI > ISDN PRI > Analoge Leitungen (POTS) 15
Integration über SIP SIP Servlets > Von großen Telcos etablierter Standard: JSR 116, JSR 289 > Implementierungen von Sun, Ericsson, mobicents,... > Low-Level API SailFin > SIP Servlet Implementierung für Glassfish > SailFin CAFE Unterprojekt mit Media Support 16
Asterisk spezifische Schnittstellen AMI Asterisk Manager Interface > Kompletter Systemzugriff > Events, Actions, Responses > Anwendungen: Dashboard, Click-to-Call AGI > Analog zu CGI bei Webanwendungen > Ablaufsteuerung für einen Anruf > Anwendungen: Sprachdialogsysteme (IVR) IAX > Zugriff auf Mediastream 17
Schnittstellenübersicht Anwendung AMI AGI IAX Anruf initiieren Anruf weiterleiten Aktive Anrufe abfragen Status einer Nebenstelle abfragen Aufzeichnung starten/stoppen Mediadaten empfangen/senden Dialplan verändern IVR Anwendung Softphone Anrufer/Endpunkt 18
19 Asterisk + Java
Asterisk-Java Bibliothek um AGI und AMI für die Java Plattform verfügbar zu machen > Lizenz: Apache > 100% Java, Kommunikation per TCP/IP > Vereinfacht AMI durch stateful Live API > Java 6 Script Engines: Support für AGIs in JavaScript, Groovy, Jruby, Jython, PHP, > Keine externen Abhängigkeiten > Deployment mit Spring, Glassfish, Jetty, Tomcat... 20
Im Einsatz auf GoYellow.de 21
Im Einsatz: VoIP Anbieter Für Privatkunden Spezielle Angebote für Geschäftskunden Unified Messaging Anrufbeantworter im Netz Cloud für Telefonie Stabiler Betrieb in großem Rahmen 22
Asterisk Manager Interface (AMI) Verbindung zwischen zwei Endpunkten public class OriginateAmi { public static void main(string[] args) { AsteriskServer pbx; pbx = new DefaultAsteriskServer( pbx.example.com, user, pass ); } } pbx.originatetoextension( SIP/softphone, national, 017622949609, 1, 20000L); // Quelle // Ziel (context, extension, prio) // Timeout Ebenso kann eine Verbindung zwischen einer Anwendung und einem Teilnehmer hergestellt werden 23
Asterisk Gateway Interface (AGI) Anruf annehmen und Aufzeichnung abspielen public class HelloAgi implements AgiScript { public void service (AgiRequest request, AgiChannel channel) throws AgiException { channel.answer(); channel.streamfile( hello world ); //Media erledigt Asterisk channel.hangup(); } } Aufruf erfolgt innerhalb einer AgiServer Instanz 24
Dank Java: PHP, JavaScript, Ruby,... Java 6 bietet Scripting API um Scriptsprachen zu integrieren (JSR-223) > JavaScript per Rhino direkt nutzbar > Andere Sprachen (z.b. PHP) verfügbar Asterisk-Java bietet seit Version 1.0.0 Support > exten => 2001,1,Agi(agi://localhost/demo.js) > exten => 2000,1,Agi(agi://localhost/demo.groovy) Realisierung von AGI Scripts in verschiedenen Script Sprachen statt Java > Gemischter Einsatz ist ebenfalls möglich 25
26 Betrieb
Betrieb einer Webanwendung Webserver Telefon BRI / PRI Bei Bedarf separieren Asterisk 27 VoIP Provider
Privatanwender / SOHO Umfeld Zusätzliche Servicemerkmale Call Routing Sanfte Migration zu VoIP Anbindung Home- Office, Außendienst 28
Links und Resourcen BASA: http://de.wikipedia.org/wiki/basa SailFin: https://sailfin.dev.java.net/ Mobicents: http://www.mobicents.org/products_sip_servlets.html Asterisk: http://www.asterisk.org/ Asterisk-Java: http://asterisk-java.org/ > Dokumentation > Mailing Liste > Blog > Bugtracker Slides: http://www.jug-muenster.de/ 29
Nächste Schritte... Asterisk installieren Asterisk Java ausprobieren Mögliche Anwendungen > Spracherkennung > Integration in bestehende Anwendungen wie z.b. Webshop, Google Analytics,... http://asterisk java.org/ 30
Danke für Ihre Zeit! Fragen? Asterisk + Java OpenSource Telefonie für alle Thomas Kruse Sun Campus Ambassador thomas.kruse@sun.com ICQ: 436566496