Asterisk meets VTiger
Asterisk und VTiger sind zwei ausgewachsene Businessapplikationen welche im Geschäftsalltag sehr nützlich sind. Asterisk ist als umfangreiche, scriptfähige und fast alles könnende Telefonanlage welche zudem noch frei verfügbar und ohne Lizenzkosten nutzbar ist in vielen Firmen ein sehr nützlicher Helfer um die alltägliche Kommunikation ab zu wickeln.
Bei der Arbeit ist es oft auch wichtig, mit Kunden zu kommunizieren und diese Vorgänge elektronisch zu archivieren so dass jeder Mitarbeiter eine Übersicht hat, was mit dem Kunden gelaufen ist. Das und noch viel mehr kann man mit VTiger machen. Außerdem dient VTiger auch als zentrale Kontaktdatenbank.
Diese Kontaktdatenbank ist das Feature was ich mit Asterisk verbunden habe. Zugegeben es ist keine große Sache aber für die alltägliche Arbeit sehr hilfreich.
Mit Asterisk kann man bei einem SIP Channel für einkommende Telefonate einen CallerIDName ( CALLERID(name) ) setzen. Dieser wird zusätzlich zu der anrufenden Telefonnummer mit übertragen. Ich habe ein kleines Script geschrieben (oder besser eine vorhandene Vorlage ab geändert/erweitert
), welches als AGI Script bei jedem neuen Anruf auf gerufen wird und in der Datenbank vom VTiger nach Übereinstimmungen zwischen anrufender Telefonnummer und gespeicherter Telefonnummern sucht um diese dann als CallerIDName an zu zeigen.
Hier nun erstmal der Code für das Script – genannt wurde es “get_name_from_database.agi” und liegt in /usr/share/asterisk/agi-bin bei Debian (bei anderen Linux/Unixen liegt das ggf wo anders)
#!/usr/bin/php -q
request[agi_callerid]);
$cid = $agi->request[agi_callerid];
$db = ‘vtigercrm504′;
$dbuser = ‘vtigercrm’;
$dbpass = ‘vtigercrm’;
$dbhost = ‘localhost’;
mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db(“$db”); //or die(“could not open database”);
$cid = preg_replace(‘/^\+../’, ”, $cid); // remove leading country code
$cid = preg_replace(‘/^0+0../’, ”, $cid); // remove leading zeros and country code
$cid = preg_replace(‘/(.)/’, ‘%\1′, $cid) . “%”; // put % between each number
$sql = “SELECT vtiger_contactdetails.firstname,vtiger_contactdetails.lastname FROM vtiger_contactdetails, vtiger_contactsubdetails WHERE vtiger_contactdetails.contactid=vtiger_contactsubdetails.contactsubscriptionid AND ( vtiger_contactdetails.phone LIKE ‘$cid’ OR vtiger_contactdetails.mobile LIKE ‘$cid’ OR vtiger_contactsubdetails.homephone LIKE ‘$cid’ OR vtiger_contactsubdetails.otherphone LIKE ‘$cid’ ) LIMIT 1 “;
$row = mysql_query($sql);
if( mysql_num_rows($row) == 1 && strlen($cid) > 4 ) { //wenn man interne nummern waehlt soll die interne nummer angezeigt werden
$row = mysql_fetch_array( $row );
if ( $row['firstname'] ) $name .= $row['firstname'].” “;
if ( $row['lastname'] ) $name .= $row['lastname'];
} else {
$name = $agi->request[agi_callerid]; //calleridname wird auf die callerid gesetzt
}
$agi->set_variable(“lookupcid”, $name);
?>
Wichtig zu erwähnen ist hier, dass auf dem Server zusätzlich noch eine Erweiterung für VTiger läuft welche etwas ähnliches tut – VTiger Computer Telephon Integration für Asterisk. Diese liefert php_agi mit welches zwingend für das Script erforderlich ist.
Eingebunden wird das Script auch ziemlich einfach in den incomming Kontext des Asterisk Dialplan – in meinem Falle “isdn” genannt.
; holt aus der Datenbanke Vor und Nachname falls vorhanden
exten => isdn,n,AGI(get_name_from_database.agi)
exten => isdn,n,Set(CALLERID(name)="${lookupcid}")
Dabei ist es allerdings notwendig das AGI Modul vom Asterisk zu laden. Dazu empfiehlt es sich mal einen Blick in die extconfig.conf von Asterisk zu werfen oder “modules show like agi” auf der Asterisk Konsole eingeben – dann sollte res_agi.so angezeigt werden.
Im Grunde wäre es das schon. Das Script ist nur mit Asterisk 1.4 getestet. Ich möchte mich auch entschuldigen das das Script in PHP ist – eine Ruby Vorlage gab es nicht und ich war zu faul da noch was zu schreiben
Viel Spaß
