RECIPE 010
정기 회의 어젠다 자동 생성 & 발송
- ▸SerpAPI 또는 Google Trends RSS로 트렌드 키워드를 수집할 수 있다
- ▸수집 데이터를 Sheets에 누적 저장하는 주간 파이프라인을 만들 수 있다
- ▸Gmail로 주간 트렌드 리포트를 자동 발송할 수 있다
✅사전 준비
- □Google Trends RSS URL 확인 (API 키 불필요)
- □Gmail 자격증명 연결 완료
- □Google Sheets에 주간 트렌드 저장용 시트 생성
- □Schedule Trigger: 매주 월요일 오전 9시 (Cron: 0 9 * * 1)
Google Trends RSS — HTTP Request URL
일간 검색 트렌드 (한국):
https://trends.google.com/trends/trendingsearches/daily/rss?geo=KR
실시간 트렌드:
https://trends.google.com/trends/hottrends/atom/feed?pn=p23
(p23 = 한국)트렌드 상위 10개 추출 — Code 노드
const items = $input.all();
return items.slice(0, 10).map((item, idx) => ({
json: {
rank: idx + 1,
keyword: item.json.title,
traffic: item.json["ht:approx_traffic"] ?? "-",
date: new Date().toLocaleDateString("ko-KR"),
}
}));Gmail 리포트 본문 — HTML
<h2>📈 이번 주 Google 트렌드 Top 10</h2>
<p>기준일: {{ $now.toFormat("yyyy년 MM월 dd일") }}</p>
<ol>
{{#each $items}}
<li><b>{{ this.keyword }}</b> — 검색량 약 {{ this.traffic }}</li>
{{/each}}
</ol>⚡
워크플로우 JSON
아래 JSON을 복사해 n8n에 바로 임포트하세요
📥 n8n 임포트 방법
n8n 화면 우측 상단 메뉴 (⋮) → Import from JSON → 아래 JSON 전체 복사 후 붙여넣기 → Import 클릭
n8n 화면 우측 상단 메뉴 (⋮) → Import from JSON → 아래 JSON 전체 복사 후 붙여넣기 → Import 클릭
{
"name": "recipe010_meeting_agenda_auto_send",
"nodes": [
{
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"triggerAtWeekDay": [
2
],
"triggerAtHour": 17,
"triggerAtMinute": 0
}
]
}
},
"id": "schedule-010-01",
"name": "회의 전날 오후 5시 트리거",
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
200,
400
]
},
{
"parameters": {
"resource": "sheet",
"operation": "getRows",
"documentId": {
"__rl": true,
"mode": "id",
"value": "={{ $env.AGENDA_SHEET_ID }}"
},
"sheetName": {
"__rl": true,
"mode": "name",
"value": "어젠다템플릿"
},
"options": {}
},
"id": "sheets-010-02",
"name": "어젠다 항목 가져오기",
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.5,
"position": [
420,
400
]
},
{
"parameters": {
"jsCode": "const items = $input.all();\nconst meetingDate = $now.plus({days: 1}).setLocale('ko').toFormat('M월 d일 (cccc)');\nconst agendaLines = items.map((item, idx) => {\n const topic = item.json['항목'] || '(항목 없음)';\n const owner = item.json['담당자'] || '';\n const duration = item.json['소요시간'] || '';\n const ownerPart = owner ? ` — ${owner}` : '';\n const durationPart = duration ? ` (${duration}분)` : '';\n return `${idx + 1}. ${topic}${ownerPart}${durationPart}`;\n}).join('\\n');\nconst emailBody = `안녕하세요, 팀원 여러분!\\n\\n내일(${meetingDate}) 주간 팀 회의 어젠다를 공유드립니다.\\n\\n━━━━━━━━━━━━━━━━\\n${agendaLines}\\n━━━━━━━━━━━━━━━━\\n\\n준비 사항 미리 확인해주세요. 감사합니다!`;\nconst slackMessage = `📋 *내일 팀 회의 어젠다 (${meetingDate})*\\n\\n${agendaLines}\\n\\n내일 뵙겠습니다! 😊`;\nreturn [{ json: { emailBody, slackMessage, meetingDate } }];"
},
"id": "code-010-03",
"name": "어젠다 메시지 포맷",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
640,
400
]
},
{
"parameters": {
"resource": "message",
"operation": "send",
"toEmail": "={{ $env.TEAM_EMAIL_LIST }}",
"subject": "={{ '[회의 안내] ' + $json.meetingDate + ' 주간 팀 회의 어젠다' }}",
"message": "={{ $json.emailBody }}",
"options": {}
},
"id": "gmail-010-04",
"name": "Gmail 어젠다 이메일 발송",
"type": "n8n-nodes-base.gmail",
"typeVersion": 2.1,
"position": [
860,
280
]
},
{
"parameters": {
"resource": "message",
"operation": "post",
"channel": "#team-meeting",
"text": "={{ $json.slackMessage }}",
"otherOptions": {}
},
"id": "slack-010-05",
"name": "Slack 어젠다 공유",
"type": "n8n-nodes-base.slack",
"typeVersion": 2.2,
"position": [
860,
520
]
}
],
"connections": {
"회의 전날 오후 5시 트리거": {
"main": [
[
{
"node": "어젠다 항목 가져오기",
"type": "main",
"index": 0
}
]
]
},
"어젠다 항목 가져오기": {
"main": [
[
{
"node": "어젠다 메시지 포맷",
"type": "main",
"index": 0
}
]
]
},
"어젠다 메시지 포맷": {
"main": [
[
{
"node": "Gmail 어젠다 이메일 발송",
"type": "main",
"index": 0
},
{
"node": "Slack 어젠다 공유",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
"timezone": "Asia/Seoul"
},
"meta": {
"chapter": 1,
"recipe": "010",
"title": "정기 회의 어젠다 자동 생성 & 발송",
"difficulty": "⭐⭐",
"estimatedTime": "30분",
"apps": [
"Google Sheets",
"Gmail",
"Slack"
],
"workflowUrl": "www.koreaaitimes.com/books/n8n-vol2/recipe010"
}
}