PDA

Voir la version complète : 2 scripts offerts



sixela
19/11/2012, 00h42
Chers amis d'Asterisk-France,

Je prends le temps de publier 2 de mes scripts, dans l'espoir qu'ils puissent être utiles à d'autres personnes :

1) le premier script permet de faire de la géolocalisation d'appel. Sur votre smartphone préféré, quand le numéro de téléphone de votre interlocuteur n'est pas dans votre annuaire, le téléphone affiche parfois le pays et/ou la ville de provenance de l'appel. Pour cela, il s'appuie sur une "base de donnée" locale qui contient les préfixes téléphoniques de tous les pays, et les préfixes d'un grand nombre de villes. Cette base de donnée est contenue dans une librairie pour Android, qui a été portée en Python dans la lib "phonenumbers". Mon script apporte la même fonctionnalité sur votre serveur Asterisk. Ce script fait partie de mon connecteur Asterisk-OpenERP disponible sur Launchpad https://code.launchpad.net/openerp-asterisk-connector, mais j'ai fait en sorte qu'il soit utilisable sans OpenERP. C'est un script AGI qu'il faut donc placer dans votre Dialplan dans la fonction de réception d'appel. Voilà quelques instructions pour l'installer :

- sur votre serveur Asterisk, installez la lib "phonenumbers" :


% sudo apt-get install python-pip
% sudo pip install phonenumbers


- téléchargez les scripts (il y a en fait 2 scripts) sur Launchpad : http://bazaar.launchpad.net/~openerp-asterisk-team/openerp-asterisk-connector/6.1/files/head:/asterisk_click2dial/scripts/

Les deux scripts sont get_cid_name.py et get_cid_name_timeout.sh ; mettez-les dans votre répertoire /usr/local/bin sur Asterisk. Le script "get_cid_name_timeout.sh" appelle le script "get_cid_name.py" avec les bons arguments et avec un timeout (pour éviter que, si le script part en sucette, l'appel entrant reste bloqué). Editez le fichier get_cid_name_timeout.sh et modifiez la dernière ligne en mettant :



timeout 2s get_cid_name.py --geoloc --geoloc-country "FR" --geoloc-lang "fr"


Vous pouvez obtenir de l'aide sur les options en exécutant "get_cid_name.py -h"

- testez l'appel du script :



% echo "agi_callerid:0472071242"|./get_cid_name_timeout.sh


La sortie doit afficher :


full AGI environnement :
agi_callerid = 0472071242
stdout encoding = UTF-8
VERBOSE "CallerID number = 0472071242"
VERBOSE "Trying to geolocate with country FR and lang fr"
VERBOSE "CallerID Name = Lyon"
SET CALLERID "Lyon"<0472071242>


On voit qu'il a mis le nom de la ville "Lyon" en CallerID name. En fait, avec les options de ligne de commande que j'ai donné ci-dessus, si l'appel est géolocalisé en France alors seul le nom de la ville s'affiche ; si l'appel est géolocalisé hors de France, alors le nom du pays s'affiche ainsi que la ville éventuelle.

- Si le test précédent a bien fonctionné, éditez votre dialplan pour faire appel à ce script AGI ; par exemple :



[from-extern]
exten => _141981242,1,AGI(/usr/local/bin/get_cid_name_timeout.sh)
exten => _141981242,n,Dial(SIP/10, 30)
exten => _141981242,n,Answer()
exten => _141981242,n,Voicemail(10@default,u)
exten => _141981242,n,Hangup()


Si vous utilisez Xivo, faites une sous-routine de pré-traitement, et ça marchera très bien.

Je tiens à remercier Ludovic Gasc qui m'a donné le tuyau de cette lib "phonenumbers" et m'a donné l'idée de développer cette fonctionnalité.



2) Un script de monitoring du trunk SIP pour Asterisk 1.6 et supérieurs. Ce script très simple envoie un mail quand un des trunks SIP n'est pas "Registered". Il utilise 2 librairies :

- la lib python-mailer, qui est certainement packagées dans votre distrib favorite :



% sudo apt-get install python-mailer


- la lib py-asterisk (version récente nécessaire) :



% pip install py-Asterisk




Ensuite, téléchargez le script ici : http://people.via.ecp.fr/~alexis/asterisk/scripts/check_sip_trunks.py

Vous pouvez voir les options du script en exécutant :



% ./check_sip_trunks.py -h


Ce script se connecte à l'Asterisk Manager Interface (AMI) ; il faut un utilisateur AMI avec au moins les droits de "reporting" en write ; par exemple, dans votre /etc/asterisk/manager.conf :



[trunkmonit]
secret = secret1242
deny = 0.0.0.0/0.0.0.0
permit = 127.0.0.1/255.255.255.0
write = reporting


Faites exécuter le script régulièrement par la crontab avec les options suivantes :



check_sip_trunks.py -s -u trunkmonit -w secret1242 -f Maison alexis@yahoo.com


J'ai développé ce 2ème script car, sur un serveur Xivo, on est prévenu par mail dès qu'il y a un problème sur le serveur... mais si le trunk SIP n'est plus enregistré, on n'est pas prévenu ! :-)

J'espère que ces scripts pourront vous être utiles. Je publie ces deux scripts sous licence libre.

Happy hacking,

Alexis de Lattre

sixela
22/11/2012, 10h31
Alors, est-ce que qqun a essayé un de mes scripts ?

Non, personne ? Vous en avez déjà d'autres 100 fois mieux que les miens, c ça ? :-) Alors n'hésitez pas à les partager aussi !

_AK_
22/11/2012, 11h03
Bonjour Alexis,

Merci pour le partage, je n'ai pas encore testé tes scripts mais c'est super sympa de partager ;)

Effectivement, si d'autres personnes ont des scripts ils peuvent les partager aussi

fybiyoh
02/04/2013, 09h41
Bonjour Sixela,

je suis Fabrice et vous écris du Congo depuis Pointe-Noire.

je voudrais créer un script pour interfacer asterisk avec une application web. je souhaiterai que l’authentication se fasse a partir du callerid c’est à dire quand j’appelle ma centrale téléphonique, asterisk reconnais mon numéro puis lance une page web en m’authentifiant avec mon username ainsi que mon mot de passe. alors humblement, je fais appel à tes connaissances pour m’aider si cela est possible.

Merci d’avance.

castelsarrasin
05/04/2013, 16h16
Bonjour !
J'ai testé le script et je ne passe pas l'étape de vérification.

echo "agi_callerid:0472071242"|./get_cid_name_timeout.sh
./get_cid_name_timeout.sh: ligne 1: Erreur de syntaxe près du symbole inattendu « newline »
./get_cid_name_timeout.sh: ligne 1: `<?xml version="1.0"?>'

EJFJCorp
16/04/2013, 14h37
Bonjour !
J'ai testé le script et je ne passe pas l'étape de vérification.

echo "agi_callerid:0472071242"|./get_cid_name_timeout.sh
./get_cid_name_timeout.sh: ligne 1: Erreur de syntaxe près du symbole inattendu « newline »
./get_cid_name_timeout.sh: ligne 1: `<?xml version="1.0"?>'

"newline" signifie que l'indicateur de nouvelle ligne dans le fichier de script n'est pas correct, il faut essayer de l'encoder en UTF-8 dans un des deux formats (dont je ne sais plus le nom, avec ou sans quelque-chose je crois), un utilise un \n en fin de ligne, l'autre utilise un \n\l ou quelque-chose du genre... C'est juste qu'il voit un texte mal encodé et cela ne correspond pas à un script... J'ai eu ce problème en PHP, maintenant je comprends mieux, mais c'est pour le moins illogique... En espérant que ça fonctionne...

castelsarrasin
16/04/2013, 15h43
Merci pour l'information, cependant je ne suis pas doué dans l'encodage de script.
Je conçois le problème, seulement mes compétences en scripts sont très limités.
J'ai regardé (rapidement sur google) pour convertir le script en utf8 et je n'ai pas trouvé mon bonheur.

Si possible de m'orienter vers un convertisseur de script gratuit ou peut-être une ligne de commande magique avec le paquet qui va bien ?

Merci d'avoir répondu !

sixela
17/04/2013, 09h34
Effectivement, l'encodage des caractères n'était pas indiqué dans l'en-tête de mon script shell (mais il était bien indiqué dans l'en-tête de mon script Python). Je viens de l'ajouter. Pourriez-vous re-télécharger le script shell ?

castelsarrasin
17/04/2013, 11h11
Merci beaucoup !
Cela fonctionne correctement.

Cela n'a pas marché du premier coup, quand je fais un wget, on dirait qu'il télécharge la vieille version du fichier.
J'ai du ouvrir le sh par le lien et faire du copier coller pour qu'il soit identique à l'actuel.

Bonne journée !