8
n8n 한국어amn8n.com

자동화된 일일 Outlook 캘린더 회의 요약

중급

이것은Other분야의자동화 워크플로우로, 8개의 노드를 포함합니다.주로 Set, Code, EmailSend, ScheduleTrigger, MicrosoftOutlook 등의 노드를 사용하며. 자동화된 일일 Outlook 캘린더 회의 요약

사전 요구사항
  • 특별한 사전 요구사항 없이 가져와 바로 사용 가능합니다

카테고리

워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 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": "필드 편집",
      "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": "이메일 보내기",
      "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": "예약 트리거",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        40,
        0
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 8
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "649833a8-81e0-4bd2-ad8b-5982ce32fe11",
      "name": "HTML 생성",
      "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": "스티커 노트",
      "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": "스티커 노트1",
      "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
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

이 워크플로우를 어떻게 사용하나요?

위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.

이 워크플로우는 어떤 시나리오에 적합한가요?

중급 - 기타

유료인가요?

이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.

워크플로우 정보
난이도
중급
노드 수8
카테고리1
노드 유형6
난이도 설명

일정 경험을 가진 사용자를 위한 6-15개 노드의 중간 복잡도 워크플로우

저자
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.

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34