Rückwärtssuche bei dasoertliche.de neues Script

Hallo,

ich habe mir ein kleine Lösung für das Problem gebaut. Vllt. hilft es ja dem ein oder anderen weiter. Es verwendet erst einmal interne Mittel um das Caching zu erledigen.
Weiterhin kann ich statische Einträge vornehmen z.B. für Spitznamen.

Code:
; Macro aus meiner extentions.conf
[macro-incoming_call]
;  ${ARG1} - Destination(s)
;  ${ARG2} - Mailbox

; set CALLERID(name)
exten => s,1,Log(NOTICE, "Original CallerID Data:   ${CALLERID(all)}")
exten => s,n,Ringing()
exten => s,n,GotoIf($["${DB(known/${CALLERID(num)})}" = ""]?unknown:known)
exten => s,n(known),Set(CALLERID(name)=${DB(known/${CALLERID(num)})})
exten => s,n,Goto(dnd)

exten => s,n(unknown),GotoIf($["${DB(cache/${CALLERID(num)})}" = ""]?lookup:cache)

exten => s,n(lookup),AGI(name.py)
exten => s,n,Goto(dnd)

exten => s,n(cache),Set(CALLERID(name)=${DB(cache/${CALLERID(num)})})
exten => s,n,Goto(dnd)

exten => s,n(dnd),GotoIf($[${DB(dnd/${ARG1})}]?on:off) ; check the dnd flag of the destination

exten => s,n(on),Wait(5)
exten => s,n,VoiceMail(${DB(voicebox/${ARG1})},u)
exten => s,n,Hangup()

exten => s,n(off),UserEvent(Call,Source: ${CALLERID(name)} (${CALLERID(num)}),Value: ${ARG1}); Trigger für SmartHome.py
exten => s,n,Dial(${DB(call/${ARG1})},10)
exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s-NOANSWER,1,VoiceMail(${DB(voicebox/${ARG1})},u) ; Voicemail mit Ansage "nicht erreichbar"
exten => s-BUSY,1,VoiceMail(${DB(voicebox/${ARG1})},b)     ; Voicemail mit Ansage "besetzt"
exten => s-ANSWER,1,Hangup()
exten => _s-.,1,Goto(s-NOANSWER,1)         ; alles andere wie nicht erreichbar behandeln

Code:
#!/usr/bin/env python
# /usr/share/asterisk/agi-bin/name.py
#
import sys
import re
import urllib2

while 1:
    line = sys.stdin.readline()
    if not line.startswith('agi_'):
        break
    key,value = line.split(':')
    vars()[key] = value.strip()

if agi_callerid == 'unknown':
    sys.exit()

lookup = urllib2.urlopen("http://www.dasoertliche.de/Controller?form_name=search_inv&js=no&ph=%s" % agi_callerid, timeout=1)
lookup = lookup.read()
exp = re.compile('na: "([a-zA-Z0-9_ ]+)",', re.MULTILINE)
lookup = exp.search(lookup)
if lookup != None:
    sys.stdout.write("SET VARIABLE CALLERID(name) \"%s\"\n" % lookup.group(1))
    sys.stdout.flush()
    #result = sys.stdin.readline()
    sys.stdout.write("DATABASE PUT cache %s \"%s\"\n" % (agi_callerid, lookup.group(1)))
    sys.stdout.flush()
    #result = sys.stdin.readline().strip()

so long,

Marcus
 
Leider bringt das Skript keine Namen bei Schweizer Nummern

Deutsche Nummern werden bei mir korrekt mit Namen versehen. Leider klappt es bei Schweizer Nummern nicht.

[root@asterisk agi-bin]# ./ast_revers.agi 0448601414
SET VARIABLE LONGNAME "kein Eintrag"

Diese Nummer lässt sich problemlos auf http://tel.search.ch/?tel=0448601414 finden.

Kann da jemand weiter helfen?
 
Tausch mal die entsprechende Funkttion für die Schweiz durch folgendes aus:

Code:
function SCHWEIZ {
SNUM=`echo $NUMMER | sed -e "s/^+${CC[$CINDEX]}/${NAC[$CINDEX]}/"`
wget -q --tries=3 --timeout=5 -O $TMPFILE "http://tel.search.ch/result.html?name=&misc=&strasse=&ort=&kanton=&tel=$SNUM"
NAME=`grep 'class=\"fn.*' -m1 /tmp/test.txt | sed -e s/^.*fn.*\"\>//g -e s/\<'\/'a\>.*//g -e s/^.*\>//`
if [ "$NAME" != "" ]; then
	DETAILS=`grep 'class=\"adr\".*' -m1 $TMPFILE | sed -e s/^.*street\-address\"\>//g  -e s/\<'\/'div\>.*//g -e s/\<'\/'span\>//g  -e s/\<.*\-code\"\>// -e s/\<.*\locality\"\>// -e s/\<.*region\"\>//`	
	STRA=`echo $DETAILS | cut -d "," -f 1`
	ORT=`echo $DETAILS | cut -d "," -f 2`
	DETAILS="$STRA, ${LAND[$CINDEX]} $ORT"
fi
rm $TMPFILE
}

Das sollte den jeweils ersten Eintrag zu einer Telefonnummer wie gewohnt zurückliefern.
 
Auflösung scheint nicht mehr zu funktionieren beim rosa Riesen.
Hab es jetzt so geändert, damit funktionierts erst mal wieder.
Code:
NAME=`grep 'onMouseOut=""' $TMPFILE | sed -e :a -e 's/<[^>]*>//g;/</N;//ba' | sed 's/&nbsp;//'`
Ich bin leider kein Experte im StreamEditor vielleicht kann das jemand noch verbessern.
 
Ja, das wollte ich auch heute mal posten, das die deutsche Auflösung auch nicht mehr geht.

Ich habe nur im Quellcode gesehen, dass man gut nach "ItemData" suchen könnte,
habe aber leider nur so gar keine Ahnung von SED
 
Moin Gemeinde,

ich habe etwas Hilfe im Gepäck - habe das ast_revers hier übers WE eingepflegt und bin über einen Erläuterungsfehler gestolpert der oben auch behandelt aber nicht gelöst wird.

In der Datei "INSTALL" im Paket heißt es :

Code:
[...]
Nutzung in Asterisk:

exten    =>    100,1, AGI(ast_reverse.agi,${CALLERID(num}[B][COLOR=red])[/COLOR][COLOR=red][[/COLOR][/B],${EXTEN}[COLOR=red][B]][/B][/COLOR])
[...]

Wenn man das so einsetzt klappt leider gar nichts - der ambitioniertere Asterisker findet schnell die fehlende bzw. falsche Verklammerung - aber nur der Tüftler findet dann noch die falsche Umklammerung - richtig ist :

Code:
[...]
exten    =>    100,1, AGI(ast_reverse.agi,${CALLERID(num)},${EXTEN})
[...]

Danke für dieses Skript - es ist wirklich sehr solide und weitsichtig erstellt..!

EDIT: Bei mir funktioniert jede Auflösung wunderbar.

LG Stefan
 
Funktioniert die aktuelle Version (post 154) für Österreich noch bei jemanden?

Danke
Reinhard

Nachtrag: Ok...es läuft jetzt bei mir wieder. Bin schon zu müde und hab keine Ahnung warum.
Hab zusätzlich zur config, die Ösi-Settings auch direkt in die ast_revers.agi geschrieben. Sonst hab ich, glaub ich, nix gemacht.
Hauptsache es funktioniert!
 
Zuletzt bearbeitet:
Bei mir funktioniert die Abfrage bei dasoertliche.de auch nicht mehr. Hat jemand eine aktuelle, funktionierende Version des Scripts?

UPDATE: Extrem dreckig, aber funktioniert, bis jemand mit Ahnung von sed was schöneres postet:

Code:
NAME=`grep getItemData $TMPFILE | awk -F \(\'\) '{print $12}'`
DETAILS=`grep getItemData $TMPFILE | awk -F \(\'\) '{print $14,$16",",$8,$10}'`
 
Zuletzt bearbeitet:
Danke fuer den Hinweis, so klappt es (wieder).

Allerdings: Mir scheint dass die Performance der dasoertliche Abfrage sehr nachgelassen hat, tw. dauert ein Request 10 Sekunden und laenger. Das ist eigentlich kaum noch vertretbar.
 
Ich bin begeistert, das es diesen Beitrag immer noch gibt, und aktiv weitergearbeitet wird.
Ich hatte seit mehrere Jahre kein Asterisk System mehr am laufen und merke das ich gerade wider bei 0 Einsteige.

Wie ich Zeit habe teste ich mal die aktuelle Version.
 
UPDATE: Extrem dreckig, aber funktioniert, bis jemand mit Ahnung von sed was schöneres postet:
Hier mal eine Version mit sed und cut, alles mit sed zerlegen ist zu aufwändig.
Ich hab den Filter nur an der Console getestet, noch nicht im agi-script

Code:
NAME=`grep -m1 getItemData $TMPFILE | sed s/"'"//g | cut -d "," -f6`
DETAILS=`grep -m1 getItemData $TMPFILE | sed s/"'"//g | cut -d "," -f4,5,7,8 | sed s/","//g`

[EDIT]
Hab's jetzt auch im agi-Script getestet
 
Zuletzt bearbeitet:
In Perl hat nicht zufällig jemand den ausgewerteten Searchstring von klicktel oder dasoertliche? Ich würde das gerne in meinen webbasierten Anrufmonitor integrieren, kenne mich aber noch zu wenig in Perl aus als das ich so eine komplizierte Suche hinbekäme.

Wenn nicht nur die Namen aus dem Asterisk DB basierten Telefonbuch angezeigt werden, sondern auch noch mit Online Lookup wäre das schon ne tolle Geschichte.
 
ich habe auch noch 2 Fragen.
Wie kann ich unkompliziert testen ob mein Telefon überhaupt die Daten anzeigt bevor ich jetzt groß los rumwurstel?

Ich gebe zu, die ganze Installiererei und Konfiguration ist mir zu kompliziert (fehlt mir das Wissen), ich habe bereits ein Skript das eine Rückwärtsaufösung macht und mir sofort eine Email schickt.
Darin steht, welche Telefonnummer und wer mich angerufen hat.

Wie kann ich das einbinden das im Telefon der Name angezeigt wird?
Ich müsste ja irgendwie die Variablen in dieser Zeile unterbekommen, aber das ist mir ein Rätsel.
exten => 123456,4,Set(CALLERID(num)=${LONGDETAILS})

Hardware bei mir:

Alix2d13 und Asterisk und Ipfire
 
Zuletzt bearbeitet:
Vielleicht hilft das http://www.voip-info.org/wiki/index.php?page=Asterisk+cmd+SendText

Ich habe jetzt ein funktionierendes Perl Script aber wenn ich das als AGI ausführe dann sind in asterisk die Variablen ${linkoert} und ${linkklick} leer

Code:
#!/usr/bin/perl
use warnings;
use strict;

use HTML::TreeBuilder 5 -weak; # debian sid unstable: libhtml-tree-perl
use LWP::UserAgent;

my $ua = LWP::UserAgent->new();
my $linkoert;
my $linkklick;
sub oert;
sub klick;
my $number = $ARGV[0];


oert($number);
klick($number);



sub oert {
    my $urloert = "http://www1.dasoertliche.de/?form_name=search_inv&ph=".$number;
    my $responseoert = $ua->get($urloert);
    $responseoert->is_success or die "HTTP Oertliches failed", $responseoert->status_line, "\n";
    my $htmloert = HTML::TreeBuilder->new_from_content( $responseoert->content );

    if ( defined $htmloert ) {
        $linkoert = $htmloert->look_down(
        _tag => 'a',
        class => 'preview',);

        if (defined $linkoert ) {
            print "Das Oertliche: [", $linkoert->as_trimmed_text(extra_chars => '[:space:]'), "]\n";
        }

    }
}


sub klick {

    my $urlklick = "http://www.klicktel.de/inverssuche/index/search?_dvform_posted=1&phoneNumber=".$number;
    my $responseklick = $ua->get($urlklick);
    $responseklick->is_success or die "HTTP Klicktel failed", $responseklick->status_line, "\n";
    my $htmlklick = HTML::TreeBuilder->new_from_content( $responseklick->content );

    if (defined $htmlklick ) {
        $linkklick = $htmlklick->look_down(
        _tag => 'span',
        class => 'fn',);

        if (defined $linkklick ) {
            print "Klicktel: [", $linkklick->as_trimmed_text(extra_chars => '[:space:]'), "]\n";
        }
    }
}
 

danke für die Antwort, scheint wohl mit meinem Telefon nicht zu funktionieren.
Es kommt nur die Telefonnummer an..naja..egal.

Verbosity was 0 and is now 6
-- Executing [xx@ankommend:1] Dial("SIP/arcor-00000078", "SIP/xx@arcor") in new stack
-- Called xx@arcor
-- Got SIP response 503 "Service Unavailable" back from 145.x.98.25
-- SIP/arcor-00000079 is circuit-busy
== Everyone is busy/congested at this time (1:0/1/0)
-- Executing [xx@ankommend:2] System("SIP/arcor-00000078", "/root/anruf.sh xx") in new stack
-- Executing [xx@ankommend:3] SendText("SIP/arcor-00000078", "hello world") in new stack
 
ok meine Frage oben hat sich erledigt.
In AGI muss man die Variable z.B. so von Perl an Asterisk übergeben:
Code:
print "SET VARIABLE RESULTOERT \"" . $linkoert->as_trimmed_text . "\"";

Ich dachte vorher alle Variablen aus dem Script wären 1:1 auch in Asterisk sichtbar.
 
Leider funktioniert dies mit der aktuellen Seite nicht mehr (oder liegt das an mir?)

Da ich bisher noch nie mit Perl gearbeitet habe und keine Ahnung darüber habe wie ich da irgendwelche Seiten parsen kann um an die nötigen Informationen zu kommen, hier mal die betreffenden Ausschnitte von der Seite von das-örtliche.de in der Hoffnung das jmd so nett ist und es anpasst :)
Code:
<div class="item" id="entry_0" >
		<div class="adresse">
				<div class="counter">1</div>

				<span class="">
				<a href="http://www3.dasoertliche.de/?id=0092075831304231285988&recuid=7J7UEKGCINBDAOE7BSE7OGXJPOUPRO262ET4N5AB&action=58&pagePos=1&dar=1&kw=&form_name=detail&lastFormName=search_inv&ph=06532951620&ci=Zeltingen-Rachtig&recFrom=1&hitno=0&backbuab=65320000&orderby=name&ttforderby=rel&buc=92&verlNr=137&la=&page=78&context=11&arkey="   class="preview" onclick="return logDetail('0092075831304', 'name', this)"><span class="">Gessinger S. u. B.&nbsp;</span>
					</a>
				</span>

				<div class="strasse">
					Unterm Weinberg 7,&nbsp;54492 <span class="">Zeltingen-Rachtig,&nbsp;Rachtig</span></div>

<div class="topx">				
					<a href="http://www3.dasoertliche.de/?form_name=loglink&page=78&destPage=68&context=11&action=79&dest=http%3a%2f%2fwww.euroflorist.de%2fpartner.aspx%3fpartner_id%3d2006%26recip_name%3dGessinger%2bS.%2bu.%2bB.%2b%26recip_address1%3dUnterm%2bWeinberg%2b7%26recip_zip%3d54492%26recip_city%3dZeltingen-Rachtig%26recip_phone%3d%2b(0+65+32)+95+16+20&cs=f33d3a30d925995fc18e8e75b1b41bdc" class="flower" target="_blank" onclick="return wwa$.logAction('el_flowers'); ">Blumengr&uuml;&szlig;e schicken</a>
				</div>
				</div>
			<div class="zusatz">
			<!-- Logo - nicht bei Privateinträgen aus meinOE -->
				&nbsp;<span class="">(0 65 32) 95 16 20</span>
										<br/>



		            					</div>
			<div class="more">
	<div class="rssfeed0" >
		</div>
</div>
...
</div>
 
Ok, nach langer Forums-Abstinenz mal wegen dem Problem vorbeigeschaut - da es keine Lösung gab' musste ich mich mal selbst mit dem sed befassen.
Hier nun die Lösung für "Das Örtliche"...

Code:
function oertliches  {
wget -q --tries=3 --timeout=5 -O $TMPFILE "http://www1.dasoertliche.de/?form_name=search_inv&ph=$SNUM"
#NAME=`grep 'class=\"counter.*' -m1 -A1 $TMPFILE |  sed '/\"counter/d;s/<a .* onMouseOut//;s/<.*$//;s/^.*>//'`
#DETAILS=`grep 'class=\"counter.*' -m1 -A4 $TMPFILE | sed '/\"counter/,+3d;s/^[ \t]*//g;s/\&nbsp\;/ /g;s/<\/.*$//'`

#modify by mg @2013-06-16
NAME=`grep 'class=\"counter.*' -m1 -A3 $TMPFILE |  sed '/\"counter/d;s/<a .* onMouseOut=\"\">//;s/<.*"">//;s/\&nbsp;<.*>//'`
DETAILS=`grep 'class=\"counter.*' -m1 -A8 $TMPFILE | sed '/\"counter/,+3d;s/^[ \t]*//g;s/\&nbsp\;/ /g;s/<\/.*$//;s/<.*>//'`

if [ "$BLACKLIST" == "YES" ]; then
           if [ "$AUTOBLACKLIST" != "" ]; then
                      BLACK=`grep -i "$AUTOBLACKLIST" $TMPFILE`
                      if [ "$BLACK" != "" ]; then
                                 ISBLACK=Ja
                      fi
           fi
fi
#rm $TMPFILE
}
 
klicktel.de als Inversnummern Engine (mal was anderes zur Abwechslung)

Also, ich habe die Lösung mit dem örtlichen nicht hinbekommen, dafür vertraue ich mehr auf klicktel.de. Hier nun meine Lösung für die 'function DEUTSCHLAND'

Code:
##### eingefuegt auch am 17.6.13 by chris merk
# die klicktel variante
function DEUTSCHLAND {
echo "Funktion DEUTSCHLAND aufgerufen" >> $LOGFILE
SNUM=`echo $NUMMER | sed -e "s/^+${CC[$CINDEX]}/${NAC[$CINDEX]}/"`
wget -q --tries=3 --timeout=5 -O $TMPFILE "http://www.klicktel.de/inverssuche/index/search?method=searchSimple&_dvform_posted=1&phoneNumber=$SNUM"
NAME=`cat $TMPFILE | grep namelink  | sed 's/<[^>]*>//g' | sed 's/\t//g'`
DETAILS="keine Adresse"
echo $NAME
rm $TMPFILE
}

weiter wollte ich auf die sqlite3 Datenbank umstellen. Das doofe ist nur, dass Asterisk die astdb.sqlite3 immer im Lock hat. Somit ist also nix mit sauberen schreiben aus dem Script in die Datenbank.

Dafür gibts hier noch eine weitere Lösung, die meines Erachtens auch ganz nett ist. Im Dialplan (extensions.conf) lassen sich ein paar Zeilen einfügen.
(Ihr müsst es halt noch für Eure Bedürfnisse anpassen) :
Code:
exten => schluss,n,GotoIf($["${DB(NAME/+${from-number:2})}"=""]?agi)                     ;; wenn die Rufnummer noch nicht hinterlegt ist, dann springe zum agi
exten => schluss,n,Set(LONGNAME=${DB(NAME/+${from-number:2})})                        ;; ansonsten hinterlege den Namen des Anrufers in LONGNAME
exten => schluss,n,Goto(s,1000)
exten => schluss,n(agi),AGI(ast_revers.agi,${from-number})                                       ;; rufe das script auf mit der Nummer des Anrufers
exten => schluss,n,ExecIF($["${LONGNAME}" != ""]?Set(DB(NAME/+${from-number:2})=${LONGNAME}))      ;; und hinterlege das erfolgreiche Ergebnis in der astdb Datenbank


have fun !
 
Zuletzt bearbeitet:
function Schweiz -- up-to-date

so, wo wir gerade dabei sind, kann man auch grad die nicht mehr funktionierende Routine für die Schweizer Nummern aktualisieren. Also, bei mir funzt es nun wieder prima.

Code:
function SCHWEIZ {echo "Funktion SCHWEIZ aufgerufen" >> $LOGFILE
SNUM=`echo $NUMMER | sed -e "s/^+${CC[$CINDEX]}/${NAC[$CINDEX]}/"`
wget -q --tries=3 --timeout=5 -O $TMPFILE http://tel.search.ch/$SNUM 
NAME=`grep "fn org" $TMPFILE | sed 's/<[^>]*>//g' | sed 's/^\ //'`
rm $TMPFILE
}
 

Zurzeit aktive Besucher

Statistik des Forums

Themen
246,347
Beiträge
2,250,586
Mitglieder
374,001
Neuestes Mitglied
curious2315
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.