SlideShare a Scribd company logo
1 of 27
Download to read offline
Integrating Voice
                     through Adhearsion
                               Luca Pradovera
                            Telephony Devroom
                               FOSDEM 2013
                         Brussels, February 3rd, 2013




venerdì 1 marzo 13
Who am I?
                     • Italian computer engineer
                     • No, I didn’t vote for Berlusconi
                     • Voice application developer at Mojo
                       Lingo LLC, Atlanta (GA)

                     • Managed to learn Ruby without doing
                       Rails work!


venerdì 1 marzo 13
What is Adhearsion?
                     • Ruby voice application framework
                     • Provides logic for telephony apps
                     • Open source and managed by a
                       Foundation

                     • Version 2.2.1 released on 06/01
                     • 2.0 was released in April 2012
venerdì 1 marzo 13
ADHEARSION 101



venerdì 1 marzo 13
Supported platforms
                     • Ruby 1.9 only - JRuby working
                     • Asterisk
                     • FreeSWITCH
                     • Voxeo PRISM
                     • Rayo protocol support (http://rayo.org/)

venerdì 1 marzo 13
Rayo sounds tasty.

                     • XMPP-based protocol for 3PCC
                     • Call control
                     • Audio and media control
                     • Telephony primitives

venerdì 1 marzo 13
Why should I use
                        Adhearsion?
                     • Dialplan applications only get you so
                       far

                     • Every platform has its own syntax
                     • Some features are simply impossible to
                       achieve

                     • It’s Ruby. Everybody likes Ruby.
venerdì 1 marzo 13
What can I do?




venerdì 1 marzo 13
How does Ahn talk to
                     platforms?
                     • Asterisk: AsyncAGI (AMI)
                     • FreeSWITCH: Inbound Event Socket
                     • PRISM: Pure Rayo


venerdì 1 marzo 13
Anatomy of an app
                     • Configuration
                     • Call Controllers
                     • Routing
                     • The ahn command: create, daemon,
                       start, stop, restart, generate, help,
                       version


venerdì 1 marzo 13
Call Controllers
                     • Hold the application logic (dialplan)
                     • The #run method is used to invoke the
                        controller

                     class SimpleController < Adhearsion::CallController
                       def run
                         answer
                         play "tt-weasels"
                         hangup
                       end
                     end




venerdì 1 marzo 13
Other features
                     • Playback, menus, user input, recording
                     • Configuration system
                     • Plugin architecture
                     • Routing
                     • Testability

venerdì 1 marzo 13
Sounds great, huh?




venerdì 1 marzo 13
Demo time!
    class DemoController < Adhearsion::CallController                  def enter_number
      def run                                                              number = ask "#{Adhearsion.config.platform[:root]}/sounds/
        answer                                                         please-enter", :limit => 1, :timeout => 5.seconds
        menu "#{Adhearsion.config.platform[:root]}/sounds/demo-            if number
    menu", :timeout => 5.seconds, :tries => 3 do                             play "#{Adhearsion.config.platform[:root]}/sounds/you-
          match 1 do                                                   entered"
            enter_number                                                     play "digits/#{number}"
          end                                                              end
          match 2 do                                                     end
            record_message
          end                                                            def record_message
                                                                           play "#{Adhearsion.config.platform[:root]}/sounds/please-
          timeout do                                                   speak-after"
             play "#{Adhearsion.config.platform[:root]}/sounds/menu-       record_result = record :start_beep => true, :max_duration
    timeout"                                                           => 5_000
          end                                                              logger.info "Recording saved to
          invalid do                                                   #{record_result.recording_uri}"
             play "#{Adhearsion.config.platform[:root]}/sounds/menu-       play record_result.recording_uri.gsub(/file:///,
    invalid"                                                           '').gsub(/.wav/, '')
          end                                                            end
                                                                       end
          failure do
             play "#{Adhearsion.config.platform[:root]}/sounds/menu-
    failure"
             hangup
          end
        end
      end




venerdì 1 marzo 13
Event support

                     • Adhearsion allows you to trace and
                       react to events

                     • Guarded handlers in apps
                     • A specialized block for everything else

venerdì 1 marzo 13
Events over HTTP
           Adhearsion::Events.draw do
             punchblock do |event|
               conn = Faraday.new("http://localhost:3000")
               conn.post "/publish", { :event => event.inspect } if event.respond_to? :name
             end
           end




 A Sinatra app with Faye can then distribute events to
            browsers through Websockets




venerdì 1 marzo 13
Plugins
                     • Virginia provides a Reel interface for
                       Adhearsion

                     • It loads a Reel::App and makes all
                       methods available
                        require 'reel'
                        require 'reel/app'

                        class RequestHandler
                          include Reel::App
                          get('/dial') do
                            Adhearsion::OutboundCall.originate "SIP/100"   do
                              invoke ConnectingController
                            end
                            [200, {}, "200 OK"]
                          end
                        end



venerdì 1 marzo 13
Are you sold now?




venerdì 1 marzo 13
Adhearsion in the
                          wild


venerdì 1 marzo 13
• Mobile wireless provider and enabler
                       (MVNO - MVNE)

                     • OTT applications
                     • In-call apps
                     • Adhearsion powers all call logic, billing,
                       and features


venerdì 1 marzo 13
• Voice conversation automation and
                       metrics

                     • Ad tracking
                     • Hosted IVR
                     • Lead tracking
                     • http://www.ifbyphone.com/
venerdì 1 marzo 13
• House remodeling
                     • Robo-dialing for appointment sign-up
                       and confirmation

                     • Real-time data pushed to mobile CRM
                     • Over 5 million calls in 2012 (one every
                       5 seconds!)


venerdì 1 marzo 13
• Pre-paid translation service for travelers
                     • Billing and credit management
                     • Translator search with AMD detection
                       and adaptive selection

                     • http://www.sostravelcard.it/

venerdì 1 marzo 13
What the future
                           holds...
                     • WebRTC: Adhearsion can perform all
                       3PCC functions

                     • Multiple device tracking and switching
                     • Protocol convergence
                     • Some of these are already
                       implemented in upcoming products

venerdì 1 marzo 13
Adhearsion 3.0

                     • Currently at the planning stage
                     • Unified communication platform
                     • Better ASR support
                     • Revamped component structure

venerdì 1 marzo 13
AdhearsionConf
                            2013
                     • 2012 edition had over 120 attendants
                     • 2 days, 15 presentations, training, beer
                     • http://adhearsionconf.com/



venerdì 1 marzo 13
Thank you!
                     • http://adhearsion.com/
                     • http://mojolingo.com/
                     • @adhearsion, @mojolingo
                     • @lucaprado
                     • Demo source available at https://
                       github.com/polysics/fosdem2013


venerdì 1 marzo 13

More Related Content

What's hot

Deep dive into Android’s audio latency problem
Deep dive into Android’s audio latency problemDeep dive into Android’s audio latency problem
Deep dive into Android’s audio latency problemSirawat Pitaksarit
 
Another world cutscene analysis
Another world cutscene analysisAnother world cutscene analysis
Another world cutscene analysisamybrockbank
 
Core Audio in iOS 6 (CocoaConf Portland, Oct. '12)
Core Audio in iOS 6 (CocoaConf Portland, Oct. '12)Core Audio in iOS 6 (CocoaConf Portland, Oct. '12)
Core Audio in iOS 6 (CocoaConf Portland, Oct. '12)Chris Adamson
 
Ig1 task 2 analysis work sheet bioshock infinite
Ig1 task 2 analysis work sheet bioshock infiniteIg1 task 2 analysis work sheet bioshock infinite
Ig1 task 2 analysis work sheet bioshock infinitehalo4robo
 
How you think the sound in your chosen example has been produce1 dead space
How you think the sound in your chosen example has been produce1 dead spaceHow you think the sound in your chosen example has been produce1 dead space
How you think the sound in your chosen example has been produce1 dead spaceconor0994
 
Drumwavy VST VST3 Audio Unit: Orchestral and Ethnic Percussion VST, VST3 and ...
Drumwavy VST VST3 Audio Unit: Orchestral and Ethnic Percussion VST, VST3 and ...Drumwavy VST VST3 Audio Unit: Orchestral and Ethnic Percussion VST, VST3 and ...
Drumwavy VST VST3 Audio Unit: Orchestral and Ethnic Percussion VST, VST3 and ...Syntheway Virtual Musical Instruments
 
Core Audio in iOS 6 (CocoaConf Chicago, March 2013)
Core Audio in iOS 6 (CocoaConf Chicago, March 2013)Core Audio in iOS 6 (CocoaConf Chicago, March 2013)
Core Audio in iOS 6 (CocoaConf Chicago, March 2013)Chris Adamson
 

What's hot (10)

Deep dive into Android’s audio latency problem
Deep dive into Android’s audio latency problemDeep dive into Android’s audio latency problem
Deep dive into Android’s audio latency problem
 
Another world cutscene analysis
Another world cutscene analysisAnother world cutscene analysis
Another world cutscene analysis
 
Core Audio in iOS 6 (CocoaConf Portland, Oct. '12)
Core Audio in iOS 6 (CocoaConf Portland, Oct. '12)Core Audio in iOS 6 (CocoaConf Portland, Oct. '12)
Core Audio in iOS 6 (CocoaConf Portland, Oct. '12)
 
Ig1 task 2 analysis work sheet bioshock infinite
Ig1 task 2 analysis work sheet bioshock infiniteIg1 task 2 analysis work sheet bioshock infinite
Ig1 task 2 analysis work sheet bioshock infinite
 
How you think the sound in your chosen example has been produce1 dead space
How you think the sound in your chosen example has been produce1 dead spaceHow you think the sound in your chosen example has been produce1 dead space
How you think the sound in your chosen example has been produce1 dead space
 
Product list 2010
Product list 2010Product list 2010
Product list 2010
 
Camel crushermanual
Camel crushermanualCamel crushermanual
Camel crushermanual
 
Drumwavy VST VST3 Audio Unit: Orchestral and Ethnic Percussion VST, VST3 and ...
Drumwavy VST VST3 Audio Unit: Orchestral and Ethnic Percussion VST, VST3 and ...Drumwavy VST VST3 Audio Unit: Orchestral and Ethnic Percussion VST, VST3 and ...
Drumwavy VST VST3 Audio Unit: Orchestral and Ethnic Percussion VST, VST3 and ...
 
Core Audio in iOS 6 (CocoaConf Chicago, March 2013)
Core Audio in iOS 6 (CocoaConf Chicago, March 2013)Core Audio in iOS 6 (CocoaConf Chicago, March 2013)
Core Audio in iOS 6 (CocoaConf Chicago, March 2013)
 
The secerts to great sounding samples.txt
The secerts to great sounding samples.txtThe secerts to great sounding samples.txt
The secerts to great sounding samples.txt
 

Viewers also liked

Time to get serious about realtime communication
Time to get serious about realtime communicationTime to get serious about realtime communication
Time to get serious about realtime communicationOlle E Johansson
 
Connecting Adhearsion
Connecting AdhearsionConnecting Adhearsion
Connecting AdhearsionBen Langfeld
 
Migrating to open unified communication
Migrating to open unified communicationMigrating to open unified communication
Migrating to open unified communicationOlle E Johansson
 
Stay Connected - world IPv6 Launch
Stay Connected - world IPv6 LaunchStay Connected - world IPv6 Launch
Stay Connected - world IPv6 LaunchOlle E Johansson
 
SIP :: Half outbound (random notes)
SIP :: Half outbound (random notes)SIP :: Half outbound (random notes)
SIP :: Half outbound (random notes)Olle E Johansson
 
WebRTC - a quick introduction
WebRTC - a quick introductionWebRTC - a quick introduction
WebRTC - a quick introductionOlle E Johansson
 
Sip2016 - a talk at VOIP2DAY 2016
Sip2016 - a talk at VOIP2DAY 2016Sip2016 - a talk at VOIP2DAY 2016
Sip2016 - a talk at VOIP2DAY 2016Olle E Johansson
 
The Realtime Story - part 2
The Realtime Story - part 2The Realtime Story - part 2
The Realtime Story - part 2Olle E Johansson
 

Viewers also liked (9)

Time to get serious about realtime communication
Time to get serious about realtime communicationTime to get serious about realtime communication
Time to get serious about realtime communication
 
Connecting Adhearsion
Connecting AdhearsionConnecting Adhearsion
Connecting Adhearsion
 
#MoreCrypto
#MoreCrypto #MoreCrypto
#MoreCrypto
 
Migrating to open unified communication
Migrating to open unified communicationMigrating to open unified communication
Migrating to open unified communication
 
Stay Connected - world IPv6 Launch
Stay Connected - world IPv6 LaunchStay Connected - world IPv6 Launch
Stay Connected - world IPv6 Launch
 
SIP :: Half outbound (random notes)
SIP :: Half outbound (random notes)SIP :: Half outbound (random notes)
SIP :: Half outbound (random notes)
 
WebRTC - a quick introduction
WebRTC - a quick introductionWebRTC - a quick introduction
WebRTC - a quick introduction
 
Sip2016 - a talk at VOIP2DAY 2016
Sip2016 - a talk at VOIP2DAY 2016Sip2016 - a talk at VOIP2DAY 2016
Sip2016 - a talk at VOIP2DAY 2016
 
The Realtime Story - part 2
The Realtime Story - part 2The Realtime Story - part 2
The Realtime Story - part 2
 

Similar to Integrating Voice Through Adhearsion

Testing Adhearsion Applications
Testing Adhearsion ApplicationsTesting Adhearsion Applications
Testing Adhearsion ApplicationsMojo Lingo
 
Core Audio Cranks It Up
Core Audio Cranks It UpCore Audio Cranks It Up
Core Audio Cranks It UpChris Adamson
 
Core Audio in iOS 6 (CocoaConf DC, March 2013)
Core Audio in iOS 6 (CocoaConf DC, March 2013)Core Audio in iOS 6 (CocoaConf DC, March 2013)
Core Audio in iOS 6 (CocoaConf DC, March 2013)Chris Adamson
 
Ruby & Machine Vision - Talk at Sheffield Hallam University Feb 2009
Ruby & Machine Vision - Talk at Sheffield Hallam University Feb 2009Ruby & Machine Vision - Talk at Sheffield Hallam University Feb 2009
Ruby & Machine Vision - Talk at Sheffield Hallam University Feb 2009Jan Wedekind
 
Deployment presentation
Deployment presentationDeployment presentation
Deployment presentationCorey Purcell
 
Introduction to Erlang/(Elixir) at a Webilea Hands-On Session
Introduction to Erlang/(Elixir) at a Webilea Hands-On SessionIntroduction to Erlang/(Elixir) at a Webilea Hands-On Session
Introduction to Erlang/(Elixir) at a Webilea Hands-On SessionAndré Graf
 
Introduction to node.js by Ran Mizrahi @ Reversim Summit
Introduction to node.js by Ran Mizrahi @ Reversim SummitIntroduction to node.js by Ran Mizrahi @ Reversim Summit
Introduction to node.js by Ran Mizrahi @ Reversim SummitRan Mizrahi
 
Enhancing Free PBX with Adhearsion at Fosdem 2012
Enhancing Free PBX with Adhearsion at Fosdem 2012Enhancing Free PBX with Adhearsion at Fosdem 2012
Enhancing Free PBX with Adhearsion at Fosdem 2012Luca Pradovera
 
Enhancing FreePBX with Adhearsion
Enhancing FreePBX with AdhearsionEnhancing FreePBX with Adhearsion
Enhancing FreePBX with AdhearsionMojo Lingo
 
Talking To Rails
Talking To RailsTalking To Rails
Talking To RailsMojo Lingo
 
Concurrent Programming with Ruby and Tuple Spaces
Concurrent Programming with Ruby and Tuple SpacesConcurrent Programming with Ruby and Tuple Spaces
Concurrent Programming with Ruby and Tuple Spacesluccastera
 
Ben white ig2 task 1 work sheet
Ben white   ig2 task 1 work sheetBen white   ig2 task 1 work sheet
Ben white ig2 task 1 work sheetBenWhite101
 
Jenkins pipeline -- Gentle Introduction
Jenkins pipeline -- Gentle IntroductionJenkins pipeline -- Gentle Introduction
Jenkins pipeline -- Gentle IntroductionRamanathan Muthaiah
 
Ig2 task 1 work sheet connor martin
Ig2 task 1 work sheet connor martinIg2 task 1 work sheet connor martin
Ig2 task 1 work sheet connor martinKalen612
 
Sound recording glossary tom crook
Sound recording glossary tom crookSound recording glossary tom crook
Sound recording glossary tom crookTomCrook
 
gegerageSound recording glossary tom crook
gegerageSound recording glossary tom crookgegerageSound recording glossary tom crook
gegerageSound recording glossary tom crookTomCrook
 
あなたの知らないネットワークプログラミングの世界
あなたの知らないネットワークプログラミングの世界あなたの知らないネットワークプログラミングの世界
あなたの知らないネットワークプログラミングの世界Ryousei Takano
 

Similar to Integrating Voice Through Adhearsion (20)

Testing Adhearsion Applications
Testing Adhearsion ApplicationsTesting Adhearsion Applications
Testing Adhearsion Applications
 
Core Audio Cranks It Up
Core Audio Cranks It UpCore Audio Cranks It Up
Core Audio Cranks It Up
 
Core Audio in iOS 6 (CocoaConf DC, March 2013)
Core Audio in iOS 6 (CocoaConf DC, March 2013)Core Audio in iOS 6 (CocoaConf DC, March 2013)
Core Audio in iOS 6 (CocoaConf DC, March 2013)
 
Ruby & Machine Vision - Talk at Sheffield Hallam University Feb 2009
Ruby & Machine Vision - Talk at Sheffield Hallam University Feb 2009Ruby & Machine Vision - Talk at Sheffield Hallam University Feb 2009
Ruby & Machine Vision - Talk at Sheffield Hallam University Feb 2009
 
Node and SocketIO
Node and SocketIONode and SocketIO
Node and SocketIO
 
Deployment presentation
Deployment presentationDeployment presentation
Deployment presentation
 
Introduction to Erlang/(Elixir) at a Webilea Hands-On Session
Introduction to Erlang/(Elixir) at a Webilea Hands-On SessionIntroduction to Erlang/(Elixir) at a Webilea Hands-On Session
Introduction to Erlang/(Elixir) at a Webilea Hands-On Session
 
Introduction to node.js by Ran Mizrahi @ Reversim Summit
Introduction to node.js by Ran Mizrahi @ Reversim SummitIntroduction to node.js by Ran Mizrahi @ Reversim Summit
Introduction to node.js by Ran Mizrahi @ Reversim Summit
 
Enhancing Free PBX with Adhearsion at Fosdem 2012
Enhancing Free PBX with Adhearsion at Fosdem 2012Enhancing Free PBX with Adhearsion at Fosdem 2012
Enhancing Free PBX with Adhearsion at Fosdem 2012
 
Enhancing FreePBX with Adhearsion
Enhancing FreePBX with AdhearsionEnhancing FreePBX with Adhearsion
Enhancing FreePBX with Adhearsion
 
Talking To Rails
Talking To RailsTalking To Rails
Talking To Rails
 
Ruby
RubyRuby
Ruby
 
Concurrent Programming with Ruby and Tuple Spaces
Concurrent Programming with Ruby and Tuple SpacesConcurrent Programming with Ruby and Tuple Spaces
Concurrent Programming with Ruby and Tuple Spaces
 
Ruby voip
Ruby voipRuby voip
Ruby voip
 
Ben white ig2 task 1 work sheet
Ben white   ig2 task 1 work sheetBen white   ig2 task 1 work sheet
Ben white ig2 task 1 work sheet
 
Jenkins pipeline -- Gentle Introduction
Jenkins pipeline -- Gentle IntroductionJenkins pipeline -- Gentle Introduction
Jenkins pipeline -- Gentle Introduction
 
Ig2 task 1 work sheet connor martin
Ig2 task 1 work sheet connor martinIg2 task 1 work sheet connor martin
Ig2 task 1 work sheet connor martin
 
Sound recording glossary tom crook
Sound recording glossary tom crookSound recording glossary tom crook
Sound recording glossary tom crook
 
gegerageSound recording glossary tom crook
gegerageSound recording glossary tom crookgegerageSound recording glossary tom crook
gegerageSound recording glossary tom crook
 
あなたの知らないネットワークプログラミングの世界
あなたの知らないネットワークプログラミングの世界あなたの知らないネットワークプログラミングの世界
あなたの知らないネットワークプログラミングの世界
 

More from Mojo Lingo

ConnectJS 2015: Video Killed the Telephone Star
ConnectJS 2015: Video Killed the Telephone StarConnectJS 2015: Video Killed the Telephone Star
ConnectJS 2015: Video Killed the Telephone StarMojo Lingo
 
AstriCon 2015: WebRTC: How it Works, and How it Breaks
AstriCon 2015: WebRTC: How it Works, and How it BreaksAstriCon 2015: WebRTC: How it Works, and How it Breaks
AstriCon 2015: WebRTC: How it Works, and How it BreaksMojo Lingo
 
FreeSWITCH, FreeSWITCH Everywhere, and Not A Phone In Sight
FreeSWITCH, FreeSWITCH Everywhere, and Not A Phone In SightFreeSWITCH, FreeSWITCH Everywhere, and Not A Phone In Sight
FreeSWITCH, FreeSWITCH Everywhere, and Not A Phone In SightMojo Lingo
 
Now Hear This! Putting Voice, Video, and Text into Ruby on Rails
Now Hear This! Putting Voice, Video, and Text into Ruby on RailsNow Hear This! Putting Voice, Video, and Text into Ruby on Rails
Now Hear This! Putting Voice, Video, and Text into Ruby on RailsMojo Lingo
 
Using Asterisk to Create "Her"
Using Asterisk to Create "Her"Using Asterisk to Create "Her"
Using Asterisk to Create "Her"Mojo Lingo
 
Tipping the Scales: Measuring and Scaling Asterisk
Tipping the Scales: Measuring and Scaling AsteriskTipping the Scales: Measuring and Scaling Asterisk
Tipping the Scales: Measuring and Scaling AsteriskMojo Lingo
 
WebRTC Overview by Dan Burnett
WebRTC Overview by Dan BurnettWebRTC Overview by Dan Burnett
WebRTC Overview by Dan BurnettMojo Lingo
 
AdhearsionConf 2013 Keynote
AdhearsionConf 2013 KeynoteAdhearsionConf 2013 Keynote
AdhearsionConf 2013 KeynoteMojo Lingo
 
Speech-Enabling Web Apps
Speech-Enabling Web AppsSpeech-Enabling Web Apps
Speech-Enabling Web AppsMojo Lingo
 
WebRTC: What? How? Why? - ClueCon 2013
WebRTC: What? How? Why? - ClueCon 2013WebRTC: What? How? Why? - ClueCon 2013
WebRTC: What? How? Why? - ClueCon 2013Mojo Lingo
 
Infiltrando Telecoms Usando Ruby
Infiltrando Telecoms Usando RubyInfiltrando Telecoms Usando Ruby
Infiltrando Telecoms Usando RubyMojo Lingo
 
Connecting Adhearsion
Connecting AdhearsionConnecting Adhearsion
Connecting AdhearsionMojo Lingo
 
Testing Telephony: It's Not All Terrible
Testing Telephony: It's Not All TerribleTesting Telephony: It's Not All Terrible
Testing Telephony: It's Not All TerribleMojo Lingo
 
Rayo for XMPP Folks
Rayo for XMPP FolksRayo for XMPP Folks
Rayo for XMPP FolksMojo Lingo
 
Building Real Life Applications with Adhearsion
Building Real Life Applications with AdhearsionBuilding Real Life Applications with Adhearsion
Building Real Life Applications with AdhearsionMojo Lingo
 
Keeping It Realtime!
Keeping It Realtime!Keeping It Realtime!
Keeping It Realtime!Mojo Lingo
 
Infiltrating Telecoms Using Ruby
Infiltrating Telecoms Using RubyInfiltrating Telecoms Using Ruby
Infiltrating Telecoms Using RubyMojo Lingo
 
Telephony Through Ruby Colored Lenses
Telephony Through Ruby Colored LensesTelephony Through Ruby Colored Lenses
Telephony Through Ruby Colored LensesMojo Lingo
 
Voice Applications for the Modern Open Source Hacker
Voice Applications for the Modern Open Source HackerVoice Applications for the Modern Open Source Hacker
Voice Applications for the Modern Open Source HackerMojo Lingo
 
Multidextrous Voice Application Framework
Multidextrous Voice Application FrameworkMultidextrous Voice Application Framework
Multidextrous Voice Application FrameworkMojo Lingo
 

More from Mojo Lingo (20)

ConnectJS 2015: Video Killed the Telephone Star
ConnectJS 2015: Video Killed the Telephone StarConnectJS 2015: Video Killed the Telephone Star
ConnectJS 2015: Video Killed the Telephone Star
 
AstriCon 2015: WebRTC: How it Works, and How it Breaks
AstriCon 2015: WebRTC: How it Works, and How it BreaksAstriCon 2015: WebRTC: How it Works, and How it Breaks
AstriCon 2015: WebRTC: How it Works, and How it Breaks
 
FreeSWITCH, FreeSWITCH Everywhere, and Not A Phone In Sight
FreeSWITCH, FreeSWITCH Everywhere, and Not A Phone In SightFreeSWITCH, FreeSWITCH Everywhere, and Not A Phone In Sight
FreeSWITCH, FreeSWITCH Everywhere, and Not A Phone In Sight
 
Now Hear This! Putting Voice, Video, and Text into Ruby on Rails
Now Hear This! Putting Voice, Video, and Text into Ruby on RailsNow Hear This! Putting Voice, Video, and Text into Ruby on Rails
Now Hear This! Putting Voice, Video, and Text into Ruby on Rails
 
Using Asterisk to Create "Her"
Using Asterisk to Create "Her"Using Asterisk to Create "Her"
Using Asterisk to Create "Her"
 
Tipping the Scales: Measuring and Scaling Asterisk
Tipping the Scales: Measuring and Scaling AsteriskTipping the Scales: Measuring and Scaling Asterisk
Tipping the Scales: Measuring and Scaling Asterisk
 
WebRTC Overview by Dan Burnett
WebRTC Overview by Dan BurnettWebRTC Overview by Dan Burnett
WebRTC Overview by Dan Burnett
 
AdhearsionConf 2013 Keynote
AdhearsionConf 2013 KeynoteAdhearsionConf 2013 Keynote
AdhearsionConf 2013 Keynote
 
Speech-Enabling Web Apps
Speech-Enabling Web AppsSpeech-Enabling Web Apps
Speech-Enabling Web Apps
 
WebRTC: What? How? Why? - ClueCon 2013
WebRTC: What? How? Why? - ClueCon 2013WebRTC: What? How? Why? - ClueCon 2013
WebRTC: What? How? Why? - ClueCon 2013
 
Infiltrando Telecoms Usando Ruby
Infiltrando Telecoms Usando RubyInfiltrando Telecoms Usando Ruby
Infiltrando Telecoms Usando Ruby
 
Connecting Adhearsion
Connecting AdhearsionConnecting Adhearsion
Connecting Adhearsion
 
Testing Telephony: It's Not All Terrible
Testing Telephony: It's Not All TerribleTesting Telephony: It's Not All Terrible
Testing Telephony: It's Not All Terrible
 
Rayo for XMPP Folks
Rayo for XMPP FolksRayo for XMPP Folks
Rayo for XMPP Folks
 
Building Real Life Applications with Adhearsion
Building Real Life Applications with AdhearsionBuilding Real Life Applications with Adhearsion
Building Real Life Applications with Adhearsion
 
Keeping It Realtime!
Keeping It Realtime!Keeping It Realtime!
Keeping It Realtime!
 
Infiltrating Telecoms Using Ruby
Infiltrating Telecoms Using RubyInfiltrating Telecoms Using Ruby
Infiltrating Telecoms Using Ruby
 
Telephony Through Ruby Colored Lenses
Telephony Through Ruby Colored LensesTelephony Through Ruby Colored Lenses
Telephony Through Ruby Colored Lenses
 
Voice Applications for the Modern Open Source Hacker
Voice Applications for the Modern Open Source HackerVoice Applications for the Modern Open Source Hacker
Voice Applications for the Modern Open Source Hacker
 
Multidextrous Voice Application Framework
Multidextrous Voice Application FrameworkMultidextrous Voice Application Framework
Multidextrous Voice Application Framework
 

Recently uploaded

Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 

Recently uploaded (20)

Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 

Integrating Voice Through Adhearsion

  • 1. Integrating Voice through Adhearsion Luca Pradovera Telephony Devroom FOSDEM 2013 Brussels, February 3rd, 2013 venerdì 1 marzo 13
  • 2. Who am I? • Italian computer engineer • No, I didn’t vote for Berlusconi • Voice application developer at Mojo Lingo LLC, Atlanta (GA) • Managed to learn Ruby without doing Rails work! venerdì 1 marzo 13
  • 3. What is Adhearsion? • Ruby voice application framework • Provides logic for telephony apps • Open source and managed by a Foundation • Version 2.2.1 released on 06/01 • 2.0 was released in April 2012 venerdì 1 marzo 13
  • 5. Supported platforms • Ruby 1.9 only - JRuby working • Asterisk • FreeSWITCH • Voxeo PRISM • Rayo protocol support (http://rayo.org/) venerdì 1 marzo 13
  • 6. Rayo sounds tasty. • XMPP-based protocol for 3PCC • Call control • Audio and media control • Telephony primitives venerdì 1 marzo 13
  • 7. Why should I use Adhearsion? • Dialplan applications only get you so far • Every platform has its own syntax • Some features are simply impossible to achieve • It’s Ruby. Everybody likes Ruby. venerdì 1 marzo 13
  • 8. What can I do? venerdì 1 marzo 13
  • 9. How does Ahn talk to platforms? • Asterisk: AsyncAGI (AMI) • FreeSWITCH: Inbound Event Socket • PRISM: Pure Rayo venerdì 1 marzo 13
  • 10. Anatomy of an app • Configuration • Call Controllers • Routing • The ahn command: create, daemon, start, stop, restart, generate, help, version venerdì 1 marzo 13
  • 11. Call Controllers • Hold the application logic (dialplan) • The #run method is used to invoke the controller class SimpleController < Adhearsion::CallController def run answer play "tt-weasels" hangup end end venerdì 1 marzo 13
  • 12. Other features • Playback, menus, user input, recording • Configuration system • Plugin architecture • Routing • Testability venerdì 1 marzo 13
  • 14. Demo time! class DemoController < Adhearsion::CallController def enter_number def run number = ask "#{Adhearsion.config.platform[:root]}/sounds/ answer please-enter", :limit => 1, :timeout => 5.seconds menu "#{Adhearsion.config.platform[:root]}/sounds/demo- if number menu", :timeout => 5.seconds, :tries => 3 do play "#{Adhearsion.config.platform[:root]}/sounds/you- match 1 do entered" enter_number play "digits/#{number}" end end match 2 do end record_message end def record_message play "#{Adhearsion.config.platform[:root]}/sounds/please- timeout do speak-after" play "#{Adhearsion.config.platform[:root]}/sounds/menu- record_result = record :start_beep => true, :max_duration timeout" => 5_000 end logger.info "Recording saved to invalid do #{record_result.recording_uri}" play "#{Adhearsion.config.platform[:root]}/sounds/menu- play record_result.recording_uri.gsub(/file:///, invalid" '').gsub(/.wav/, '') end end end failure do play "#{Adhearsion.config.platform[:root]}/sounds/menu- failure" hangup end end end venerdì 1 marzo 13
  • 15. Event support • Adhearsion allows you to trace and react to events • Guarded handlers in apps • A specialized block for everything else venerdì 1 marzo 13
  • 16. Events over HTTP Adhearsion::Events.draw do punchblock do |event| conn = Faraday.new("http://localhost:3000") conn.post "/publish", { :event => event.inspect } if event.respond_to? :name end end A Sinatra app with Faye can then distribute events to browsers through Websockets venerdì 1 marzo 13
  • 17. Plugins • Virginia provides a Reel interface for Adhearsion • It loads a Reel::App and makes all methods available require 'reel' require 'reel/app' class RequestHandler include Reel::App get('/dial') do Adhearsion::OutboundCall.originate "SIP/100" do invoke ConnectingController end [200, {}, "200 OK"] end end venerdì 1 marzo 13
  • 18. Are you sold now? venerdì 1 marzo 13
  • 19. Adhearsion in the wild venerdì 1 marzo 13
  • 20. • Mobile wireless provider and enabler (MVNO - MVNE) • OTT applications • In-call apps • Adhearsion powers all call logic, billing, and features venerdì 1 marzo 13
  • 21. • Voice conversation automation and metrics • Ad tracking • Hosted IVR • Lead tracking • http://www.ifbyphone.com/ venerdì 1 marzo 13
  • 22. • House remodeling • Robo-dialing for appointment sign-up and confirmation • Real-time data pushed to mobile CRM • Over 5 million calls in 2012 (one every 5 seconds!) venerdì 1 marzo 13
  • 23. • Pre-paid translation service for travelers • Billing and credit management • Translator search with AMD detection and adaptive selection • http://www.sostravelcard.it/ venerdì 1 marzo 13
  • 24. What the future holds... • WebRTC: Adhearsion can perform all 3PCC functions • Multiple device tracking and switching • Protocol convergence • Some of these are already implemented in upcoming products venerdì 1 marzo 13
  • 25. Adhearsion 3.0 • Currently at the planning stage • Unified communication platform • Better ASR support • Revamped component structure venerdì 1 marzo 13
  • 26. AdhearsionConf 2013 • 2012 edition had over 120 attendants • 2 days, 15 presentations, training, beer • http://adhearsionconf.com/ venerdì 1 marzo 13
  • 27. Thank you! • http://adhearsion.com/ • http://mojolingo.com/ • @adhearsion, @mojolingo • @lucaprado • Demo source available at https:// github.com/polysics/fosdem2013 venerdì 1 marzo 13