Always-on Digital Marketing: 7 Things We've Learned by Zeus Jones
Asterisk-Java at JUGC 2009-05-29
1. Asterisk-Java
Stefan Reuter
reucon
29. Mai 2009
Stefan Reuter (reucon) Asterisk-Java 29. Mai 2009 1/8
2. Asterisk
Was ist Asterisk?
• freie Telefonanlage in C unter GNU GPL f¨r Linux, Solaris, BSD
u
• unterst¨tzt VoIP, analoge sowie ISDN BRI und PRI Anschl¨sse
u u
• Anwendungen:
• Anrufbeantworter
• Telefonkonferenzen
• Anfrufverteilung im Call-Center mit Warteschleife
• Sprachaufzeichnung
• Sprachdialoge (IVR)
• zahlreiche Distributionen wie AsteriskNOW, FreePBX, Trixbox oder
Gemeinschaft
Stefan Reuter (reucon) Asterisk-Java 29. Mai 2009 2/8
3. Asterisk
Asterisk bietet drei wesentliche Schnittstellen
• AMI: Asterisk Manager Interface
• Sicht auf das komplette System
• Alle Anrufe, Nebenstellen, Konferenzen, Agenten
• Events, Actions und Responses
• Typische Anwendung: Click to Call, Dashboard
• AGI: Asterisk Gateway Interface
• Analog zu (Fast-)CGI uber TCP
¨
• Ablaufsteuerung f¨r einen Anruf
u
• Abspielen von Voiceprompts, Erkennen von DTMF, Spracherkennung
• Typische Anwendung: Sprachdialogsystem (IVR)
• IAX: Inter Asterisk Exchange Protocol
• Zugriff auf Mediastream eines Anrufs
• Typische Anwendung: Softphone
Stefan Reuter (reucon) Asterisk-Java 29. Mai 2009 3/8
4. Asterisk
F¨higkeiten der Schnittstellen
a
Anwendungsfall AMI AGI IAX
Anruf initiieren
Anruf weiterleiten
Aktive Anrufe abfragen
Status Nebenstelle abfragen
Aufzeichnung starten/stoppen
Mediadaten empfangen
Dialplan ver¨ndern
a
Act as IVR application
Act as soft phone
Act as endpoint/caller
Click to call
Dashboard
Stefan Reuter (reucon) Asterisk-Java 29. Mai 2009 4/8
5. Asterisk-Java
Asterisk-Java
• Java-Bibliothek f¨r AMI und AGI unter Apache Lizenz
u
• 100% Java, Kommunikation uber TCP/IP
¨
• vereinfachte Nutzung von AMI durch stateful Live API
• unterst¨tzt Java 6 ScriptEngines f¨r die Entwicklung von AGIs
u u
(JavaScript, Groovy, JRuby, Jython, PHP, ...)
• einfache Integration in Container wie Spring, Tomcat oder JBoss
• In Vorbereitung: Unterst¨tzung von IAX
u
Stefan Reuter (reucon) Asterisk-Java 29. Mai 2009 5/8
6. Asterisk-Java
Beispiel: AMI
public c l a s s HelloAmi
{
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s )
{
A s t e r i s k S e r v e r pbx ;
pbx = new D e f a u l t A s t e r i s k S e r v e r (
” pbx . e x a m p l e . com” , ” u s e r ” , ” p a s s ” ) ;
pbx . o r i g i n a t e T o E x t e n s i o n (
” SIP / phone −01” , // Q u e l l e
” n a t i o n a l ” , ” 0221123456 ” , 1 , // Z i e l
20000 L ) ; // Timeout
}
}
Stefan Reuter (reucon) Asterisk-Java 29. Mai 2009 6/8
7. Asterisk-Java
Beispiel: AGI
p u b l i c c l a s s H e l l o A g i S c r i p t implements A g i S c r i p t
{
public void s e r v i c e ( AgiRequest request ,
AgiChannel channel )
throws A g i E x c e p t i o n
{
channel . answer ( ) ;
channel . streamFile (” h e l l o ” ) ;
c h a n n e l . hangup ( ) ;
}
}
Stefan Reuter (reucon) Asterisk-Java 29. Mai 2009 7/8
8. Asterisk-Java
Fragen?
http://asterisk-java.org
Stefan Reuter (reucon) Asterisk-Java 29. Mai 2009 8/8