自动化每日 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": "代码",
"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, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\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": "## 更新邮件详情"
},
"typeVersion": 1
},
{
"id": "430f51b0-af72-4604-a00e-0d76bb45659c",
"name": "便签1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-20,
-180
],
"parameters": {
"content": "## 更新时间"
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"Code": {
"main": [
[
{
"node": "Microsoft Outlook",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields": {
"main": [
[
{
"node": "Generate HTML",
"type": "main",
"index": 0
}
]
]
},
"Generate HTML": {
"main": [
[
{
"node": "Send Email",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Code",
"type": "main",
"index": 0
}
]
]
},
"Microsoft Outlook": {
"main": [
[
{
"node": "Edit Fields",
"type": "main",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
中级 - 其他
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
Google日历下周安排
通过邮件自动发送每周Google日历摘要(AI驱动)✨🗓️📧
Set
Code
Markdown
+7
21 节点Jez
其他
会议反馈收集与Excel OneDrive记录及Outlook通知
通过表单收集会议反馈,记录到Excel OneDrive,并发送Outlook通知
If
Set
Code
+7
13 节点Akhil Varma Gadiraju
营销
夏令时通知
不同时区的夏令时通知
If
Set
Code
+6
10 节点Łukasz
其他
AI驱动的知识助手
基于AI的知识助手,使用Google Sheets、OpenAI和Supabase向量搜索
Set
Code
Gmail
+7
14 节点Akhil Varma Gadiraju
工程
n8n 工作流自动每日备份至 GitLab 仓库
n8n 工作流自动每日备份至 GitLab 仓库
N8n
Set
Code
+6
19 节点Akhil Varma Gadiraju
工程
将工作流备份到 Gitea 上的 git 仓库
备份工作流到 Gitea 上的 git 仓库
If
N8n
Set
+5
20 节点Octoleo
其他
工作流信息
难度等级
中级
节点数量8
分类1
节点类型6
作者
Akhil Varma Gadiraju
@akhilv7I'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 查看 →
分享此工作流