Rückwärtssuche bei dasoertliche.de neues Script

Hmm, das Skript scheint zu laufen, aber ich bekomm im Display des Telefons jetzt immer angezeigt: "geheim", obwohl sowohl die Rufnummer übermittelt wird, als auch die Rückwärtssuche für diesen Anschluss aktiviert ist. Bei www.dasoertliche.de funktioniert die Rückwärtssuche dafür zumindest...
In der Tabelle pbook findet sich auch kein Eintrag über den Anruf.

hier der Auszug aus meiner extensions.conf:

exten => 123456789,1,Ringing()
exten => 123456789,n,AGI(ast_revers.agi,${CALLERID(NUM)})
exten => 123456789,n,Set(CALLERID(name)=${LONGNAME})
exten => 123456789,n,Set(CALLERID(num)=${LONGDETAILS})
exten => 123456789,n,Dial(SIP/201&SIP/202,20,Ttr)
exten => 123456789,n,VoiceMail(201)
exten => 123456789,n,Hangup
 
Hi,

unter welcher Asterisk-Version läuft das Skript ?
Bei älteren Versionen ist die Parameterübergabe an das AGI-Skript anders:

Code:
exten => 123456789,n,AGI(ast_revers.agi|${CALLERID(NUM)})

Ansonsten bitte mal das Skript direkt auf Shell-Ebene testen ob
die Ausgabe korrekt ist.
 
In diesem Fall wäre die zweite Version (die mit "|") die Richtige.
Würde auch für "geheim" als Ausgabe sprechen, da diese Ausgabe nur kommt wenn keine Rufnummer übermittelt/übergeben wurde.

Läuft das Programm denn in der Linux Shell richtig ?
So sollte/könnte es bei einer Testnummer aussehen.
Code:
/var/lib/asterisk/agi-bin#./ast_revers.agi 030184000
SET VARIABLE LONGNAME "Bundeskanzler u. Bundeskanzleramt"
SET VARIABLE LONGDETAILS "184000"


Wenn es in der Linux-Shell klappt und es nach der Änderung noch nicht in Asterisk laufen sollte geht das Debugging los:
In der extensions.conf folgendes ersetzen:
Code:
Original:
exten => 123456789,n,AGI(ast_revers.agi|${CALLERID(NUM)})
Ersetzen:
;NoOp zur Anzeige der uebermittelten Rufnummer
exten => 123456789,n,NoOp(Uebermittelte Rufnummer: ${CALLERID(num)})
exten => 123456789,n,AGI(ast_revers.agi|${CALLERID(num)})

Dialplan neu laden.
Verbose Level von Asterisk auf >3 setzen (Damit NoOp funktioniert).
AGI Debugging einschalten.
Testanruf machen.

Natürlich Debugging und Verbose nachher wieder zurücksetzen :)
 
Hab den Fehler gefunden:

Habe:
exten => 123456789,n,AGI(ast_revers.agi,${CALLERID(NUM)})
durch
exten => 123456789,n,AGI(ast_revers.agi|${CALLERID(NUM)})

ersetzt und dann gings.
Muchas Gratias für die ausführliche Hilfe :)
 
So weit, so gut ;-)

Als Ergebnis bekomme ich ausschliesslich:

Code:
AGI Rx << Anruflog=0
AGI Tx >> 510 Invalid or unknown command

Code:
AGI Script ast_revers.agi completed, returning 0

irgendwie werden die Variablen nicht gesetzt/übergeben...hmmm


Hat jemand eine spontane Idee dazu?

THX
 
Zuletzt bearbeitet:
Luxembourg Änderung

Luxembourg - da hat es wohl eine Änderung gegeben!

Code:
2008.09.25 - 08:01:29 - +3521234561 - Tel&nbsp;:&nbsp; Tel&nbsp;:&nbsp; - , LUXEMBURG

Dennoch kämpfe ich noch mit dem Problem, dass die Variablen nicht bzw. nicht richtig an * übergeben werden.

Code:
    -- Executing [XXXXXX@XXXXXX_inbound:1] AGI("SIP/netstream.ch-08209748", "ast_revers.agi|+41XXXXXXXXXXXX") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/ast_revers.agi
AGI Tx >> agi_request: ast_revers.agi
AGI Tx >> agi_channel: SIP/netstream.ch-08209748
AGI Tx >> agi_language: en
AGI Tx >> agi_type: SIP
AGI Tx >> agi_uniqueid: 1222324194.270
AGI Tx >> agi_callerid: +41XXXXXXXXXXXX
AGI Tx >> agi_calleridname: +41XXXXXXXXXXXX
AGI Tx >> agi_callingpres: 0
AGI Tx >> agi_callingani2: 0
AGI Tx >> agi_callington: 0
AGI Tx >> agi_callingtns: 0
AGI Tx >> agi_dnid: XXXXXX
AGI Tx >> agi_rdnis: unknown
AGI Tx >> agi_context: XXXXXX_inbound
AGI Tx >> agi_extension: XXXXXX
AGI Tx >> agi_priority: 1
AGI Tx >> agi_enhanced: 0.0
AGI Tx >> agi_accountcode:
AGI Tx >>
AGI Rx << Anruflog=1
AGI Tx >> 510 Invalid or unknown command
    -- AGI Script ast_revers.agi completed, returning 0

In den Logs steht allerdings alles richtig drin.

Eigentlich sollte es funktionieren. * 1.4.21.2
 
Zuletzt bearbeitet:
Zu Luxemburg:

Hab ich gerade mal getestet (mit einer echten Nummer und der von Dir genutzten, nicht existenten +3521234561), Ergebnis: Es funktioniert.

Zu Deinem Fehler. Da ist tatsächlich ein kleiner Bug im Skript in Zeile 700:

Code:
if [ "$VDR" == 1 ];then
        echo "VDR-OSD ansteuern" >> $LOGFILE
        osdvdr
fi

[B][COLOR="Red"]echo "Anruflog="$ALYES[/COLOR][/B]
if [ "$ALYES" == 1 ]; then

Korrekt muss das heißen

Code:
if [ "$VDR" == 1 ];then
        echo "VDR-OSD ansteuern" >> $LOGFILE
        osdvdr
fi

[B]echo "Anruflog="$ALYES >> $LOGFILE[/B]
if [ "$ALYES" == 1 ]; then

Wenn Du die Zeile korrigierst, sollte der Fehler weg sein.
 
Hi,

der Fehler ist weg ;-)

Code:
AGI Tx >> 510 Invalid or unknown command

Allerdings bekommt * LONGNAME/LONGDETAILS immer noch nicht zurück.

hmmm...

Code:
/var/lib/asterisk/agi-bin/ast_revers.agi 030184000
SET VARIABLE LONGNAME "Bundeskanzler u. Bundeskanzleramt"
SET VARIABLE LONGDETAILS "184000"

kommt bei mir

Code:
dingens:~# /var/lib/asterisk/agi-bin/ast_revers.agi 030184000
dingens:~#

Und bei Luxemburg funktioniert es tatsächlich nicht.
Die Beispiel-Nummer war verfremdet.

+35240881 P&T Luxembourg (Division des Postes)P&T Luxembourg (Division des Postes)
38 pl. de la Gare
L-2998 Luxembourg (Lëtzebuerg)
Tel : 40 88-1

steht im Anruf.log

Code:
2008.09.26 - 08:12:34 - +35240881 - Tel&nbsp;:&nbsp; Tel&nbsp;:&nbsp; - , LUXEMBURG
 
Zuletzt bearbeitet:
So, nach einigen Fehlversuchen kann ich jetzt Deinen Luxemburger Fehler nachvollziehen. Der findet sich in Zeile 384 der ast_revers.agi:

Code:
function LUXEMBURG {
SNUM=`echo $NUMMER | sed -e "s/^+${CC[$CINDEX]}/${NAC[$CINDEX]}/"`
wget -q --tries=3 --timeout=5 -O $TMPFILE "http://www.editustel.lu/luxweb/neosearchAT.do?input=$SNUM&imageField.x=47&imageField.y=15&lan=AL&sessionKey=6DPill4msv5kzCdRPsmymxI"
[B][COLOR="Red"]TEMP=`grep 'class=\"raisSoc\".*' -m1 $TMPFILE | sed -e s/^.*\"raisSoc\".*\<strong\>//g -e s/\<'\/'div\>.*//`[/COLOR][/B]
NAME="`echo $TEMP | cut -d '<' -f 1 | cut -d ' ' -f 2 ` `echo $TEMP | cut -d '<' -f 1 | cut -d ' ' -f 1 `"

Wenn Du das änderst in

Code:
function LUXEMBURG {
SNUM=`echo $NUMMER | sed -e "s/^+${CC[$CINDEX]}/${NAC[$CINDEX]}/"`
wget -q --tries=3 --timeout=5 -O $TMPFILE "http://www.editustel.lu/luxweb/neosearchAT.do?input=$SNUM&imageField.x=47&imageField.y=15&lan=AL&sessionKey=6DPill4msv5kzCdRPsmymxI"
[B]TEMP=`grep 'class=\"raisSoc\".*' -m1 $TMPFILE | sed -e s/^.*\"raisSoc\".*\<span\>\<strong\>//g -e s/\<'\/'div\>.*//`[/B]
NAME="`echo $TEMP | cut -d '<' -f 1 | cut -d ' ' -f 2 ` `echo $TEMP | cut -d '<' -f 1 | cut -d ' ' -f 1 `"

sollte es funktionieren. Was mir allerdings noch schleierhaft ist, ist warum er bei Dir die Asterisk-Variablen scheinbar nicht setzt.
Mach mal bitte folgendes:

Entferne mal den Kommentar in Zeile 2 vor set -x und führe dann mal eine Suche auf der Konsole aus (beliebige Rufnummer, möglichst nicht aus Deinem Cache). Postde dann bitte den Output hier oder per PM, dann schauen wir weiter. (Hinweis: Bitte poste auch gleich noch zur Sicherheit den relevanten Teil der extensions von Asterisk, die das AGI aufrufen und die Variablen übernehmen sollen.)
 
Vielen Dank für das tolle Script!

Ich exportiere die bei uns in der Datenbank vorhandenen Telefonnummern in eine Textdatei und stelle diese dem Script als Cache zur Verfügung.

Nun wäre es schön, wenn es zwei Cache-Files gäbe: Das eine, das (wie bisher) vom Script gepflegt wird und ein zweites, das ich von Zeit zu Zeit durch einen neuen Export aktualisieren kann, ohne die Daten aus dem eigentlichen Cache-File migrieren zu müssen.

Ich habe dazu in der Config-Datei einen neuen Wert namens CACHE2 eingefügt, der auf die zweite Cachedatei zeigt.

In der Funktion read_cache im Script kann man dann einfach die 2 Zeilen "NAME=..." und "DETAILS=..." kopieren und die neuen Zeilen in einer neuen Funktion auf das zweite Cache-File ansetzen.

Bin nicht so der Scripter, vielleicht geht's auch einfacher. Bei mir sieht die Funktion jetzt so aus:
Code:
function read_cache2 {
echo "Suche nach $NUMMER im cache2 " >> $LOGFILE
NAME=`awk  -F '\t' '{ if ($1 == "'$NUMMER'") print $2 }' $CACHE2`
DETAILS=`awk  -F '\t' '{ if ($1 == "'$NUMMER'") print $3 }' $CACHE2`
}

function read_cache {
echo "Suche nach $NUMMER im cache1 " >> $LOGFILE
NAME=`awk  -F '\t' '{ if ($1 == "'$NUMMER'") print $2 }' $CACHE`
DETAILS=`awk  -F '\t' '{ if ($1 == "'$NUMMER'") print $3 }' $CACHE`
}

Code:
if [ "$SPEICHERORT" == "SQL3" ]; then
        echo "SQLite-DB gewaehlt" >> $LOGFILE
        sq3_read
elif [ "$SPEICHERORT" == "CACHE" ]; then
        echo "Cache-File gewaehlt" >> $LOGFILE
        #CACHE-File erzeugen
        if [ -e $CACHE ]; then
           echo "Cache-File vorhanden" >> $LOGFILE
        else
           touch $CACHE
           echo "Cache-File erstellen" > $LOGFILE
        fi
        read_cache2
elif [ "$SPEICHERORT" == "PGSQL" ]; then
        echo "PGSQL-DB gewaehlt" >> $LOGFILE
        pgsql_read
fi

# Im Cache2 nichts gefunden? In Cache1 suchen
if [ "$NAME" == "" ] && [ "$SPEICHERORT" == "CACHE" ]; then
        read_cache
fi

Ralph
 
Zuletzt bearbeitet:
Hallo Zusammen,

erst einmal DANKE für das tolle Script. Es funktioniert auch schon für Daten die ich von Hand in die DB aufgenommen habe. Leider läuft es aber noch nicht ganz.
Wenn ich das aktuelle ast_revers.agi auf der Shell laufen lasse, ohne einen passenden Datenbankeintrag, erhalte ich "kein Eintrag", "keine Adresse".

Code:
/var/lib/asterisk/agi-bin/ast_revers.agi 030184000
SET VARIABLE LONGNAME "kein Eintrag"
+ echo 'SET VARIABLE LONGDETAILS "keine Adresse"'
SET VARIABLE LONGDETAILS "keine Adresse"
+ '[' 0 == 1 ']'
+ echo Anruflog=0
Anruflog=0
+ '[' 0 == 1 ']'
+ echo 'Anruflog ausgeschaltet'


Soweit wie ich das verstanden habe, sollte doch nach dem "wget" die Datei "ast_revers.agi_html_tmp" mit dem Suchergebnis gefüllt sein, die Datei ist aber leer?

Code:
+ wget -q --tries=3 --timeout=5 -O /tmp/ast_revers.agi_html_tmp 'http://www1.dasoertliche.de/?form_name=search_inv&ph=030184000'


Gruß appleactive
 
Hi,

mein Problem ist gelöst :D

Code:
wget -q --tries=3 --timeout=[COLOR="Red"]5[/COLOR] -O /tmp/ast_revers.agi_html_tmp 'http://www2.dasoertliche.de/?form_name=search_inv&ph=0218161091'

Habe einen ordentlichen DNS- Server eingetragen, dann funktioniert es auch. Der alte war etwas träge.

Gruß appleactive
 
Ich versuche das Script auch für die ausgehenden Anrufe zu benutzen - klappt aber irgendwie nicht.

Eingebunden mit:

Code:
...
exten => _x.,3,AGI(ast_revers.agi,${EXTEN})
...

liefert es trotz vorhandenem Cache-Eintrag kein Ergebnis zurück. Mit AGI-Loggin siehts so aus:

Code:
    -- Executing [0160111111@outgoing:3] AGI("SIP/145-081e0570", "ast_revers.agi|0160111111") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/ast_revers.agi
AGI Tx >> agi_request: ast_revers.agi
AGI Tx >> agi_channel: SIP/145-081e0570
AGI Tx >> agi_language: de
AGI Tx >> agi_type: SIP
AGI Tx >> agi_uniqueid: 1228811253.2
AGI Tx >> agi_callerid: 145
AGI Tx >> agi_calleridname: Buero
AGI Tx >> agi_callingpres: 0
AGI Tx >> agi_callingani2: 0
AGI Tx >> agi_callington: 0
AGI Tx >> agi_callingtns: 0
AGI Tx >> agi_dnid: 0160111111
AGI Tx >> agi_rdnis: unknown
AGI Tx >> agi_context: outgoing
AGI Tx >> agi_extension: 0160111111
AGI Tx >> agi_priority: 3
AGI Tx >> agi_enhanced: 0.0
AGI Tx >> agi_accountcode:
AGI Tx >>
AGI Rx << SET VARIABLE LONGNAME "kein Eintrag"
AGI Tx >> 200 result=1
AGI Rx << SET VARIABLE LONGDETAILS "keine Adresse"
AGI Tx >> 200 result=1
AGI Rx << Anruflog=0
AGI Tx >> 510 Invalid or unknown command
    -- AGI Script ast_revers.agi completed, returning 0

Andererseits auf der Cmd-Line:

Code:
server:/var/lib/asterisk/agi-bin# ./ast_revers.agi 0160111111
SET VARIABLE LONGNAME "Handy (priv)"
SET VARIABLE LONGDETAILS ""
Anruflog=1

Was mache ich falsch ?
 
Ich antworte mal selbst (Fehler gefunden):

ast_revers.agi hatte keinen Zugriff auf /etcasterisk/ast_revers.conf, da ich die Einrichtung als 'root' erledigt hatte, asterisk aber unter dem Nutzer 'asterisk' läuft :mad: Somit hat er die Einstellungen nicht gelesen und ein falsches Cache-File verwendet (wenn es aus asterisk heraus passierte). Im Test als root auf der cmd-line hat natürlich alles funktioniert...

Da kommt man nur mit Test unter 'su -l asterisk' drauf....
 
Hallo,

könnte man bestimmte Anrufer per Script rausfiltern?
Beispiel:
Ein Anruf kommt rein, durchläuft das Script reverssuche.agi, => Ausgabe Name zum Beispiel ein Personalvermittler. Jetzt würd ich gern alle Anrufer die den Text Personal,Zeitarbeit usw. rausfiltern und denen ein Besetzt liefern und sie in eine Blicklist speichern. Wie könnte ich das machen??
 
Das ginge sicherlich - jedoch ist die Frage doch "Macht das Sinn?"

Die ganze CallCenter Plage schickt ja keine Nummer mit, sie unterdrücken sie im besten Fall (man kann per mISDN zB alle Anrufer MIT Nummernunterdrückung behandeln-egal wie)

Ich denke nicht das Deine Idee am Ende ein Resultat liefern kann..

Es steht selten "CallCenter für Personaldienstleistungen" oder "CCA für Weihnachtsumfragen" :)

Grüsse, Stefan
 
Hi HobbyStern,

ich hab jetzt mittlerweile die passende Lösung für mich gefunden.

Unterdrückte Anrufer werden bei mir generell erst mal im Dialplan rausgefiltert und gebeten Ihre Rufnummer einzugeben. Damit scheiden schon mal diejenigen aus, die keine Nummer eingeben wollen. Sie fliegen dann aus der Leitung. Bei Nummerneingabe geht die Nummer durch das Inverssuchescript:
Code:
#!/bin/sh
read agi_request
read agi_language
read agi_channel
read agi_type
read agi_uniqueid
read agi_callerid
read agi_dnid
read agi_rdnis
read agi_context
read agi_extension
read agi_priority
read agi_enhanced
read agi_accountcode
read emptyline



#pfad zum cachefile
CACHE="/var/media/ftp/USBDISK-Partition-0-1/tel/telefonbuch.txt"
EXTEN="$2"
CODE="$3"
BLACK="/var/media/ftp/USBDISK-Partition-0-1/tel/black.txt"
TMPFILE="/var/media/ftp/USBDISK-Partition-0-1/tel/tmpsuche"
LOG="/var/media/ftp/USBDISK-Partition-0-1/tel/anrufliste.txt"



rm $TMPFILE
NUMMER=`echo $1 | sed -e "s/\ //g" -e "s/+49/0/"`
echo "Nummer: $NUMMER"

if grep "$NUMMER" $CACHE > /var/media/ftp/USBDISK-Partition-0-1/tel/null; then
DATENSATZ="`grep ${NUMMER} ${CACHE}`"
NAME="${DATENSATZ%;*}"
echo "Name: $NAME"
else
echo "Suche nach $NUMMER in www.dasoertliche.de"
wget -q -O $TMPFILE "http://www1.dasoertliche.de/?form_name=search_inv&ph=$NUMMER"
NAME=`grep 'class=\"entry\".*' $TMPFILE | sed -e s/^.*\"entry\"//g -e s/\<'\/'a\>.*//g -e s/^.*\>//g`
echo "WEB-Name: $NAME" 
	if grep -i [COLOR="Red"]"Personal\|Arbeitsvermittlung\|Zeit\|Vermögens\|Wirtschafts" [/COLOR]$TMPFILE >  /var/media/ftp/USBDISK-Partition-0-1/tel/null; then
	echo 'DATABASE PUT '"\"blacklist $NUMMER 1\""
	echo -e "$NAME;$NUMMER" >> $BLACK
	echo "BOESEWICHT!!"
	fi;
fi;

if [ "$NAME" == "" ]; then
	if grep "Kein Teilnehmer gefunden" $TMPFILE > /var/media/ftp/USBDISK-Partition-0-1/tmp/null; then
	NAME="KEIN_EINTRAG"
	echo "KTG: $NAME"
	fi;
else
	if grep "$NUMMER" $CACHE > /var/media/ftp/USBDISK-Partition-0-1/tmp/null; then
	echo "Bereits vorhanden"
	else
	echo -e "$NAME;$NUMMER" >> $CACHE
	fi;
fi;
echo 'SET VARIABLE LONGNAME '"\"$NAME\"" 
echo -e "`date +%e.%m\ %H:%M ` $NAME-$NUMMER-an-$EXTEN-$CODE" >>$LOG
Wie Du sehen kannst, such ich nochmal nach bestimmten Einträgen wie Personal usw.(kommt bei mir sehr häufig vor)
Diese gehen dann per Database put in die Blackliste.
Wenn das Script fertig ist, überprüft der Dialplan, ob die Nummer in der Blackliste vorhanden ist. Diese erhalten dann eine gesonderte Absage (Standpauke hab ich hier im Forum gefunden...einfach genial) und dann wird das Gespräch beendet.
Das ausfiltern mit ${TRANSFERCAPABILITY} hab ich mir auch schon überlegt..logge derzeit diese Daten mit um zu sehen, wie ich sie verwerten kann...analoge haben jedenfalls immer 3K1AUDIO..
 
Hi
wo findet man den die aktuellste Version. Der Post auf der ersten Seite verweißt auf eine 8 Monate alte Version...
Gruß
Thorsten
 
Ich schliesse mich Thorsten mal an, wäre jemand so nett und würde das komplette neue Skript einstellen - so das man sich einmal einen Überblick verschaffen kann...

Liebe Grüsse ins alte Jahr,

Stefan
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.