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

Ja aber dieser Script ist so nicht zu gebrauchen, da er nicht auf das Orginal Calender - Script aufgebaut ist.

Das Skript ist aus dem Calender-Skript, dass uns bgx freundlicherweise zur Verfügung gestellt hat, gibt's noch ein anderes Skript?

Bei mir funktionieren beide Code-Schnipsel.

Gruß
Hoobert
 
Hi!
@Hoobert: Es gab noch das ursprüngliche von PacmannII wo in der index.php noch kein ?action=kalender vorgesehen war.
 
Es gab noch das ursprüngliche von PacmannII wo in der index.php noch kein ?action=kalender vorgesehen war.

Ja meine index.php beruht auf die ursprüngliche und hier sollte lediglich bei Geburtstagen und bei Mülleinträgen nicht das Colorbutton mit der Farbe von Googlekalender, sondern jeweils die Grafik (Müllbild oder Geburtstagstorte) angezeigt werden.

Hatte es auch probiert, aber bin am Script gescheitert, da ich nicht wusste wohin ich im ursprünglichen Script die wenn schleife reinmachen sollte.


Hier mal mein geändertes Script, wo ich einige if schleifen mit Müllabfuhr und Geburtstag eingefügt habe, nur leider bekomme ich einen 500er Fehler. Kann einer mal drüberschauen!!!
PHP:
    public function doOutput($image, $style, $updateData, &$yoffset) {
        if ($updateData)
            $this->doUpdate();

        $query = "SELECT * FROM `if_calendar` WHERE (`end` > NOW()) ORDER BY `begin` ASC";
        $result = mysql_query($query, $this->dbconn);
        if (mysql_num_rows($result) > 0) {

            // define styles
            $opt_header = array(
                'width' => imagesx($image)-290,
                'line_height' => 18,
                'align' => ALIGN_LEFT
            );
            
            $opt_day = array(
                'width' => imagesx($image)-290,
                'height' => 14,
                'line_height' => 14,
                'align' => ALIGN_LEFT
            );

            $opt_entry = array(
                'width' => imagesx($image)-290,
                'height' => 12,
                'line_height' => 12,
                'align' => ALIGN_LEFT,
                'word_wrap_hyphen' => '...',
                'aggressive_word_wrap' => true,
            );

            // print header
            imagettftextboxopt($image, 18, 0, 50, $yoffset, $style['textcolor'], $style['font'], "Nächste Termine", $opt_header);
            $icon = ImageCreateFromPNG ( 'resources/icons/clock.png' );
            ImageCopy($image, $icon, 20, $yoffset-3, 0, 0, imagesx($icon), imagesy($icon));
            ImageDestroy($icon);
            $yoffset += 26;
            
            // print calendar
            $counter = 0;
            $formatDate = "%d.%m.%Y";
            $formatTime = "%H:%M";
            $today = strftime( $formatDate );
            $tomorrow  = strftime( $formatDate, strtotime("+1 day", time() ) );
            $currently_displayed_day = 0;

            while ($row = mysql_fetch_assoc($result)) {
                $counter++;
                
                // if end of screen is reached and more than one items left -> cut off and show hint "x more appointments..."
                $rest = (mysql_num_rows($result) - $counter) + 1;
                if (($yoffset >= (imagesy($image) - 36)) && ($rest > 1)) {
                    $text = "... $rest weitere Termine";
                    imagettftextboxopt($image, 14, 0, 24, $yoffset, $style['textcolor'], $style['fontb'], $text, $opt_entry);
                    $yoffset += 20;
                    break;
                }
                
                // print day name
                $begin_date = strftime( $formatDate, strtotime($row['begin']));
                // if begin day is before today set begin to today
                if (strtotime($begin_date) < strtotime($today))
                    $begin_date = $today;
                // now if begin is after $currently_displayed_day update $currently_displayed_day
                if (strtotime($begin_date) > $currently_displayed_day) {
                    // update currently_displayed_day
                    $currently_displayed_day = strtotime($begin_date);
                    // print day name
                    if( $begin_date == $today )
                        $dayname = "Heute";
                    else if( $begin_date == $tomorrow )
                        $dayname = "Morgen";
                    else
                        $dayname = strftime("%A, ".$formatDate, strtotime($begin_date));

                    imagettftextboxopt($image, 14, 0, 50, $yoffset+4, $style['textcolor'], $style['fontb'], $dayname, $opt_day);
                    $yoffset += 22;
                }
                
                // build appointment time text
                $end_date = strftime( $formatDate, strtotime($row['end']));
                $begin_time = strftime( $formatTime, strtotime($row['begin']));
                $end_time = strftime( $formatTime, strtotime($row['end']));
                $text = $row['title'];
                if ($row['location'] != null)
                    $text = $text . ", " . $row['location'];
                if (($begin_time == "00:00") && ($end_time == "00:00")) {
                    // all day event (substract 1 second to get the real end date at 23:59) 
                    $end_date = strftime( $formatDate, strtotime($row['end'])-1);
                    // if all day event is longer than one day -> print end date
                    if (strtotime($end_date) != $currently_displayed_day)
                        $text = $text." (bis ".$end_date.")";
                        
                } else {
                    // normal event with start and end time
                    $text = $text." (".$begin_time." - ";
                    // if event ends not this day -> display end date additionally to time
                    if (strtotime($end_date) != $currently_displayed_day)
                        $text = $text.$end_date.", ";                    
                    $text = $text.$end_time.")";
                }
  // ------------------------------------------- Müllabfuhr----------------------------------------                   
                 if (($row['color']) == "#1B887A")
                {
                if (strpos($row['title'], 'Blaue') !== false)
                      $icon = ImageCreateFromPNG ( 'resources/icons/tonne_blau.png' );
                if (strpos($row['title'], 'Biotonne') !== false)
                      $icon = ImageCreateFromPNG ( 'resources/icons/tonne_gruen.png' ); 
                if (strpos($row['title'], 'Gelbe S') !== false)
                      $icon = ImageCreateFromPNG ( 'resources/icons/gelber_sack.png' ); 
                if (strpos($row['title'], 'Restm') !== false)
                      $icon = ImageCreateFromPNG ( 'resources/icons/tonne_schwarz.png' );                                               
                ImageCopy($image, $icon, 32, $yoffset+8, 0, 0, imagesx($icon), imagesy($icon));
                }
                else{ 
// ------------------------------------------- Geburtstag ----------------------------------------     
                if (($row['color']) == "#5229A3")
                { $icon = ImageCreateFromPNG ( 'resources/icons/birth.png' );
                ImageCopy($image, $icon, 32, $yoffset+8, 0, 0, imagesx($icon), imagesy($icon));
                ImageDestroy($icon);
                } 
                }else {
// ------------------------------------------- Standard - Button ----------------------------------------                
                // determine button color
                $colorArray = htmlColorToRgb($row['color']);
                $color = ImageColorAllocate ($image, $colorArray[0], $colorArray[1], $colorArray[2]);
                // print appointment text and button
                drawGlassButton($image, $color, 32, $yoffset+8);
                }
                
                imagettftextboxopt($image, 12, 0, 50, $yoffset, $style['textcolor'], $style['font'], $text, $opt_entry);
                
                $yoffset += 22;
                }
            
            }
            $yoffset += 18;
            
            
        }
Gruss
 
Zuletzt bearbeitet:
Das ist leider auch meine Problem. Gestern probiert aber leider gescheitert :(
 
Hi Vergyone,

kontrolliere mal deine geschweiften Klammern, v.a. vor dem else im Geburtstagsteil. Die eine schließende Klammer muss ans Ende der Funktion, dann funktioniert's.

Gruß
Hoobert
 
Ich begreife es gerade nicht :(

Will erstmal nur die Torte, bevor ich mich an die Müllsache dran mache.
Aber schon das klappt nicht

So sieht es bei mir aus
Code:
						$text = $text." (bis ".$end_date.")";
						
				} else {
					// normal event with start and end time
					$text = $text." (".$begin_time." - ";
					// if event ends not this day -> display end date additionally to time
					if (strtotime($end_date) != $currently_displayed_day)
						$text = $text.$end_date.", ";					
					$text = $text.$end_time.")";
				}
// ------------------------------------------- Geburtstag ----------------------------------------     
                if (($row['color']) == "#7C838F")
                { $icon = ImageCreateFromPNG ( 'resources/icons/birth.png' );
                ImageCopy($image, $icon, 32, $yoffset+8, 0, 0, imagesx($icon), imagesy($icon));
                ImageDestroy($icon);
                } 
                else {
// ------------------------------------------- Standard - Button ----------------------------------------
				// determine button color
				$colorArray = htmlColorToRgb($row['color']);   
				$color = ImageColorAllocate ($image, $colorArray[0], $colorArray[1], $colorArray[2]);
				// print appointment text and button
				drawGlassButton($image, $color, 32, $yoffset+8);
				imagettftextboxopt($image, 12, 0, 50, $yoffset, $style['textcolor'], $style['font'], $text, $opt_entry);
				   
				$yoffset += 18;
				
			
			}
			$yoffset += 26;

sollte das so jetzt nicht passen?

aber beim aufrufen der index.php kommt nur eine weise seite
 
Vielen Dank, Hoobert. Hat jetzt geklappt.


Hier mal mein Frame.

Fehlt noch ein Feed von der Unwetterzentrale, dann ists komplett.

Jetzt muss ich das noch in mein neuen Kodak W 1020 bekommen und dann ist alles gut.
 

Anhänge

  • iframe.jpg
    iframe.jpg
    61 KB · Aufrufe: 133
@web-ranger:

hier mal meine CalendarPlugin.php. Damit solltest es auf jedem Fall gehen. Du musst nur die Farbe bei if (($row['color']) == "#1B887A") und beim Geburtstagsmodul auf Deine Googlefarbe (findest Du in der Datenbank) ändern.

PHP:
<?php
/***************************************************************************
 * InfoFrame (image generator for digital picture frames)
 * Copyright (C) 2009  Tobias Kolb
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see http://www.gnu.org/licenses/
 ***************************************************************************/

require_once 'Zend/Loader.php';

Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Calendar');


class CalendarPlugin implements IPlugin
{
    private $dbconn = NULL;
    private $config = NULL;
    
    public function __construct($dbconn, $config) {
        $this->dbconn = $dbconn;
        $this->config = $config;
    }
    
    
    public function doUpdate() {
    
        // get calendar entries
        try
        {
            $service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME; // predefined service name for calendar
            $client = Zend_Gdata_ClientLogin::getHttpClient($this->config['user'], $this->config['password'],$service);
        }
        catch (Exception $e)
        {
            die ('Folgender Fehler trat auf: ' . $e->getMessage());
        }
        $cal = new Zend_Gdata_Calendar($client);
        $calendarList = $cal->getCalendarListFeed();
        
        // delete all old calendar entries
        mysql_query("START TRANSACTION", $this->dbconn);
        $query = "Delete from if_calendar";
        mysql_query($query, $this->dbconn) or die('Error, delete query failed');
        // read calendars
        foreach ($calendarList as $calendar)
        {
            // skip unselected calendars
            if (!$calendar->selected->getValue())
                continue;
            // calendar color
            $color = $calendar->color;
            // get calendar id
            $cal_id = substr(strrchr($calendar->id, '/'), 1 );

            // set query parameter
            $startDate=strftime( '%Y-%m-%d');
            $endDate = strftime( '%Y-%m-%d', strtotime("+".$this->config['number_of_days']." day", time() ) );
            $query = $cal->newEventQuery();
            $query->setUser($cal_id); // set calendar id
            $query->setVisibility('private');
            $query->setProjection('full');
            $query->setOrderby('starttime');
            $query->setStartMin($startDate);
            $query->setStartMax($endDate);
            $query->setSortOrder('ascending');
            $query->setSingleEvents(true);
            
            $entries = $cal->getCalendarEventFeed($query);
            foreach ($entries as $entry)
            {
                // get entry data
                $title = $entry->title;
                $begin = strtotime($entry->when[0]->startTime);
                $end = strtotime($entry->when[0]->endTime);
                $location = $entry->where[0]->valueString;
                // add to database
                $this->addCalendar($color, $begin, $end, $title, $location);
            }
        }
        mysql_query("COMMIT", $this->dbconn);
        
        
    }
    
    public function doOutput($image, $style, $updateData, &$yoffset) {
        if ($updateData)
            $this->doUpdate();

        $query = "SELECT * FROM `if_calendar` WHERE (`end` > NOW()) ORDER BY `begin` ASC";
        $result = mysql_query($query, $this->dbconn);
        if (mysql_num_rows($result) > 0) {

            // define styles
            $opt_header = array(
                'width' => imagesx($image)-290,
                'line_height' => 18,
                'align' => ALIGN_LEFT
            );
            
            $opt_day = array(
                'width' => imagesx($image)-290,
                'height' => 14,
                'line_height' => 14,
                'align' => ALIGN_LEFT
            );

            $opt_entry = array(
                'width' => imagesx($image)-290,
                'height' => 12,
                'line_height' => 12,
                'align' => ALIGN_LEFT,
                'word_wrap_hyphen' => '...',
                'aggressive_word_wrap' => true,
            );

            // print header
            imagettftextboxopt($image, 18, 0, 50, $yoffset, $style['textcolor'], $style['font'], "Nächste Termine", $opt_header);
            $icon = ImageCreateFromPNG ( 'resources/icons/clock.png' );
            ImageCopy($image, $icon, 20, $yoffset-3, 0, 0, imagesx($icon), imagesy($icon));
            ImageDestroy($icon);
            $yoffset += 26;
            
            // print calendar
            $counter = 0;
            $formatDate = "%d.%m.%Y";
            $formatTime = "%H:%M";
            $today = strftime( $formatDate );
            $tomorrow  = strftime( $formatDate, strtotime("+1 day", time() ) );
            $currently_displayed_day = 0;

            while ($row = mysql_fetch_assoc($result)) {
                $counter++;
                
                // if end of screen is reached and more than one items left -> cut off and show hint "x more appointments..."
                $rest = (mysql_num_rows($result) - $counter) + 1;
                if (($yoffset >= (imagesy($image) - 36)) && ($rest > 1)) {
                    $text = "... $rest weitere Termine";
                    imagettftextboxopt($image, 14, 0, 24, $yoffset, $style['textcolor'], $style['fontb'], $text, $opt_entry);
                    $yoffset += 20;
                    break;
                }
                
                // print day name
                $begin_date = strftime( $formatDate, strtotime($row['begin']));
                // if begin day is before today set begin to today
                if (strtotime($begin_date) < strtotime($today))
                    $begin_date = $today;
                // now if begin is after $currently_displayed_day update $currently_displayed_day
                if (strtotime($begin_date) > $currently_displayed_day) {
                    // update currently_displayed_day
                    $currently_displayed_day = strtotime($begin_date);
                    // print day name
                    if( $begin_date == $today )
                        $dayname = "Heute";
                    else if( $begin_date == $tomorrow )
                        $dayname = "Morgen";
                    else
                        $dayname = strftime("%A, ".$formatDate, strtotime($begin_date));

                    imagettftextboxopt($image, 14, 0, 50, $yoffset+4, $style['textcolor'], $style['fontb'], $dayname, $opt_day);
                    $yoffset += 27;
                }
                
                // build appointment time text
                $end_date = strftime( $formatDate, strtotime($row['end']));
                $begin_time = strftime( $formatTime, strtotime($row['begin']));
                $end_time = strftime( $formatTime, strtotime($row['end']));
                $text = $row['title'];
                //if ($row['location'] != null)
                    //$text = $text . ", " . $row['location'];
                if (($begin_time == "00:00") && ($end_time == "00:00")) {
                    // all day event (substract 1 second to get the real end date at 23:59) 
                    $end_date = strftime( $formatDate, strtotime($row['end'])-1);
                    // if all day event is longer than one day -> print end date
                    if (strtotime($end_date) != $currently_displayed_day)
                        $text = $text." (bis ".$end_date.")";
                        
                } else {
                    // normal event with start and end time
                    $text = $text." (".$begin_time." - ";
                    // if event ends not this day -> display end date additionally to time
                    if (strtotime($end_date) != $currently_displayed_day)
                        $text = $text.$end_date.", ";                    
                    $text = $text.$end_time.")";
                }
 // ------------------------------------------- Müllabfuhr----------------------------------------                   
                 if (($row['color']) == "#1B887A")
                {
                if (strpos($row['title'], 'Blaue') !== false)
                      $icon = ImageCreateFromPNG ( 'resources/icons/tonne_blau.png' );
                if (strpos($row['title'], 'Biotonne') !== false)
                      $icon = ImageCreateFromPNG ( 'resources/icons/tonne_gruen.png' ); 
                if (strpos($row['title'], 'Gelben Sack') !== false)
                      $icon = ImageCreateFromPNG ( 'resources/icons/gelber_sack.png' ); 
                if (strpos($row['title'], 'Restabfall') !== false)
                      $icon = ImageCreateFromPNG ( 'resources/icons/tonne_schwarz.png' );                                               
                ImageCopy($image, $icon, 23, $yoffset-6, 0, 0, imagesx($icon), imagesy($icon));
                ImageDestroy($icon);
                }
                else{  
// ------------------------------------------- Geburtstag ----------------------------------------     
                
                if (($row['color']) == "#5229A3")
                { $icon = ImageCreateFromPNG ( 'resources/icons/birth.png' );
                ImageCopy($image, $icon, 23, $yoffset+0, 0, 0, imagesx($icon), imagesy($icon));
                ImageDestroy($icon);
                } 
                else {
// ------------------------------------------- Standard - Button ----------------------------------------                
                // determine button color
                $colorArray = htmlColorToRgb($row['color']);
                $color = ImageColorAllocate ($image, $colorArray[0], $colorArray[1], $colorArray[2]);
                // print appointment text and button
                drawGlassButton($image, $color, 32, $yoffset+8);
                }
                }
                imagettftextboxopt($image, 12, 0, 50, $yoffset, $style['textcolor'], $style['font'], $text, $opt_entry);
                $yoffset += 22;

            }
            $yoffset += 15;
            
            
        }
        mysql_free_result($result);

    }

    private function addCalendar($color, $begin, $end, $title, $location) {
        $query = "INSERT INTO `if_calendar` (`id`, `color`, `begin`, `end`, `title`, `location`) 
                  VALUES (NULL,
                  '".mysql_real_escape_string($color)."', FROM_UNIXTIME($begin), FROM_UNIXTIME($end),
                  '".mysql_real_escape_string($title)."',
                  '".mysql_real_escape_string($location)."'
                  )";
        mysql_query($query, $this->dbconn) or die('Error, insert query failed: '.mysql_error());
    }
    
}
 
Frage wo genau kann ich da Geburtstagsmodul finden?
 
Hi Bolle,

es ist ja keine Modul, sondern eine Modifikation des Standardkalendermoduls um einmal einen Geburtstagsbereiches und einmal einen Müllabfuhrbereiches.

In beiden Fällen wird nicht, wie im Standardmodul, das Button mit der Googlefarbe angezeigt, sondern bei einem Geburtstag eine Torte und beim Müllterminen (Gelber Sack, Grüne Tonne etc.) das jeweilige Icon angezeigt.

Siehe meine Grafik: http://www.ip-phone-forum.de/showpost.php?p=1655214&postcount=667


Du findest den modifizierten Geburtstagsbereich im Script oben wenn Du folgendes suchst:

// ------------------------------------------- Geburtstag ----------------------------------------


Gruss

Vergyone
 
@Vergyone

Hab dein CalendarPlugin.php mal so übernommen wie es da steht.
Jetzt wird wenigstens schon mal wieder ein Bild ausgegeben aber immer noch mit den Standart Buttons?

die icons liegen dort wo sie liegen sollten, versteh jetzt nicht so ganz warum das so ist?

aber sind ja immerhin schon mal nen schritt weiter ;)
 

Anhänge

  • infoframe.jpg
    infoframe.jpg
    80 KB · Aufrufe: 89
Um das Geburtstagsicon zu bekommen muss die Farbe mit der Farbe vom Googlekalender übereinstimmen, wo Du die Geburtstage eingetragen hast.

Siehe hier: // ------------------------------------------- Geburtstag ----------------------------------------

if (($row['color']) == "#5229A3")

Bei mir ist es die Farbe #5229A3. Und bei Dir?
Am besten schaust Du in die Datenbank mal nach, da steht der # - Code für den Color.

Beim Müllscript wird zusätzlich zur Farbe des Googlekalenders noch der Titel mit abgefragt:
PHP:
               if (strpos($row['title'], 'Blaue') !== false)
                      $icon = ImageCreateFromPNG ( 'resources/icons/tonne_blau.png' );
                if (strpos($row['title'], 'Biotonne') !== false)
                      $icon = ImageCreateFromPNG ( 'resources/icons/tonne_gruen.png' ); 
                if (strpos($row['title'], 'Gelben Sack') !== false)
                      $icon = ImageCreateFromPNG ( 'resources/icons/gelber_sack.png' ); 
                if (strpos($row['title'], 'Restabfall') !== false)
Also muss z. B. Blaue im Titel stehen um das Icon der Blauen Tonne zu bekommen.
 
Danke für den tipp mit der Datenbank.
Hatte immer die farbe von colorzilla eingetragen und die war natürlich falsch.

Torte wird nun angezeigt. Danke schon mal hierfür

Wo muß ich den die größe der icons ändern?

sieht so bisl doof aus oder? ;)

Sorry für die vielen fragen
 

Anhänge

  • infoframe.jpg
    infoframe.jpg
    80.3 KB · Aufrufe: 85
Zuletzt bearbeitet:
sorry nochmal dumme Frage..such das Geburtstag Icon..die für die Mülltonnen habe ich aber da ist das nicht mit bei..war irgendo auf seite 10..
 
Das hatte ich mir mal selber erstellt.

Hier in 2 grössen als Anhang.
 

Anhänge

  • birth1.png
    birth1.png
    746 Bytes · Aufrufe: 466
  • birth.png
    birth.png
    14.8 KB · Aufrufe: 29
Dank dir!!!

Im Grunde hast du für jedes Ereignis einen weiteren kalendar angelegt, richtig?
 
Noch was anderes

Er gibt mir aus nächsten Termine
Samstag 18.12.
und da steht dann der bday von henry der am 19.12. ist

Und die Uhrzeit 23Uhr wo bekommt er die her? sind alles ganz tägige termine

Siehe Anhang

muß ich da noch irgendwas einstellen irgendwo?
 

Anhänge

  • infoframe.jpg
    infoframe.jpg
    80.6 KB · Aufrufe: 55
Schau mal nach was genau im Google Kalender bei dem Termin (Geburtstag) eingetragen ist. Dort muss die Uhrzeit auch stehen!!!

Beitrag 2:
Im Grunde hast du für jedes Ereignis einen weiteren kalendar angelegt, richtig?

Ja ich habe in Google einige Kalender eingetragen und mit unterschiedlichen Farben gekennzeichnet.
 
Zuletzt bearbeitet von einem Moderator:
Ok bei habe alles mal eingestellt..die farbe stimmen auch überien und die icons sind auch vorhanden...leider kommen immer noch die alten Zeichen.

Ich habe die Farbe genommen die ich im GoogleKalender eingestellt habe..also z.B. diese hier, sollte ja richtig sein, oder?

<iframe src="https://www.google.com/calendar/embed?height=600&amp;wkst=1&amp;bgcolor=%23FFFFFF&amp;src=cccc%40googlemail.com&amp;color=%232952A3&amp;ctz=Europe%2FBerlin" style=" border-width:0 " width="800" height="600" frameborder="0" scrolling="no"></iframe>
 
Schau am besten mal in die Datenbank von iframe, da sind alle Farben richtig hinterlegt!!!
 
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.