4. What We Will Cover
Why do VOIP now?
➢
Asterisk
➢
Adhearsion
➢
Telegraph
➢
Demos
➢
5. Why Now?
Only recently has good Open Source Software
been developed ( Rails / Asterisk )
Telecoms are slow to react
Few applications merge voice and web
Cell phone are everywhere!
6. Why Now?
2.7 Billion mobile phones. 1.4 Billion fixed-lines.
➢
1/3 of “Internet Users” access the internet from
➢
their mobile phone.
iPhone has shown consumers why they need
➢
the interactive internet on their phone. Others will
follow.
Most phone users can be identified by a
➢
standardized numerical system.
7. VOIP / Web Analogy
Technology Web VOIP
HTTP
Protocol SIP – Industry Standard
FTP IAX – Asterisk Specific
RTP H.323 – Obsolete
Jingle – Gtalk
Skype - Proprietary
gzip, jpg, gif, g.711 – high bandwidth
Codec
mp3, ogg, wma, gsm – medium bandwidth
flv, mpeg, avi g.729 – low bandwidth
Apache / Lighttpd Asterisk, Freeswitch
Server
AGI – Asterisk Gateway
Interactivity Interface
CGI
AMI – Asterisk Manager
Interface
8. Asterisk
+ Open Source Private Branch Exchange (PBX)
➢
+ Very powerful and flexible
➢
+ Relatively Stable
➢
- Messy to deal with in terms of extending
➢
functionality.
+++ Free!
➢
9. Asterisk : Terminology
Channel – A channel is what can setup and
➢
receive calls.
Dialplan – Script of what to do with a call. Written
➢
in the asterisk macro language.
AGI – Stdin/out TCP method allowing external
➢
applications to dynamically write dialplans.
AMI – Allows sending of commands and listen
➢
for stateful events.
10. Typical Voice System
VOIP
Clients SIP
Rails
Origination/
/
AGI /
Termination
PSTN
SIP / IAX AMI
Asterisk
Network Server
Adhearsion
Server
/
Telegraph
Analog
PSTN Zaptel
Interface
Network / Other
Card
11. Asterisk Dialplan Language
[demo] ; Sample from Asterisk configuration extensions.conf file
;
; We start with what to do when a call first comes in.
;
exten => s,1,Wait(1) ; Wait a second, just for fun
exten => s,n,Answer ; Answer the line
exten => s,n,Set(TIMEOUT(digit)=5) ; Set Digit Timeout to 5 seconds
exten => s,n,Set(TIMEOUT(response)=10) ; Set Response Timeout to 10 seconds
exten => s,n(restart),BackGround(demo-congrats) ; Play a congratulatory message
exten => s,n(instruct),BackGround(demo-instruct); Play some instructions
exten => s,n,WaitExten ; Wait for an extension to be dialed.
exten => 2,1,BackGround(demo-moreinfo) ; Give some more information.
exten => 2,n,Goto(s,instruct)
exten => 3,1,Set(LANGUAGE()=fr) ; Set language to french
exten => 3,n,Goto(s,restart) ; Start with the congratulations
exten => 1000,1,Goto(default,s,1)
12. Difficulties in Asterisk
Conditional Loops Error Handling
➢ ➢
Complex Data Date and time
➢ ➢
Structure handling
Database / LDAP RegEx Pattern
➢ ➢
Integration Matching
Extending the Variables
➢ ➢
language Object Oriented
➢
Portability - Asterisk Design
➢
v.s Freeswitch, etc.
13. Ruby / Asterisk Integration Tools
RAGI – Just for AGI. Not integrated with Rails.
➢
No longer active.
RAMI – Just for Management Interface. No Rails
➢
Integration. Not Active.
Adhearsion – Active. Good for writing pure voice
➢
applications. Not tied with Rails (but can be
without too much effort).
Telegraph – Active. Tightly integrated with Rails.
➢
Embraces the Voice/Web Analogy.
14. Adhearsion
Standalone server that talks with Asterisk
Developed by Jay Phillips of Codemecca
Open Source
Current version is 0.7.7
Development on 0.8 is nearly complete. Lots of
new changes.
15. Adhearsion
Put the line below in extensions.conf
Tells Asterisk to process all calls by our
Adhearsion server
exten => _X.,1,Agi(agi://127.0.0.1)
or... when extension 888 is dialed.
exten => 888,1,Agi(agi://127.0.0.1)
16. Adhearsion - dialplan.rb
adhearsion {
play %w(press-1 for minneapolis press-2 for chicago or
press-3 for dallas weather otherwise-press 4)
selection = input()
w = new_weather
case selection
when '1' then play w.weather_report(quot;Minneapolis, MNquot;)
when '2' then play w.weather_report(quot;Chicago, ILquot;)
when '3' then play w.weather_report(quot;Dallas, TXquot;)
else
simon = new_simon_game
simon.start
end
}
18. Adhearsion - Demo
Notes:
Start up Asterisk : sudo asterisk
Show asterisk CLI.
Start up Adhearsion 0.8 Server :
~/development/adhersion/trunk/bin/ahn start .
in the rumadhearsion directory
Point Xlite Phone to Localhost dial extension 8000
19. Adhearsion – Weather Demo
Demo #1 - Weather - Parses data from
Yahoo RSS feed <yweather:forecast
day=quot;Monquot; date=quot;31 Dec 2007quot; low=quot;6quot;
high=quot;19quot; text=quot;Flurriesquot; code=quot;13quot; />
rep = %W(weather is-currently
#{w.current.temp} degrees today high
#{today.high} low #{today.low}) +
w.current.desc
20. Adhearsion – Simon Says
Demo #2 - Play Simon Says Game
def verify_attempt
if attempt_correct?
call_context.play 'good'
else
call_context.play %W(#{number.size - 1}
times wrong-try-again-smarty)
reset
end
end
21. Adhearsion
Write Ruby in our dial
●
plans!
Ability to use any
●
Ruby gems we need
(Active Record, etc.)
Test and debug our
●
application in
isolation.
Bring OO practices to
●
VOIP development
22. Adhearsion
It's abstracted and
●
portable across other
PBXes
It's simple
●
It's extensible
●
It's readable
●
It's maintainable
●
It's fun!
●
23. Adhearsion
Where's the Rails?
Not directly integrated with Rails – by choice.
Written to stand on it's own, but you can link in
your models using ActiveRecord.
Looking for VOIP in the MVC framework?
Look no further than Telegraph...
24. Telegraph
Written by a company named Idapted.
➢
Extracted from production application ( Idapted's
➢
distributed voice system for English language
learning – EnglishQuad )
Started with RAGI / RAMI
➢
Tightly Integrated with the Rails/Web Interface
➢
They claim it “embraces the Voice/Web analogy”
➢
25. Telegraph
Installs into any Rails project as a plugin
script/plugin install
svn://rubyforge.org/var/svn/telegraph/trunk
start up the server
script/agi_server – Interfaces with the gateway
(incoming calls)
script/ami_server – Interfaces with the Asterisk
manager
27. Telegraph
Add this to your extensions.conf
exten => s, n, AGI(agi://localhost/account)
respond_to do |wants|
#r index.html
wants.html { render }
# Telegraph allows render_voice
# which uses the index.voice file
wants.voice{ render_voice }
end
29. Telegraph - Demo
Start up telegraph server :
telegraph/banking_demo
ruby script/asterisk_server
ruby script/server
Visit http://localhost:3000/account
Dial Extension 9000
30. Real World Application
eStara
Offers a service where a
user browsing a site
can enter their phone
number. The system
will dial their number,
ask the person to hold
and then dial customer
service.
We'll do this.
31. Demo Topology
Cell
Origination/ Rails Application
Phone
Termination
Server
PSTN Internet
Asterisk
AGI
AMI
Demos:
1. Using the browser to initiate phone call.
2. “Who Wants To Be A Billionaire” game.
32. Demo – Using PSTN
Telegraph Demos -
➢
➢ Use the browser to initiate a wakeup call.
➢ Use the browser to initiate phone calls to 10 digit
phone numbers and bridge the calls
➢ Use the browser to initiate a call and verify
correct code was entered.
Adhearsion Demo -
➢
➢ Adhearsion – My “Who Wants To Be A
Billionaire” application.