Skip to content

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.


Rétroliens

Pas de rétroliens

Commentaires

Afficher les commentaires en Vue non groupée | Vue groupée

Pas de commentaires

Ajouter un commentaire

Marquer un texte en gras: *mot*, souligner un texte: _mot_.
Les smilies standard comme :-) et ;-) sont convertis en images.
Les adresses Email ne sont pas affichées, et sont seulement utilisées pour la communication.

Pour éviter le spam par des robits automatisés (spambots), merci d'entrer les caractères que vous voyez dans l'image ci-dessous dans le champ de fomulaire prévu à cet effet. Assurez-vous que votre navigateur gère et accepte les cookies, sinon votre commentaire ne pourra pas être enregistré.
CAPTCHA

Form options
tweetbackcheck