# n8n 워크플로우 구성 가이드 ## 워크플로우 개요 이 워크플로우는 2개의 YouTube 채널(머니머니코믹스, 슈카월드)의 새 영상을 RSS Feed Trigger로 감지하고, FastAPI `/api/news/summarize` 엔드포인트를 호출하여 요약 후 Discord로 전송하는 자동화 파이프라인입니다. **전체 흐름:** ``` RSS Feed Trigger (채널A) ──┐ ├→ Merge → HTTP Request (FastAPI) → 완료 RSS Feed Trigger (채널B) ──┘ ↘ Error Trigger → Discord 알림 ``` ## 노드 구성 상세 ### 1. RSS Feed Trigger 노드 (2개) RSS Feed Trigger는 **중복 방지가 내장**되어 있어 이전에 처리한 항목을 기억하고, 새 영상만 반환합니다. Poll Time으로 체크 주기를 설정합니다. **노드 A - 머니머니코믹스:** | 설정 항목 | 값 | |---|---| | Feed URL | `https://www.youtube.com/feeds/videos.xml?channel_id=UCJo6G1u0e_-wS-JQn3T-zEw` | | Poll Time | Every Day / Hour: 10, 14, 20 (하루 3회 권장) | **노드 B - 슈카월드:** | 설정 항목 | 값 | |---|---| | Feed URL | `https://www.youtube.com/feeds/videos.xml?channel_id=UCsJ6RuBiTVWRX156FVbeaGg` | | Poll Time | Every Day / Hour: 10, 14, 20 (하루 3회 권장) | > ⚠️ **첫 실행 주의:** RSS Feed Trigger를 처음 활성화하면 피드에 있는 모든 영상(최대 15개)을 새 영상으로 인식합니다. 워크플로우 활성화 전에 수동으로 한 번 테스트 실행하여 기존 항목을 처리 완료 상태로 만드세요. ### 2. Merge 노드 - **타입:** Merge - **모드:** Append - 두 RSS Feed Trigger의 출력을 하나의 리스트로 합칩니다. - 합쳐진 리스트의 각 항목마다 다음 노드(HTTP Request)가 실행됩니다. ### 3. HTTP Request 노드 FastAPI 서버의 `/api/news/summarize` 엔드포인트를 호출합니다. | 설정 항목 | 값 | |---|---| | Method | `POST` | | URL | `https://nkeystudy.site/api/news/summarize` | | Body Content Type | JSON | | Body | 아래 참조 | **Body 설정:** - **Specify Body:** `Using JSON` (Expression 모드) - **JSON:** ```json { "video_url": "{{ $json.link }}", "title": "{{ $json.title }}" } ``` > **주의:** 영상 제목에 큰따옴표(`"`)가 포함된 경우 JSON이 깨질 수 있습니다. 반드시 **Expression 모드**를 사용하세요 (Fixed 모드에서는 특수문자 이스케이프가 안 됩니다). **Headers:** | 헤더 | 값 | |---|---| | `Content-Type` | `application/json` | | `X-Api-Secret` | 설정한 시크릿 값 (`.env`의 `API_SECRET`과 동일) | ## 에러 처리 ### Error Trigger 워크플로우 메인 워크플로우와 별도로 에러 처리 워크플로우를 생성합니다. 1. **Error Trigger** 노드를 추가합니다. 2. **HTTP Request** 노드로 Discord Webhook을 호출합니다: | 설정 항목 | 값 | |---|---| | Method | `POST` | | URL | Discord Webhook URL | | Body Content Type | JSON | **Body:** ```json { "content": "뉴스 요약 봇 에러 발생!\n워크플로우: {{ $json.workflow.name }}\n에러: {{ $json.execution.error.message }}" } ``` 3. 메인 워크플로우의 **Settings → Error Workflow**에서 이 에러 워크플로우를 지정합니다. ### HTTP Request 노드 자체 에러 처리 HTTP Request 노드 설정에서: - **Continue On Fail:** `true`로 설정하면 하나의 영상 요약이 실패해도 나머지 영상은 계속 처리됩니다. - **Retry On Fail:** `true`, **Max Retries:** `2`, **Wait Between Retries (ms):** `3000`