Zum Inhalt springen
Erfolgsgeist Automatisierung für kleine Betriebe

Erfolgsgeist · Ratgeber

Termine morgens per Telegram: die Tagesübersicht aus allen Ihren Google-Kalendern

Stand:

Arbeit, Privat, der Kalender der Familie, ein abonnierter Spielplan: Wer mehrere Kalender führt, schaut morgens in jeden einzeln, und trotzdem rutscht ein Termin durch. Einfacher ist eine einzige Benachrichtigung um 7 Uhr in Telegram, die automatisch alles zusammenfasst: wie viele Termine heute anstehen, wann der erste beginnt, wann Sie frei haben und wie das Wetter wird.

Dieser Ratgeber zeigt, wie Sie so ein Morgen-Briefing mit dem Automatisierungswerkzeug n8n selbst bauen, und an welchen Stellen Google Kalender dabei Fallen stellt. Wer es nicht selbst bauen will, findet am Ende eine fertige Vorlage.

So kann die Nachricht aussehen

Ein Beispiel mit erfundenen Terminen:

Guten Morgen!
Donnerstag, 29. Oktober · Berlin

Der Tag auf einen Blick
4 Termine · erster um 08:30 · frei ab 18:30
Längste freie Zeit: 12:30–15:00

🌧 Wetter: Regen, 6 bis 11 °C, ☔ 70 %
→ Schirm einpacken.

Heute (4)
• ganztägig Abgabe Steuerunterlagen
• 08:30–09:30 Teambesprechung
• 11:00–12:30 Kundentermin · Büro Mitte
• 15:00–18:30 Werkstatt

Die Tagesübersicht steht oben, die Termine aller Kalender darunter in einer Liste, ganztägige Einträge zuerst. Ein Termin, der in zwei Kalendern steht, erscheint nur einmal.

Der Aufbau in n8n, Schritt für Schritt

n8n gibt es als Cloud-Dienst und zum Selbstbetrieb auf einem eigenen Rechner oder Server. Der Ablauf besteht aus sechs Knoten und läuft einmal am Morgen:

  1. Zeitplan (Knoten Schedule Trigger): täglich um 7:00 Uhr. Stellen Sie in den Workflow-Einstellungen unter Timezone Ihre Zeitzone ein, etwa Europe/Berlin. Mehr dazu unten bei den Fallen.
  2. Kalenderliste holen (Knoten HTTP Request): Der Google-Kalender-Knoten von n8n liest je Aufruf einen Kalender und liefert keine Liste Ihrer Kalender. Die holen Sie per GET https://www.googleapis.com/calendar/v3/users/me/calendarList. Unter Authentication wählen Sie Predefined Credential Type und denselben Google-Kalender-Zugang, den auch Schritt 3 nutzt. Die Antwort enthält im Feld items einen Eintrag je Kalender; ein Knoten Split Out auf items macht daraus ein Element je Kalender.
  3. Termine lesen (Knoten Google Calendar, Event → Get Many): als Kalender per Ausdruck {{ $json.id }}, als After {{ $now.startOf('day').toISO() }} und als Before {{ $now.endOf('day').toISO() }}. n8n führt den Knoten für jeden Kalender einmal aus, alles in derselben Ausführung. Schalten Sie in den Knoteneinstellungen Always Output Data ein und setzen Sie On Error auf Continue: Sonst bricht an einem Tag ohne Termine oder bei einem einzigen kaputten Kalender der ganze Ablauf ab.
  4. Wetter holen (Knoten HTTP Request) bei Open-Meteo, ohne API-Schlüssel: GET https://api.open-meteo.com/v1/forecast mit den Query-Parametern latitude und longitude für Ihren Ort (für Berlin etwa 52.52 und 13.41), daily mit dem Wert weather_code,temperature_2m_max,temperature_2m_min,precipitation_probability_max, timezone mit Europe/Berlin und forecast_days mit 1. Wichtig ist hier die Knoteneinstellung Execute Once, sonst fragt n8n das Wetter einmal je Termin ab.
  5. Nachricht bauen (Knoten Code): Termine zusammenführen, Doppelte und Absagen entfernen, sortieren, Uhrzeiten formatieren, Wetterzeile anhängen. Den Kern zeigt der Ausschnitt unter dieser Liste.
  6. Senden (Knoten Telegram, Send Message): Legen Sie in Telegram bei @BotFather mit /newbot einen eigenen Bot an und schreiben Sie ihm einmal /start, sonst darf er Ihnen nicht schreiben. Ihre Chat-ID steht danach in der Antwort von https://api.telegram.org/bot<TOKEN>/getUpdates. Diese Adresse enthält Ihren Bot-Token, geben Sie sie nicht weiter. Ins Feld Text kommt per Ausdruck {{ $json.text }} aus dem Code-Knoten. Zwei Vorgaben des Knotens sollten Sie unter Additional Fields ändern: Parse Mode auf HTML (ohne Einstellung sendet der Knoten im alten Markdown-Modus, dort lassen Zeichen wie _, * oder [ in einem Termintitel die ganze Nachricht scheitern) und Append n8n Attribution aus (sonst hängt der Knoten „This message was sent automatically with n8n“ an jede Nachricht).

Der Kern des Code-Knotens (Modus Run Once for All Items; die Knotennamen müssen zu Ihren passen):

const gesehen = new Set();
const termine = [];
let fehler = 0;
for (const { json: t } of $('Termine lesen').all()) {
  // Kalender nicht lesbar: zählen, nicht abbrechen
  if (t.error) { fehler++; continue; }
  // leeres Element (kein Termin) und Absagen überspringen
  if (!t.start || t.status === 'cancelled') continue;
  // derselbe Termin in zwei Kalendern: iCalUID plus Beginn
  const beginn = t.start.dateTime || t.start.date;
  const schluessel = (t.iCalUID || t.id) + '|' + beginn;
  if (gesehen.has(schluessel)) continue;
  gesehen.add(schluessel);
  termine.push({ ...t, ganztaegig: !t.start.dateTime });
}
// … hier aus termine den Text bauen (Titel maskieren, siehe unten) …
return [{ json: { text } }];

Aus termine bauen Sie dann den Text. Ist fehler größer als null, hängen Sie einen Hinweis an, etwa „Nicht alle Kalender konnten gelesen werden.“ So erfahren Sie davon, statt dass ein Kalender still fehlt.

Die Fallen, an denen die meisten Anleitungen scheitern

Alle Kalender, nicht nur der Hauptkalender

Viele Anleitungen lesen nur primary, also Ihren Hauptkalender. Geteilte und abonnierte Kalender fehlen dann. Ausgeblendete Kalender liefert Google in der Kalenderliste von sich aus nicht mit (die Einstellung showHidden steht standardmäßig auf aus). Den Feiertagskalender sollten Sie mitlesen: Ein Feiertag ist genau die Art ganztägiger Eintrag, die man morgens wissen will. Weglassen können Sie den Kalender mit den Kalenderwochen; seine ID enthält #weeknum@.

Doppelte Termine über die iCalUID erkennen, nicht über den Titel

Eine Einladung steht oft in zwei Kalendern, in Ihrem und im geteilten. Erkennen Sie Doppelte am Feld iCalUID plus Beginn, wie im Code oben. Google beschreibt die iCalUID als Kennung, die einen Termin über Kalendersysteme hinweg eindeutig macht. Titel und Uhrzeit taugen dafür nicht: Zweimal „Training 17:00“ in zwei Familienkalendern sind zwei echte Termine.

Serientermine: singleEvents einschalten

Wöchentliche oder tägliche Termine stehen in Google als ein Serientermin. Ohne die Einstellung singleEvents=true liefert die Google Calendar API die Serie statt der heutigen Einzeltermine, und Ihr Montagsmeeting fehlt oder steht mit falschem Datum da. Im Google-Kalender-Knoten von n8n (ab Version 1.3) heißt die Einstellung Recurring Event Handling; die Vorgabe All Occurrences ist die richtige. In älteren Knotenversionen heißt die Option Single Events und steht auf aus; schalten Sie sie dort ein. Wer die API direkt per HTTP-Request abfragt, setzt singleEvents=true selbst.

Ganztägige Termine enden einen Tag später

Ganztägige Einträge haben statt einer Uhrzeit (start.dateTime) nur ein Datum (start.date). Das Ende ist dabei exklusiv: Ein eintägiger Termin am 29. Oktober hat als Ende den 30. Oktober. Wer das Ende als letzten Tag liest, zeigt jeden Feiertag an zwei Tagen an. Ein mehrtägiger ganztägiger Termin gehört an jeden Tag bis einschließlich des Tages vor dem Ende-Datum. Die Abfrage aus Schritt 3 erfasst sie bereits, denn Google filtert mit After nach dem Ende eines Termins: Auch eine Konferenz, die gestern begann, kommt heute mit.

Zeitzone des Zeitplans und Zeitumstellung

Der Zeitplan in n8n läuft nach der Zeitzone des Workflows, und ohne Einstellung nach der Zeitzone der Instanz. Bei selbst betriebenem n8n ist das ohne die Umgebungsvariable GENERIC_TIMEZONE America/New_York. Ihr „7 Uhr“ wäre dann mittags deutscher Zeit, meist um 13 Uhr. Stellen Sie deshalb die Zeitzone in den Workflow-Einstellungen ein. Uhrzeiten berechnen Sie mit Zeitzonennamen wie Europe/Berlin, nie mit festen Versätzen wie „+1 Stunde“: Sonst stimmen die Uhrzeiten nach der Zeitumstellung im März und im Oktober nicht mehr. Im Code-Knoten von n8n steht dafür die Bibliothek Luxon bereit, etwa DateTime.fromISO(t.start.dateTime).setZone('Europe/Berlin').

Nicht still scheitern

Ist ein Kalender oder das Wetter nicht erreichbar, sollte die Nachricht das sagen und den Rest trotzdem schicken. Das leisten die Einstellungen aus Schritt 3 und der Fehlerzähler im Code. Mit dem Parse Mode HTML aus Schritt 6 ersetzen Sie in den Titeln &, < und > durch &amp;, &lt; und &gt;. So verlangt es Telegram: Ein unmaskiertes „<“ in einem Titel lässt die ganze Nachricht scheitern. Im alten Markdown-Modus, der Vorgabe des Knotens, gilt dasselbe für _, *, ` und [, etwa in „[Online] Teamrunde“; deshalb HTML.

Was der Betrieb kostet

  • n8n Cloud hat keinen Gratis-Tarif, nur eine kostenlose Probezeit. Der kleinste Tarif, Starter, kostet laut n8n.io 20 € im Monat bei jährlicher Zahlung und enthält 2.500 Ausführungen im Monat (Stand 29. Oktober 2026).
  • Selbst betriebenes n8n (Community Edition) ist kostenlos, braucht aber einen eigenen Rechner oder Server, der morgens läuft und den Sie pflegen.
  • Ausführungen: Jeder Lauf zählt als eine Ausführung, egal wie viele Kalender er liest. Ein Briefing am Tag sind etwa 30 im Monat. Ein Ablauf, der alle paar Minuten nachsieht, verbraucht dagegen schnell das ganze Kontingent.
  • Google Kalender und Telegram sind für diesen Zweck kostenlos.
  • Wetter: Open-Meteo ist nur für nicht-kommerzielle Nutzung kostenlos; wer das Briefing geschäftlich nutzt, braucht dort einen Bezahltarif oder einen anderen Wetterdienst. Die Daten stehen unter der Lizenz CC BY 4.0. Zeigen Sie die Wetterangaben außerhalb Ihres eigenen Chats, nennen Sie die Quelle: „Wetterdaten: Open-Meteo.com (CC BY 4.0)“.

Oder fertig nehmen

Wer das nicht selbst bauen will: Der Tagesassistent für Telegram ist eine fertige n8n-Vorlage, die alle Fallen oben berücksichtigt.

  • Drei Abläufe: das Morgen-Briefing um 7 Uhr, am Abend um 20 Uhr eine Vorschau auf morgen und sonntags um 18 Uhr eine Wochenvorschau.
  • Liest jeden Kalender Ihrer Google-Kalenderliste außer ausgeblendeten; einzelne können Sie ausnehmen. Ein Termin, der in zwei Kalendern steht, erscheint einmal.
  • Ganztägiges, Geburtstage, Absagen und die Zeitumstellung werden richtig behandelt. Ist ein Kalender oder das Wetter nicht erreichbar, steht das in der Nachricht, der Rest kommt trotzdem.
  • Läuft in Ihrem eigenen n8n, Cloud oder selbst betrieben. Alle drei Abläufe zusammen brauchen etwa 65 Ausführungen im Monat aus Ihrem n8n-Kontingent.
  • Liest Ihre Kalender nur: Die Vorlage legt dort keine Termine an, ändert keine und löscht keine; sie schickt Ihnen lediglich die Nachrichten.
  • Mit Schritt-für-Schritt-Anleitung auf Deutsch und Englisch samt Fehlerhilfe. Mit n8n Cloud ist der erste Ablauf in etwa 10 Minuten eingerichtet.

14,28 € einmalig, inkl. 19 % USt. für Käufer in Deutschland

Gumroad verkauft die Vorlage und stellt die Rechnung. Der Preis ist 12 € zuzüglich der Umsatzsteuer Ihres Landes, die Gumroad an der Kasse aufschlägt; den Endpreis sehen Sie dort vor dem Bezahlen. Freiwillig und auch nach dem Download: Innerhalb von 14 Tagen nach dem Kauf können Sie die Vorlage ohne Angabe von Gründen zurückgeben. Dazu kommen die laufenden Kosten für Ihr n8n (siehe oben) und bei geschäftlicher Nutzung ein Tarif bei Open-Meteo.

Bei Gumroad ansehen

Quellen

Abgerufen am 29. Oktober 2026. Erfolgsgeist ist mit Google, Telegram und n8n nicht verbunden; die Namen stehen hier nur, um zu sagen, womit der Ablauf arbeitet.