adhearsion-asr
Adds speech recognition support to Adhearsion as a plugin. Overrides CallController#ask and #menu to pass all recognition responsibility to the recognizer instead of invoking it multiple times.
Features
-
ask API from Adhearsion core supporting digit limits, terminators, timeouts, inline grammars and grammar references
-
menu API from Adhearsion core supporting DTMF input and recognition failure
Install
Add the following entry to your Adhearsion application’s Gemfile:
ruby
gem 'adhearsion-asr'
Be sure to check out the plugin config by running rake config:show and adjust to your requirements.
By default, this plugin overrides Adhearsion core’s implementations of #ask and #menu with its own. To turn off this behaviour, set the auto_include option (see rake config:show) to false and include manually in controllers like so:
ruby
class MyController < Adhearsion::CallController
include AdhearsionASR::ControllerMethods
end
Examples
Simple collection of 5 DTMF digits
ruby
class MyController < Adhearsion::CallController
def run
result = ask limit: 5
case result.status
when :match
speak "You entered #{result.utterance}"
when :noinput
speak "Hellooo? Anyone there?"
when :nomatch
speak "That doesn't make sense."
end
end
end
Collecting an arbitrary number of digits until ‘#’ is received:
ruby
class MyController < Adhearsion::CallController
def run
result = ask terminator: '#'
case result.status
when :match
speak "You entered #{result.utterance}"
when :noinput
speak "Hellooo? Anyone there?"
when :nomatch
speak "That doesn't make sense."
end
end
end
Collecting input from an inline speech grammar
```ruby class MyController < Adhearsion::CallController def run grammar = RubySpeech::GRXML.draw root: ‘main’, language: ‘en-us’, mode: :voice do rule id: ‘main’, scope: ‘public’ do one_of do item { ‘yes’ } item { ‘no’ } end end end
result = ask grammar: grammar, input_options: { mode: :voice }
case result.status
when :match
speak "You said #{result.utterance}"
when :noinput
speak "Hellooo? Anyone there?"
when :nomatch
speak "That doesn't make sense."
end end end ```
Collecting input from a speech grammar by URL
ruby
class MyController < Adhearsion::CallController
def run
result = ask grammar_url: 'http://example.com/mygrammar.grxml', input_options: { mode: :voice }
case result.status
when :match
speak "You said #{result.utterance}"
when :noinput
speak "Hellooo? Anyone there?"
when :nomatch
speak "That doesn't make sense."
end
end
end
Executing a DTMF menu
```ruby class MyController < Adhearsion::CallController def run answer menu “Where can we take you today?”, timeout: 8.seconds, tries: 3 do match 1, BooController match ‘2’, MyOtherController match(3, 4) { pass YetAnotherController } match 5, FooController match 6..10 do |dialed| say_dialed dialed end
timeout { do_this_on_timeout }
invalid do
invoke InvalidController
end
failure do
speak 'Goodbye'
hangup
end
end
speak "This code gets executed unless #pass is used" end
def say_dialed(dialed) speak “#dialed was dialed” end
def do_this_on_timeout speak ‘Timeout’ end end ```
Check out the API documentation for more details.
Links:
Author
Contributions
Adhearsion has a set of contribution guidelines which help to smooth the contribution process.
Copyright
Copyright (c) 2013 Adhearsion Foundation Inc. MIT LICENSE (see LICENSE for details).