Aller au contenu

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

Featured Replies

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…

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.