asterisk & php · asterisk & php hans-christian otto international php conference 2010 se...
TRANSCRIPT
![Page 1: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/1.jpg)
ASTERISK & PHPHans-Christian Otto
International PHP Conference 2010 SEBerlin, June 1, 2010
1Samstag, 5. Juni 2010
![Page 2: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/2.jpg)
ABOUT ME
PHP since 2004
Asterisk since 2007
working as a freelancer for various companys
computer science student at TU Dortmund
active member of phpugdo
2Samstag, 5. Juni 2010
![Page 3: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/3.jpg)
… AND YOU?
3Samstag, 5. Juni 2010
![Page 4: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/4.jpg)
ASTERISK open source PBX
actually dual-licensed
created by Mark Spencer in 1999
runs on *nix and windows
VoIP
ISDN
bluetooth
and more
4Samstag, 5. Juni 2010
![Page 5: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/5.jpg)
InterAsterisk eXchange
Session Initiation Protocol
H.323
UNIStim
Voice over Frame Relay-Protokoll
SCCP
SS7
Euro-ISDN (DSS1)
4ESS
QSIG
DMS100
Lucent 5E Distributed Switching
National ISDN2
NFAS
Wikipedia, Die freie Enzyklopädie. Bearbeitungsstand: May 28, 2010, 10:49 pm UTC. URL: http://de.wikipedia.org/w/index.php?title=Asterisk_(Telefonanlage)&oldid=74905428
5Samstag, 5. Juni 2010
![Page 6: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/6.jpg)
FEATURES
music on hold
voicemail
phone conferences
IVR
speech recognition
„follow me“
scriptable
AstDB
queues
call parking
pickup
6Samstag, 5. Juni 2010
![Page 7: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/7.jpg)
USE CASES
7Samstag, 5. Juni 2010
![Page 8: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/8.jpg)
DIALING
8Samstag, 5. Juni 2010
![Page 9: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/9.jpg)
INCOMING CALLS9Samstag, 5. Juni 2010
![Page 10: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/10.jpg)
MISSED CALLS10Samstag, 5. Juni 2010
![Page 11: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/11.jpg)
SOME TERMS
device
dialplan
extension
context
channel
11Samstag, 5. Juni 2010
![Page 12: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/12.jpg)
DEVICES
SIP peers
SIP phones
softclients
legacy phones using ATA
sip providers
isdn phones
IAX peers
bluetooth devices
etc.
12Samstag, 5. Juni 2010
![Page 13: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/13.jpg)
DIALPLAN
contexts
extension
priority
applications
macros
control structures
13Samstag, 5. Juni 2010
![Page 14: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/14.jpg)
SIP.CONF [alice]
type=friend
context=from-sip
secret=passwordAlice
host=dynamic
disallow=all
allow=ulaw
allow=alaw
[bob]
type=friend
context=from-sip
secret=passwordBob
host=dynamic
disallow=all
allow=ulaw
allow=alaw14Samstag, 5. Juni 2010
![Page 15: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/15.jpg)
EXTENSIONS.CONF
exten => 10,1,Dial(SIP/alice&SIP/bob)exten => 11,1,Dial(SIP/alice)exten => 11,hint,SIP/aliceexten => 12,1,Dial(SIP/bob)
exten => 81,1,Answer()exten => 81,2,AGI(weather.agi)exten => 81,3,Hangup()
[from-sip]
15Samstag, 5. Juni 2010
![Page 16: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/16.jpg)
IVR
exten => 90,1,Answer()exten => 90,n,Playback(marryme)
exten => 1,1, Playback(thank-you-cooperaation)exten => 1,n, Hangup()
exten => 2,1, Playback(sorry)exten => 2,n, Hangup()
16Samstag, 5. Juni 2010
![Page 17: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/17.jpg)
CONTROL STRUCTURES
exten => 123,1,Answer
exten => 123,n,Set(i=1)
exten => 123,n,While($[${i} < 5])
exten => 123,n,SayNumber(${i})
exten => 123,n,Set(i=$[${i} + 1])
exten => 123,n,EndWhile
17Samstag, 5. Juni 2010
![Page 18: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/18.jpg)
AEL
context ael-demo { 123 => { Answer(); for (x=0; ${x} < 5; x=${x} + 1) { SayNumber(${x}); };}
18Samstag, 5. Juni 2010
![Page 19: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/19.jpg)
LUAfunction demo_start(context, exten) app.wait(1) app.answer() demo_congrats(context, exten)endextensions = { demo = { s = demo_start; ["2"] = function() app.background("demo-moreinfo") demo_instruct() end; }}
19Samstag, 5. Juni 2010
![Page 20: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/20.jpg)
FUNFACTAEL and extensions.conf support goto for a long time ;-)
20Samstag, 5. Juni 2010
![Page 21: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/21.jpg)
PHP?
dialplan
AGI
FastAGI
AMI
AJAM
callfiles
21Samstag, 5. Juni 2010
![Page 22: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/22.jpg)
STATE OF ASTERISK & PHP
multiple php libraries
freepbx
22Samstag, 5. Juni 2010
![Page 23: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/23.jpg)
USE CASES
23Samstag, 5. Juni 2010
![Page 24: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/24.jpg)
DIALING SUCKS. dialing results in …
missdialing
procrastination; not misdialing calls (laziness)
using (more expensive) cellphones
solution: computer based dialing
AMI
callfiles
24Samstag, 5. Juni 2010
![Page 25: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/25.jpg)
CALLFILES
text files initiating a call
key-value pairs
placed in a special directory
watched by asterisk
schedule calls by mtime modification
Channel: SIP/aliceContext: from-sipExtension: 12Priority: 1WaitTime: 30 RetryTime: 60 MaxRetries: 2
25Samstag, 5. Juni 2010
![Page 26: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/26.jpg)
<?php$filename = tempnam( '/var/spool/asterisk/tmp/', 'callfile');file_put_contents($filename, $callFile);touch($filename, time() + 60);rename( $filename, tempnam( '/var/spool/asterisk/outgoing/', 'callfile' ));
26Samstag, 5. Juni 2010
![Page 27: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/27.jpg)
INCOMING CALL
display notifications
on client computers
using funny gadgets (emergency lights, anyone?)
turn off espresso maker (so your staff gets back to work)
entertain caller
log (missed) calls
visualize in CRM27Samstag, 5. Juni 2010
![Page 28: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/28.jpg)
CDR
log all calls
different output modules
csv
mysql
etc.
28Samstag, 5. Juni 2010
![Page 29: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/29.jpg)
CDR_MYSQL.CONF
[global]
hostname = localhost
dbname=asteriskcdrdb
password = amp109
user = asteriskuser
userfield=1
29Samstag, 5. Juni 2010
![Page 30: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/30.jpg)
calldate: 2010-05-29 11:26:18
clid: "Extern: 123" <123>
src: 123
dst: 31
dcontext: from-internal
channel: SIP/9-09bde8f8
dstchannel: SIP/31-09bb7550
lastapp: Dial
lastdata: SIP/31|20
duration: 22
billsec: 11
disposition: ANSWERED
amaflags: 3
accountcode:
uniqueid: 1275125178.20185
userfield:
30Samstag, 5. Juni 2010
![Page 31: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/31.jpg)
AGI
executables
chmod +x & shebang
receive variables through STDIN
just like HTTP-headers, Key: Value
send commands through STDOUT
fwrite(STDOUT,"EXEC Playback tt-allbusy \"\"\n");
PHPAGI
31Samstag, 5. Juni 2010
![Page 32: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/32.jpg)
A SIMPLE AGI
#!/usr/bin/env php<?phprequire 'phpagi/phpagi.php';$agi = new AGI();$agi->text2wav('Please enter the PIN.');$pin = $agi->get_data( 'beep', 5000, 4 );if( $pin['result'] != '2342' ) { $agi->text2wav('The entered pin was wrong.');} else { start_servers($agi);}
32Samstag, 5. Juni 2010
![Page 33: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/33.jpg)
A SIMPLE AGI
function start_servers($agi){
$agi->text2wav('Which server should be started?'); $server = $agi->menu(array( '1' => '*Press 1 for CRM', '2' => '*Press 2 for ERP', )); $agi->text2wav('Waking up server ' . $server); WakeOnLan($server);}
33Samstag, 5. Juni 2010
![Page 34: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/34.jpg)
WHO‘S CALLING?#!/usr/bin/env php<?phprequire 'phpagi/phpagi.php';$agi = new AGI();$cid = $agi->getVariable('callerid(name)');if(!$cid['result']) exit;$agi->set_callerid(sprintf( '"%s"<%d>', lookupNameByNumber($cid['data']), $cid['data']));
34Samstag, 5. Juni 2010
![Page 35: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/35.jpg)
WHO‘S CALLING?
exten => 11,1,AGI(callerid_lookup)exten => 11,2,Dial(SIP/alice)
35Samstag, 5. Juni 2010
![Page 36: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/36.jpg)
PHP & PHONES
XML browser
directory lookup
missed call list
busy lamp field
„action buttons“
36Samstag, 5. Juni 2010
![Page 37: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/37.jpg)
BUSY LAMP FIELD
indicates status of phones using „hints“
available
ringing
busy/unavailable
can indicate „devstate“
37Samstag, 5. Juni 2010
![Page 38: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/38.jpg)
DEVSTATE
can be controlled using
dialplan
exten => 23,n,Set(DEVSTATE(Custom:foo) = RINGING)
cli command
devstate change Custom:foo RINGING
AMI
38Samstag, 5. Juni 2010
![Page 39: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/39.jpg)
DEVSTATE: USECASES
presence
non-phone indicators
escalating support ticket
system status (nagios?)
build failures? ;-)
39Samstag, 5. Juni 2010
![Page 40: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/40.jpg)
MISSED CALLS
common asterisk issue: missed calls
possible solution: CDR / AGI and XML application / webgui
40Samstag, 5. Juni 2010
![Page 41: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/41.jpg)
CONCLUSION
PHP can …
originate calls
interact with calls
interact with caller
interact with callee
analyze logs
enrich phones41Samstag, 5. Juni 2010
![Page 42: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/42.jpg)
CONTACT
http://hans-christian-otto.de/
@muhdiekuh
muh-die-kuh @ euIRC / freenode
42Samstag, 5. Juni 2010
![Page 43: ASTERISK & PHP · ASTERISK & PHP Hans-Christian Otto International PHP Conference 2010 SE Berlin, June 1, 2010 Samstag, 5. Juni 2010 1](https://reader030.vdocuments.mx/reader030/viewer/2022040920/5e98a20b02006c0a1b09cf6f/html5/thumbnails/43.jpg)
FURTHER REFERENCES
http://das-asterisk-buch.de/ (german, source for some examples)
http://www.the-asterisk-book.com/
http://eder.us/projects/phpagi/
http://www.voip-info.org/
http://www.asterisk.org/
43Samstag, 5. Juni 2010