- Mitglied seit
- 28 Mai 2004
- Beiträge
- 1,099
- Punkte für Reaktionen
- 0
- Punkte
- 0
Die hier vorgestellte Lösung einer Rückwärtssuche
funktioniert mit Asterisk 1.4.x. Verbesserungsvorschläge
und Bugfixes sind willkommen.
Vorteile: Sehr schnell und skalierbar ;-)
Nachteile: Benötigt MySQL und die Installation der asterisk-addons.
Andere Lösungen:
Thorsten Gehrig's:
http://www.ip-phone-forum.de/showthread.php?t=60980
pbx-stefan's:
http://www.ip-phone-forum.de/showthread.php?t=120765
Requirements:
1)
Installation der asterisk-addons
Downloaden von http://downloads.digium.com/pub/asterisk/
Anleitung:
http://www.voip-info.org/wiki-Asterisk+cdr+mysql
Die Doku im Paket auch lesen!!
Die Daten der cdr_mysql.conf werden dann noch
benötigt.
2) Asterisk 1.4
Asterisk 1.2 nicht getestet.
Erzeugen einer Tabelle. Üblicherweise heißt die
Database asteriskcdrdb.
Folgendes AGI nach /var/lib/asterisk/agi-bin kopieren
und Zugriffsrechte ändern:
chmod +x /var/lib/asterisk/agi-bin/revlookup.agi
Der Dialplan sieht dann so aus:
Nummern, die nicht im Telefonverzeichnis vorhanden sind,
werden trotzdem gespeichert. Man kann sie nachträglich
in der Datenbank ergänzen.
Viel Spaß
britzelfix
funktioniert mit Asterisk 1.4.x. Verbesserungsvorschläge
und Bugfixes sind willkommen.
Vorteile: Sehr schnell und skalierbar ;-)
Nachteile: Benötigt MySQL und die Installation der asterisk-addons.
Andere Lösungen:
Thorsten Gehrig's:
http://www.ip-phone-forum.de/showthread.php?t=60980
pbx-stefan's:
http://www.ip-phone-forum.de/showthread.php?t=120765
Requirements:
1)
Installation der asterisk-addons
Downloaden von http://downloads.digium.com/pub/asterisk/
Anleitung:
http://www.voip-info.org/wiki-Asterisk+cdr+mysql
Die Doku im Paket auch lesen!!
Die Daten der cdr_mysql.conf werden dann noch
benötigt.
2) Asterisk 1.4
Asterisk 1.2 nicht getestet.
Erzeugen einer Tabelle. Üblicherweise heißt die
Database asteriskcdrdb.
Code:
DROP TABLE IF EXISTS `contacts`;
CREATE TABLE `contacts` (
`callerid` varchar(64) NOT NULL default '',
`name` varchar(64) default NULL,
`address` varchar(255) default NULL,
`lastseen` datetime default NULL,
PRIMARY KEY (`callerid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Folgendes AGI nach /var/lib/asterisk/agi-bin kopieren
und Zugriffsrechte ändern:
chmod +x /var/lib/asterisk/agi-bin/revlookup.agi
Code:
#!/bin/sh
TMPFILE=/var/tmp/`basename $0`.$$.tmp
NOTIFY="root@localhost"
LINK="http://www3.dasoertliche.de/?form_name=search_inv&ph="
trap "rm -f $TMPFILE" 0 1 2 3 5 9 11 15
read _
agi_request=$(echo $1|sed -e 's,[^0-9],,g')
wget -q --timeout=3 -O $TMPFILE "${LINK}${agi_request}"
if [ -z "$TMPFILE" -o "$?" != "0" ]; then
RLSTATUS="ERROR"
echo "couldn't connect to ${LINK}"|\
mail -s "revlookup.agi errors" "$NOTIFY"
else
grep -q entry-opt $TMPFILE &&
RX="class=\"entry-opt" ||
RX="class=\"entry\""
NAME=$(grep "$RX" $TMPFILE|sed -e 's,.*class=\"entry.*\">,,;s,</a>.*$,,')
ADDRESS=$(grep "<br/>" $TMPFILE|sed -e 's,^[ ]*,,;s,<.*,,;s, , ,g'|head -1)
fi
echo 'SET VARIABLE NAME '"\"${NAME}\""
echo 'SET VARIABLE ADDRESS '"\"${ADDRESS}\""
echo 'SET VARIABLE RLSTATUS '"\"${RLSTATUS}\""
echo
Der Dialplan sieht dann so aus:
Code:
; ... dialplan
exten => s,n,Macro(revdblookup,${CALLERID(num)})
exten => s,n,Set(CALLERID(name)=${RLNAME})
[macro-revdblookup]
; arg1 = nummer
exten => s,1,Set(NAME="")
exten => s,n,MYSQL(Connect connid localhost dbuser dbpass database)
exten => s,n,GotoIf($[${connid} = ""]?end)
exten => s,n,MYSQL(Query resultid ${connid} SELECT name FROM contacts where callerid=\"${ARG1}\")
exten => s,n,MYSQL(Fetch fetchid ${resultid} NAME ADDRESS)
exten => s,n,GotoIf($["${fetchid}" = "0"]?revl)
exten => s,n,MYSQL(Clear ${resultid})
exten => s,n,MYSQL(Query resultid ${connid} UPDATE contacts SET lastseen=now() WHERE callerid=\"${ARG1}\")
exten => s,n,Goto(enddb)
exten => s,n(revl),AGI(revlookup.agi,${ARG1})
exten => s,n,GotoIf($["${RLSTATUS}" = "ERROR"]?enddb)
exten => s,n,MYSQL(Query resultid ${connid} INSERT INTO contacts VALUES (\"${ARG1}\"\,\"${NAME}\"\,\"${ADDRESS}\"\, now() ))
exten => s,n,MYSQL(Clear ${resultid})
exten => s,n(enddb),MYSQL(Disconnect ${connid})
exten => s,n(end),Set(GLOBAL(RLNAME)=${NAME})
Nummern, die nicht im Telefonverzeichnis vorhanden sind,
werden trotzdem gespeichert. Man kann sie nachträglich
in der Datenbank ergänzen.
Viel Spaß
britzelfix
Zuletzt bearbeitet: