Automatisierter täglicher Outlook-Kalender-Meeting-Zusammenfassung

Fortgeschritten

Dies ist ein Other-Bereich Automatisierungsworkflow mit 8 Nodes. Hauptsächlich werden Set, Code, EmailSend, ScheduleTrigger, MicrosoftOutlook und andere Nodes verwendet. Automatisierter täglicher Outlook-Kalender-Zusammenfassung

Voraussetzungen
  • Keine besonderen Voraussetzungen, sofort nach Import nutzbar

Kategorie

Workflow-Vorschau
Visualisierung der Node-Verbindungen, mit Zoom und Pan
Workflow exportieren
Kopieren Sie die folgende JSON-Konfiguration und importieren Sie sie in n8n
{
  "meta": {
    "instanceId": "7d8066d2f56a07000fe7d753d3eeabf0ecdf68413466f30d10afe0906f058427",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "c515d0b8-82f7-47f1-9a15-6867c69a8146",
      "name": "Microsoft Outlook",
      "type": "n8n-nodes-base.microsoftOutlook",
      "position": [
        480,
        0
      ],
      "webhookId": "35e62655-df36-4713-9a85-641dc2dc3fb8",
      "parameters": {
        "filters": {
          "custom": "=start/dateTime ge '{{$json.today}}' and start/dateTime lt '{{$json.tomorrow}}'"
        },
        "resource": "event"
      },
      "credentials": {
        "microsoftOutlookOAuth2Api": {
          "id": "JcYqVJwcwZIhB8oy",
          "name": "Outlook - Jared"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "2c325199-8df6-4c6c-94d2-b54a6d407d27",
      "name": "Code",
      "type": "n8n-nodes-base.code",
      "position": [
        260,
        0
      ],
      "parameters": {
        "jsCode": "const now = new Date();\nconst today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\nconst tomorrow = new Date(today);\ntomorrow.setDate(today.getDate() + 1);\n\nconst isoDate = (d) => d.toISOString().split('.')[0] + 'Z';\n\nreturn [\n  {\n    json: {\n      today: isoDate(today),\n      tomorrow: isoDate(tomorrow),\n    },\n  },\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "0b785775-6430-4fee-8603-e6527957560a",
      "name": "Felder bearbeiten",
      "type": "n8n-nodes-base.set",
      "position": [
        700,
        0
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "b4e4cf3b-eb02-408e-87e4-85eb52677a52",
              "name": "id",
              "type": "string",
              "value": "={{ $json.id }}"
            },
            {
              "id": "2eb21920-5251-4def-8b24-0db84367bb94",
              "name": "subject",
              "type": "string",
              "value": "={{ $json.subject }}"
            },
            {
              "id": "2840ba2a-1c25-494e-89ad-a18d61629855",
              "name": "description",
              "type": "string",
              "value": "={{ $json.bodyPreview }}"
            },
            {
              "id": "df847006-a390-40cc-a51e-368a213ffb32",
              "name": "meeting_start",
              "type": "string",
              "value": "={{ $json.start.dateTime }}"
            },
            {
              "id": "82e613bc-8de5-4f49-bebe-fbe34f3a1ea8",
              "name": "meeting_end",
              "type": "string",
              "value": "={{ $json.end.dateTime }}"
            },
            {
              "id": "6de1d0ea-48f6-4b95-b810-720dd853b301",
              "name": "attendees",
              "type": "array",
              "value": "={{ $json.attendees }}"
            },
            {
              "id": "3fca7af4-1e83-4e50-b42b-db95e5dba255",
              "name": "meeting_organizer",
              "type": "string",
              "value": "={{ $json.organizer.emailAddress.name }}"
            },
            {
              "id": "5eaa74ef-595d-4a5b-9c37-bdf009cd3b5e",
              "name": "meeting_organizer_email",
              "type": "string",
              "value": "={{ $json.organizer.emailAddress.address }}"
            },
            {
              "id": "d26a7fc5-9782-4237-af89-7afcb42c8bcc",
              "name": "meeting_link",
              "type": "string",
              "value": "={{ $json.webLink }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "9257dcb7-0605-4837-944b-97670cf53317",
      "name": "E-Mail senden",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        1140,
        0
      ],
      "webhookId": "0b3eae88-6102-4da2-985e-c681e7d5005c",
      "parameters": {
        "html": "={{ $json.html }}",
        "options": {
          "appendAttribution": false
        },
        "subject": "={{ $json.subject }}",
        "toEmail": "akhil.nueve@gmail.com",
        "fromEmail": "notification@nuevesolutions.in"
      },
      "credentials": {
        "smtp": {
          "id": "vCexcphurglwGBfk",
          "name": "SMTP account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "571a1e32-3d86-4a2f-af35-439557423283",
      "name": "Zeitplan-Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        40,
        0
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 8
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "649833a8-81e0-4bd2-ad8b-5982ce32fe11",
      "name": "HTML generieren",
      "type": "n8n-nodes-base.code",
      "position": [
        920,
        0
      ],
      "parameters": {
        "jsCode": "const data = $input.all().map(item => item.json);\n\nfunction generateMeetingReminderEmail(meetings) {\n  const escapeHtml = (unsafe) =>\n    unsafe\n      .replace(/&/g, \"&amp;\")\n      .replace(/</g, \"&lt;\")\n      .replace(/>/g, \"&gt;\")\n      .replace(/\"/g, \"&quot;\")\n      .replace(/'/g, \"&#039;\");\n\n  const meetingCards = meetings.map(meeting => {\n    const start = new Date(meeting.meeting_start);\n    const end = new Date(meeting.meeting_end);\n\n    const options = { year: 'numeric', month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' };\n    const timeString = `${start.toLocaleString('en-US', options)} – ${end.toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit' })}`;\n\n    const requiredAttendees = meeting.attendees\n      .filter(a => a.type === 'required')\n      .map(a => escapeHtml(a.emailAddress.name))\n      .join(', ');\n\n    const optionalAttendees = meeting.attendees\n      .filter(a => a.type === 'optional')\n      .map(a => escapeHtml(a.emailAddress.name))\n      .join(', ');\n\n    return `\n      <table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" style=\"margin-bottom: 20px;\">\n        <tr>\n          <td align=\"center\" style=\"padding: 0 10px;\">\n            <table cellpadding=\"20\" cellspacing=\"0\" width=\"100%\" style=\"max-width: 800px; background-color: #ffffff; border: 1px solid #ddd; border-collapse: collapse;\">\n              <tr>\n                <td style=\"font-family: Arial, sans-serif; color: #333333; font-size: 14px;\">\n                  <h2 style=\"margin: 0 0 10px; font-size: 18px; color: #2c3e50;\">${escapeHtml(meeting.subject)}</h2>\n                  <p><strong>Time:</strong> ${timeString}</p>\n                  <p><strong>Organizer:</strong> ${escapeHtml(meeting.meeting_organizer)} (${escapeHtml(meeting.meeting_organizer_email)})</p>\n                  <p><strong>Description:</strong> ${escapeHtml(meeting.description || 'No description provided.')}</p>\n                  <p><strong>Attendees:</strong><br>${requiredAttendees || 'None'}<br>\n                  ${optionalAttendees ? `<em>Optional:</em> ${optionalAttendees}` : ''}</p>\n                  <p>\n                    <a href=\"${meeting.meeting_link}\" style=\"display: inline-block; padding: 10px 15px; background-color: #0078d4; color: #ffffff; text-decoration: none; border-radius: 4px;\">View in Calendar</a>\n                  </p>\n                </td>\n              </tr>\n            </table>\n          </td>\n        </tr>\n      </table>\n    `;\n  }).join('\\n');\n\n  return `\n    <!DOCTYPE html>\n    <html>\n      <head>\n        <meta charset=\"UTF-8\">\n        <title>Today's Meetings</title>\n      </head>\n      <body style=\"margin: 0; padding: 0; font-family: Arial, sans-serif; background-color: #f4f4f4; color: #333;\">\n        <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"padding: 20px;\">\n          <tr>\n            <td align=\"center\">\n              <h1 style=\"font-size: 24px;\">📅 Your Meetings Today</h1>\n            </td>\n          </tr>\n          <tr>\n            <td>\n              ${meetingCards}\n            </td>\n          </tr>\n        </table>\n      </body>\n    </html>\n  `;\n}\n\nconst htmlContent = generateMeetingReminderEmail(data);\n\n// Return HTML + Subject for email node\nreturn [\n  {\n    json: {\n      subject: \"🗓️ Your Meetings Today – \" + (new Date()).toLocaleDateString('en-US', { weekday: 'long', month: 'short', day: 'numeric' }),\n      html: htmlContent\n    }\n  }\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "ca74ba38-8661-45d1-9524-5ed4e978f6a2",
      "name": "Notiz",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1060,
        160
      ],
      "parameters": {
        "width": 280,
        "height": 120,
        "content": "## Update Email Details\nchange email details to your sender and receiver email addresses."
      },
      "typeVersion": 1
    },
    {
      "id": "430f51b0-af72-4604-a00e-0d76bb45659c",
      "name": "Notiz1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -20,
        -180
      ],
      "parameters": {
        "content": "## Update Time\nconfigure the default time, when this workflow should trigger"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "2c325199-8df6-4c6c-94d2-b54a6d407d27": {
      "main": [
        [
          {
            "node": "c515d0b8-82f7-47f1-9a15-6867c69a8146",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "0b785775-6430-4fee-8603-e6527957560a": {
      "main": [
        [
          {
            "node": "649833a8-81e0-4bd2-ad8b-5982ce32fe11",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "649833a8-81e0-4bd2-ad8b-5982ce32fe11": {
      "main": [
        [
          {
            "node": "9257dcb7-0605-4837-944b-97670cf53317",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "571a1e32-3d86-4a2f-af35-439557423283": {
      "main": [
        [
          {
            "node": "2c325199-8df6-4c6c-94d2-b54a6d407d27",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c515d0b8-82f7-47f1-9a15-6867c69a8146": {
      "main": [
        [
          {
            "node": "0b785775-6430-4fee-8603-e6527957560a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Häufig gestellte Fragen

Wie verwende ich diesen Workflow?

Kopieren Sie den obigen JSON-Code, erstellen Sie einen neuen Workflow in Ihrer n8n-Instanz und wählen Sie "Aus JSON importieren". Fügen Sie die Konfiguration ein und passen Sie die Anmeldedaten nach Bedarf an.

Für welche Szenarien ist dieser Workflow geeignet?

Fortgeschritten - Sonstiges

Ist es kostenpflichtig?

Dieser Workflow ist völlig kostenlos. Beachten Sie jedoch, dass Drittanbieterdienste (wie OpenAI API), die im Workflow verwendet werden, möglicherweise kostenpflichtig sind.

Workflow-Informationen
Schwierigkeitsgrad
Fortgeschritten
Anzahl der Nodes8
Kategorie1
Node-Typen6
Schwierigkeitsbeschreibung

Für erfahrene Benutzer, mittelkomplexe Workflows mit 6-15 Nodes

Autor
Akhil Varma Gadiraju

Akhil Varma Gadiraju

@akhilv7

I'm a full stack developer passionate about building intelligent, scalable solutions that automate workflows and enhance productivity. I love working at the intersection of AI, APIs, and automation—using tools like n8n to streamline processes, integrate data, and unlock smarter decision-making. Whether it's crafting custom backend services or designing intuitive frontends, I’m always exploring ways to build more with less manual effort.

Externe Links
Auf n8n.io ansehen

Diesen Workflow teilen

Kategorien

Kategorien: 34