Adressbuch mit Asterisk

deusr

Neuer User
Mitglied seit
7 Mai 2006
Beiträge
74
Punkte für Reaktionen
0
Punkte
6
Hallo Leute,

wenn mich auf meinem Telefon jemand aus dem internen Netzwerk anruft, dann bekomme ich die callerid="Nebenstelle 1" <2000> auf meinem Telefon zu sehen, auch ohne dass die Telefonnummer auf dem Telefon bekannt ist.

Kann ich irgendwie ein Adressbuch anlegen, damit auch "fremde", bekannte Namen zu Rufnummern auf dem Telefon angezeigt werden? Die Liste der bekannten Telefonnummern liegt auf einem LDAP Server.
 
Hi,

bei mir wird im Dialplan als erstes ain agi-skript aufgerufen, um die Nummer in einer sql db nachzuschlagen.

Code:
$AGI = new Asterisk::AGI;
my %agiEnv = $AGI->ReadParse();
my ($caller) = $agiEnv{callerid} =~ /<(\d+)>/;
if (!defined $caller) {
    ($caller) = $agiEnv{callerid} =~ /(\d+)/;
}
$x = findnum $caller if($caller ne "");
$AGI->set_callerid("\"$x\"<$caller>") if($caller ne "" && $x ne "");
In findnum findet die DB Verarbeitung statt. Ein Zeitlimit sorgt dafür, dass bei Problemen mit der DB nicht auch das Telefon blockiert wird
Code:
$SIG{ALRM} = sub { exit 0; };
eval {
        alarm(3);
   ..........
};
 
@deusr

Nach dem von birnerseff geschilderten Prinzip klappt das auch mit LDAP.
Dabei solltest Du beachten, dass Du die Einträge im LDAP in einem definierten Format hast, so dass unabhängig vom Anrufer (und der übermittelten CLIP) die Aufbereitung vor der LDAP-Anfrage dann einheitlich erfolgen kann, z.B. (Shell-Skript entsprechend der Variablen von birnerseff):

Code:
x=`ldapsearch -x -b "<searchbase>" \
                        "(homephone=$caller)" -LLL \
                        | grep cn: |  sed -e 's/^[^:]*: //g'`

Damit entspräche dann $x bei gefundenem Eintrag dem cn, respektive dem Namen zum Eintrag (in der privaten Telefonnummer). Der Filter lässt sich natürlich auf andere LDAP-Attribute beliebig anpassen.
 
Kostenlos!

Statistik des Forums

Themen
248,240
Beiträge
2,285,266
Mitglieder
377,507
Neuestes Mitglied
Horst@alphago