발행일: 2026-10-06(화) 11:44
← 목차로 돌아가기|하루 30분 n8n 시리즈 ② 실무 자동화 레시피 100
RECIPE 044

SLA 초과 임박 티켓 자동 경고

  • ▸회의 녹취 텍스트 또는 노트에서 OpenAI로 회의록을 자동 작성할 수 있다
  • ▸액션아이템, 결정사항, 다음 회의 아젠다를 자동으로 추출할 수 있다
  • ▸완성된 회의록을 Notion에 저장하고 참석자에게 이메일로 발송할 수 있다

✅사전 준비

  • □OpenAI API 자격증명 연결 완료
  • □Notion 자격증명 연결 완료
  • □Gmail 자격증명 연결 완료
  • □회의록 입력 방법 결정 (Webhook POST / Google Docs / Notion 초안 페이지)
  • □참석자 이메일 목록 관리 시트 준비

회의록 구조화 — OpenAI 프롬프트

Model: gpt-4o

System: 너는 전문 회의록 작성자야. 반드시 아래 JSON 형식으로만 응답해.

User:
다음 회의 내용을 분석해서 JSON으로 정리해줘.
{
  "title": "회의 제목",
  "date": "YYYY-MM-DD",
  "summary": "회의 요약 (3줄)",
  "decisions": ["결정사항1", "결정사항2"],
  "action_items": [
    { "task": "할일", "assignee": "담당자", "deadline": "날짜" }
  ],
  "next_agenda": ["다음 회의 안건1", "다음 회의 안건2"]
}

회의 내용:
{{ $json.rawNote }}

Notion 회의록 페이지 생성 매핑

제목(Title):   {{ $json.title }} — {{ $json.date }}
날짜(Date):    {{ $json.date }}
상태(Select):  완료

본문 블록:
  H2: 📋 회의 요약
  Paragraph: {{ $json.summary }}

  H2: ✅ 결정사항
  Bulleted List: {{ $json.decisions }}

  H2: 🎯 액션아이템
  To-do: {{ $json.action_items }}

참석자 이메일 발송 — Gmail HTML 본문

const m = $json;
const actionHtml = m.action_items
  .map(a => `<li><b>${a.task}</b> — ${a.assignee} (${a.deadline ?? '미정'})</li>`)
  .join('');

return [{ json: {
  html: `<h2>${m.title} 회의록</h2>
    <p><b>일시:</b> ${m.date}</p>
    <h3>📋 요약</h3><p>${m.summary}</p>
    <h3>✅ 결정사항</h3><ul>${m.decisions.map(d => `<li>${d}</li>`).join('')}</ul>
    <h3>🎯 액션아이템</h3><ul>${actionHtml}</ul>`,
} }];
⚡

워크플로우 JSON

아래 JSON을 복사해 n8n에 바로 임포트하세요

📥 n8n 임포트 방법
n8n 화면 우측 상단 메뉴 (⋮) → Import from JSON → 아래 JSON 전체 복사 후 붙여넣기 → Import 클릭
{
  "recipeId": "recipe044",
  "title": "SLA 초과 임박 티켓 자동 경고",
  "chapter": 4,
  "category": "고객 응대 자동화",
  "difficulty": "⭐⭐",
  "estimatedTime": "30분",
  "usedApps": [
    "Zendesk",
    "Slack"
  ],
  "description": "30분마다 Zendesk에서 미해결 티켓을 조회하여 SLA 마감까지 1시간 미만으로 남은 티켓을 담당자 Slack에 자동 경고합니다.",
  "nodes": [
    {
      "id": "trigger_schedule",
      "type": "trigger",
      "service": "Schedule",
      "name": "30분마다 실행",
      "config": {
        "interval": "every 30 minutes"
      }
    },
    {
      "id": "get_tickets",
      "type": "action",
      "service": "Zendesk",
      "name": "SLA 임박 티켓 조회",
      "config": {
        "operation": "searchTickets",
        "query": "status:open sla_breach_at:<1h",
        "fields": [
          "id",
          "subject",
          "assignee_id",
          "sla_policy",
          "sla_breach_at",
          "created_at"
        ]
      }
    },
    {
      "id": "check_exists",
      "type": "condition",
      "service": "IF",
      "name": "임박 티켓 존재 여부",
      "config": {
        "condition": "{{$json['count'] > 0}}"
      }
    },
    {
      "id": "loop_tickets",
      "type": "action",
      "service": "SplitInBatches",
      "name": "티켓별 반복 처리",
      "config": {
        "batchSize": 1
      }
    },
    {
      "id": "notify_assignee",
      "type": "action",
      "service": "Slack",
      "name": "담당자 경고 알림",
      "config": {
        "operation": "sendDM",
        "userId": "{{$json['assignee_slack_id']}}",
        "message": "🚨 SLA 초과 임박!\n\n🎫 티켓 #{{$json['id']}}: {{$json['subject']}}\n⏰ SLA 마감까지: {{$json['sla_remaining_minutes']}}분 남음\n\n👉 지금 바로 확인해주세요!\nhttps://{{$env.ZENDESK_DOMAIN}}.zendesk.com/agent/tickets/{{$json['id']}}"
      }
    },
    {
      "id": "no_action",
      "type": "noOp",
      "name": "임박 티켓 없음 — 스킵",
      "config": {}
    }
  ],
  "edges": [
    {
      "from": "trigger_schedule",
      "to": "get_tickets"
    },
    {
      "from": "get_tickets",
      "to": "check_exists"
    },
    {
      "from": "check_exists",
      "to": "loop_tickets",
      "branch": "true"
    },
    {
      "from": "check_exists",
      "to": "no_action",
      "branch": "false"
    },
    {
      "from": "loop_tickets",
      "to": "notify_assignee"
    }
  ],
  "tips": [
    "SLA 기준 시간은 Zendesk 설정에서 정책별로 다르게 설정되어 있어요. n8n에서는 'sla_breach_at' 필드와 현재 시간을 비교해 남은 시간을 계산하세요.",
    "담당자 Slack ID는 Zendesk 사용자 커스텀 필드에 미리 저장해두면 자동 매핑이 가능해요.",
    "1시간 전 경고 외에 30분 전 재경고를 추가하면 더 촘촘한 SLA 관리가 가능해요."
  ],
  "qrUrl": "www.koreaaitimes.com/books/n8n-vol2/recipe044"
}
← 이전 레시피☰ 목차다음 레시피 →