CallerID mit AGI an VDR per Telnet übermitteln

Ber5erker

Mitglied
Mitglied seit
6 Apr 2004
Beiträge
305
Punkte für Reaktionen
0
Punkte
0
Hallo, jetzt kommt etwas kompliziertes:

Ich möchte bei eingehenden Anrufen, dass Asterisk die CallerID (Nummer und evtl. Name) an meinen VDR schickt, sodass dieser eine OSD-Meldung auf meinem Fernseher ausgeben kann.

In der extensions.conf wird mittels AGI ein Script aufgerufen:
[...]
exten => 100,1,agi(anruf.sh)
exten => 100,2,Dial(SIP/100,60,tr)
[...]

Im "/usr/share/asterisk/agi-bin" habe ich das Script "anruf.sh" hinterlegt mit folgendem Inhalt:
Code:
#!/bin/sh
#
echo -e "mesg Text\nquit\n" | telnet activy 2001
exit 0
Soweit funktioniert auch alles, auf dem Fernseher erscheint bei einem eingehenden Anruf der Text "Text", jedoch soll ja die RUFNUMMER angezeigt werden :?

FRAGE: Wie kann ich nun die Rufnummer abgreifen lassen und als Variable in meinem Script einsetzen?
 

rajo

Admin-Team
Mitglied seit
31 Mrz 2004
Beiträge
1,958
Punkte für Reaktionen
0
Punkte
36
AGI geht über stdin und stdout. Wenn dein Shellskript also so gemacht ist, dass es Variablen entgegennimmt, dann kannst Du mit

exten => 100,1,agi(anruf.sh|<parameter>)

wobei <parameter> dann die ${CALLERID} in Deinem Fall ist.


(und im shell-skript dann mit $1 abgreifen:
echo -e "mesg $1\nquit\n" | telnet activy 2001 )
 

rajo

Admin-Team
Mitglied seit
31 Mrz 2004
Beiträge
1,958
Punkte für Reaktionen
0
Punkte
36
gibts davon screenshots? :)
 

allesOK

Mitglied
Mitglied seit
24 Mai 2004
Beiträge
732
Punkte für Reaktionen
0
Punkte
0
ist ja wahnsinn ... *habenwollen*
 

Ber5erker

Mitglied
Mitglied seit
6 Apr 2004
Beiträge
305
Punkte für Reaktionen
0
Punkte
0
Hier die "Screenshots" 8)

Sorry, wegen Guthabenmangel meines Handys gibts leider nur Screenshots innerhallb meiner VoIP-Anlage.

"Seb intern" hab ich mein internes Softphone genannt, "102" ist die interne Nummer des Phones.

"Drei von Tausend" hieß die Doku, die grad im Fernsehen lief ;-)

PS: War gar nicht so einfach, die Bilder hochzuladen.
Der Konqueror (KDE 3.2.2) mag die Attachment-Funktion des Boards überhaupt nicht :-(
 

Anhänge

BEEjay

Neuer User
Mitglied seit
5 Aug 2004
Beiträge
3
Punkte für Reaktionen
0
Punkte
0
Das kann man auch für isdn machen ... in www.vdrportal.de (sorry für werbung) muss man nur nach isdn + onscreen schauen dann zeigt er mittels callerid.conf auch an wer grade anruft.
 

pixelpeter

Neuer User
Mitglied seit
24 Aug 2004
Beiträge
59
Punkte für Reaktionen
0
Punkte
0
Hallo,

Was hat es mit der callerid.conf auf sich. Kann ich auf meinem system nicht finden. Wo muss das Teil liegen?
Ich möchte gern über einen AGI Script "Echte" Namen aus Callerid's ermitteln.


Peter
 

lxuser

Mitglied
Mitglied seit
4 Nov 2004
Beiträge
287
Punkte für Reaktionen
0
Punkte
0
Inverssuche

Hallo,

könnte man die Inverssuche der Telekom einbinden um den Namen des Anrufers anzeigen zu lassen?

Habe hier folgendes gefunden:
lynx "http://www.dasoertliche.de/DB4Web/es/oetb2suche/home.htm?kw_invers=123456&main=Antwort&s=2" \
-dump -nolist | grep printselected.gif -A 2 -m 1 | awk '{ if (NR>1) {printf $0} } END { print }'

anstatt der 123456 im Link muss natürlich die Telefonnummer rein.
Gruss lxuser
 

thorsten.gehrig

Mitglied
Mitglied seit
14 Jun 2004
Beiträge
490
Punkte für Reaktionen
0
Punkte
0
Hi
der einzeiler ist schonmal genial.
Ich schau mal was ich machen kann - bin aber kein script-profi.
Wer schneller ist soll sein ergebniss schonmal veröffentlichen :-D

Gruß
Thorsten Gehrig
 

thorsten.gehrig

Mitglied
Mitglied seit
14 Jun 2004
Beiträge
490
Punkte für Reaktionen
0
Punkte
0
Hier meine (vorläufige) Lösung:
in den conext für ankommende gespräche:
exten xxxx,1,System(/etc/asterisk/reverse.sh ${CALLERIDNAME} &)

das passende script sieht dann so aus:
Code:
#!/bin/sh
#
echo -e -n "mesg Anruf von " >/etc/asterisk/anruf.txt
echo -e -n "$1" >>/etc/asterisk/anruf.txt

lynx "http://www.dasoertliche.de/DB4Web/es/oetb2suche/home.htm?kw_invers=$1&main=Antwort&s=2" \
-dump -nolist | grep printselected.gif -A 2 -m 1 | awk '{ if (NR>1) {printf $0} } ' >>/etc/asterisk/anruf.txt

echo -e -n "\nquit\n" >>/etc/asterisk/anruf.txt

cat /etc/asterisk/anruf.txt | telnet vdr.gehrig.lan 2001

exit 0
Ich baue mir hier - zugegebenermassen recht umständlich - meinen Anzeigestring zusammen. Jeder kann seinen Pfad nach belieben anpassen...

Da alle mir bekannten Handynummern noch nicht per Reverse-Lookup funktionieren werde ich mir wohl noch was überlegen müssen dass ich vorher per "LookupCIDName" schaue ob ich nicht schon selbst eine Caller-ID gespeichert habe.
Ausserdem währe es vielleicht nicht schlecht die Caller-ID auch an Asterisk mit zurück zu geben - für SIP telefone (die können sowas ja auch anzeigen).
Es ist nur die Frage wie man sowas macht - und ob die Abfrage schnell genug ist...

Für verbesserungsvorschläge bin ich JEDERZEIT OFFEN UND DANKBAR!!!

Gruß
Thorsten Gehrig
 

thorsten.gehrig

Mitglied
Mitglied seit
14 Jun 2004
Beiträge
490
Punkte für Reaktionen
0
Punkte
0
verbessertes script

Hi
in Anlehnung an VDRPortal habe ich das script (von dort) auf den Asterisk angepasst.

Vorteil: einen Cache - in den man auch selbst (nicht revers-suche-erlaubte) Rufnummern eintragen kann und durch den cache weniger Onlinezugriffe (wir wollen die ja schonen.... oder?)

Die Pfade können beliebig angepasst werden...
Code:
#!/bin/sh 
# 
#pfad zum cachefile
CACHE="/var/spool/asterisk/invsuche_cache"

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

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 [URL]www.dasoertliche.de[/URL]"
    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="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;
    echo "Name: $NAME"
    echo "Details: $DETAILS"
												    
fi

echo -e -n "mesg " >/etc/asterisk/anruf.txt
echo -e -n "TEL:$NAME " >>/etc/asterisk/anruf.txt
echo -e -n "\nquit\n" >>/etc/asterisk/anruf.txt

cat /etc/asterisk/anruf.txt | telnet vdr.gehrig.lan 2001

echo -e -n "mesg " >/etc/asterisk/anruf.txt
echo -e -n "$DETAILS " >>/etc/asterisk/anruf.txt
echo -e -n "\nquit\n" >>/etc/asterisk/anruf.txt

cat /etc/asterisk/anruf.txt | telnet vdr.gehrig.lan 2001

exit 0
Für die commands.conf vom vdr noch diesen Eintrag:
Code:
Anrufliste :  grep "vdr\[.*\]: info: TEL:" /var/log/messages | tail -n 100 | tac
Jetzt müsste nur noch von den richtigen experten der Tip dazukommen wie man eine Variable (CALLERIDNAME oder so) aus einem Script heraus setzen kann.... -WER KANN HELFEN?-

Gruß
Thorsten
 

DerDominic

Neuer User
Mitglied seit
1 Dez 2004
Beiträge
151
Punkte für Reaktionen
0
Punkte
0
echo "SET VARIABLE variablenname variblenwert"

Keine Ursache
Dominic
 

thorsten.gehrig

Mitglied
Mitglied seit
14 Jun 2004
Beiträge
490
Punkte für Reaktionen
0
Punkte
0
Hi @DerDominic,

kannst du mir ein Beispiel nennen?
Ich habe zumindest in der Theorie alles verstanden - in der Praxis funktionier es bei mir aber nicht :-(

Annahme 1) ich muss per AGI und nicht per SYSTEM aufrufen -> kein Problem
Annahme 2) das File muss bei /var/lib/asterisk/agi-bin/ liegen -> kein Problem

ich habe folgendes Testscript
Code:
#!/bin/bash

echo 'SET VARIABLE CALLERIDNAME "TEST" '
echo 'SET CALLERID "0815"  '

exit 0
aber es funktioniert nicht - meine CALLERIDNAME und meine CALLERID sind wie vorher....

Wo liegt mein Fehler? Oder hat jemand ein Beispiel-AGI wo Bash und ein/ausgabe an Asterisk genutzt wird? (die meisten benutzen Perl - und das kann ich nicht ...)

Gruß
Thorsten Gehrig
 

DerDominic

Neuer User
Mitglied seit
1 Dez 2004
Beiträge
151
Punkte für Reaktionen
0
Punkte
0
Kuck mal, hier im Forum habe ich auch noch ein Bash-Script mit agi und teltarif, da kannst Du es Dir 'abkäsen'

Gruß
Dominic
 

thorsten.gehrig

Mitglied
Mitglied seit
14 Jun 2004
Beiträge
490
Punkte für Reaktionen
0
Punkte
0
Ich habs mittlerweile - (hab am ENUM-script ´abgekäst´).
Dan´ke
 

thorsten.gehrig

Mitglied
Mitglied seit
14 Jun 2004
Beiträge
490
Punkte für Reaktionen
0
Punkte
0
Neue Version vom Reverse-Callerid-Lookup-Script

Hallo
so langsamm wird das script sauber....

Änderungen / Fukntionsweisse des neuen Scipts:
es muss nach l:\var\lib\asterisk\agi-bin kopiert werden.

Es werden folgende Files angelegt:
/var/spool/asterisk/inverssuche_cache
Hier werden die suchergebnisse gecached - für Rufnummern die nicht gefunden werden kann man hier auch MANUELL den richtigen Namen eintragen - dann wird er beim nächsten mal aus dem cache gefunden!!

/var/log/asterisk/anrufliste_log
Hier stehen die eingegangenen Anrufe drinnen - in einem Format was man wunderbar am VDR lesen kann (commands.cmd => tac /pfad/zum/log/anrufliste_log | tail -n 100 )

Der gefundene Namen wird an Asterisk als variable LONGNAME zurückübergeben und kann ausgewertet werden (wird z.B. bei mir im SIP-Telefondisplay angezeigt!)

In der extensions.conf sieht das ganze bei mir so aus:

Code:
exten => 12345,1,SetLanguage(de)
exten => 12345,2,AGI,reverse.agi| ${CALLERIDNUM}
exten => 12345,3,SetCIDName(${LONGNAME})
exten => 12345,4,SetCIDNum(0${CALLERIDNUM})
Danke an alle die mir geholfen haben und an alle von denen ich abgekupfert habe! :-D

Gruß
Thorsten Gehrig
 

TomS

Neuer User
Mitglied seit
13 Nov 2004
Beiträge
199
Punkte für Reaktionen
0
Punkte
16
Hi Thorsten,

danke für das tolle Script. Jetzt fehlt nur noch der letzte Stand Deines Scripts mit der Variablen-Rückgabe - zumindest finde ichs in der letzten Nachricht nicht. Ich erlaube es mal selber auf Grundlage Deines ersten Scripte zu vervollständigen:
Code:
#!/bin/sh
#
#pfad zum cachefile
CACHE="/var/spool/asterisk/invsuche_cache"

echo -n "SET VARIABLE LONGNAME "\"


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

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 -n "$NAME"
if [ "$NAME" == "" ]; then
    #echo "Suche nach $NUMMER in [URL]www.dasoertliche.de[/URL]"
    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="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;
    echo -n "$NAME"
fi

echo -n "\""
exit 0
Gruß,
Tom
 

thorsten.gehrig

Mitglied
Mitglied seit
14 Jun 2004
Beiträge
490
Punkte für Reaktionen
0
Punkte
0
Hi TomS,

freud mich das das Script freunde findet :-D

eigentlich sollte das script attached sein - ist wohl irgendwie schiefgelaufen....

Bevor ich mir jetzt deine änderungen anschaue - lege ich lieber nochmal mein Script bei :-D

Gruß
Thorsten
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"
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 [URL]www.dasoertliche.de[/URL]"
        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="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" | telnet vdr.gehrig.lan 2001
echo -e -n "mesg $DETAILS \nquit\n"  | 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
 

Fux

Mitglied
Mitglied seit
3 Jun 2004
Beiträge
420
Punkte für Reaktionen
0
Punkte
16
Du benutzt lynx. Warum dieses ? Ginge es auch mit wget ?
 

3CX PBX - GRATIS
Linux / Win / Cloud

Statistik des Forums

Themen
232,857
Beiträge
2,027,435
Mitglieder
350,958
Neuestes Mitglied
Gerd4711