reverse lookup in www.dasoertliche.de für AAH 2.8

Hi, ich schon wieder...

bei mir läuft es dahingehend, das die Nummer und Name in der invsuche_cache.conf hinterlegt werden, aber der Name nicht auf dem Snom angezeigt wird.

Im Log findet sich:

Jun 17 16:07:21 ERROR[4970] app_setcidname.c: SetCIDName requires an argument!
Jun 17 16:07:21 DEBUG[4970] pbx.c: Launching 'SetCIDNum'

Eventuell ein Fehler in meiner Extensions.conf?

[macro-dial]

exten => s,1,SetLanguage(de)
exten => s,2,AGI,reverse.agi| ${CALLERIDNUM}
exten => s,3,SetCIDName(${LONGNAME})
exten => s,4,SetCIDNum(${CALLERIDNUM})
exten => s,5,AGI,dialparties.agi
;exten => s,2,NoOp(Returned from dialparties with no extensions to call)
;exten => s,3,NoOp(DIALSTATUS is '${DIALSTATUS}')

Gruß
Stefan
 
Zuletzt bearbeitet:
Ich habe hier jetzt etwa 20 Gerät Snom 360 im Einsatz und bin mit denen sehr zufrieden.

Mit einer Firmware ab 6.X geht auch XML, was ja die Cisco können!


Jetzt aber Schluss hier mit gerede über Endgeräte!

Thema hier ist reverse lookup!!!

Ich bin hier schon am probieren für die schweizer Seite!

Man muß in der datei reverse.agi die Zeilen mit dem Befehl grep ändern, bin dabei und kann sich nurnoch um Stunden handeln!


ciao


Robtor
 
@robtor

Wie muss die extensions.conf aussehen?
So wie in meinem letzeten posting?

Gruß
Stefan
 
Du musst das was vorher in dem Macro war nur mit einer anderen Priorität verändern.

Code:
[macro-dial]
exten => s,1,SetLanguage(de)
exten => s,2,AGI,reverse.agi| ${CALLERIDNUM}
exten => s,3,SetCIDName(${LONGNAME})
exten => s,4,SetCIDNum(${CALLERIDNUM})
exten => s,5,AGI,dialparties.agi
exten => s,6,NoOp(Returned from dialparties with no extensions to call)
exten => s,7,NoOp(DIALSTATUS is '${DIALSTATUS}')
 
Hier der Eintrag für www.tel.search.ch

Ist noch ein kleiner Fehler und zwar wird in der Variablen DETAILS die Nummer und der text Karte, SBB, vCard abgelegt hat aber mit der Funktion nichts zu tun!!!

... mach ich aber noch!

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="/etc/asterisk/invsuche_cache.conf"

#pfad um das tempfile anzulegen
TMPFILE="/tmp/tmpsuche"
LOG="/var/log/asterisk/anrufliste_log"

if [ "$1" == "" ]; then
    NAME="anonymer Anrufer"
    DETAILS="Keine details"
else
    NUMMER=`echo $1 | sed -e "s/\ //g" -e "s/+49/0/"`
    #echo "Suche nach $NUMMER im cache"
    NAME=`awk  -F '\t' '{ if ($1 == "'$NUMMER'") print $2 }' $CACHE`
    DETAILS=`awk  -F '\t' '{ if ($1 == "'$NUMMER'") print $3 }' $CACHE`
    #echo "Name: $NAME"
    #echo "Details: $DETAILS"
    if [ "$NAME" == "" ]; then
    #    echo "Suche nach $NUMMER in www.tel.search.ch"
        lynx "http://tel.search.ch/result.html?name=&misc=&strasse=&ort=&kanton=&tel=$NUMMER" \
        -dump -nolist -connect_timeout=3>  $TMPFILE
        NAME=`NAME=`grep Websuche -A 10   $TMPFILE | awk '{ if (FNR == 7) print $0 }' |  sed  -e "s/\ \+//" -e "s/\ \+/\ /g" -e "s/\[_\]//g"`
        DETAILS=`grep Websuche -A 10   $TMPFILE | awk '{ if (FNR == 10) print $0 }' |  sed  -e "s/\ \+//" -e "s/\ \+/\ /g" -e "s/\[_\]//g"`
        if [ "$NAME" == "" ]; then
            if grep "Überprüfen Sie die Nummer" $TMPFILE > /dev/null; then
                NAME="$NUMMER"
                DETAILS="Kein Eintrag $2"
            fi;
        fi;
        if [ "$NAME" == "" ]; then
            NAME="$NUMMER"
            DETAILS="Fehler $2"
        else
            echo -e "$NUMMER\t$NAME" >> $CACHE
        fi;
    fi
fi
rm -f /tmp/tmpsuche
#echo -e "`date +%e.%m\ %H:%M ` $NAME " >>$LOG
 
erst mal vielen Dank.

Leider scheint es bei mir nicht nicht richtig zu funktionieren

Code:
    -- Executing AGI("SIP/4144XXXXXXX-725f", "reverse.agi| 044YYYYYYY") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/reverse.agi
    -- AGI Script reverse.agi completed, returning 0
    -- Executing SetCIDName("SIP/4144XXXXXXX-725f", "") in new stack
    -- Executing SetCIDNum("SIP/4144XXXXXXX-725f", "044YYYYYYY") in new stack
    -- Executing AGI("SIP/4144XXXXXXX-725f", "dialparties.agi") in new stack

Nachtrag
Ich nehme mal an, dass das doppelte Name=`Name=` ein Schreibfehler ist und nur 1mal stehen sollte
Ausserdem ich ich mal die echos eingeschaltet, aber es wird nix ausgegeben, scheint als werde das Skript gar nicht ausgeführt.
Ich hab die Berechtigungen und Benutzer sowie Gruppe so gesetzt wie im ersten Post angegeben.
 
Zuletzt bearbeitet:
robtor schrieb:
... mach ich aber noch!

BTW - wie sieht eigentlich der Ablauf aus?
Call -> reverse.agi -> Ext klingelt ..?​
Sprich, klingelt die Extension erst, nachdem das script ausgeführt wurde?
Ich habe ja immer noch die Schleife "auf dem Programm", die rückwärts die letzten drei (oder vier) Zeichen durch eine '0' ersetzt, um auch Rufnummern identifizieren zu können, die von einem Anlagenanschluss kommen und zu denen natürlich nur die Hauptnummer im ÖTB hinterlegt ist. Dazu stellt sich natürlich die Frage, neben der zur Durchführung einer Schleife, ob das zeitlich noch passt, wenn mehrere requests ans ÖTB geschickt werden.
Wenn die Extension nicht klingelt, bevor jene Anfragen beendet wurden, dürfte es auch kein Problem mit dem [vorzeitigen] Anspringen der VoiceMail geben, würde ich vermuten.

Dürfte doch eigentlich kein Problem sein, eine Schleife um den request zu implementieren, oder? Hat mal jemand einen link, wo man sich über die Skriptsprache schlau machen könnte ..?

Grüße,
Olaf
 
Hallo,

hat es jemand am laufen?
Ich erhalte nach wie vor eine fehlermeldung...
Auf den Snom 360-Sip 6.2 nichts zu sehen.

Wer kann mir helfen?

Gruß
Stefan

Jun 19 15:15:23 DEBUG[10871] pbx.c: Launching 'AGI'
Jun 19 15:15:23 VERBOSE[10871] logger.c: -- Executing AGI("Zap/2-1", "reverse.agi| 02261xxxxxxx") in new stack
Jun 19 15:15:23 VERBOSE[10871] logger.c: -- Launched AGI Script /var/lib/asterisk/agi-bin/reverse.agi
Jun 19 15:15:23 VERBOSE[10871] logger.c: -- AGI Script reverse.agi completed, returning 0
Jun 19 15:15:23 DEBUG[10871] pbx.c: Launching 'SetCIDName'
Jun 19 15:15:23 VERBOSE[10871] logger.c: -- Executing SetCIDName("Zap/2-1", "") in new stack
Jun 19 15:15:23 ERROR[10871] app_setcidname.c: SetCIDName requires an argument!
Jun 19 15:15:23 DEBUG[10871] pbx.c: Launching 'SetCIDNum'
Jun 19 15:15:23 VERBOSE[10871] logger.c: -- Executing SetCIDNum("Zap/2-1", "02261xxxxxxx") in new stack
Jun 19 15:15:23 DEBUG[10871] pbx.c: Launching 'AGI'
Jun 19 15:15:23 VERBOSE[10871] logger.c: -- Executing AGI("Zap/2-1", "dialparties.agi") in new stack
Jun 19 15:15:23 VERBOSE[10871] logger.c: -- Launched AGI Script /var/lib/asterisk/agi-bin/dialparties.agi
Jun 19 15:15:23 VERBOSE[10871] logger.c: dialparties.agi: Starting New Dialparties.agi
Jun 19 15:15:23 VERBOSE[10871] logger.c: -- dialparties.agi: priority is 1
Jun 19 15:15:23 VERBOSE[10871] logger.c: dialparties.agi: Caller ID name is 'unknown' number is '02261xxxxxxx'
 
Habe eben versucht, das bei meiner Trixbox zu realisieren. Das Skript wird auch ausgeführt (habe es wohl richtig installiert), ich erhalte aber kein Ergebnis, sondern nur folgende Log-Einträge:

-- Executing AGI("SIP/41YYYYYYYYY-c719", "reverse.agi| 0XX XXX XX XX") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/reverse.agi
-- AGI Script reverse.agi completed, returning 0

Was mache ich falsch, oder hat der Skript noch Fehler drin? Wo kann ich verfolgen, was das Skript im Einzelnen tut?
 
Zuletzt bearbeitet:
Also, Script ist wohl unvollständig...

Bei mir läuft es nun so:

#!/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="/etc/asterisk/invsuche_cache.conf"

#pfad um das tempfile anzulegen
TMPFILE="/tmp/tmpsuche"
LOG="/var/log/asterisk/anrufliste_log"

if [ "$1" == "" ]; then
NAME="anonymer Anrufer"
DETAILS="Keine details"
else
NUMMER=`echo $1 | sed -e "s/\ //g" -e "s/+49/0/"`
#echo "Suche nach $NUMMER im cache"
NAME=`awk -F '\t' '{ if ($1 == "'$NUMMER'") print $2 }' $CACHE`
DETAILS=`awk -F '\t' '{ if ($1 == "'$NUMMER'") print $3 }' $CACHE`
#echo "Name: $NAME"
#echo "Details: $DETAILS"
if [ "$NAME" == "" ]; then
# echo "Suche nach $NUMMER in www.dasoertliche.de"
lynx "http://www.dasoertliche.de/DB4Web/es/oetb2suche/home.htm?kw_invers=$NUMMER&main=Antwort&s=2" \
-dump -nolist -connect_timeout=3> $TMPFILE
NAME=`grep printselected.gif -A 2 $TMPFILE | awk '{ if (FNR == 2) print $0 }' | sed -e "s/\ \+//" -e "s/\ \+/\ /g" -e "s/\[_\]//g"`
DETAILS=`grep printselected.gif -A 2 $TMPFILE | awk '{ if (FNR == 3) print $0 }' | sed -e "s/\ \+//" -e "s/\ \+/\ /g" -e "s/\[_\]//g"`
if [ "$NAME" == "" ]; then
if grep "Kein Teilnehmer gefunden" $TMPFILE > /dev/null; then
NAME="$NUMMER"
DETAILS="Kein Eintrag $2"
fi;
fi;
if [ "$NAME" == "" ]; then
NAME="$NUMMER"
DETAILS="Fehler $2"
else
echo -e "$NUMMER\t$NAME\t$DETAILS" >> $CACHE
fi;
fi
fi
rm -f /tmp/tmpsuche
echo -e "`date +%e.%m\ %H:%M ` $NAME " >>$LOG
echo 'SET VARIABLE LONGNAME '"\"$NAME\"" >/dev/stdout
read in

exit 0
 
robinsonR schrieb:
Habe eben versucht, das bei meiner Trixbox zu realisieren. Das Skript wird auch ausgeführt (habe es wohl richtig installiert), ich erhalte aber kein Ergebnis, sondern nur folgende Log-Einträge:

-- Executing AGI("SIP/41YYYYYYYYY-c719", "reverse.agi| 0XX XXX XX XX") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/reverse.agi
-- AGI Script reverse.agi completed, returning 0

Was mache ich falsch, oder hat der Skript noch Fehler drin? Wo kann ich verfolgen, was das Skript im Einzelnen tut?


Habe vergessen zu erwähnen, dass ich die Schweizer Variante installiert habe.
 
Trotz allem fehlt folgendes am Ende:

echo 'SET VARIABLE LONGNAME '"\"$NAME\"" >/dev/stdout
read in

exit 0
 
snaker schrieb:
Trotz allem fehlt folgendes am Ende:

echo 'SET VARIABLE LONGNAME '"\"$NAME\"" >/dev/stdout
read in

exit 0

Ich habe das eingefügt und auch den vorher erwähnten Fehler (zweimal "Name=") korrigiert. Trotzdem funktioniert es nicht. Die Anrufe werden zwar in /var/log/asterisk/anrufliste_log aufgeführt und auch bei einem manuellen Eintrag in /etc/asterisk/invsuche_cache.conf wird ein Name angezeigt.
Der richtige Datensatz wird zwar im Internet gefunden und in /tmp/tmpsuche abgelegt, danach scheint es aber schiefzugehen. Die Datenaufbereitung mit awk und sed ist wohl fehlerhaft.
Kann das jemand korrigieren?
 
Zuletzt bearbeitet:
Bei mir hat es erst funktioniert, als ich diese Zeile

NAME=`grep Websuche -A 10 $TMPFILE | awk '{ if (FNR == 7) print $0 }' | sed -e "s/\ \+//" -e "s/\ \+/\ /g" -e "s/\[_\]//g"`

durch diese

NAME=`grep Websuche -A 10 $TMPFILE | awk '{ if (FNR == 4) print $0 }'`

ersetzt hatte. Mir ist auch nicht ganz klar, was mit sed erreicht werden soll.
Oder was in der Details-Zeile stehen soll.
 
Also ich hab mir jetzt ne Version gebastelt, die glaub funktioniert

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="/etc/asterisk/invsuche_cache.conf"
#pfad um das tempfile anzulegen
TMPFILE="/tmp/tmpsuche"
#Pfad zur Anrufliste
LOG="/var/log/asterisk/anrufliste_log"

if [ "$1" == "00None"  ]; then
    NAME="anonymer Anrufer"
elif [ "$1" == ""]; then
    NAME=""
else
    NUMMER=`echo $1 | sed -e "s/\ //g" -e "s/+\?41/0/"`
    #echo "Suche nach $NUMMER im cache"
    NAME=`awk  -F '\t' '{ if ($1 == "'$NUMMER'") print $2 }' $CACHE`
    #echo "Name: $NAME"
    if [ "$NAME" == "" ]; then
        #echo "Suche nach $NUMMER in www.tel.search.ch"
        lynx "http://tel.search.ch/result.html?name=&misc=&strasse=&ort=&kanton=&tel=$NUMMER" -dump -nolist -connect_timeout=3 -display_charset=iso-8859-1 > $TMPFILE
        if grep "Keine Einträge gefunden" $TMPFILE; then
            NAME="kein Eintrag"
        elif grep Websuche $TMPFILE; then
            NAME=`grep Websuche -A 10 $TMPFILE | awk '{ if (FNR == 4) print $0 }' | sed 's/^[ ^t]*//'`
            if [ "$NAME" == "" ]; then
                NAME="nicht gefunden"
            else
                echo -e "$NUMMER\t$NAME" >> $CACHE
            fi;
        fi;
    fi;
fi;

rm -d $TMPFILE
#echo -e "`date +%e.%m\ %H:%M ` $NAME " >>$LOG

echo 'SET VARIABLE LONGNAME '"\"$NAME\"" >/dev/stdout
read in

exit 0

Habs nochmal ein bisschen modifiziert. Jetzt gefällts mir langsam.
Falls sich jemand getraut das auszuprobieren, würde ich mich über Reaktionen freuen.
 
Zuletzt bearbeitet:
Ich habe jetzt das da gebastelt:

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="/etc/asterisk/invsuche_cache.conf"

#pfad um das tempfile anzulegen
TMPFILE="/tmp/tmpsuche"
LOG="/var/log/asterisk/anrufliste_log"

if [ $1 == anonym ]; then

    NUMMER= $1
    NAME="ohne Nummer"
else
    NUMMER=`echo $1 | sed -e "s/\ //g" -e "s/+41/0/"`
    #echo "Suche nach $NUMMER im cache"
    NAME=`awk  -F '\t' '{ if ($1 == "'$NUMMER'") print $2 }' $CACHE`
    DETAILS=`awk  -F '\t' '{ if ($1 == "'$NUMMER'") print $3 }' $CACHE`
    #echo "Name: $NAME"
    #echo "Details: $DETAILS"
    if [ "$NAME" == "" ]; then
    #   echo "Suche nach $NUMMER in www.tel.search.ch"
        lynx "http://tel.search.ch/result.html?name=&misc=&strasse=&ort=&kanton=&tel=$NUMMER" \
        -dump -nolist -connect_timeout=3>  $TMPFILE

        if grep "Suche verfeinern" $TMPFILE
        then

         NAME=`grep [tel.search.ch] -A 12  $TMPFILE  | sed "/^$/d" | awk '{ if (FNR == 10) print $0 }' | sed -e "s/   //"`
         DETAILS=`grep [tel.search.ch] -A 12  $TMPFILE | sed "/^$/d" | awk '{ if (FNR == 11) print $0 }' | sed -e "s/\// /"`

                if  [ "$NAME" == "" ]; then
                    NAME="$NUMMER"
                    DETAILS="Fehler $2"
                else
                    echo -e "$NUMMER\t$NAME\t$DETAILS" >> $CACHE
                fi;

        else

               NAME="$NUMMER"
               DETAILS="Kein Eintrag $2"

        fi;

    fi
fi
rm -f /tmp/tmpsuche
echo -e "`date +%e.%m\ %H:%M ` $NAME $DETAILS" >>$LOG
echo 'SET VARIABLE LONGNAME '"\"$NAME $DETAILS" >/dev/stdout
read in

exit 0
Und das scheint zu funktionieren.
Da mein (Siemens)-Telefon beim anonym telefonieren "00None" überträgt, bzw. das in der Asterisk-Konsole angezeigt wird, habe ich beim Wählplan noch hinzugefügt, dass er bei eben diesem Vorkommen "anonym" als Nummer weitergeben soll. Darum taucht das auch hier
Code:
if [ $1 == anonym ]; then

    NUMMER= $1
    NAME="ohne Nummer"
else
auf. Vielleicht ist das ein Spezialfall oder es gibt eine elegantere Lösung; habe einfach auf die Schnelle nichts Besseres gefunden.
 
snaker schrieb:
Bei mir läuft es nun so: [...]

Wunnebah, hier läuft's jetzt auch damit (AAH 2.8), danke! :D

Grüße,
Olaf
 
Dummerweise sucht der Skript jetzt auch bei internen Anrufen. Wie kann ich das verhindern?
 
robinsonR schrieb:
Dummerweise sucht der Skript jetzt auch bei internen Anrufen. Wie kann ich das verhindern?

Aber nur einmal, nämlich dann, wenn im Cache die Nummer nicht hinterlegt ist. Setz' doch die entspr. Nummern/Namen in der Cache-Datei, dann sollte kein Versuch gestartet werden, die Website zu laden.
D.h., falls du den Cache-Part nicht gelöscht hast - du arbeitest ja mit der Schwyzervariante ... :)

Alternativ kannst du ja auf Länge der Nummer oder führende 0 prüfen, falls zu viele Extensions vorhanden sind.

Grüße,
Olaf
 
Olaf.Rabbachin schrieb:
Aber nur einmal, nämlich dann, wenn im Cache die Nummer nicht hinterlegt ist. Setz' doch die entspr. Nummern/Namen in der Cache-Datei, dann sollte kein Versuch gestartet werden, die Website zu laden.
D.h., falls du den Cache-Part nicht gelöscht hast - du arbeitest ja mit der Schwyzervariante ... :)

Alternativ kannst du ja auf Länge der Nummer oder führende 0 prüfen, falls zu viele Extensions vorhanden sind.

Grüße,
Olaf

Die Idee hatte ich auch schon. Ich suchte einfach eine elegantere Lösung.
 
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.