Asterisk + Java OpenSource Telefonie für alle Thomas Kruse Sun Campus Ambassador [email protected] 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 Asterisk 12 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 • Hohe Kosten > Software GPL > Anschaffung / Miete • Geringe Betriebskosten > Standard PC Hardware > Unix Administrator > Wartungsvertrag > Konfigurationen • Integration aufwändig > Proprietäre Schnittstellen • Einfache Integration • Hohe Flexibilität • Geringe Flexibilität • Kommerzieller Support verfügbar • Kommerzieller Support 14 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 Asterisk + Java 19 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 Betrieb 26 Betrieb einer Webanwendung Webserver Telefon BRI / PRI Bei Bedarf separieren VoIP Provider Asterisk 27 Privatanwender / SOHO Umfeld • Zusätzliche Servicemerkmale • Call Routing • Sanfte Migration zu VoIP • Anbindung HomeOffice, 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 [email protected] ICQ: 436566496