0.01
No commit activity in last 3 years
No release in over 3 years
A plugin for adding cpa to Adhearsion
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.0
>= 0
~> 2.5

Runtime

>= 3.0.10
>= 2.2.1
 Project Readme

Adhearsion-CPA Build Status Coverage Status Code Climate

This plugin aims to provide CPA detection..

Compatibility

  • Asterisk - no
  • Freeswitch with Event Socket - no
  • Freeswitch with mod_rayo - yes

Requirements

  • Punchblock 2.21 or greater
  • Adhearsion's current develop branch
  • Recent build of Freeswitch
  • Recent build of Mod_rayo that includes CPA support
  • Any modules needed for detection

Usage

Supported detectors

  • beep - Detect a beep.
  • dtmf - Detect DTMF tones.
  • vad - Detect voice activity.
  • speech - Detect speech and decide human or machine.
  • fax-ced - Detect a fax CED tone.
  • fax-cng - Detect a fax CNG tone.
  • ring - Detect a ringing tone.
  • busy - Detect a busy tone.
  • congestion - Detect a congestion tone.
  • sit - Detect a Special Information Tone.
  • modem - Detect a modem tone.
  • offhook - Detect an off-hook tone.

All detectors require the appropiate modules loaded in Freeswitch, and configured in rayo.conf.xml.

Basic

class BeepOrNoBeepController < Adhearsion::CallController
  def run
    answer
    say "Try to beep like a machine"
    tone = detect_tone(:beep, timeout: 5)
    if tone
      say "Good job! You sound just like a #{tone.type}"
    else
      say "Nope, you didn't make a convincing enough beep"
    end
  end
end

You can also watch for more than one tone type:

say "Something is beeping" if detect_tone(:modem, :beep, timeout: 5)

Some detection types let you pass extra options:

detect_tone :speech, maxTime: 4000, minSpeechDuration: 4000, timeout: 5

Fax Detection

For fax machines, you can either watch for fax-ced or fax-cng, but not both.

Asynchronous detection

You can also call a bang version of #detect_tone!, which will run the detectors in a non-blocking fashion, and execute the passed block when detection occurs:

# Start playing a message right away, so Real Humans don't have to wait
@sound = play_sound! "/foo/message.wav"

# But quit wasting a channel if we hear dialup noises
detect_tone! :modem do |tone|
  logger.info "Call detected a tone"
  @sound.stop!
end

Once or repeat

By default, the block will only be executed the first time the signal type is detected, and the detector will quit listening. If you'd prefer the block to fire every time the signal is detected, you can pass :terminate => false in the options hash:

detector = detect_tone! :dtmf, terminate: false do |tone|
  logger.info "Callee pushed #{tone.value}"
  if tone.value == "#"
    detector.stop!
  end
end

More Information

Credits

Links

Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests for it. This is important so I don't break it in a future version unintentionally.
  • Commit, do not mess with rakefile, version, or history.
    • If you want to have your own version, that is fine but bump version in a commit by itself so I can ignore when I pull
  • Send me a pull request. Bonus points for topic branches.

Copyright

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