CallerID mit AGI an VDR per Telnet übermitteln

Hi
hast du am anfang des scripts noch die ganzen "read ..." zeilen drinn?
dann musst du entweder die ganzen reads auskommentieren - oder einfach x-mal "enter" drücken - dann läuft das script weiter.
gebraucht werden die nicht - da die variablen nicht gebraucht werden.

gruß
thorsten
 
Ah, dann gehts! Die Schwierigkeiten des Early Adopters :)
Das kommt davon wenn man von Anfang an dabei ist und nur an den NAME,DETAILS-Zeilen herumgebastelt hat.
 
Hi Thorsten,

Hi
hast du am anfang des scripts noch die ganzen "read ..." zeilen drinn?
dann musst du entweder die ganzen reads auskommentieren - oder einfach x-mal "enter" drücken - dann läuft das script weiter.
gebraucht werden die nicht - da die variablen nicht gebraucht werden.

könntest Du vielleicht noch einmal das gesamte Script posten? Ich habe das Ding immer wieder entspr. den Postings hier bei mir aktualisiert.
Was ich aber feststellen muss ist, dass im Cache-file seit längerer Zeit nicht nur die ermittelte Rufnummer nebst Namen steht, sondern auch noch x weitere Zeilen, in denen die Adresse und zus. Informationen aufgeführt werden. Bei der 0693050 z.B. bekomme ich auf insges. 3 zus. Zeilen das Wer, das Was und das Wo mitgeteilt. Die Info stört mich selbst zwar nicht, aber ich lösche den Kram regelmäßig, damit die Datei a) überhaupt funzt und b) nicht zuuuu groß wird. Fehlt mir evt. doch etwas ..?

Gruß,
Olaf
 
Hi,

Ich hab auch immer nur an den zeilen rumgebastelt :)
Aber bitte sehr - hein aktuelles script:
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/spool/asterisk/invsuche_cache"

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

echo "$1-$2-$3" >/tmp/reverse.tmp

if [ "$1" == " " ]; then
    #echo | tail -n 10 /var/log/syslog | grep "RING (" >>$TMPFILE2
    #if [ "`tail -c 10 $TMPFILE2`" == "z audio)  " ]; then
       NAME="analoger Anrufer" 
       DETAILS="Keine details"
    #fi
    #if [ "`tail -c 10 $TMPFILE2`" == "(Speech) " ]; then
    #   NAME="aktiv unterdrueckt" 
    #	DETAILS="ISDN anrufer ohne Nummer"
    #fi
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
        wget -q --tries=3 --timeout=5 -O $TMPFILE "http://www1.dasoertliche.de/?form_name=search_inv&ph=$NUMMER"
	NAME=`grep 'entry' $TMPFILE | sed -e s/\"entry\"\ \>/\!\!\!/ -e s/^.*\"entry\"\>//g -e s/\<'\/'a\>.*//g | awk -F '!!!' '{ print $2 }'`
	DETAILS=`grep ',\&nbsp\;' $TMPFILE  | sed -e s/\&nbsp\;/\ /g -e s/\<br.*//g`
	
	if [ "$NAME" == "" ]; then
            if grep "Kein Teilnehmer gefunden" $TMPFILE > /dev/null; then
                NAME="Telefonnummer $NUMMER"
                DETAILS="Kein Eintrag $2"
            fi;
        fi;
        if [ "$NAME" == "" ]; then
            NAME="Telefonnummer $NUMMER"
            DETAILS="Fehler $2"
        else
            echo -e "$NUMMER\t$NAME\t$DETAILS" >> $CACHE
        fi;
    fi
fi

echo -e -n "mesg TEL:$NAME \nquit\n"; sleep 1; echo -e -n "mesg $DETAILS \nquit\n"; sleep 1; echo quit | telnet vdr.gehrig.lan 2001 &
echo -e "`date +%e.%m\ %H:%M ` $NAME " >>$LOG
echo 'SET VARIABLE LONGNAME '"\"$NAME\"" >/dev/stdout
read in

exit 0

Wenn keine Rufnummer übermittelt wird sind noch "reste" von der Erkennung ob
* analog ohne nummer bzw.
* ISDN/Mobil mit aktivier Rufnummernübermittlung
der Grund für die nicht übermittelte Rufnummer ist. Da dies nur bei ISDN und CAPI funktioniert - und ich nur noch per VoIP telefoniere - ist dies bei mir nicht mehr aktiv.
Wer das will kann nach einem entsprechenden Thread hier suchen...

Gruß
Thorsten
 
Hi Thorsten,

da unsere Scripts in den relevanten Bereichen (sprich hautpsächlich der wget-Block und o. a. Zeile) identisch sind, solltest Du doch eigentlich ebenfalls mehrere Zeilen Infos zu jedem in der Datei gespeicherten Eintrag bekommen, entsprechend dem, was von dasoertliche.de kommt, bzw. entsprechend dem, was dadurch in der Variable $NAME landet.

Bei mir jedenfalls landen 4 Zeilen Text in der Datei (wie auch im Log), wenn ich reverse.agi mit der 0693050 aufrufe.
Hast Du etwa immer nur genau eine Zeile, wenn über wget eine neue Nummer ins Cache-File geschrieben wird ..?

Wie könnte mann denn in $NAME nur die erste Zeile verwenden, bzw. den Rest einfach abschneiden? Die Adresse jedenfalls interessiert mich nicht die Bohne ...
<Laie>
Alternativ müsste man doch eigentlich das dem Namen anscheinend sofort folgende </a> verwenden können, um grep davor abschneiden zu lassen
</Laie> ..?

Gruß,
Olaf
 
Hi Olaf,
sicherlich kann man das noch verbessern - ich hab dazu aber gerade keine Zeit & Lust.
Ein sed/awk-Spezialist bin ich auch nicht gerade...
Aber man muss sich die cachedatei ja nicht anschauen - ein wenig unordnung stört das script nicht...
Gruß
Thorsten
 
Hallo Thorsten & Olaf,

ich habe mir damals beim implementieren auch einige Gedanken gemacht wofür ich die Details benötigen würde - und bin zu dem Schluss gekommen "gar nicht", also habe ich die DETAILS einfach ausgeklammert - also sie werden zwar abgerufen, aber schon nicht mehr gecached etc.

Wenn Dir diese Lösung helfen würde, Olaf ?

Grüsse, Stefan
 
Hi Stefan,

ich habe mir damals beim implementieren auch einige Gedanken gemacht wofür ich die Details benötigen würde - und bin zu dem Schluss gekommen "gar nicht", also habe ich die DETAILS einfach ausgeklammert - also sie werden zwar abgerufen, aber schon nicht mehr gecached etc.

Wenn Dir diese Lösung helfen würde, Olaf ?

klar - her damit! :)

Mir geht's eigentlich gar nicht mal so sehr um die Unordnung in der Datei, aber sie ist bei mir inzwischen schon relativ lang geworden und jede Zeile schwächt halt die Performance ganz einfach unnötig. Außerdem trage ich auch schon mal Einträge händisch ein, da bei mir ich sehr viele Personen mit Durchwahlnummern anrufen, die sich halt max. bis zum Basisanschluss (wenn überhaupt) hin auflösen lassen.

Gruß,
Olaf
 
Ich strippe aus den Details einfach sämtliche Zeilenumbrüche:
Code:
DETAILS=`echo $DETAILS|tr '\n' ' '`

(könnte man sicher irgendwie auch in die sed/awk-Zeile einbauen)
 
Hi Stefan,

Ich strippe aus den Details einfach sämtliche Zeilenumbrüche:
Code:
DETAILS=`echo $DETAILS|tr '\n' ' '`

merci! Wenn Du mir jetzt auch noch sagen könntest, wo genau das hin muss ..?
Ich hab's bei mir nach dem wget-Block eingefügt, aber das bringt offensichtlich keine Änderung. :confused:

Gruß,
Olaf
 
Hi Olaf, Sterkel und Thorsten,

ich mache das ganze etwas pragmatischer - ich kommentiere einfach

-das "grep" DETAILS
-das "# echo -e "$NUMMER\t$NAME\t$DETAILS" >> $CACHE"
-das "# DETAILS="Kein Eintrag $2""
-das "# DETAILS="Fehler $2""
-das "#echo -e -n "mesg $DETAILS \nquit\n" | telnet vdr.gehrig.lan 2001
"

komplett aus - so bekomme ich hier keine Details mehr eingespeichert und habe das Problem umschifft.


Hoffe das hilft...

Stefan
 
Mal wieder angepasste Grep-Zeilen:
Code:
        wget -q --tries=3 --timeout=5 -O $TMPFILE "http://www1.dasoertliche.de/?form_name=search_inv&ph=$NUMMER"
        NAME=`grep 'class=\"entry\".*' -m1 $TMPFILE | sed -e s/^.*\"entry\"\>//g -e s/\<'\/'a\>.*//g | awk -F 'onmouseout=""  >' '{ print $2 }'`
        DETAILS=`grep ';.*<br\/>' -m1 $TMPFILE  | sed  -e s/'   '//g -e s/\&nbsp\;/\ /g -e s/'\n'//g -e s/'\t'//g -e s/'<br\/>'//  `

Gruß
Thorsten
 
Aha, danke - hat man wohl wieder kurzfristig geändert?
Und natürlich ausgrechnet dann, wenn ich meinen Asterisk auf eine andere Maschine umziehen lasse und hinterher Fehler suche :shock:
Hab' das zwar auch 'irgendwie' hinbekommen, aber deine Lösung passt wohl eher - Regex sind nicht mein Lieblingszeitvertreib :)

Mario
 
Danke Thorsten,

:groesste:

hatte (mal wieder) gar nicht bemerkt das es geändert wurde...



Grüsse, Stefan
 
Ich muss mal an alle Beteiligten dieses Scriptes ein großes Lob aussprechen, es ist eine super Bereicherung wenn man Engeräte vewendet, die CALLERID(name) verarbeiten können! :D
 
Hi Torsten,

herzlichen Dank für das tolle Script und die Updates!

Vieleicht noch als Idee: eventuell ist die WAP-Version (wap.das-oertliche.de) leichter/stabiler zu parsen als die normale Web-Version? (weniger Design-Spielereien und vieleicht weniger "redesigns" der Seiten)

Viele Grüße,
Tom
 
Hallo Leute,

Super Script musst ich sagen!
aber bei mir funzt es irgendwie nicht.

hier fehler meldung:
Code:
-- Executing [8888@support:1] AGI("SIP/150-b58011b8", "callerID.sh|") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/callerID.sh
  ==  callerID.sh|: Failed to execute '/var/lib/asterisk/agi-bin/callerID.sh': Permission denied

was kann ich den da tun?

Vielen Dank.

cu
 
Hallo,

Code:
Permission denied

Schlichtweg hat Asterisk keine Recht die Datei zu nutzen oder auszuführen, Du musst darauf achten diese ausführbar gemacht zu haben (chmod a+x <datei>) und/oder die Datei mit den Rechten für den Asterisk versehen zu haben (chmod/chown)

Viel Erfolg!

Stefan
 
Gerne, kein Problem. Jeder steht mal vor den erstem Linux-chinesisch ;)

LG 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.