Asterisk et limitation de temps d'appel : script Python AMI
J'utilise un forfait SIP illimité, mais comme toute chose illimité en France il y a des limites et l'une d'elle est le temps de communication lors d'un appel qui ne doit pas dépasser 1H (après ce temps, l'appel est considéré hors-forfait).
Utilisant un serveur Asterisk, j'ai donc écrit un petit démon utilisant l'AMI (Asterisk Management Interface) en Python pour limiter le temps de ces appels.
L'AMI permet de regarder les évenements au sein d'asterisk et d'exécuter des commandes. Un module AMI pour python existe, pour l'installer sur une debian, un simple apt-get install python-asterisk suffit.
Le script
Le principe est de monitorer les appels : dès qu'un appel est en cours, on modifie son temps maximal.
1 #!/usr/bin/env python 2 3 import Asterisk.Manager 4 from Asterisk.Manager import CoreManager 5 import Asterisk.Util 6 7 class dcManager(CoreManager): 8 def on_Event(self, event): 9 if event['Event'] == "Link": 10 event['Channel1'].AbsoluteTimeout(55*60) 11 12 pbx = dcManager(('127.0.0.1', 5038),'admin','admin-password') 13 pbx.serve_forever()
Petites explications :
- 3 - 5 : importation du module Asterisk
- 7 : on va modifier la classe CoreManager
- 8 : on surcharge la fonctionne on_Event qui est appelée à chaque évenement généré par Asterisk
- 9 : si c'est un évenement de type 'Link' (cela veut dire que l'appel est en cours, les 2 canaux sont connectés)
- 10 : on positionne le temps max d'appel sur le canal appelant (55 minutes dans l'exemple)
- 12 : on va utiliser notre objet pour se connecter à Asterisk, il faut bien sur modifier admin/admin-password en fonction de la configuration d'Asterisk)
- 13 : on se met en mode écoute/démon
Ne reste plus qu'à lancer le script en tâche de fond pour avoir l'esprit tranquille pendant les appels.
Commentaires
Afficher les commentaires en Vue non groupée | Vue groupée