InfoFrame: Digitaler Bilderrahmen (Anzeige von Anrufen, E-Mails, Termine, Wetter...)

Ich weis es nicht ,ich erstelle morgen mal eine neuen API zugang und dann teste ich nochmal.

Bis dahin nochmal vielen Dank
Volker
 
Hallo Spoon3er,

vielleicht kannst Du hier helfen.
PHP:
$calendarList = $service->calendarList->listCalendarList();
zeigt mir nicht alle Kalender an. Abonnierte öffentliche Kalender bzw. die Gerburtstage der Kontakte werden nicht angezeigt.
Komischerweise wird unter https://developers.google.com/google-apps/calendar/v3/reference/calendarList/list#try-it alles korrekt angezeit, hier sehe ich alle Kalender.
Zuerst hatte ich den Verdacht, dass der Parameter "minAccessRole" vielleicht eine Rolle spielt, aber auch mit
PHP:
$listParams = array ('minAccessRole' => 'reader');
$calendarList = $service->calendarList->listCalendarList($listParams);
liefert keine weiteren Ergebnisse.

Hast Du eine Idee?

Gruß, Michael...
 
Ich denke die musst du hardcoden.
Auf https://developers.google.com/google-apps/calendar/v3/reference/calendarList/list#try-it benutzt man ja seine richtige ID und kann alle abonierten kalender sehen, selbst wenn sie nicht im Kalender angezeigt werden.
In der App benutz man das Diestkonto, welche den Kalender nicht aboniert hat und in den Google Kalender Einstellungen irgendwie auch nicht abonieren kann. :(

Wenn du Zeit und Bock hast könnte man hier eventuell mal nachfragen.
 
Abend zusammen

So ich habe jetzt das API nochmal neu erstellt alle Daten übertagen, in das Plugin von Spoo3ner.Funktioniert auch super,auch mein Kalender wird jetzt angezeigt.VIELEN DANK nochmal für Eure Hilfe!!!!!!!!:D:D::bier:

Dann habe ich noch die Farbe vom Müllkalender geändert, jetzt habe ich bei den Müllterminen das Müllicon und den Standartbutton übereiinander.
kann man das noch ändern??

Volker
 
Hallo,

ich bin seit zwei Tagen an dem Thema CalendarPlugin dran!
Leider ohne Erfolg!

config.ini, index.php,dbconn und das CalendarPlugin angepasst und den Kalender angepasst!--> nichts passiert

Nun habe ich folgende Fehlermeldung: BITTE UM HILFE

Notice: Undefined index: action in /home/www/web385/html/frame.php on line 139

Notice: Undefined index: CallsPlugin in /home/www/web385/html/frame.php on line 195

Warning: file_exists() [function.file-exists]: open_basedir restriction in effect. File(/tmp/Google_Client/92/923486ffb44850987125d8c80f9669ae) is not within the allowed path(s): (/home/www/web385/) in /home/www/web385/html/zendfw/library/google-api-php-client/src/Google/Cache/File.php on line 50

Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(/tmp/Google_Client/92) is not within the allowed path(s): (/home/www/web385/) in /home/www/web385/html/zendfw/library/google-api-php-client/src/Google/Cache/File.php on line 139

Warning: mkdir() [function.mkdir]: open_basedir restriction in effect. File(/tmp/Google_Client) is not within the allowed path(s): (/home/www/web385/) in /home/www/web385/html/zendfw/library/google-api-php-client/src/Google/Cache/File.php on line 140

Fatal error: Uncaught exception 'Google_Cache_Exception' with message 'Could not create storage directory: /tmp/Google_Client/92' in /home/www/web385/html/zendfw/library/google-api-php-client/src/Google/Cache/File.php:145 Stack trace: #0 /home/www/web385/html/zendfw/library/google-api-php-client/src/Google/Cache/File.php(130): Google_Cache_File->getCacheDir('cf5525044f4cf4c...', true) #1 /home/www/web385/html/zendfw/library/google-api-php-client/src/Google/Cache/File.php(125): Google_Cache_File->getCacheFile('cf5525044f4cf4c...', true) #2 /home/www/web385/html/zendfw/library/google-api-php-client/src/Google/Cache/File.php(86): Google_Cache_File->getWriteableCacheFile('cf5525044f4cf4c...') #3 /home/www/web385/html/zendfw/library/google-api-php-client/src/Google/Auth/OAuth2.php(316): Google_Cache_File->set('cf5525044f4cf4c...', '{"access_token"...') #4 /home/www/web385/html/plugins/CalendarPlugin.php(59): Google_Auth_OAuth2->refreshTokenWithAssertion(Object(Google_Auth_AssertionCredentials)) #5 /home/www/web385/html/plugins in /home/www/web385/html/zendfw/library/google-api-php-client/src/Google/Cache/File.php on line 145
 
Läuft bei dir das infoframe auf einen Webserver?

Um sich mit OAuth anmelden zu können wird eine "session" erzeugt (ähnlich einem cookie) . Dieser wird in dem vom system genannten "temp-Ordner" in einem neuen Ordner namens Google.blabla abgelegt.
Dein Webserver hat keine Rechte um in diesen Ordner zu schreiben.

Normalerweise hat jeder Benutzer, jedes Programm schreibrechte in diesem ordner.
Wenn es dein eigener Server ist ändere mal die rechte auf /tmp ansonsten sollte dir dein webserver-anbieter weiter helfen können.
 
Gerburtstage aus Kontakten.

Hallo zusammen,

Ich denke die musst du hardcoden.
Auf https://developers.google.com/google-apps/calendar/v3/reference/calendarList/list#try-it benutzt man ja seine richtige ID und kann alle abonierten kalender sehen, selbst wenn sie nicht im Kalender angezeigt werden.
In der App benutz man das Diestkonto, welche den Kalender nicht aboniert hat und in den Google Kalender Einstellungen irgendwie auch nicht abonieren kann. :(
Wenn du Zeit und Bock hast könnte man hier eventuell mal nachfragen.

Danke Spoon3er, leider wissen die Kollegen in Google Groups auch nicht weiter oder sind sehr scheibfaul.

Da ich wirklich keine Lust habe zwei Geburtstagslisten zu pflegen, habe ich mir jetzt folgenden Workaround programmiert, ist vielleicht für den ein oder Anderen auch interessant.
Ich hole mir einmal am Tag die Geburtstage direkt aus den Google Kontakten und speichere sie in if_calendar. Damit das CalendarPlugin diese nicht löscht, wähle ich die Farbe #000000 (ist für die Geburtstage egal, da ein Symbol angezeigt wird) und lasse bei den Queries im CalendarPlugin mit WHERE color <> #000000 diese Einträge in Ruhe.

GoogleContactsUpdate.php wird einmal pro Tag per cron aufgerufen, liegt im www-Verzeichnis und benötigt die config.ini vom infoframe.
Wer einen externen Webserver für den Infoframe benutzt, kann GoogleContactsUpdate.php mit wget adresse/GoogleContactsUpdate.php -qO /dev/null aufrufen.

PHP:
<?php
// Includes & Settings
error_reporting (E_ERROR);
$loc = setlocale (LC_ALL, 'de_DE.UTF8', 'de_DE', 'de', 'ge');

// Config lesen
$config = parse_ini_file ("config.ini", true);
$num_days = $config['CalendarPlugin']['number_of_days'];

// Passwort und Login für ClientLogin Authentication
$user = $config['System']['google_user'];
$pass = $config['System']['google_pass'];
if ($config['System']['zendfw_path'] != "") set_include_path (get_include_path() . PATH_SEPARATOR . $config['System']['zendfw_path']);

// teste Datenbank Verbindung
$dbconn = new PDO('mysql:host=' . $config['System']['db_host'] . ';dbname=' . $config['System']['db_name'], $config['System']['db_user'], $config['System']['db_password']);

// Zend Gdata libs
require_once 'Zend/Loader.php';
Zend_Loader::loadClass ('Zend_Gdata');
Zend_Loader::loadClass ('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass ('Zend_Http_Client');
Zend_Loader::loadClass ('Zend_Gdata_Query');
Zend_Loader::loadClass ('Zend_Gdata_Feed');

try
{
	// login und setze Protokol auf Version 3.0
	$client = Zend_Gdata_ClientLogin::getHttpClient ($user, $pass, 'cp');
	$gdata = new Zend_Gdata ($client);
	$gdata->setMajorProtocolVersion (3);
	
	// query Ausführen und Ergebnis nach feed
	$query = new Zend_Gdata_Query ('http://www.google.com/m8/feeds/contacts/default/full');
	$query->maxResults = 99999;
	// "My Contacts" only
	$query->setParam( 'group', 'http://www.google.com/m8/feeds/groups/' . urlencode($user) . '/base/6' );
	$feed = $gdata->getFeed ($query);
	
	// parse feed und extraiere Kontakt Informationen
	$contacts = array ();
	foreach ($feed as $entry)
	{
		$xml = simplexml_load_string ($entry->getXML ());
		$obj = new stdClass;
		if (($b = (string) $xml->birthday['when']) != '')
			// 1970 falls kein Jarh angegeben ist
			$obj->birthday = preg_replace ("/^--/", "1970-", $b);
		else
			$obj->birthday = null;
		$obj->name = (string) $xml->name->fullName;
		$contacts[] = $obj;
	}
}
catch (Exception $e)
{
	die ('ERROR:' . $e->getMessage ());
}

// nur Geburtstage aus contacts löschen
$sql = "DELETE FROM `if_calendar` WHERE `color`='#000000'";
$dbconn->query ($sql) or die ('DELETE gescheitert: ' . $dbconn->errorInfo()[2]);

// alle Daten in results, los gehts
foreach ($contacts as $r)
{
	$na = utf8_decode ($r->name);
	if ($r->birthday)
	{
		// Geburtstag in unixtime, Termin ist Monat, Tag mit aktuellem Jahr
		$n1 = strtotime (date('o') . '-' . substr ($r->birthday, 5, 5));
		// dauert einen Tag
		$n2 = $n1 + 60 * 60 * 24;
		// liegt Geburtstag in der Vergangenheit? dann Termin plus ein Jahr
		if ($n2 < strtotime('now'))
		{	
			$n1 = strtotime ('+ 1 year', $n1);
			$n2 = strtotime ('+ 1 year', $n2);
		}
		// liegt Geburtstag ausserhalb der Anbzeigezeitspanne, dann ignorieren.
		if ($n1 < strtotime('+ ' . $num_days . ' days')) 
		{
			$sql = "INSERT INTO `if_calendar` (`color`, `begin`, `end`, `title`, `location`) VALUES ('#000000', FROM_UNIXTIME($n1) , FROM_UNIXTIME($n2) ,'" . $na . " hat Geburtstag','')";
			$dbconn->query($sql) or die ('INSERT gescheitert: ' . $dbconn->errorInfo()[2]);
		}
	}
}
?>

Die Einträg in der config.ini
PHP:
;====================================================================
[System]
;====================================================================
;für google contacts update
google_user = "[email protected]"
google_pass = "secret"

;====================================================================
[CalendarPlugin]
;====================================================================
client_id = "blah"
account_name = "Blah"
project_name = "Projekt"
key_file= "cache/KeyFile.p12"

calendar_ID_1 = "de.german#[email protected]"
calendar_ID_color_1 = "#ffff00"

number_of_days = 7
;number_of_lines = 7

Mein CalendarPlugin ist das alte mit geänderter Funktion doUpdate()
PHP:
public function doUpdate()
	{
		require_once '/usr/share/google-api-php-client-master/autoload.php';
		session_start();
		$client_id = $this->config['client_id'];
		$service_account_name = $this->config['account_name'];
		
		try
		{
			$client = new Google_Client();
			$client->setApplicationName($this->config['project_name']);
			$service = new Google_Service_Calendar($client);
		}
		catch (Exception $e)
		{
			die ('Folgender Fehler trat auf: ' . $e->getMessage());
		}
		
		if (isset($_SESSION['service_token']))
			$client->setAccessToken($_SESSION['service_token']);
		$key = file_get_contents($this->config['key_file']);
		$cred = new Google_Auth_AssertionCredentials($service_account_name, array('https://www.googleapis.com/auth/calendar'), $key);

		$client->setAssertionCredentials($cred);
		if ($client->getAuth()->isAccessTokenExpired())
			$client->getAuth()->refreshTokenWithAssertion($cred);

		$_SESSION['service_token'] = $client->getAccessToken();
		
		//set startDate, endDate, eventParams
		$cal_date = new DateTime('NOW');
		$startDate = date_format($cal_date, DateTime::W3C);
		$cal_date = date_modify($cal_date, "+".$this->config['number_of_days']." day");
		$endDate = date_format($cal_date, DateTime::W3C);
		
		$eventParams = array('timeMin' => $startDate,
							 'timeMax' => $endDate,
							 'singleEvents' => 'true');

		//get Calendar Id´s	
		$listParams = array ('minAccessRole' => 'reader');
		$calendarList = $service->calendarList->listCalendarList($listParams);
		
		// delete all old calendar entries
		mysql_query("START TRANSACTION", $this->dbconn);
		$query = "Delete from if_calendar where `color`<>'#000000'";
		mysql_query($query, $this->dbconn) or die('Error, delete query failed');
		
		// get all calendars
		while(true)
		{
			foreach ($calendarList->getItems() as $calendar)
			{
				$calendarID = $calendar->getID();
				$color = $calendar->getBackgroundColor();
				$events = $service->events->listEvents($calendarID, $eventParams);	    
				while(true)
				{
					foreach ($events->getItems() as $event)
					{
						if (!empty($event['modelData']['start']['dateTime']))
						{
							$begin = strtotime($event['modelData']['start']['dateTime']);
							$end = strtotime($event['modelData']['end']['dateTime']);
						}
						else
						{
							$begin = strtotime($event['modelData']['start']['date']);
							$end = strtotime($event['modelData']['end']['date']);
						}			  	
						$title = $event->getSummary();	
						$location = $event->getLocation();
						$this->addCalendar($color, $begin, $end, $title, $location);
					}
					// next event page if there is one
					$pageToken = $events->getNextPageToken();
					if ($pageToken)
					{
						$optParams = array('pageToken' => $pageToken);
						$events = $service->events->listEvents($calendarID, $optParams);
					}
					else
					{
						break;
					}
				}
			}
			// next calendar page if there is one
			$pageToken = $calendarList->getNextPageToken();
			if ($pageToken)
			{
				$optParams = array('pageToken' => $pageToken);
				$calendarList = $service->calendarList->listCalendarList($optParams);
			}
			else
			{
				break;
			}
		}
		
		// get all public calendars
		$calender_num = 0;
		while ($calendarID = $this->config['calendar_ID_' . ++$calender_num])
		{	
			$color = $this->config['calendar_ID_color_' . $calender_num];
			$events = $service->events->listEvents($calendarID, $eventParams);	    
			while (true)
			{
				foreach ($events->getItems() as $event)
				{
					if (!empty($event['modelData']['start']['dateTime']))
					{
						$begin = strtotime($event['modelData']['start']['dateTime']);
						$end = strtotime($event['modelData']['end']['dateTime']);
					}
					else
					{
						$begin = strtotime($event['modelData']['start']['date']);
						$end = strtotime($event['modelData']['end']['date']);
					}			  	
					$title = $event->getSummary();	
					$location = $event->getLocation();
					$this->addCalendar($color, $begin, $end, $title, $location);
				}
				// next event page if there is one
				$pageToken = $events->getNextPageToken();
				if ($pageToken)
				{
					$optParams = array('pageToken' => $pageToken);
					$events = $service->events->listEvents($calendarID, $optParams);
				}
				else
				{
					break;
				}
			}
		}
		mysql_query("COMMIT", $this->dbconn);
	}
 
Zuletzt bearbeitet:
Hallo Forum,

nach langen Nächten und Fluchen und sehr viel Support funktioniert mein Infoframe nun endlich mit dem Kalender wieder.
Ich möchte an dieser Stelle nochmals ein ganz herzliches Dankeschön an Spoon3r, Kusterus und Orca74 sagen. Durch deren Einsatz und Hilfe funktioniert es jetzt endlich wieder. 
Ich konnte nun im Nachhinein 3 Fehler bei mir finden:
1. Obwohl ich die lange E-Mail Adresse von console.google.com kopiert hatte, ging diese nicht. Das lag ein einer „Leerstelle“ die niemand sah. Spoon3r hat es dann letztendlich bestätigt.
2. Die Pfade stimmten zwar, jedoch nicht so ganz: Es macht nun mal einen Unterschied ob am Schluss ein „/“ steht, oder nicht.
3. Zu alledem musste ich meinen QNAP Server auf die aktuelle Firmware 4.1.1 updaten um in den Genuss der OpenSSL 1.0.1j zu kommen, ohne diese funktionierte der Zugriff auf Google API „OAuth 2.0“ nicht.
Alle 3 Fehler haben mich jetzt gefühlte 2 Wochen meines Lebens gekostet ;)
Hoffen wir, das Google jetzt endlich fertig ist ;) Ich bin es….;)
 
Ich habe mir ebenfalls überlegt einen solchen digitalen Bilderrahmen zuzulegen. Doch leider sind sind die Wlan Modelle noch recht teuer.
Also habe ich mir überlegt, das man doch einfach einen Bilderrahmen der Simplen Art nutzen könnte in Verbindung mit einer WLAN SD Karte.
Wenn es gelänge das Dateisystem der SD Karte im Raspberry oder der Fritzbox via Samba oder NFS einzuhängen, müsste man doch nur noch das Bild
rendern und auf der WIFI SD Karte ablegen. Und schon hat der Bilderahmen seine neue Anzeige.
Hat schonmal jemand diese herangehnsweise ins Auge gefasst? (Ich weiß nicht ob die WLAN SD Karten SMB oder NFS Sprechen)

Oder welche Bilderramen die noch zu bekommen sind kommen für das Projekt in Frage?
 
Hallo HyBird,

Doch leider sind sind die Wlan Modelle noch recht teuer.
Was heisst denn hier noch, ich habe schon seit Jahren keine mehr gesehen. :p

Hat schonmal jemand diese herangehnsweise ins Auge gefasst?
Mit der W-Lan SD-Karte hatte ich auch schon mal geliebäugelt, allerdings waren zu dieser Zeit die Nachteile so stark, dass es nicht zu realisieren war. Vielleicht sind die ja mittlerweile ausgereifter. Falls Du es damit probierst, würde ich mich über einen Erfahrungsbericht freuen.

Oder welche Bilderramen die noch zu bekommen sind kommen für das Projekt in Frage?
Von Samsung die SPF-Reihe hat einen MiniMonitor Mode. Mit 'nem Raspi hinten dran geschraubt funktionieren sie tadellos und sind gebraucht noch recht gut zu bekommen.

IMG_20141206_064015.jpg

Ein anderer hier im Forum setzt einen billigen 10 Zoll Flatscreen ein, mir will nur nicht mehr einfallen wer es war.
EDIT:
es war Ralf0815 http://www.ip-phone-forum.de/showthread.php?t=207272&page=12&p=1973086&viewfull=1#post1973086

Gruß, Michael...
 
Zuletzt bearbeitet:
Nun die SD WLAN Karten können Scheinbar nur Bilder senden. Empfangen geht wohl nicht. Zumal sich der Speicher nicht per NFS oder SMB einbinden lässt.
Somit disqualizieren sich die Karten selbst für diese Anwendung. Nur eine Karte hat einen FTP Server. Ob man damit auf die Karte schreiben kann entzieht
sich meiner Kenntniss. Aber 50 Euro rauszuwerfen ohne sicher zu sein das es funktioniert ist mir zu blöd.
 
Hallo zusammen
Auch ich möchte hier nochmal über meine Erfahrungen und Fehler berichten.
Ich habe mich gestern auch nochmal hingesetzt und alles neu aufgespielt. Neue aktuelle Xammp Version mit php 5.6.3.
Dann neues API erstellt und jetzt funktioniert alles prima.Auch das geänderte Plugin von marvin424 funktioniert bei mir prima.Ich glaube bei mir lag es an der veralteten php Version.
Ich möchte mich nochmal bei Allen, die mir bei der Fehlersuche geholfen haben bedanken, vor allem bei marvin424 und spoo3ner für ihre Geduld und auch bei Orca74.

Volker
 
Hallo zusammen,

mir ist noch was aufgefallen. Bei dem "alten" Kalender Plug-In war es so, das die Location angezeigt wurde. Also nicht nur den Titel sondern auch den Ort.
Habe mal in die mySQL geschaut, dort wird die "Location" nicht ausgefüllt.

1. Frage: ist es bei euch auch so oder funktioniert es nur bei mir nicht richtig?

2. Wenn es bei euch auch so ist, wäre es Möglich dieses wieder hinzuzufügen? Bzw. wie müsste das Plug-In umgebaut werden das es den Ort wieder anzeigt?
 
Ich habe mir ebenfalls überlegt einen solchen digitalen Bilderrahmen zuzulegen. Doch leider sind sind die Wlan Modelle noch recht teuer.
Also habe ich mir überlegt, das man doch einfach einen Bilderrahmen der Simplen Art nutzen könnte in Verbindung mit einer WLAN SD Karte.
Wenn es gelänge das Dateisystem der SD Karte im Raspberry oder der Fritzbox via Samba oder NFS einzuhängen, müsste man doch nur noch das Bild
rendern und auf der WIFI SD Karte ablegen. Und schon hat der Bilderahmen seine neue Anzeige.
Hat schonmal jemand diese herangehnsweise ins Auge gefasst? (Ich weiß nicht ob die WLAN SD Karten SMB oder NFS Sprechen)

Oder welche Bilderramen die noch zu bekommen sind kommen für das Projekt in Frage?
Kleiner Tipp: einfach ein billiges Android Tablet und dann die App Digitaler Bilderrahmen drauf. Schon fertig;)
 
2. Wenn es bei euch auch so ist, wäre es Möglich dieses wieder hinzuzufügen? Bzw. wie müsste das Plug-In umgebaut werden das es den Ort wieder anzeigt?

Hallo Thomas,
hab dein PN schon gelesen, aber hatte bissi was zu tun.

ich habe die Loacation nicht gebraucht und auch keine Enträge bei mir in den Kalendern gefunden. Deswegen habe ich die einfach mal leer gelassen.
Aber es gibt sogar eine fertige Methode dafür in dem php-googlebalblubb.

umso einfacher ist die Umsetzung:

Du musste eine Zeile einfügen und eine bearbeiten, das wars dann schon - hoffe ich zumindest :D

Also, hier was du ändern musst: (ich kopiere die ganze foreach-schleife mit, aber bitte nur diese eine Zeile einfügen, oder ändern!!!!!!! bei mir sieht das Plugin ja anders aus!!!!
PHP:
						foreach ($events->getItems() as $event) {
						  	//print_r($event);
					  		if (!empty($event['modelData']['start']['dateTime'])) {
					  			$begin = date_format(date_create($event['modelData']['start']['dateTime']), 'Y-m-d H:i:s');
					  			$end = date_format(date_create($event['modelData']['end']['dateTime']), 'Y-m-d H:i:s');
					  		}else{
					  			$begin = $event['modelData']['start']['date'];
					  			$end = $event['modelData']['end']['date'];
					  		}
					  		$location = $event->getLocation();		// DAS HIER EINFUEGEN	  	
					  		$title = $event->getSummary();
					  		$name = $event['modelData']['organizer']['displayName'];
					  		$color = $event->getColorID();	
					 	       //$insertCalendarData .= "('".$name."','".$color."','".$begin."','".$end."','".$title."',''), "; // SO WAR ES
					 	       $insertCalendarData .= "('".$name."','".$color."','".$begin."','".$end."','".$title."','".$location."'), "; // DAS HIER AENDERN, ABER NICHT 1zu1 UEBERNEMHEN, SONDERN NUR DAS $location WIE HIER GEZEIGT ANSTELLE VON '' EINFUEGEN. SIEHE DAS AUSKOMMENTIERTE DRUEBER UND DAS AKTIVE HIER!!!
					  }
 
Zuletzt bearbeitet:
Hallo ,

2. Wenn es bei euch auch so ist, wäre es Möglich dieses wieder hinzuzufügen? Bzw. wie müsste das Plug-In umgebaut werden das es den Ort wieder anzeigt?

in meiner Version ist es bereits nachgerüstet.
Bei Spoon3ers Version nach Zeile 151 diese Zeile einfügen:

PHP:
$location = $event->getLocation();

und die folgende Zeile
PHP:
$insertCalendarData .= "('".$color."','".$begin."','".$end."','".$title."',''), ";
gegen
PHP:
$insertCalendarData .= "('".$color."','".$begin."','".$end."','".$title."','".$location."'), ";
tauschen. Dann hast Du auch wieder Deine Location.

Spoon3er war schneller :D
Gruß, Michael...
 
Zuletzt bearbeitet:
Hallo Jungs,

perfekt. :rock: Jetzt geht er wieder wie zuvor. Danke Euch beiden :)
 
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.