Caller Name Lookup Sources HTTP

0verkill

Neuer User
Mitglied seit
14 Mai 2007
Beiträge
38
Punkte für Reaktionen
0
Punkte
0
wie wärs mit "einfach mal über den Tellerrand rausschauen" und mal hier im Asterisk Forum generell suchen? Wenn ich "Reverse Lookup" eingebe, finde ich z.B. diesen Thread der Dir bestimmt weiterhilft.
 
Danke für die Blitzantwort Betateilchen!

Leider hilft mir das ganz und garnicht weiter, weil der seinen Lookup auf genau dieselbe URL macht wie ich.

http://www.dasoertliche.de/DB4Web/es/oetb2suche/home.htm?kw_invers=$NUMMER&main=Antwort&s=2

Das funktioniert so aber leider nicht. :(

Ich möchte es auch nicht über ein Skript machen, sondern direkt in FreePBX konfigurieren.
 
Lösungen für Reverse Lookup gibt es noch einige andere hier im Forum. Benutze halt mal die Suche und schau nach, wie das dort gelöst wird :rolleyes: Mein o.g. Link sollte ja nur mal ein Beispiel sein, daß die Suche hier im Forum wirklich Ergebnisse zu Deiner Frage liefert.
 
Falls jemand produktiv etwas beitragen möchte, hier der aktuelle Stand:

http://dasoertliche.de/?form_name=search_inv&page=RUECKSUCHE&context=RUECKSUCHE&action=STANDARDSUCHE&la=de&rci=no&ph=$NUMBER

Auf diese Weise kann ich mit dem Webbrowser Ergebnisse bei dasoertliche.de erhalten.
Habe es jetzt versucht in FreePBX zu konfigurieren - ich scheitere aber offenbar an der übergabe des NUMBER-Parameters oder der Zerlegung dieses Strings...

Help the noob!!! :-Ö
 
Schau dir mal den Beitrag an:
http://www.ip-phone-forum.de/showthread.php?t=60980&page=6&highlight=reverse.agi
Das hat bei mir ganz gut gefunzt, wobei hier die Ergebnisse in einem Cachefile abgelegt werden

Den Link find ich eigentlich noch interessanter:
http://www.guest-voip.ch/VoIP_Clien...zeige_des_Anrufenden_ueber_tel.search.ch.html
Leider geht der Script nur mit telsearch. Ich wollte mir mal bei Gelegenheit anschauen, ob man den nicht ummodeln kann.
Hat bei mir aber keine hohe Priorität, und viel Plan hab ich ehrlich gesagt auch noch nicht davon.
Der Script macht ne Rückwärtssuche, wenn die Nummer nicht im Trixbox Phonebook ist, und fügt ihn dann in die DB ein. Das Phonebook kannst Du nach wie vor über die GUI bzw. über CSV bearbeiten.

Gruss Trude
 
Ich bin bei meiner Lösung so vorgegangen:
- Trixbox 2.2 aus ISO installiert
- über die freePBX-Administration Module installiert u. aktualisiert,
das ergibt eine Trixbox mit Asterisk 1.2.18-4 und freePBX 2.2.1
mit insbesondere dem Modul 'cidlookup' v 1.1.1

- in /var/www/html die Datei cidlookup.php erstellen mit diesem Inhalt:
PHP:
<?php
# Aufruf mit 'cidlookup.php?cid=49301234567'
# Liefert Name zurueck

    $name    = "";
    $details = "";

    if ($cid == "") {
        $name    = "anonymer Anrufer";
        $details = "Keine Details";
    } else {
        $cid = preg_replace("|^49|s","0",$cid);
        # reverse Lookup via www.dasoertliche.de
        $host = 'www3.dasoertliche.de';
        $path = '/Controller';
        $data = 'form_name=search_inv&la=de&page=5&context=4&action=43&buc=&ph=' . rawurlencode ($cid);

        $fp = fsockopen ($host, 80);
        if (!$fp)
            $name = "Fehler in Abfrage $errstr ( $errno)";
        else {
            unset ($result);
            fputs ($fp, 'POST ' . $path . ' HTTP/1.1' . "\r\n");
            fputs ($fp, 'Host: ' . $host . "\r\n");
            fputs ($fp, 'Content-type: application/x-www-form-urlencoded' . "\r\n");
            fputs ($fp, 'Content-length: ' . strlen ($data) . "\r\n");
            fputs ($fp, 'Connection: close' . "\r\n\r\n");
            fputs ($fp, $data);
            while (!feof($fp))
                    $result .= fgets($fp, 128);
            fclose ($fp);
        }

        # Name und Anschrift herausfischen
        $reg_name    = '/title="Details zu diesem Eintrag anzeigen" class="entry[^"]*">([^<]+)<\/a>/';
        $reg_details = '/<\/div>\s+([^<]+)<br\/>/';

        if (preg_match ($reg_name, $result, $matches))
            $name =  str_replace ('&nbsp;', ' ', $matches[1]);
        if (preg_match ($reg_details, $result, $matches))
            $details =  str_replace ('&nbsp;', ' ', $matches[1]);

        if ($name == "") {
            if (preg_match ('/Kein Teilnehmer gefunden/', $result, $matches)) {
                $name =  "Telefonnummer $cid";
                $details = "Kein Eintrag";
            }
        }
    }
    print "$name . $details";
?>

- in /var/www/html/admin/modules/cidlookup/functions.inc.php:
Zeile 160 ändern in:
#original: $ext->add('cidlookup', 'cidlookup_'.$item['cidlookup_id'], '', new ext_setvar('CALLERID(name)', $curl));
# durch diese folgenden Zeilen ersetzen:
$ext->add('cidlookup', 'cidlookup_'.$item['cidlookup_id'], '', new ext_setvar('MyCallerName', $curl));
$newCaller = '${MyCallerName:0:$[${LEN(${MyCallerName})}-1]}';
$ext->add('cidlookup', 'cidlookup_'.$item['cidlookup_id'], '', new ext_setvar('CALLERID(name)', $newCaller));
Diese Anpassung war notwendig, da aus der CURL-Abfrage dem Ergebnis-String ein störendes CR angehängt wird, das erst noch entfernt werden muß.

- in freePBX Setup/Caller Name Lookup Sources:
Neue Source anlegen mit:
Description: 'httplookup' (beliebig)
Source Type: http
Host: localhost
Path: '/cidlookup.php'
Query: 'cid=[NUMBER]'

-in freePBX Setup/Inbound Routes:
in entsprechender Allgemein-Route:
CID Lookup Source: die vorher angelegte 'httplookup' auswählen

Wenn man der 'Lookup Source' dann noch erlaubt, die Ergebnisse im Phonebook zu cachen, läuft die Inversanzeige recht flüssig.

Gruss, hjg
 
Supi - Danke ->> Werde ich so testen...

:p
 
Hi,

Script läuft super mit der Trixbox 2.6. Allerdings werden Sonderzeichen nicht richtig Logfile dargestellt. Vermutlich wegen UTF8 im Zeichensatz. Gibt es dazu schon eine Anpassung?

danke
hauke
 
Schnelle Anpassung für UTF8 (Website ist in ISO-8859-1)

Mach einfach aus der Zeile

PHP:
print "$name . $details";

Folgendes:

PHP:
print utf8_encode($name) ." . ". utf8_encode($details);

Dann sind die Daten von ISO-8859-1 nach UTF8 konvertiert.
 
kann das sein das das Script nicht mehr funktioniert?

habe unteranderem:
http://ip-asterisk/cidlookup.php?cid=02******* [nummer kann aufgelöst werden]
probiert ... als es noch funktionierte wurde der Name, etc richtig ausgegeben und nun erscheint einfach eine leere Seite...

hab ein wenig rumgespielt und festgestellt wenn ich zum debuggen die
Variable $result ausgeben lasse:
Code:
###########ANFANG (result)######### HTTP/1.1 200 OK Date: Thu, 07 Aug 2008 16:02:12 GMT Server: Apache-Coyote/1.1 Content-Type: text/html;charset=ISO-8859-1 Content-Length: 319 Set-Cookie: JSESSIONID=629AC9E1B073CC8226837C5DAC0EB31F; Path=/ Set-Cookie: Orte=|; Domain=.dasoertliche.de; Expires=Tue, 25-Aug-2076 19:16:19 GMT Set-Cookie: Ortsliste=; Domain=.dasoertliche.de; Expires=Tue, 25-Aug-2076 19:16:19 GMT Set-Cookie: Suchwortliste=; Domain=.dasoertliche.de; Expires=Tue, 25-Aug-2076 19:16:19 GMT Vary: Accept-Encoding Connection: close 
ÖTB-Relaunch Exception: 
For input string: "" ##########ENDE (result)########

Jemand eine Idee?
Was bedeutet "ÖTB-Relaunch Exception: "

kann es sein das "dasoertliche.de" den zugriff via fsockopen nicht mehr gewährt?

danke schonmal für die Hilfe! :)

MfG
Carsten
 
Hallo Carsten,

hast du inzwischen ne Lösung gefunden?

Gruss Trude
 
Hallo Trude und Freunde,

nach langem Debuggen und Rumsuchen habe ich die Lösung gefunden:

Der Webserver vom Örtlichen möchte einen Useragent sehen, also einfach diese Zeile noch einfügen nach dem ersten fputs...

PHP:
fputs ($fp, 'POST ' . $path . ' HTTP/1.0' . "\r\n");
fputs ($fp, 'User-Agent: Mozilla/4.0 Compatible' . "\r\n"); // eingefügt Dennis Imm 30-01-09

Ich gebe aber gleich eine neue Anfrage mit auf den Weg. Wie bekomme ich das jetzt in FreePBX 2.5 zum laufen?

Überhaupt schickt FreePBX keine Anfrage bei eingehendem Ruf an den eingestellten Cidlookup Server per HTTP.

Und welche Antwort geht wie formatiert an FreePBX zurück?

Gruß Dennis

Update!!:

So das Script funktioniert wie vorgesehen in FreePBX 2.5.

Ohne Codeänderung in /var/www/html/admin/modules/cidlookup/functions.inc.php!

Gruß Dennis
 
Zuletzt bearbeitet:
Hallo Dennis,

prima der Script läuft so wieder bei mir.

DAAAAAANKE
 
Da die Seite wohl verändert wurde habe ich das Scripe angepasst und um eine Cache-Funktion erweitert. War eher zum eigenen Bedarf aber vielleicht kann ja jemand was damit anangen.
Vorraussetzung: SQLite3 (PDO) Modul für PHP und Schreibrechte in dem Verzeichnis, in dem sich das Script befindet, damit die Datenbank angelegt werden kann).

PHP:
<?php                                                                                                                                                                      
// dasoertliche.de reverse lookup by ravage ( ravage {at} haxxors.com ) 12/2009                                                                                               
function getCIDData($cid) {                                                                                                                                                
   if ($cid == "") return 0;                                                                                                                                               
   if (!file_exists('./cid.sqlite')) createDB();                                                                                                                            
   if (!is_writable('./cid.sqlite')) return 0;                                                                                                                              
   $dbh = new PDO("sqlite:./cid.sqlite");                                                                                                                                  
   $sql = "SELECT * FROM contacts WHERE cid='$cid'";                                                                                                                       
   foreach ($dbh->query($sql) as $row)                                                                                                                                     
   {                                                                                                                                                                       
      return $row;                                                                                                                                                         
      $dbh = null;                                                                                                                                                         
   }                                                                                                                                                                       
   return 0;                                                                                                                                                               
   $dbh = null;                                                                                                                                                            
}                                                                                                                                                                          

function createDB() {
   $dbh = new PDO("sqlite:./cid.sqlite");
   $count = $dbh->exec("CREATE TABLE contacts (cid TEXT, city TEXT, firstname TEXT, id INTEGER PRIMARY KEY, lastname TEXT, pc TEXT, street TEXT);");
   $dbh = null;                                                                                                                                     
}                                                                                                                                                   

function putCIDData($cid,$firstname,$lastname,$street,$pc,$city) {
   if ($cid == "") return 0;                                      
   $dbh = new PDO("sqlite:./cid.sqlite");                         
   $count = $dbh->exec("INSERT INTO contacts(cid, firstname, lastname, street, pc, city) VALUES ('$cid', '$firstname','$lastname','$street', '$pc', '$city')");
   $dbh = null;                                                                                                                                              
   if ($count == 1) return 0;                                                                                                                                
   return 1;                                                                                                                                                 
}                                                                                                                                                            

function remoteQuery($cid) {
        # reverse Lookup via www.dasoertliche.de
        $host = 'www3.dasoertliche.de';         
        $path = '/Controller';                  
        $rdata = 'form_name=search_inv&la=de&page=5&context=4&action=43&buc=&ph=' . rawurlencode ($cid);

        $fp = fsockopen ($host, 80);
        if (!$fp)                   
            $name = "Fehler in Abfrage $errstr ( $errno)";
        else {                                            
            unset ($result);                              
            fputs ($fp, 'POST ' . $path . ' HTTP/1.1' . "\r\n");
            fputs ($fp, 'User-Agent: Mozilla/4.0 Compatible' . "\r\n");
            fputs ($fp, 'Host: ' . $host . "\r\n");                    
            fputs ($fp, 'Content-type: application/x-www-form-urlencoded' . "\r\n");
            fputs ($fp, 'Content-length: ' . strlen ($rdata) . "\r\n");             
            fputs ($fp, 'Connection: close' . "\r\n\r\n");                          
            fputs ($fp, $rdata);                                                    
            while (!feof($fp))                                                      
                    $result .= fgets($fp, 128);                                     
            fclose ($fp);                                                           
        }                                                                           

        // Name
        $reg    = '/na: "(.+)",/';       
        if (preg_match ($reg, $result, $matches)) {
            $name =  utf8_encode(trim(str_replace ('&nbsp;', ' ', $matches[1])));
            $name = explode(" ",$name);                                          
        }                                                                        

        // Street
        unset($matches);
        $reg    = '/st: "(.+)",/';
        if (preg_match ($reg, $result, $matches)) {
            $st =  utf8_encode(str_replace ('%20', ' ', $matches[1]));
        }                                                             

        // City
        unset($matches);
        $reg    = '/ci: "(.+)",/';
        if (preg_match ($reg, $result, $matches)) {
            $ci =  utf8_encode(str_replace ('%20', ' ', $matches[1]));
        }

        // PC
        unset($matches);
        $reg    = '/pc: "(.+)",/';
        if (preg_match ($reg, $result, $matches)) {
            $pc =  utf8_encode(str_replace ('%20', ' ', $matches[1]));
        }
       $data['firstname'] = $name[1];
       $data['lastname'] = $name[0];
       $data['street'] = $st;
       $data['pc'] = $pc;
       $data['city'] = $ci;
       $dbh = null;
       return $data;
}

$cid = $_GET['cid'];

if ($cid == "") {
   die();
} else {
    if (substr($cid,0,1) == ' ') $cid = substr($cid,1);
    if (substr($cid,0,2) == '0049') $cid = '0'.substr($cid,2);
    if (substr($cid,0,2) == '49') $cid = '0'.substr($cid,2);
    // check for cache
    $data = getCIDData($cid);
    if ($data == 0) {
       $data = remoteQuery($cid);
       if ($data['firstname'] != "")
          putCIDData($cid,$data['firstname'],$data['lastname'],$data['street'],$data['pc'],$data['city']);
    }
    // Output
    $output = $data['firstname'].' '.$data['lastname'];
    if ($data['street'] != "") $output .= ",".$data['street'];
    if ($data['city'] != "") $output .= ",".$data['city'];
    echo $output;
}
?>
 
Zuletzt bearbeitet:
Hallo!

da ich in php absolut planlos bin, stehe ich mit folgender Meldung auf dem Schlauch.
Parse error: syntax error, unexpected T_STRING in /var/www/html/cidlookup.php on line 3

Kann mir einer bitte helfen.

Danke
 
Zuletzt bearbeitet:
Hallo,
nicht böse sein, ich weiß es ist schon etwas alt. Wollte das jetzt mal nutzen. Leider wird garnichts angezeigt, ist das Script noch aktuell nach der langen Zeit oder hat sich beim Örtlichen etwas geändert ?

Chris
 
Hallo,

ich weiß der Thread ist schon älter aber ich habe das Ursprungsscript wieder auf den Stand gebracht:

PHP:
<?php 
# Aufruf mit 'cidlookup.php?cid=49301234567' 
# Liefert Name zurueck 

    $name    = ""; 
    $details = ""; 

    if ($cid == "") { 
        $name    = "anonymer Anrufer"; 
        $details = "Keine Details"; 
    } else { 
        $cid = preg_replace("|^49|s","0",$cid); 
        # reverse Lookup via www.dasoertliche.de 
        $host = 'www3.dasoertliche.de'; 
        $path = '/Controller'; 
        $data = 'form_name=search_inv&la=de&page=5&context=4&action=43&buc=&ph=' . rawurlencode ($cid);
 
        $fp = fsockopen ($host, 80); 
        if (!$fp) 
            $name = "Fehler in Abfrage $errstr ( $errno)"; 
        else { 
            $result = ""; 
            fputs ($fp, 'POST ' . $path . ' HTTP/1.1' . "\r\n"); 
            fputs ($fp, 'User-Agent: Mozilla/4.0 Compatible' . "\r\n");            
            fputs ($fp, 'Host: ' . $host . "\r\n"); 
            fputs ($fp, 'Content-type: application/x-www-form-urlencoded' . "\r\n");
            fputs ($fp, 'Content-length: ' . strlen ($data) . "\r\n"); 
            fputs ($fp, 'Connection: close' . "\r\n\r\n"); 
            fputs ($fp, $data); 
            while (!feof($fp)) 
                    $result .= fgets($fp, 128); 
            fclose ($fp); 
        } 

        # Name und Anschrift herausfischen 
        $reg_name    = '/class="preview" onclick="logDetail[(][)]">([^&]*)/';
        $reg_details = '/<div class="strasse">\W*([^<]*)/m';        

        if (preg_match ($reg_name, $result, $matches)) 
            $name =  str_replace ('&nbsp;', ' ', $matches[1]); 
        if (preg_match ($reg_details, $result, $matches)) 
            $details =  str_replace ('&nbsp;', ' ', $matches[1]); 
            $details =  str_replace ('nbsp;', '', $details);
        if ($name == "") { 
            if (preg_match ('/war leider nicht erfolgreich/', $result, $matches)) { 
                $name =  "Telefonnummer $cid"; 
                $details = "Kein Eintrag"; 
            } 
        } 
    } 
    print utf8_encode($name) ." . ". utf8_encode($details);
#    print "$name . $details"; 
?>


viele Grüße
Andi
 
Zuletzt bearbeitet:
Es gibt für Caller Name Lookup sogar ein eigenes, erweiterbares Modul für FreePBX: Superfecta
 
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.