aastra 6739i mit z.B. Tel.search.ch verbinden?

VoipNeeder

Neuer User
Mitglied seit
14 Sep 2010
Beiträge
2
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen, ich suche eine Möglichkeit, das o.a. aastra mit einem online Telefonbuch zu verbinden.
Beim Gigaset Voip Telefon kann man den Gratisdienst tel.search.ch eingeben und jeder Name des Anrufenden wird nun auf dem Display angezeigt. Der Teilnehmer muss nicht lokal im Telbook eingetragen sein.
Nun versuche ich das mit dem aastra 6739i. Ein solch vortschrittliche Telefon sollte das doch schaffen.

Danke für Eure Ideen oder Lösungen:confused::confused::confused:
 
Hallo zusammen, ich suche eine Möglichkeit, das o.a. aastra mit einem online Telefonbuch zu verbinden.

Nachtrag: echt keine Ideen? Ist das denn tatsächlich soooooo schwierig oder gar unmöglich?
 
Zuletzt bearbeitet von einem Moderator:
Hier findest du die XML-Doku für das Telefon. Du brauchst irgendwo einen Webserver und lässt das Telefon wenn ein Anruf kommt die Nummer dort hinschicken und bekommst eine XML Bildschirmseite zurück. Ist eigentlich ne relativ einfache Programmieraufgabe.
 
hat jemand an diesem beispiel gearbeitet?
wäre ein interessantes projekt um zu lernen. nur würde ich ungern von null anfangen. ich hab nicht viel ahnung von XML.
dan
 
Hast du eventuell einen Asterisk-Server? Dann lass den doch den Lookup im Telefonbuch machen
 
nein, nix asterisk.
meine telefone hänger an einer fritzbox. und die anderen telefone die ich nächstens mal einrichten muss hängen an der vpbx eines anbieters (auch nicht asterisk).
soweit ich das verstanden habe sollte das mit einem XML script auf dem telefon funktionieren. was es noch braucht ist ein webserver, und den habe ich.
 
Du bräuchtest auf jeden Fall ein PHP/Perl-Script das anhand der übergebenen Rufnummer den Eintrag auf tel.search.ch ermittelt. Daraus dann das für das Aastra passende XML zu machen ist ein Kinderspiel. Sind nur paar Zeilen die man mit ins PHP-Script einbauen muss. Ich hänge später mal ein paar PHP-Beispiele hier dran. Ist echt easy
 
Du bräuchtest auf jeden Fall ein PHP/Perl-Script das anhand der übergebenen Rufnummer den Eintrag auf tel.search.ch ermittelt. Daraus dann das für das Aastra passende XML zu machen ist ein Kinderspiel. Sind nur paar Zeilen die man mit ins PHP-Script einbauen muss. Ich hänge später mal ein paar PHP-Beispiele hier dran. Ist echt easy
hai snuff,
einen webserver mit php hätte ich.
hast du bei gelegenheit mal an einem erwähnten beispiel gearbeitet?
grüess
dan
 
So hier mal ein Beispielscript um Daten aus einer MySQL-DB auszulesen:

Code:
<?php
$os = strtolower(PHP_OS);
if(strpos($os, 'win') === false) ini_set('include_path',ini_get('include_path').':include:../include');
else ini_set('include_path',ini_get('include_path').';include;..\include');
error_reporting(E_ERROR | E_PARSE);

require_once('AastraIPPhoneTextMenu.class.php');
require_once('AastraIPPhoneTextScreen.class.php');
require_once('AastraIPPhoneFormattedTextScreen.class.php');
require_once('AastraIPPhoneInputScreen.class.php');
require_once('AastraIPPhoneExecute.class.php');
require_once('AastraCommon.php');
$key = $_GET['key'];

$db_link = mysql_connect ('localhost','user','password');
$db_sel = mysql_select_db('asterisk') or die("Auswahl der Datenbank fehlgeschlagen");
$sql = "SELECT * FROM contacts WHERE COUNT > 0 AND callerid <> 'anonymous' ORDER BY lastseen DESC";

$db_erg = mysql_query( $sql );
if ( ! $db_erg )
{
  die('Ungültige Abfrage: ' . mysql_error());
}


$object=new AastraIPPhoneTextMenu();
$object->setDestroyOnExit();
$object->setStyle('none');
$object->setTitle('Anrufhistorie');

while ($zeile = mysql_fetch_array( $db_erg, MYSQL_ASSOC))
{
$object->addEntry($zeile['name'],'http://server.tld/aastra/scripts/detail.php?callerid=' . $zeile['callerid'],'');
}

mysql_free_result( $db_erg );
$object->addSoftkey('1',Aastra_get_label('Auswählen',$language),'SoftKey:Select');
$object->addSoftKey("6","Beenden","SoftKey:Exit");


# Send XML answer
$object->output();
exit;
?>
 
Hallo zusammen!

Der Thread ist zwar schon etwas alt, trotzdem erlaube ich mir noch was dazu zu schreiben...

Für eine solche einfache Sache braucht man die Aastra-PHP-Klassenbibliothekt überhaupt nicht. (Ich zumindest nicht - selbst ist der Mann! ;-))

Da ihr hier keine Möglichkeit habt Quelltexte einzufügen, füge ich den Code halt als Zitat ein:


Skript "AastraPhoneDirectoryLookup.php":

Code:
<?php
require_once 'dbconfig.inc.php';
require 'dbhandler.inc.php';

header ("Content-Type:text/xml");
$none = 'Es liegen keine Anruferinformation zu dieser Nummer vor.';
$remoteNumber = $none;

if(isset($_GET['number']) && $_GET['number'] != '')
{
	$remoteNumber = escapeString($_GET['number']);
}

if(!(isset($_GET['key']) && $_GET['key'] != ''))
{
	doXML($remoteNumber, 'Es wurde kein API-Key für die Abfrage unter tel.search.ch gefunden.');
	exit;
}

function curl_get($url, array $get = NULL, array $options = array())
{
	// CURLOPT_TIMEOUT geändert von 4 nach 1
	$defaults = array(
	CURLOPT_URL => $url. (strpos($url, '?') === FALSE ? '?' : ''). http_build_query($get),
	CURLOPT_HEADER => 0,
	CURLOPT_RETURNTRANSFER => TRUE,
	CURLOPT_TIMEOUT => 1
	);

	$ch = curl_init();
	curl_setopt_array($ch, ($options + $defaults));
	if( ! $result = curl_exec($ch))
	{
		@trigger_error(curl_error($ch));
		exit;
	}
	curl_close($ch);
	return $result;
}

if($remoteNumber != $none)
{
	$swissNumberPrefix = '0041';

	// ist schweizer nummer?
	if(substr($remoteNumber, 0, 4) == $swissNumberPrefix)
	{
		$localNumber = convertIntNumberFormatToLocalFormat($remoteNumber);

		$key = $_GET['key'];
		$params = array ( 'was' => $localNumber, 'key' => $key );
		@preg_match('#<content type="text">(.+?)</content>#is', curl_get('http://tel.search.ch/api/', $params), $matches);

		// schweizer nummer vorhanden in tel.search.ch?
		if($matches!=null || count($matches) > 0)
		{
			// schweizer nummer vothanden in tel.search.ch
			doXML($remoteNumber, $matches[1]);
		}
		else
		{
			// schweizer nummer nicht vorhanden in tel.search.ch
			$db_result = getMySQLRowValues("SELECT lastname, firstname, company, email, street, city, state, zip FROM cards WHERE phone = '".$localNumber."';");
			$last_name = $db_result[0];

			if($last_name == null || $last_name == '')
			{
				doXML($remoteNumber, $none);
			}
			else
			{
				$first_name = $db_result[1];
				$company = $db_result[2];
				$email = $db_result[3];
				$street = $db_result[4];
				$city = $db_result[5];
				$state = $db_result[6];
				$zip = $db_result[7];

				$output = $last_name.' '.$first_name;

				if(!($company == null || $company == '' || strtolower($company) == 'privat'))
				{
					$output = $output.', '.$company;
				}

				if(!($email == null || $email == ''))
				{
					$output = $output.', '.$email;
				}

				if(!($street == null || $street == ''))
				{
					$output = $output.', '.$street;
				}

				if(!($city == null || $city == ''))
				{
					if($state == null)
					{
						$state = '';
					}
					else
					{
						$state = '/'.$state;
					}
						
					if(!($zip == null || $zip == '' || $zip == '0' || $zip == 0))
					{
						$output = $output.', '.'CH-'.$zip.' '.$city.$state;
					}
					else
					{
						$output = $output.', '.$city.$state;
					}
				}

				doXML($remoteNumber, $output);
			}
		}
	}
}
else
{
	doXML($remoteNumber, $none);
}

function convertIntNumberFormatToLocalFormat($arg1)
{
	return '0'.substr($arg1, 4);
}

function getMySQLRowValues($sqlQuery)
{
	$resultSet = mysql_query($sqlQuery);
	$row = mysql_fetch_array($resultSet);
	return $row;
}

function doXML($title, $text)
{
	print '<AastraIPPhoneTextScreen>'."\r\n";
	print '<Title>'.$title.'</Title>'."\r\n";
	print '<Text>'.$text.'</Text>'."\r\n";
	print '</AastraIPPhoneTextScreen>';
}

function escapeString($arg1)
{
	if(get_magic_quotes_gpc())
	{
		$arg1=stripslashes($arg1);
	}

	$arg1=str_replace('%','\%',$arg1);
	$arg1=str_replace('_','\_',$arg1);
	$arg1=addslashes($arg1);
	return $arg1;
}

?>


Skript "dbconfig.inc.php":
(Password entfernt...)

Code:
<?php
$db_host = 'localhost';
$db_database = 'contacts';
$db_username = 'contacts';
$db_password = 'hier_kommt_das_passwort_rein';
$db_port = 3306;
?>



Skript "dbhandler.inc.php":

Code:
<?php
mysql_connect($db_host, $db_username, $db_password) or die('Datenbankverbindung fehlgeschlagen');
mysql_select_db($db_database);
?>



...eigentlich könnte man alles in eine Datei tun; allerdings habe ich die 2 Skripts zum includen von einem anderen (grösseren) Projekt welches sehr strukturiert aufgebaut ist. Für IP-Phone-Anwendung ist das allerdings eher überflüssig...
 
Zuletzt bearbeitet von einem Moderator:
Bei der Konfiguration müsst ihr einfach in der Admin-Weboberfläche des Aastra-IP-Phones unter "Erweiterte Einstellungen" -> "URI-Aktion" -> "Ankommende Anrufe" die entsprechende Adresse eintragen im Format

http(s)://server_oder_ip/AastraPhoneDirectoryLookup.php?number=$$REMOTENUMBER$$&key=lizenzschlüssel_für_tel.search.ch

Den Lizenzscchlüssel für tel.search.ch gibt's überigens gratis. Ein paar Minuten nachdem ich das Formular ausgefüllt habe, kam er per Mail an...


P.S.: Habe auch ein 6739i...
 
Hallo Jan
Ich selbst bin schon ca. einem Jahr dran um die Abfrage via tel.search endlich auf dem 6739i zu machen. Ich bringe es nicht auf die Reihe!
Genau wie du es beschrieben hast habe ich das gemacht, leider bekomme ich nie eine Meldung zurück. Testeshalber habe ich nun eine XML-Taste mit der vordefinerten Nummer abgelegt, da kommt leider auch nichts.
Das Telefon mach keinen Wank..

Braucht man hier einen Speziellen Web-Server oder reicht der Standart auf einem Synology NAS?

Vielen Dank für ein Feedback
 
Hallo boomli

Wie hast du denn das bisher versucht, was hast du in der Weboberfläche unter "Erweiterte Einstellungen" -> "URI-Aktion" -> "Ankommende Anrufe" angegeben?

Was willst du mit dem Webserver auf deinem NAS? Der ist eigentlich nur dazu da um die Admin-Oberfläche des NAS anzuzeigen... Es sei denn du hast den Webserver auf deinem NAS entsprechend "gehackt" damit der auch PHP versteht... (das hätte übrigens einen Garantieverlust zur Folge)

Ich habe mein PHP-Skript bei meinem Hosting-Anbieter am laufen. Die meisten gratis-Hoster können auch PHP-Skripts verarbeiten, bspw.:

-freehostia.com
-000webhost.com



Gruss, Jan
 
Hallo Jan

Besten Dank für dein Feedback.
Der Webserver ist ein Synology NAS auf dem der Webserver inkl. php freigeschaltet ist. Habe nun dein Script auf meinen externen Webserver geladen, das funktioniert leider auch nicht.
Der Key von tel.search habe ich kontrolliert, das passt.. (Habe so eine xml-Meldung erhalten..)
komischerweise, wenn ich den Link: (http(s)://server_oder_ip/AastraPhoneDirectoryLookup.php?number=$$REMOTENUMB ER$$&key=lizenzschlüssel_für_tel.search.ch)
im Browser normal eingebe kommt immer die Meldung:
This page contains the following errors:
error on line 1 at column 1: Document is empty
Below is a rendering of the page up to the first error.
Ist das Normal?
Kann der Fehler daran liegen, dass die Datenbank nicht richtig vorhanden ist oder wird diese Suche übersprungen und es wird auf tel.search gesucht?
Am Telefon sollten die richtigen Einstellungen sein..

Besten Dank für deine Antwort.

Gruess Boomli
 
aha, du nutzt dein nas als webserver? dann kannst du das skript dort laufen lassen, nur hast du dann keine mysql-datenbank... evtl. kannst du ja dem linux auf dem nas das packet "mysql-server" nachinstallieren? ;-)

allerdings dürftest du bei solchen eingriffen in das nas die garantie verlieren (ist zumindest bei iomega so) von daher nicht wirklich zu empfehlen...

wie ich das verstehe, hast du nen eigenen key, und nicht etwa den wert "lizenzschlüssel_für_tel.search.ch" verwendet??


wenn du natürlich keine eigene mysql-datenbank am laufen hast (wie ich beim nas davon ausgehe) kann es schon sein dass es einen fehler gibt wenn nichts unter tel.search.ch zu finden ist.


denn die priorität ist folgendermassen: 1. wird tel.search.ch abgefragt, 2. wird (fall bei tel.search.ch nichts gefunden wird) die "interne" mysql-datenbank abgefragt. diese müsstest du ergänzen...
 
Bei Synology NAS-Systemen kann man Webserver, PHP und MySql einfach per Mausklick über das Webinterface installieren (und noch vieles mehr), also kein Garantieverlust!
 
Hallo Jan
Ich habe alles eingestellt bezüglich Datenbak-Login. komischerweise kommt auch nichts wenn ich $$number$$ mit einer Nummer versehe und dies auf eine XML-Taste des Telefons ablege..
Sagt dir die oben genannte Fehlermeldung etwas? Ist das Normal?

Boomli
 
@snuff: ok, danke für die info.


@boomli: der get-parameter "number" muss im internationalen format angegeben werden:

number=0041326123456


such mal eine nummer, welche bei tel.search.ch hinterlegt ist, und gib diese im internationalen format im browser als get-parameter ein...


der parameter $$REMOTENUMBER$$ kommt bei mir / meinem voip-anbieter IMMER im internationalen format rein...

die oben gennante fehlernmeldung sagt mir nichts, es könnte sein das diese durch die fehlende datenbank verursacht wird...
 
Das gibts ja gar nicht! Jetzt funktioniert die Auflösung per XML-Taste! Komischerweise hatte ich alle Formate (National, International, Kanonisch) getestet! Auf einmal habe ich auch den Fehler nicht mehr via NAS (Webserver beliebt dieser komische Fehler)!
Leider gibt mein Telefon nur National die Rufnummer raus.. Kann ich da was umprogrammieren, dass 071 xxx xx xx mit 0041 71 xxx xx xx ersetzt wird?

Vielen Dank für deine Hilfe..!
 

Statistik des Forums

Themen
244,827
Beiträge
2,219,006
Mitglieder
371,520
Neuestes Mitglied
fredl_2
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.