How it all began. The story from the OdooPBX founder.
The lost opportunity
I worked as a system & network administrator in a prepaid calling cards company. We used Cisco AS5350 to build customer IVR application and Sybase based billing system. One day I found Asterisk PBX application and added a note in my todo list to check this out.
But my boss didn't give me the time in the budget to look into it. I can only imagine what kind of IVR apps they could create if they had given a chance to open the Asterisk software. Anyway in 1 year the company reached the local market leadership and I started to get bored and left the company.
I was invited to join a VoIP carrier company. It was still an ugly H.323 world where a lot of non-interoperability and incompatibility existed.
Here I remembered about Asterisk. GnuGK + Asterisk chan_h323 & chan_oh323 gave me the possibility to adjust to different H.323 carriers. Asterisk did its job but this was something like a misuse of it because the most of its features were not required in that case.
Dive into Asterisk
I could not stop myself from learning the Asterisk PBX. I created a sandbox where I tested all its features, all modules. I was full of Asterisk and suffered from not being able to apply my knowledge.
I created a forum and a local group where I shared my knowledge by creating documentation and answering user questions. I also settled on the #asterisk IRC channel where I greedily caught the opportunity to help someone solve their problem. One such person once sent me $200 for helping him. I suddenly realised that I could make money from technical support.
Starting the Asterisk business
I started to get a lot of requests and got the first grow crisis. I came to my younger brother, gave him a fresh installed Linux and invited to make a SIP call from this server to my Asterisk server. My brother was so excited that started to work with me from the next day.
Anyway we had so many requests that we had to hire and train 2 more guys in order to provide Asterisk PBX related technical support. But there was one problem we could not handle. Sometimes clients needed additional development, but we were engineers, not developers, and could not help them.
Tiny automation & Django development
In order automate the support process (leads, helpdesk and accounting) we started to use TinyERP.
If only I knew the future… I would rock the mountain but conquered TinyERP development and used TinyERP as platform for our VoIP development. But… There was so little documentation that time and there was no development docs at all. We could not understand TinyERP internals and used it with some minor adjustments to our needs.
In order to satisfy customer requests for custom development we invited 2 Django developers to join our team. In 2006 Django ruled the world. And we created a lot of small VoIP apps using Django & Asterisk. Calls Recorder, IVR builder, Prepaid calling cards module for a call shop application, MeetMe conference manager, DIDs manager, Dial peer manager for calls routing. It was a time we were having a lot of joy by learning AMI, AGI, Asterisk configuration from database, commands and functions.
Digium distributor and PBX integrator
My activity to spread Asterisk over our local market opened a new business opportunity. We started to sell VoIP hardware. We established a local Digium distributor. We started to grow as hardware supplier and VoIP integrator. We offered our customers FreePBX and Switchvox.
I was never satisfied with both of these products and got a dream about creating the best open source management UI for the Asterisk.
The company was growing to reflect our customer’s needs. We started to expand our product line. We offered SIP phones from many different vendors, DECT systems, analog, digital and SMS gateways. I was really happy to play with all these toys. And of course it required a lot of technical support work that we also enjoyed much.
We implemented a lot of VoIP projects. But my biggest dream to create a better free PBX for the world was not getting my time and attention. And I started to forget about it.
The middle age crisis
I was 33 years old. I’ve got a wife, a child, a car, a house, a well going business, experience and knowledge. But also something was lost. My work did not give me fun and joy anymore. I lost interest to develop my company and finally retired. I lost my dream. For 3 years I was hanging around trying to find the sense of life by traveling, reading psychology and philosophy books, trying this and that to get out from a long depression. I even worked as a car mechanic for two months, testing my childhood dream. But it did not help also.
I suffered from idleness until I met a shaman at a transpersonal psychology conference who guided me into the depths of my soul. I touched the Great Mystery of Life and met the Great Spirit of the Universe. The “sense of life” question was dissolved in this experience. I remembered my dream to create a better free PBX for the world. Very soon after that I returned back to work with a deep understanding of my mission.
Odoo, I fall in love with you!
I remember the day when I had just returned to work at my company and was making out a plan of action. I was sitting looking at my computer screen, immersed in my thoughts, when suddenly I heard the sound of a new email and saw the title - Odoo: The New OpenERP. I jumped up in my chair with surprise, and eagerly went to read the news. Five minutes later, I was already gathering my colleagues for a meeting, at which I announced that we were starting to implement Odoo in our company. Odoo had finally solved the documentation problem, and we were beginning to comprehend its design.
We hired a Python developer and started the process of Odoo implementation in our company. I liked Odoo architecture very much and
started to have again a lot of joy every day. The more Odoo experience I gained, the more I became convinced that it was the perfect platform for building a PBX management system. I have found that its modular architecture makes it possible to build a large application without the risk of it falling apart from its size. I saw the benefits of integrating telephony so closely with business applications and the opportunities it presented. I found a base to build a brand new Asterisk based PBX.
Dialing from Odoo
One day a customer came who wanted to implement an automated dial system. We offered to replace his CRM system with Odoo, and he agreed. So our first Odoo-based application was a dialer.
Of course it worked, but the architecture left a lot to be desired, we were generating threads within Odoo workers, and the whole thing got pretty ugly underneath. But from UI and usability point of view everything looked nice and the client was very satisfied. But I understood that we have to get a proper architecture.
Opening barriers, going the other way
One day another customer came and asked for a solution to open the barrier gates from his mobile phone. It was like firing a cannon at a sparrow but we used Odoo to manage this. We were not enough and decided to extend the system for a bigger case and started to advertise our new solution to control barrier gates from phone.
As a result, a large parking operator was interested in our product and we created an entire IoT access management platform based on Odoo. It was very interesting to use Odoo in such an unusual way and it gave me a lot of new experience and knowledge on how to create fault tolerant Odoo based cluster. But finally I realised that this product takes me away from what matters most to me. In the autumn I visited OdooExperience 2016 and presented a talk "Using Odoo & Asterisk as a Call Center" that gained quite a lot of interest (the room was full of visitors). I was inspired to continue my PBX work.
PBX market saturation
While I was playing with Odoo I did not notice that the company stagnated. The PBX market was already full of Digium cards. Telecom providers widely adopted SIP protocol making Digium cards unnecessary. Digium IP phones were not as good as all expected. New strong competitors arrived to the market.
As a result the company sales got down drastically. We had to dismiss some staff. My partner did not share my enthusiasm for OdooPBX and refused to fund further development. Then I sold my part of the company and decided to set up a new one, which would focus on Odoo based development.
Odooist, a happy father and
a lonely developer
A new period in my life has started. My wife gave birth to some beautiful twins and I was no longer able to start a new company. During the first year, the only thing I wanted to do was get some sleep. I certainly assumed that I wouldn't be able to work as much as I had before, but I didn't think it would be like this. I realised that my grandiose plans to create a new super product had to be put on hold for a few years, as I have to focus on raising small children.
So, I came up with another plan. Instead of setting up a large product development team, I decided to work alone and create a few small stand-alone modules that would later become the building blocks for a larger system. I decided that the most in-demand and loose coupled would be the call statistics module. This is how Asterisk Calls module was born. I decided to make it very versatile, able to work with any Asterisk distribution, through the cdr_manager module and an AMI connection. In fact, it was an add-on for the Newchannel, Newstate, Hangup and CDR AMI events. In addition, the module allowed to originate a call from a partner form, opened partner form on a new callm and linked together calls, partners and Odoo users, as well as saved recorded conversations to Odoo. So it was such a very sophisticated Odoo Asterisk connector. Asterisk Calls was released to the Odoo app marker under OPL-1 licence.
Asterisk Base, too big piece to eat
Asterisk Calls sales started to grow. I hired a junior Odoo developer with good Linux knowledge and trained him Asterisk. Ion (developer's name) was helping the customers to install and configure the Asterisk Calls module, and also joined the development party. We started to implement in beautiful Odoo forms different PBX functionality. We created Asterisk Base SIP module that fully automated SIP users and peers management, Asterisk Base Queues for static and dynamic queues configuration, Asterisk Base Multi Company for a centrex operator, Asterisk Base menu for IVR building, dialplan and routing management, and more. We even built the SIP phone auto provision module for a dozen of models. It was a time of wild development because I got so passionate about this work so that just could not stop the development of more and more features. Payback for this was not long in coming.
Asterisk Calls sales on the Odoo app market suddenly dropped down. The lack of documentation on Asterisk Base caused us instead of active development to help our customers to understand how to use the product. But the most disappointing was a DNA problem in Asterisk Calls. The fact is that Asterisk Calls was a wrapper around Asterisk CDR, and for each CDR a new single record was created in Odoo Call History. This resulted in dozens of missed call records being created on agent channels for each queued incoming call. If you received a missed call notification, you could not know for sure whether your employee answered the call or not. Business users who did not know about this Asterisk CDR "feature" were frustrated and did not like my explanations. To solve this problem, Asterisk CDR had to be abandoned that meant a complete rewrite of Asterisk Calls core. Finally, Ion received an interesting job offer and decided to leave the project.
The king is dead, long live the king!
It was a difficult moment that required a difficult decision to be made. But I didn't see any other options. I removed Asterisk Base modules from the marketplace. This allowed me to focus on completing active recent sales projects. At that moment, when I was starting to rewrite Asterisk Calls from scratch, the young Odoo developer Andro joined the project and became my right hand. Together with Andro we created a new application from scratch - Asterisk Plus, as well as Asterisk Plus CRM / Project / Helpdesk / Sale modules.
But most importantly, Asterisk Plus used its own CDR model and no longer used the AMI CDR event. Now one call to a queue or ring group generated only one entry in the call history. Now we could track missed calls at the company level. I was happy. Almost.
There was something else that was bothering me. it was about selling modules on the Odoo marketplace. On the one hand, this limited the potential distribution of the application. On the other hand, we constantly found ourselves in a strange situation. We sold the module for a few hundred euros, and then spent a lot of time helping to get it up and running. The fact is that Asterisk and VoIP in general are a rather complicated topic. Customers bought the module and expected that everything would work for them with half a kick. But this was not the case, and they asked for help. Despite the detailed installation instructions, people still got confused in the initial configuration. We spent a lot of time doing their job, often without being able to charge for it, because the clients sincerely believed that they had already paid for everything.
And most importantly, I originally planned to use the open source business model, but at first I wanted to sell modules on the market to provide basic funding.
So, in addition to creating a new application from scratch, I made another strategic decision - to change the license from OPL-1 to LGPL-3, and build a different business model.
Long way home
In Jan 2022 I suggested trying Asterisk Plus to some old clients that we became friends with. They helped to find the main bugs and fix them. At the same time, we decided to make Asterisk Plus as complete as possible, and not split it into modules, as it was before. Thus, the entire functionality of
Asterisk Common, Asterisk Calls, and even a few basic Asterisk Base features such as the Asterisk WEB console, a .conf file editor with syntax highlighting, a Security Reactor that blocked SIP password guessing attempts were included in a single Asterisk Plus module. Moreover, we embedded the WebPhone application (WebRTC softphone) directly into the Asterisk Plus module, and made automatic provisioning of SIP accounts for all Odoo users. Because of the fact that both the SIP client and the SIP server were configured in one place, it became possible to connect them directly, automatically creating a SIP login & password on Asterisk, and registering them in the WebRTC softphone, thus eliminating the need for the administrator to manage SIP users - everything works right away from the box!
Technical improvements are great! But something else has fundamentally changed. We decided to create Asterisk Plus under the LGPL-3 license! I realised that the idea of using Odoo to create a better PBX for the world is much bigger than I am! It cannot be my property, and I shall not create license restrictions and obstacles to spreading this idea around the world. To create a truly good and great product, a large team of highly qualified specialists is needed, as long as a community and an ecosystem . OdooPBX has made a long way in the evolution of its architecture, and now I am happy to bring it to the world. There is still a lot to be done! It's only the beginning! First of all most of the existing code should be ported to the Asterisk Plus architecture: functionality for managing SIP peers, dialplans, building an IVR menus, routing, queues, conferences, and so on and so forth. And the most important thing is that now it is a completely open product, and I really believe and hope that soon the OdooPBX team will become larger, which will allow to create a truly beautiful open source PBX for the world. And this is a really good moment to join the OdooPBX party ;-)
Sincerely yours, Max Litnitskiy, the OdooPBX founder.