Adhearsion is...

Adhearsion is a new way to write voice-enabled applications. It's not just an API or library — it's a fully-featured framework, the first of its kind, designed for maximal code reuse and intuitiveness. The name "Adhearsion" is a combination of "adhesion" and "hear" because Adhearsion shines best when integrating technologies with voice.

It's modern

Adhearsion uses the high-level Ruby programming language and has a comprehensive regression test suite. In the age of the social web, what other technologies are more social than voice? Adhearsion aims to help merge this so-called "Web 2.0" world with the previously untamable telephony world.

It's intuitive

Voice applications don't have to be hard. Adhearsion abstracts much of the complicated telephony domain, allowing you to focus on what's really important: the business domain. Take a look at the Examples to see what we mean.

It's open-source

We take open-source software seriously. The telecom industry, above all, needs fresh innovative talent and Adhearsion's here to foster it. This is one of the final major frontiers for open-source to truly make a transformative impact and now is an exciting time to be a part of it.

We think it's fun

Many hackers' faces light up the first time they run code which makes the cell phone in their pocket ring. Whether you're a veteran telephony engineer or a web developer wanting a new experiment to do over the weekend, we think Adhearsion is enough of a departure from classical telephony to tickle your fancy.

Roadmap

0.8.3

Gem-based components

This feature will extend the existing Adhearsion plugin system by allowing components to be installed as system-wide gems. The big advantage of this approach is components, especially those that come with Adhearsion by default, can be upgraded without a tedious manual installation process.

0.8.4

Call Routing DSL

The Call Routing DSL is a way of de-coupling call routing logic from the dialplan and other parts of the framework. The dial() method will simply take a number and the logic for passing that into a trunk will be handled by these user-defined call routes.

0.8.5

Expanded configuration file generators

This is actually a feature already mostly implemented, but before it's thoroughly integrated into the rest of Adhearsion, things such as the call-routing DSL, new components system, new AMI library and new events system must be implemented properly. As a note, the configuration file generators of Adhearsion will work especially well when dealing with Asterisk clusters, helping keep config file in sync across nodes. The generators will also probably replace Rubigen, the current library used by Adhearsion to aid generating new projects with the "ahn" command.

0.8.6

Migrate Adhearsion tests back to RSpec

Presently Adhearsion mostly uses a Ruby testing framework called Test-Spec, though it has a much smaller community and not nearly the number of features as a competing framework called RSpec. Adhearsion was once on RSpec quite a while ago and certain portions of the Adhearsion codebase are tested with RSpec but, in this release, it'll be back on it entirely. It's a good rule of thumb for serious programming efforts to periodically refactor their unit tests and this will be good timing for the due maintenance.

Application testing framework

Testing individual telephony applications is extremely difficult. The innovations being rolled into Adhearsion before this release will dramatically help the testability of telephony applications. After this release, all applications will be relatively testable to ensure QA programatically. Some of this functionality will be built upon SIPr.

0.9.0

FreeSWITCH compatibility

FreeSWITCH is another open-source telephony engine which has been catching on over the past couple years and offers some interesting benefits to application frameworks like Adhearsion that Asterisk presently cannot offer. Adhearsion's dialplan and other framework features will be available to FreeSWITCH-powered Adhearsion applications.

YATE compatibility

Yate is a open-source telephony engine which promotes the philosophy that, with a good API exposed, it should be possbile for virtually any kind of application to be built atop it. YATE doesn't have things such as voicemail, queues/agents, a featureful conferencing abstraction or other common FS or Asterisk things, leaving that to Adhearsion to implement. This is actually ideal, though it's not certain how possible or easy it will be to implement these atop YATE.

Features not assigned to a milestone yet

These are ideas that aren't fully thought out yet.

Alarm system

This will allow Adhearsion to notify the project maintainer of certain failures within an Adhearsion process and allow the maintainer to recover from them.

EventMachine

EventMachine is a third-party library that essentially allows applications that make heavy use of sockets and events perform much better by utilizing the kernel timer and evented networking. Unfortunately if we migrated to EventMachine today we would break JRuby compatibility. There is a separate project within the EventMachine world to rewrite EventMachine's native extensions in Java for JRuby compatibility but, unfortunately, the project is still far behind.

Ruby 1.9.1 Compatibility

Unfortunately many third party gems don't work with Ruby 1.9.1 (or even 1.9) yet.

Older milestones

0.8.0

events.rb / Theatre

New Adhearsion applications now have an events.rb file in which various event callbacks can be handled. This is primarily useful for specifying custom application-level logic for components or framework features.

New Components system

The existing object-oriented component system will be replaced with one which is method+module based.

New AMI library

The existing AMI library will be replaced with a refactored, cleaner version which is more tightly integrated with the new events.rb system.

0.8.1

Sandbox Component

New Adhearsion applications now have a Sandbox component to be used with the Getting Started guide. The component allows incoming Asterisk AGI calls to be received by Adhearsion running behind a firewall, by connecting out to a reverse AGI proxy on the Adhearsion Asterisk server.

0.8.2

Only minor bug fixes in this release.