Telephony and IT integration/coupling is surely something that can bring power or add values in some businesses (Customers Services, Hotlines, Contact Centers, Ordering lines, CRMs, Banks, Political Campaigns, Marketing, Leads Generations/Validations…)
Asterisk being the most open source IPBX used so far, is part of many architectures: small or big, single or clustered…
Here is how Asterisk-JMSConnector fits inside this picture….
I have deployed for our needs and for some of AFRICASYS (www.africasys.com) customers: Asterisks Clusters coupled with business apps (mHealth, Contact Center, Time Management…) on premise (VMware private Datacenter or Bare-metal hosts) or in the Cloud (AWS, OVH…):
The target is always the same: have a scalable distributed architecture and be the most fault tolerant as possible.
We achieve this by building many Service Components such as a Dynamic IVR Engine/Contact Center App exposing Stateless HTTP APIs and having communication connectors also Stateless to able to talk with an HTTP Clustered (or Not) Backend Applications. Finally we added a persistent JSON exchange Async communication mod so the back-end applications can take data later over in non real-time communication use cases.
The idea is that : Real time call flow driving cannot be based on Async protocol that is why we use (Sync) AGI and HTTP for that.
Some others uses cases such as event broadcasting , notification, monitoring : incoming call, outgoing call, customers entering in a call center queue, agent registration/leave…, servers down, telephony lines down…) can be based on Async protocols and JMS can be leverage to achieve that.
Deployment and Use cases
The Asterisk-JMSConnector can be consider as part of the big architecture picture and can be deployed on each Asterisk Servers. It will then takes events and broadcast them to a JMS Topic: many others apps can be notified and processed the events to do some useful stuffs (for example popping up an incoming call alert to the calee with the caller history data…)
On the other hand the Asterisk-JMSConnector app is also listening on a dedicated JMS Queue to take orders from the back-end applications (such as trigger an outgoing call…). The usage of a queue guarantee ONLY 1 Asterisk-JMSConnector application will take the action and transmit it by AMI to its Asterisk server so we don’t end-up with the same outgoing call order fires many times…
Freely available on Git-hub to use or/and contribute.
As JMS Broker you can use one of this list https://en.wikipedia.org/wiki/Java_Message_Service#Provider_implementations We use ActiveMQ http://activemq.apache.org/
The Binary: A standalone Executable Jar
Asterisk-JMSConnector is distributed as a single standalone (powered by spring-boot) executable jar which makes it very convenient for a Docker or Micro-service deployment style.
Just use it:
java -jar asterisk-jmsconnector.jar
You can customize you RunTime variables by passing them in the Spring-Boot way:
java -jar asterisk-jmsconnector.jar --server.port=8080 --ami.username=xxx --ami.password=xxx --broker.url=failover:tcp://host:port --broker.login=xxx --broker.pwd=xxx