PyFreeBilling : présentation du softswitch basé sur Freeswitch dédié au wholesale
PyFreeBilling est une solution Open Source de billing et de softswitch dédiée à une activité d'opérateur wholesale VoIP. Cette solution est basée sur Freeswitch, postgresql et python. Ces fonctionnalités sont complètes. PyFreeBilling a été développé avec un objectif de montée en charge (il est actuellement utilisé notament pour terminer les appels des call centers).
Introduction
Il est extrêmement difficile de trouver des solutions Open Source permettant de monter une infrastructure permettant de vendre des communications VoIP, de gérer la facturation (billing) avec une contrainte de montée en charge importante. beaucoup de petits opérateurs utilisent a2billing, mais malgré la qualité du projet, son utilisation est différente : il a été développé pour gérer les cartes d'appels (calling cards).
Explication des choix techniques
Je souhaitais utiliser Freeswitch comme switch VoIP pour ces nombreuses qualités :
- performance et stabilité assurant une bonne montée en charge
- performance de la stack SIP (stack Sofia développée par Nokia)
- utilisation du langage LUA pour les scripts
- applications performantes
- fonctions de débuggage évoluées
Ensuite, naturellement la base de données choisie a été PostgreSQL. Je ne vais pas faire un article complet sur ce choix, mais il est important. PostgreSQL est un moteur de base de données performant et fiable, deux qualités indispensables pour cette application. Enfin, la gestion doit s'effectuer via une interface web, et pour cela le langage python a été choisi : performance, lisibilité ... et puis j'aime bien ce langage (c'est important, non ?). Bien entendu, le choix d'un framework comme Django c'est imposé, car il apporte un ensemble de fonctionnalités indispensables (cadre de développement, ORM, sécurité, applications ...).
Fonctionnalités
PyFreeBilling intégre un ensemble de fonctionnalités nécessaires à une activité de vente de minutes VoIP :
- Customer add/modify/delete
- IP termination
- SIP authentication
- Prepaid and/or postpaid
- Realtime billing
- Block calls on negative balance (prepaid) or balance under credit limit (postpaid)
- Block / allow negative margin calls
- Email alerts
- Daily balance email to customer
- Limit the maximum number of calls per customer and/or per gateway
- Multiple contexts
- Tons of media handling options
- Powerfull ratecard engine
- Provider add/modify/delete
- Powerful LCR engine
- Routing based on area code
- Routing decision based on quality, reliability, cost or load balancing (equal)
- Limit max channels by each provider gateway
- Extensive call and financial reporting screens (TBD)
- CDR export to CSV
- Design for scalability
Interface web
Toute la gestion s'effectue via l'interface web. D'autres copies d'écran sont disponibles sur le repo, n'hésitez pas à y aller. Elles ont été créées par ordre de programmation :
- ajoût d'un client
- ajoût d'un compte SIP client
- création d'une grille tarifaire et d'un tarif
- affectation d'une grille tarifaire à un compte client
- ajoût d'argent à la balance d'un client
- création d'une grille tarifaire fournisseur et d'un tarif
- création d'une LCR (définition du routage d'un appel - très important, c'est le lien entre une grille de vente client et une grille d'achat fournisseur)
- création d'une gateway fournisseur
Documentation
La documentation est disponible sur readthedocs. La doc utilisateur sera enrichie au fil de l'eau, il me reste encore un peu de travail de rédaction.
Où est le code
Le code est hébergé sur Bitbucket.
Support
Vous pouvez ouvrir vos demandes de support (bug, amélioration, remarque constructive ...) sur bitbucket, qui fournit un bel outil de gestion des "issues".
Et maintenant ?
Je vais bientôt sortir la v1.2. Pour cela, je finis les tests sur un script de déploiement afin de simplifier cette tâche ainsi qu'une intégration dans l'interface web de quelques commandes cli de Freeswitch pour les allegriques de la ligne de commande. J'ai plein d'idées pour la V2, comme l'intégration de la gestion multi devises, d'émission des factures, de gestion des abonnements et de gestion des appels entrants (DID ou SDA). N'hésitez pas à commenter, émettre des suggestions, j'attache beaucoup d'importante aux retours.