Aller au contenu

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


Messages recommandés

Posté(e)

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.

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.