CallerID mit AGI-scipt

pier

Neuer User
Mitglied seit
18 Okt 2004
Beiträge
11
Punkte für Reaktionen
0
Punkte
0
Hallo alle zusammen,

ich habe Asterisk über oh323 mit einer PBX Anlage vernetzt. Leider werden momentan keine Name von der Anlage zu Asterisk gezeigt (ausser Bündel Name der Anlage). Gibt es eine Möglichkeit über AGI bei ankommende Anrufe (PBX->Asterisk) einen Script zu benutzen der die Nummer in einer Textdatei kontrolliert und wenn bekannt der Name am Display vom SIPphone anzeigt.

Die Textdatei soll " Number Name" als Format haben.
Gibt es zufällig nicht schon solche Script zun downloaden?

Vielen Dank im voraus...

pier
 
Läuft bei mir mit einer Datenbank im Hintergrund. Allerdings nicht release-fähig da vollkommen undokumentiert.

Bei Fragen kann ich vielleicht weiter helfen und mal einen Perl-Code-Schnipsel als Ansatz mitgeben:

Code:
while(<STDIN>) {
    chomp;
    last unless length($_);
    if (/^agi_(\w+)\:\s+(.*)$/) {
        $AGI{$1} = $2;
    }
}

if ($cid=$AGI{'callerid'}) {
    if ($cid=~/\<?(\d+)\>?$/) {
        print STDERR "CallerIDNum=$1\n";
        my $cidn=$1;
        $AGI{calleridnum}=$1;
        # strip off prefix digits...
        $cidn=~s/^9\d(\d{6})/$1/;
        ($AGI{callername}, $AGI{callernameformatted})=getCallerID($cidn, $dbh);
        print STDERR "CID-NAME of $cidn = ".$AGI{callername}."\n";
    } else {
        print STDERR "cid-num not extracted :(\n";
    }
}

if ($AGI{callername}) {
    my $newcid="\"$AGI{callername}\"<$AGI{calleridnum}>";
    print STDERR "1.  Set callerid to '$newcid'...";
    print "SET callerid $newcid\n";
}

Sowie
Code:
sub getCallerID($;$) {
    my $cidnum=shift;
    my $dbh=shift || dbConnect();
    my $sth;
    my $where;
    my $baseQuery="SELECT num, org, name FROM caller_names WHERE (org != '' OR org != NULL OR name != '' OR name != NULL) AND ";

    $sth = $dbh->prepare($baseQuery.
        " num=? LIMIT 1");
    if (!$sth->execute($cidnum)) {
        # warn "Error SELECTing caller data for $cidnum";
        return 0;
    }

    unless($sth->rows) {
        $sth = $dbh->prepare($baseQuery.
            " wildcard=1 AND num = substring(? for char_length(num)) ORDER BY char_length(num) DESC LIMIT 1");
        if (!$sth->execute($cidnum)) {
            # warn "Error SELECTing caller data for $cidnum";
            return 0;
        }
    }

    if ($sth->rows) {
        # ($db_state, $db_quality, $ts);
        my ($num, $org, $name) = $sth->fetchrow_array();

    $org =~s/[^A-Za-z0-9 \-\.\,äöüÄÖÜß\?\[\]\(\)\/\*]/_/g;
    $name=~s/[^A-Za-z0-9 \-\.\,äöüÄÖÜß\?\[\]\(\)\/\*]/_/g;


        if ($org && $name) {
            return("$org ($name)","$org\n$name");
        } elsif ($org) {
            return($org,$org);
        } elsif ($name) {
            return($name,$name);
        }
    } else {
        return ("",""); # no results...
    }
}
 
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.