Aller au contenu

Asterisk : Identifier l'appelant en se basant sur un annuaire CardDav


Terrano

Messages recommandés

Avoir ses contacts synchronisés de partout, c'est bien, pouvoir les identifier quand ils nous appellent, c'est mieux. :)

Pour ce tutorial, nous allons nous baser en prérequis sur le fait que vous avez déjà réalisé celui-ci :

http://www.nas-forum.com/forum/topic/48962-carddav-retrouver-ses-contacts-sur-ses-téléphones-ip/

 

Le but va être simple :

  • Lors d'un appel entrant, interroger la liste des contacts pour voir si le numéro de tel appelant y est enregistré. Si c'est le cas, le nom du contact remplacera le numéro du téléphone.

 

Installation d'un AGI :

sous SSH, réaliser les commandes suivantes :

cd /var/lib/asterisk/agi-bin
vi cidname-recog.agi

Tapez i pour passer en édition et coller le code suivant :

#!/usr/bin/env python

import sys
import csv

if len(sys.argv) <= 1:
    exit()

cid = sys.argv[1].replace("-","").replace(" ","").strip()

# accepting AGI input (but there's nothing to do with it)
while 1:
    line = sys.stdin.readline()
    if not line:
        break
    if line=="\n":
        break

fd = file("/volume1/web/carddav/book.csv")

print 'VERBOSE "STATUS: Looking up %s" 2' % cid
for line in csv.reader(fd):
    # note: comparing the number back-to-front, and only comparing 8 rightmost digits.
    #           This helps dealing with different prefix, e.g. +44, 00, 001 etc. and still getting
    #           an accurate match.
    if line[1].replace("-","").replace(" ","").strip()[::-1][:8] == cid[::-1][:8]:
        print 'VERBOSE "STATUS: Found %s : %s" 2' % (cid, line[0].strip())
        print 'SET VARIABLE CALLERID(name) "%s"' % line[0].strip()
        exit()
print 'VERBOSE "STATUS: %s Not Found" 2' % cid

Appuyez sur Echappement, puis :wq pour sauvegarder le fichier.

Rendre le fichier exécutable avec :

chmod 755 cidname-recog.agi

 

Modification des extensions :

Toujours sous SSH, tapez le code suivant :
vi /var/packages/Asterisk/target/etc/asterisk/extensions.conf

 

Tapez i pour passer en édition et Insérez l'extension suivante :

 

[cidname-lookup]
exten => s,1,NoOp(looking up callerid name)
exten => s,n,GotoIf($["foo${CALLERID(NAME)}" = "foo" ]?getname)
exten => s,n,GotoIf($["${CALLERID(NAME)}" = "${CALLERID(NUM)}" ]?getname)
exten => s,n,NoOp(caller id name exists as ${CALLERID(NAME)})
exten => s,n,Return
exten => s,n(getname),AGI(cidname-recog.agi,${CALLERID(NUM)})
exten => s,n,NoOp(Caller ID Name is now ${CALLERID(NAME)})
exten => s,n,Return

Insérez la ligne suivante dans les extensions où vous voulez vérifier le nom de l'appelant :

exten => numtel,n,Gosub(cidname-lookup,s,1)

Appuyez sur Echappement, puis :wq pour sauvegarder le fichier.

Redémarrez le serveur Asterisk pour prendre en compte les modifications :

/volume1/@appstore/Asterisk/sbin/asterisk -rvvvvvvvv
reload
core restart now

 

Conclusion :

Vous voilà avec un serveur Asterisk intelligent capable de reconnaitre vos contacts et d'afficher leur nom et le poste d'où ils appellent. :)

Un pas de plus vers l'oublie des numéros de téléphone.

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.