Power Platform Academyby Marcel Lehmann

Abwesenheitsnotiz automatisch aus dem Kalender

Du trägst deine Ferien ohnehin in den Kalender ein. Dieser Flow liest den Termin und schaltet fünf Minuten vor Beginn die automatische Antwort von Outlook ein, mit dem richtigen Rückkehrdatum im Text. Am Termin setzt du nur zwei Dinge: «OoF» in den Betreff und «Anzeigen als: Abwesend».

Was du brauchst

  • Ein Microsoft-365-Konto mit Outlook-Postfach (Exchange Online)
  • Zugriff auf Power Automate (make.powerautomate.com)
  • Keine Premium-Lizenz: Der Flow nutzt nur den Standard-Connector Office 365 Outlook

So funktioniert der Flow

  1. Der Trigger prüft regelmässig deinen Kalender (je nach Lizenz alle 1 bis 5 Minuten), ob in den nächsten 5 Minuten ein Termin beginnt.
  2. Zwei Trigger-Bedingungen lassen nur Termine durch, die «oof» im Betreff haben und als «Abwesend» angezeigt werden. Alle anderen Termine starten keinen Lauf.
  3. Der Flow rechnet das Terminende in deine Zeitzone um und setzt es als Rückkehrdatum in den Text.
  4. Ist der Termin noch nicht vorbei, schaltet er die automatische Antwort ein, intern und extern.
  5. Geht etwas schief, endet der Lauf als «Fehlgeschlagen» und Power Automate schickt dir die übliche Fehlermail.

Ausschalten machst du selbst, wenn du zurück bist. So bleibt die Antwort an, auch wenn du einen Tag länger weg bist.

Schritt für Schritt

1.Flow anlegen und Trigger wählen

  1. Öffne make.powerautomate.com und wähle Erstellen und dann Automatisierter Cloud-Flow.
  2. Name: Autoreply aus OoF-Termin
  3. Trigger: Wenn ein bevorstehendes Ereignis bald beginnt (V3) (englisch «When an upcoming event is starting soon (V3)») aus Office 365 Outlook.
  4. Kalender-ID: Wähle im Dropdown deinen Standardkalender, meistens «Kalender» oder «Calendar».
  5. Vorschauzeit (Look-Ahead Time): 5

Melde dich bei der Verbindung mit dem Konto an, dessen automatische Antwort der Flow schalten soll. Der Flow schaltet immer die Antwort des Kontos, dem die Verbindung gehört.

2.Trigger-Bedingungen setzen

Ohne diese Bedingungen würde jeder Termin einen Lauf auslösen. Klicke auf den Trigger, dann auf Einstellungen. Unter Triggerbedingungen fügst du zwei Zeilen hinzu:

@contains(toLower(coalesce(triggerBody()?['subject'], '')), 'oof')
@equals(toLower(coalesce(triggerBody()?['showAs'], '')), 'oof')

Die erste prüft den Betreff, egal ob «OoF», «OOF» oder «oof». Die zweite prüft «Anzeigen als: Abwesend»; im Kalender heisst dieser Wert intern oof. Beide müssen erfüllt sein. coalesce sorgt dafür, dass ein Termin ohne Betreff keinen Fehler auslöst.

3.Einstellungen an einem Ort sammeln

Alle Texte und Formate stehen in einer einzigen Aktion. Später änderst du nur noch diese.

  1. Neuer Schritt: JSON analysieren (Parse JSON) aus «Datenvorgänge». Benenne die Aktion in Config um.
  2. Bei Inhalt fügst du diesen Text ein und ersetzt Vorname Nachname in beiden Texten durch deinen Namen:
{
  "internalMessage": "<p>Guten Tag</p><p>Ich bin derzeit abwesend und lese E-Mails nur eingeschränkt. Ab dem {rueckkehr} bin ich wieder für Sie da und melde mich dann bei Ihnen.</p><p>Freundliche Grüsse<br>Vorname Nachname</p>",
  "externalMessage": "<p>Guten Tag</p><p>Ich bin derzeit abwesend und lese E-Mails nur eingeschränkt. Ab dem {rueckkehr} bin ich wieder für Sie da und melde mich dann bei Ihnen.</p><p>Freundliche Grüsse<br>Vorname Nachname</p>",
  "externalAudience": "all",
  "zeitzone": "W. Europe Standard Time",
  "datumFormatGanztags": "dd.MM.yyyy",
  "datumFormatMitZeit": "dd.MM.yyyy HH:mm"
}

Beim Schema klickst du auf Beispielnutzlast zum Generieren eines Schemas verwenden und fügst denselben Text ein.

FeldBedeutung
internalMessageAntwort an Absender aus deiner Organisation. {rueckkehr} ersetzt der Flow durch das Datum.
externalMessageAntwort an Absender von aussen.
externalAudienceall = alle externen Absender, contactsOnly = nur deine Kontakte, none = keine externe Antwort.
zeitzoneZeitzone für das Rückkehrdatum. Für die Schweiz, Deutschland und Österreich: W. Europe Standard Time.
datumFormatGanztagsFormat bei ganztägigen Terminen, z. B. 31.10.2026.
datumFormatMitZeitFormat bei Terminen mit Uhrzeit, z. B. 27.10.2026 12:45.

4.Bereich «Try» anlegen

Neuer Schritt: Bereich (Scope) aus «Steuerelement». Benenne ihn in Try um. Die Aktionen aus Schritt 5 und 6 kommen in diesen Bereich.

5.Rückkehrdatum berechnen

Im Bereich Try: Verfassen (Compose) aus «Datenvorgänge», Name Rueckkehr. Bei Eingaben öffnest du den Ausdruckseditor (fx) und fügst ein:

if(coalesce(triggerBody()?['isAllDay'], false), formatDateTime(triggerBody()?['end'], body('Config')?['datumFormatGanztags']), formatDateTime(convertTimeZone(triggerBody()?['end'], 'UTC', body('Config')?['zeitzone']), body('Config')?['datumFormatMitZeit']))

Der Trigger liefert das Terminende bei Terminen mit Uhrzeit in UTC. Ein Termin bis 12:45 Uhr kommt im Winter als 11:45 an, im Sommer als 10:45. convertTimeZone rechnet in deine Zeitzone um. Bei ganztägigen Terminen liefert der Trigger das Datum unverändert, darum rechnet der Ausdruck dort nicht um.

Das Ende eines ganztägigen Termins ist der Tag danach: Ferien vom 29. bis 30.10. enden am 31.10. um 00:00. Genau dieses Datum ist dein erster Arbeitstag, und genau das steht dann im Text.

6.Prüfen und automatische Antwort einschalten

  1. Im Bereich Try, nach Rueckkehr: Bedingung (Condition), Name Termin_noch_nicht_vorbei.
  2. Links als Ausdruck: ticks(coalesce(triggerBody()?['endWithTimeZone'], triggerBody()?['end'])), Operator ist grösser als, rechts als Ausdruck: ticks(utcNow())
  3. Im Zweig Wahr: Automatische Antworten einrichten (V2) (Set up automatic replies (V2)) aus Office 365 Outlook, Name Autoreply_setzen:
    • Status: alwaysEnabled
    • Externe Zielgruppe: body('Config')?['externalAudience']
    • Interne Antwortnachricht: replace(body('Config')?['internalMessage'], '{rueckkehr}', outputs('Rueckkehr'))
    • Externe Antwortnachricht: replace(body('Config')?['externalMessage'], '{rueckkehr}', outputs('Rueckkehr'))
  4. Der Zweig Falsch bleibt leer.

Die Bedingung schützt dich vor einem Sonderfall: Trägst du eine Abwesenheit nachträglich ein, die schon vorbei ist, schaltet der Flow nichts ein.

7.Fehler sichtbar machen

  1. Unter Try (nicht darin): neuer Bereich, Name Catch.
  2. Bei Catch über die drei Punkte Ausführen nach konfigurieren: nur ist fehlgeschlagen und hat das Zeitlimit überschritten anhaken.
  3. In Catch: Beenden (Terminate), Status Fehlgeschlagen, Code AutoreplyFailed, Meldung als Ausdruck:
concat('Abwesenheit konnte nicht gesetzt werden: ', string(result('Try')), ' | Run: https://make.powerautomate.com/environments/', workflow()?['tags']?['environmentName'], '/flows/', workflow()?['name'], '/runs/', workflow()?['run']?['name'])

Der Bereich fängt jeden Fehler in Try ab und beendet den Lauf mit einer eigenen Meldung, die die Details und den Link zum Lauf enthält. Diese Meldung steht im Verlauf und in der Fehlermail von Power Automate. Speichere den Flow.

8.Testen

  1. Lege in Outlook einen Termin an, der in etwa 8 Minuten beginnt: Betreff OoF Test, Anzeigen als: Abwesend, Ende z. B. in einer Stunde. Lade niemanden ein.
  2. Warte, bis im Verlauf des Flows ein Lauf erscheint, je nach Lizenz nach bis zu 5 Minuten.
  3. Öffne den Lauf und prüfe die Ausgabe von Rueckkehr: Steht dort die Endzeit deines Termins in deiner Ortszeit?
  4. Prüfe in Outlook unter Einstellungen, Konten, Automatische Antworten, ob der Text stimmt.
  5. Schalte die automatische Antwort wieder aus und lösche den Testtermin.

Nutzt du schon eine automatische Antwort mit eigenem Text, kopiere ihn vor dem Test heraus. Der Flow überschreibt ihn.

Typische Fehler

Kein Lauf im Verlauf
«Anzeigen als» steht nicht auf «Abwesend» oder «oof» fehlt im Betreff. Die Trigger-Bedingungen filtern solche Termine ohne Lauf und ohne Fehler weg.
Kein Lauf, obwohl alles stimmt
Der Termin beginnt in weniger als 5 Minuten, bevor der Trigger ihn abfragt, oder liegt in der Vergangenheit. Lege einen neuen Termin mit Beginn in 8 bis 10 Minuten an.
Rückkehrzeit eine oder zwei Stunden zu früh
Das Terminende wurde ohne Umrechnung formatiert. Nimm den Ausdruck aus Schritt 5 mit convertTimeZone.
Fehler «convertFromUtc expects ... UTC date time»
convertFromUtc verlangt ein Z am Ende der Zeit, der Trigger liefert keines. Nimm convertTimeZone(..., 'UTC', ...).
Rückkehrdatum bei Ferien einen Tag «zu spät»
Kein Fehler: Das Ende eines ganztägigen Termins ist der erste Tag danach. Darum lautet der Text «Ab dem ... bin ich wieder für Sie da».
Antwort im falschen Postfach
Die Verbindung gehört einem anderen Konto. Stell die Outlook-Verbindung im Flow auf dein eigenes Konto.
Umlaute kaputt («für»)
Der Text kam aus einer Datei mit falscher Kodierung. Tipp ihn direkt im Designer ein.

Variante: Die Antwort schaltet sich selbst aus

Willst du nicht selbst ausschalten, stellst du in Autoreply_setzen den Status auf scheduled und setzt Startzeit und Endzeit aus dem Trigger. Dann endet die Antwort mit dem Termin. Bist du länger weg als geplant, ist sie dann allerdings schon aus.

Lieber importieren als selbst bauen?

Diesen Flow gibt es auch als fertige Vorlage zum Importieren, als Lösung mit Verbindungsreferenz und einer Umgebungsvariable für den Kalender. Nach dem Import wählst du deine Outlook-Verbindung, ergänzt deinen Namen im Text und schaltest den Flow ein. Die Vorlage ist gratis, wir schicken sie dir per Mail: Vorlage anfordern.

Vorlage per Mail anfordern

Trag Vorname und E-Mail ein, dann kommt die fertige Lösung als Zip-Datei in dein Postfach, mit Link zu dieser Anleitung.

Du bekommst die Vorlage per Mail. Danach schicken wir dir den KMUpower Impuls mit Anleitungen, Tipps und Vorlagen sowie Infos zu passenden Workshops und Kursen. Du kannst jederzeit widersprechen, hier oder per Abmeldelink in jeder Mail. Details in der Datenschutzerklärung.

Widerspruch

Ohne Häkchen bekommst du zusätzlich den KMUpower Impuls und Infos zu Workshops und Kursen.

Für das ganze Team: Ferien und Abwesenheitsnotiz in einem

Ferien, Saldo und Abwesenheitsnotiz in einer App für das ganze Team. Die Vorlage Abwesenheiten Plus gibt es ab CHF 399, auf Wunsch mit Einrichtung: Grössere Pakete auf kmupower.com/vorlagen.

Das lernst du in der Power Automate Schulung.