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:
 

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.
Nachtrag: echt keine Ideen? Ist das denn tatsächlich soooooo schwierig oder gar unmöglich?
 
Zuletzt bearbeitet von einem Moderator:

neffs

Neuer User
Mitglied seit
6 Mai 2005
Beiträge
148
Punkte für Reaktionen
0
Punkte
16
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.
 

gonzzo

Neuer User
Mitglied seit
28 Mrz 2007
Beiträge
51
Punkte für Reaktionen
0
Punkte
0
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
 

Snuff

Aktives Mitglied
Mitglied seit
23 Jun 2006
Beiträge
1,170
Punkte für Reaktionen
0
Punkte
36
Hast du eventuell einen Asterisk-Server? Dann lass den doch den Lookup im Telefonbuch machen
 

gonzzo

Neuer User
Mitglied seit
28 Mrz 2007
Beiträge
51
Punkte für Reaktionen
0
Punkte
0
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.
 

Snuff

Aktives Mitglied
Mitglied seit
23 Jun 2006
Beiträge
1,170
Punkte für Reaktionen
0
Punkte
36
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
 

gonzzo

Neuer User
Mitglied seit
28 Mrz 2007
Beiträge
51
Punkte für Reaktionen
0
Punkte
0
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
 

Snuff

Aktives Mitglied
Mitglied seit
23 Jun 2006
Beiträge
1,170
Punkte für Reaktionen
0
Punkte
36
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;
?>
 

jmar83

Neuer User
Mitglied seit
10 Sep 2013
Beiträge
109
Punkte für Reaktionen
0
Punkte
16
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:

jmar83

Neuer User
Mitglied seit
10 Sep 2013
Beiträge
109
Punkte für Reaktionen
0
Punkte
16
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...
 

boomli

Neuer User
Mitglied seit
1 Jan 2013
Beiträge
10
Punkte für Reaktionen
0
Punkte
0
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
 

jmar83

Neuer User
Mitglied seit
10 Sep 2013
Beiträge
109
Punkte für Reaktionen
0
Punkte
16
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
 

boomli

Neuer User
Mitglied seit
1 Jan 2013
Beiträge
10
Punkte für Reaktionen
0
Punkte
0
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
 

jmar83

Neuer User
Mitglied seit
10 Sep 2013
Beiträge
109
Punkte für Reaktionen
0
Punkte
16
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...
 

Snuff

Aktives Mitglied
Mitglied seit
23 Jun 2006
Beiträge
1,170
Punkte für Reaktionen
0
Punkte
36
Bei Synology NAS-Systemen kann man Webserver, PHP und MySql einfach per Mausklick über das Webinterface installieren (und noch vieles mehr), also kein Garantieverlust!
 

boomli

Neuer User
Mitglied seit
1 Jan 2013
Beiträge
10
Punkte für Reaktionen
0
Punkte
0
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
 

jmar83

Neuer User
Mitglied seit
10 Sep 2013
Beiträge
109
Punkte für Reaktionen
0
Punkte
16
@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...
 

boomli

Neuer User
Mitglied seit
1 Jan 2013
Beiträge
10
Punkte für Reaktionen
0
Punkte
0
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..!
 

3CX PBX - GRATIS
Linux / Win / Cloud

Statistik des Forums

Themen
232,089
Beiträge
2,018,600
Mitglieder
349,417
Neuestes Mitglied
conwig-it