Google Summer of Code 2015

The Adhearsion Foundation will apply to the Google Summer of Code programme in conjunction with rubygsoc. Please feel free to peruse the ideas below. Please also feel free to comment on these ideas or suggest others.

Project Ideas

Adhearsion has many large features that would assist people in developing their applications with greater ease or which would allow new uses of Adhearsion which are not currently possible.

Adhearsion Core Framework


Support for internationalisation built in to the framework as a first class feature, ensuring that applications are built internationalisation-ready by default with little effort. Should include both prompt files and TTS, and allow for a variety of methods for adding languages to an application, including a UI. See

Declarative IVR dialogs / dialog states

Many applications which implement IVR functionality have to create a state machine for dialogs by hand, and write tests for them. Baking in support for a declarative IVR DSL to standardise this and centralise the implementation and testing burden would simplify many of these applications and make them faster to write and cheaper to maintain, as well as more understandable. See

Async CallController API

First-class mixers

Adhearsion currently has no support for audio mixing. Adhearsion needs to be able to track state for mixers, including participant details, simple joining and management, seamlessly moving collections of calls into a mixer, etc. This would include adding support for mixers on Asterisk based on ConfBridge.

Core performance analysis & improvement

Adhearsion currently supports something in the region of 200 concurrent calls per instance on typical hardware, while the engines it drives tend to support many more. Currently, the performance characteristics of various Ruby implementations is not well known (other than that GIL-less JRuby and rubinius should perform better in theory), and the difference in performance of implementations across platforms is also not known well, other than that platforms with native Rayo support (Voxeo PRSIM and FreeSWITCH) perform better. As at present, the precise performance bottlenecks are not well understood, and there are limited strategies known to improve performance. This task would involve a thorough analysis of the situation, a set of recommendations for making progress, and implementation of some of those recommendations, in an attempt to improve concurrent call handling by an order of magnitude.

Asterisk 12/13 support

Asterisk 12/13 introduced changes to their APIs which introduced incompatability with Adhearsion. Changes are required to Punchblock to support the new version of AMI, or to migrate to ARI, the new REST & Websocket based API.

Asterisk Rayo support

Rayo is the protocol Adhearsion speaks natively and best. Its use of Asterisk is an approximation to the capabilities of the Rayo protocol. FreeSWITCH has a native implementation of the Rayo protocol in mod_rayo, but Asterisk does not. Bringing Rayo to Asterisk, either natively or via an adapter to ARI (for example, as an ejabberd plugin written in Elixir) would provide Adhearsion with support for Asterisk with the same robustness and flexibility it enjoys on FreeSWITCH.

Adhearsion Plugins

Call center plugin (agent queue) with live dashboard

  • Allow hotdesking (login via user ID + PIN)
  • Select from multiple distribution methods (round-robin, least-recently-used, ring-all)
  • Configure multiple queues
  • Handle agents logging in and out of individual queues
  • Visualization for agents logged-in, calls waiting in queue

Conference call plugin with live dashboard

Depends on first class mixer support

Short list of possible features:

  • Enable PIN-based conference logins
  • Creation of conference rooms via web UI
  • Invite/Kick/Mute/Unmute individual call legs via web UI
  • Create separate listen-only PINs and speaker PINs for the same room


  • Add support for missing TwiML syntax
  • Add unit tests
  • Create example apps

How do I apply as a student?

Send an email to with your ideas or proposal to start the conversation.