Date post: | 17-May-2015 |
Category: |
Documents |
Upload: | dieter-pisarewski |
View: | 4,538 times |
Download: | 4 times |
VOIP and Ruby
The Convergence of Web and Voice Applications using Open Source Software
Justin GrammensLocaltone [email protected]
VOIP is NOT About Cheap Phone Calls
Other companies are already doing this cheaper and better.
VOIP Applications!
It's about the applications that we can build!
What We Will Cover
➢ Why do VOIP now?
➢ Asterisk
➢ Adhearsion
➢ Telegraph
➢ Demos
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!
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.
VOIP / Web Analogy
Technology Web VOIPProtocol HTTP
FTPRTP
SIP – Industry StandardIAX – Asterisk SpecificH.323 – ObsoleteJingle – GtalkSkype - Proprietary
Codec gzip, jpg, gif,mp3, ogg, wma,flv, mpeg, avi
g.711 – high bandwidthgsm – medium bandwidthg.729 – low bandwidth
Interactivity
Server Apache / Lighttpd Asterisk, Freeswitch
CGIAGI – Asterisk Gateway InterfaceAMI – Asterisk Manager Interface
Asterisk
➢ + Open Source Private Branch Exchange (PBX)
➢ + Very powerful and flexible
➢ + Relatively Stable
➢ - Messy to deal with in terms of extending functionality.
➢ +++ Free!
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.
Typical Voice System
PSTNNetwork
Origination/Termination
Server
VOIPClients
PSTN Network
AnalogInterface
Card
AsteriskServer
Rails
/
Adhearsion
/
Telegraph
SIP
SIP / IAX
Zaptel/ Other
AGI / AMI
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 funexten => s,n,Answer ; Answer the lineexten => s,n,Set(TIMEOUT(digit)=5) ; Set Digit Timeout to 5 secondsexten => s,n,Set(TIMEOUT(response)=10) ; Set Response Timeout to 10 secondsexten => s,n(restart),BackGround(demo-congrats) ; Play a congratulatory messageexten => s,n(instruct),BackGround(demo-instruct); Play some instructionsexten => 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 frenchexten => 3,n,Goto(s,restart) ; Start with the congratulations
exten => 1000,1,Goto(default,s,1)
Difficulties in Asterisk
➢ Conditional Loops➢ Complex Data
Structure➢ Database / LDAP
Integration➢ Extending the
language➢ Portability - Asterisk
v.s Freeswitch, etc.
➢ Error Handling➢ Date and time
handling➢ RegEx Pattern
Matching➢ Variables➢ Object Oriented
Design
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.
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.
Adhearsion
Put the line below in extensions.confTells 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)
Adhearsion - dialplan.rbadhearsion { 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("Minneapolis, MN") when '2' then play w.weather_report("Chicago, IL") when '3' then play w.weather_report("Dallas, TX") else simon = new_simon_game simon.start end}
Adhearsion - Demos
Asterisk
extensions.conf
[ adhearsion ]
exten => 8000,1,Agi(agi://...)
SIP PhoneXLite Adhearsion
dialplan.rb
adhearsion {code..code..
}
Adhearsion - Demo
Notes:Start up Asterisk : sudo asteriskShow 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
Adhearsion – Weather Demo
Demo #1 - Weather - Parses data from Yahoo RSS feed <yweather:forecast day="Mon" date="31 Dec 2007" low="6" high="19" text="Flurries" code="13" />
rep = %W(weather is-currently #{w.current.temp} degrees today high #{today.high} low #{today.low}) + w.current.desc
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
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
Adhearsion
● It's abstracted and portable across other PBXes
● It's simple● It's extensible● It's readable● It's maintainable● It's fun!
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...
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”
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
Telegraph – Banking Demo
Asterisk
SIP PhoneXLite
RailsApplication
AGI Server
Telegraph
Add this to your extensions.confexten => 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
Banking Demo
index.voice:
voice.play "welcome-to-demo #{say_amount(@balance)}"
voice.link_to_dtmf 'banking-main-menu' do link 1, :action=>'new' link 2, :action=>'list' link :default, :action=>'index'end
Telegraph - Demo
Start up telegraph server : telegraph/banking_demo
ruby script/asterisk_serverruby script/server
Visit http://localhost:3000/account
Dial Extension 9000
Real World Application
eStaraOffers 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.
Demo Topology
Asterisk
Rails Application
AGI
AMI
CellPhone Origination/
TerminationServer
PSTN Internet
Demos:1. Using the browser to initiate phone call.2. “Who Wants To Be A Billionaire” game.
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.
Resources
http://rubyhoedown2007.confreaks.com/session03.html
http://www.slideshare.net/jpalley/respondto-voice-the-convergence-of-voice-and-web-interfaces-with-rails-and-asterisk
http://adhearsion.com/
http://telegraph.rubyforge.org
http://www.voip-info.org