Do you have a question that you think would be appropriate here? Feel free to ask your question and make a suggestion to include it here on the mailing list
This is one of the biggest misconceptions about Adhearsion. It should be strongly stressed that Adhearsion is a Ruby framework, not a Ruby on Rails plugin or the like. Ruby on Rails, a web development framework, is probably the most popular Ruby software, but it has little to do with the Ruby language per se besides simply using it. The Ruby language is a general purpose programming language with which both Ruby on Rails and Adhearsion are written.
Adhearsion does help facilitate integration with Rails applications and it shares a few libraries with Rails, such as ActiveSupport. In Rails-integration mode, Adhearsion still exists as a completely separate process.
This is usually so simple that it can catch people by surprise. With the proliferation of VoIP, many VoIP providers have sprung up which offer very inexpensive so-called "termination" services. Bandwidth.com and Level3 are popular examples of these. The term "termination" simply means that they operate the technologies that turn a VoIP call made up of internet packets into a phone call on the entirely separate public telephone network.
When funneling all calls through a service provider like this, it's often called "trunking" because, like the trunk of a tree, the many branches converge into one big point all the way to the ground where the roots then branch from the tree.
The following diagram should help illustrate how it works.
The VoIP protocol most often used for the VoIP calling is called Session Initiation Protocol or SIP. If you're looking for services which offer this, try googling for "sip trunk" or "sip termination service" or you may find a list here.
Adhearsion does not process the call's audio. Adhearsion is a control layer on top of a VoIP engine such as Asterisk or Voxeo PRISM. The engine handles the call, and Adhearsion provides it with instructions about how to handle the call in real-time. This is called third-party call controll (3PCC) , and this architecture is the reason Adhearsion can handle so many calls - it's delegating the heavy-lifting to a lower-level service implemented in a more performant language.
Asterisk is an open-source telephony-engine which Adhearsion can control. Asterisk is written in C for performance and talks to Adhearsion via a socket-based protocol (AMI).
Asterisk is often fairly difficult to use for anything non-trivial and has not appropriately addressed the high barrier to entry for potential voice application developers, many coming from a web-development background. Adhearsion not only abstracts Asterisk but provides things it has never offered and likely never will offer. There is virtually nothing you can do directly in Asterisk that you can't also do from Adhearsion.
It's very possible. The most common points of failure or peculiarities are at the SIP trunk level, the VoIP engine level, at the Adhearsion framework level and in the application (your code). You can try asking the community or the professionals for help. If it turns out to be an Adhearsion framework bug, please file a bug report More details on bug reporting may be found here.
Adhearsion uses Github to manage all contributions. See the Contributing page for more information.
For several reasons:
If you've never used Ruby before, we recommend playing with the online interactive Ruby tutorial to get a feel for the language. Even if you've never programmed before, give it a try! We think you'll see what we mean by simple and clean.
"Object-oriented programming (OOP) is a programming paradigm that uses 'objects' and their interactions to design applications and computer programs. Programming techniques may include features such as encapsulation, modularity, polymorphism, and inheritance. It was not commonly used in mainstream software application development until the early 1990s. Many modern programming languages now support OOP."
- source and more details here
The JRuby interpreter is a full re-implementation of the Ruby programming langauge using only Java. Adhearsion strives to maintain 100% compatibility with the mainline Ruby interpreter (called Matz's Ruby Interpreter/MRI or CRuby) and JRuby.
We consider Adhearsion's Call Controller classes, its Call objects and your database models or other data source to fit the description of MVC, yes. Give it a try!
Adhearsion does support the ability to call third party ASR engines. At the present time, this support is manual, but will soon be baked right in to the CallController API.
Adhearsion does support the ability to render TTS using an engine compatible with your VoIP engine, such as Festival (open source), Cepstral/Swift or some MRCP-compatible alternative.
No. The bottom line is Adhearsion will probably not be your bottleneck. Often, especially with Asterisk, it will be the telephony engine underneath Adhearsion that will be limiting your scaling. The servicing of a call with Adhearsion is almost always computationally simpler than serving even one page load with Ruby on Rails, with the main distinction that an Adhearsion call maintains a Thread and is a back-and-forth dialog, not one big textual response.
That said, if you do experience Adhearsion to be a bottleneck, you can always scale it horizontally, balancing calls between Adhearsion instances. Because Adhearsion supports message queues and database integration, dealing with shared state between Adhearsion instances is extremely easy.
Adhearsion is in use at many companies around the world. The core team have seen it scale to hundreds of simultaneous calls on a single instance. While no code is perfect, Adhearsion benefits from several years of real-world production experience.
Not officially, though any Windows incompatibility is considered a bug and will therefore be fixed with due urgency. There are various technological inconsistencies when trying to make Windows behave normally vis-à-vis Linux / BSD / Unix. Adhearsion's core developers are all Mac OS X and Linux users, therefore Windows bugs are not found immediately.
In the meantime it is possible to use the freely available VMWare Server to install a Linux instance on Windows and use this to run Adhearsion.
Not at all! Adhearsion communicates with Asterisk via a socket and the standard Asterisk APIs. You can use Adhearsion on a vanilla Asterisk v1.8+ system.
Adhearsion does not use vanilla AGI, but instead makes use of AsyncAGI, which is essentially AGI tunnelled over an AMI connection.
Yes! You can have a special SIP account route exclusively to Adhearsion very easily, leaving the rest of the logic perfectly intact. You can even have a single extension route to Adhearsion if you'd like. You Asterisk installation's extensions.conf only has to invoke the AGI application somewhere in it. We leave it up to you to choose where.
Yes, Adhearsion is threadsafe.
There are several key differences: