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.

Author

Ben Langfeld

Contributions

Adhearsion has a set of contribution guidelines which help to smooth the contribution process.

Copyright (c) 2013 Adhearsion Foundation Inc. MIT LICENSE (see LICENSE for details).