소개
네이버 뉴스에 입점하지 않은 특정 뉴스 채널 요약 및 전송
진행 방법
Schedule Trigger : 2회/1 크론 표현식 사용
HTTP Request : RSS 피드 가져오기, Response Format:
Text(XML로 받기 위함)XML :RSS(XML) → JSON 변환
Code :
slice(0, 12)→ 기사 최대 12개 제한 / (RSS에서 디폴트값이 20개로 추정됨)Aggregate : LLM이 만든 요약 12개를 하나로 합치기
Send a text message : {{ $json.text.join("\n\n----------------\n\n") }} -> Chatgpt에 문의하여 1개의 텔레그램 메시지에 12기사 전송 /Parse Mode: None (안전하게 전송, Markdown 오류 방지)
아래 내용은 기사 요약정리를 위한 프롬프트
목표: 한국어로 200자 이내 / 3단락, 각 1~2문장, 키워드 중심 / 문장 끝은 명사형 “~ㅁ”
/ 숫자·반복·단순 정보 지양 / 마지막 단락에만 시사점/업무 연결 / 회사 현재상황 참조(문맥 반영용)
입력 기사:
- 분류: {{ $json.category }}
- 제목: {{ $json.title }}
- 설명: {{ $json.description }}
- 링크: {{ $json.link }}
작성 규칙:
1) 헤드라인: 업로드 내용 전체를 대체 가능한 한 문장 생성하고 이렇게 만들어줘 *
2) 둘째 단락: 기사 내용 전체를 통찰해서 요약
3) 셋째 단락(시사점 전용): 향후 업무 추진·타부서 주지·전사 환기 등 실제 실행 연결. 우리 회사 맥락 연결.
4) 모든 문장 끝은 “~ㅁ”와 같이 명사형, 200자 초과 금지
5) 출력 끝에 “<Source> {{ $json.link }}” 추가
이제 위 규칙대로만 출력하라.
결과와 배운 점 (ChatGpt와 코멘트 ^^)
🔑 Lessons You Learned
1. Data structure awareness is everything
처음에는
channel[0].item처럼 배열로 잘못 접근해서undefined오류가 났었죠.JSON 구조(
rss → channel → item[])를 정확히 파악하고 나서야 코드를 수정할 수 있었습니다.
👉 Lesson: n8n에서는 “내가 다루는 데이터가 배열인지, 객체인지”를 먼저 확인해야 한다.
2. Code node vs. Aggregate node 역할 분리
Code 노드에서는 기사별 프롬프트를 만들고,
Aggregate 노드에서는 요약된 결과를 한 덩어리로 합쳤습니다.
👉 Lesson: “가공은 Code”, “합치기는 Aggregate” → 각 노드의 역할을 분리하면 오류 줄일 수 있음.
3. Telegram Parse Mode & 특수문자 처리
처음엔
Bad Request: can't parse entities같은 오류가 계속 났죠.그 원인은 MarkdownV2에서
.,_,-같은 문자가 예약문자라 escape(\)가 필요했기 때문.결국 Parse Mode를 None이나 HTML로 바꾸면서 해결했어요.
👉 Lesson: 텔레그램 전송 시, 출력 형식에 따라 escape 처리가 꼭 필요하다.
4. Array → String 변환(join) 필요성
Aggregate 출력이 배열이라 그대로 Telegram에 넘기면
[Array: …]오류 발생.join("\n\n")으로 문자열로 합쳐야만 정상적으로 메시지를 보낼 수 있었죠.
👉 Lesson: 배열은 바로 전송 불가 → 문자열로 변환 필요.
5. 에러 메시지를 단서로 삼는 법
Cannot read properties of undefined (reading 'item')→ 데이터 구조 문제Bad Request: message text is empty→ Text 필드에 값이 없음Bad Request: can't parse entities→ 특수문자 처리 문제
👉 Lesson: 에러 메시지 자체가 "어디를 확인해야 할지" 정확한 힌트를 준다.
도움 받은 글 (옵션)
Chatgpt 대화창 하나로 Workflow와 개별 Node 설정과 오류 메시지 피드백 하며 설정함