From 337e2f16e73d9f702da4b827efd0f686f77e8f89 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Thu, 19 Mar 2026 15:44:10 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20scheduled=5Fdaily=5Fbriefing=20n8n=20imp?= =?UTF-8?q?ort=20=ED=98=B8=ED=99=98=20=ED=98=95=EC=8B=9D=EC=9C=BC=EB=A1=9C?= =?UTF-8?q?=20=EC=9E=AC=EC=9E=91=EC=84=B1=20(09:10->daily=5Fheadlines->run?= =?UTF-8?q?=5Fheadlines=5Fworkflow->naver/sea->format->Slack)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- .../scheduled_daily_briefing.json | 243 +++++++++++++----- 1 file changed, 176 insertions(+), 67 deletions(-) diff --git a/workflow/04_scheduler/scheduled_daily_briefing.json b/workflow/04_scheduler/scheduled_daily_briefing.json index 7082934..e8d15e1 100644 --- a/workflow/04_scheduler/scheduled_daily_briefing.json +++ b/workflow/04_scheduler/scheduled_daily_briefing.json @@ -1,87 +1,178 @@ { "name": "robeing-daily-headlines-actual-runtime", "nodes": [ + { + "parameters": { + "height": 420, + "width": 2380 + }, + "type": "n8n-nodes-base.stickyNote", + "position": [ + -220, + 64 + ], + "typeVersion": 1, + "id": "aeb5f661-29a0-461b-9d7b-1d8f68a2c001", + "name": "Workflow Note" + }, { "parameters": { "rule": { "cronExpression": "10 9 * * 1-5" } }, - "id": "sched-headlines-001", + "id": "aeb5f661-29a0-461b-9d7b-1d8f68a2c002", "name": "09:10 Trigger", "type": "n8n-nodes-base.scheduleTrigger", "typeVersion": 1, - "position": [220, 240] + "position": [ + 0, + 224 + ] }, { "parameters": { - "jsCode": "return [{ json: { step: 'scheduled_jobs.daily_headlines', cron: '10 9 * * mon-fri', channel_id: 'C09C98KK2TT' } }];" + "jsCode": "return {\n scheduler_source: 'scheduled_jobs.daily_headlines',\n cron_expression: '10 9 * * mon-fri',\n channel_id: 'C09C98KK2TT',\n job_wrapper: 'app.scheduler.jobs.daily_headlines._run_headlines_with_logging',\n workflow_entry: 'run_headlines_workflow(channel_id)',\n state_store: '/code/state/headlines_graph.sqlite'\n};" }, - "id": "sched-headlines-002", - "name": "DB Job Config", + "id": "aeb5f661-29a0-461b-9d7b-1d8f68a2c003", + "name": "Build Runtime Context", "type": "n8n-nodes-base.code", "typeVersion": 2, - "position": [470, 240] + "position": [ + 240, + 224 + ] }, { "parameters": { - "jsCode": "return [{ json: { step: 'app.scheduler.jobs.daily_headlines._run_headlines_with_logging(channel_id)', channel_id: $json.channel_id } }];" + "method": "POST", + "url": "=http://192.168.219.52:8505/api/news/naver/startup-headlines", + "sendBody": true, + "specifyBody": "json", + "jsonBody": "={\"format\":\"slack\"}", + "options": { + "response": { + "response": { + "fullResponse": true + } + } + } }, - "id": "sched-headlines-003", - "name": "daily_headlines Wrapper", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [720, 240] + "id": "aeb5f661-29a0-461b-9d7b-1d8f68a2c004", + "name": "Call Naver Headlines API", + "type": "n8n-nodes-base.httpRequest", + "typeVersion": 4.2, + "position": [ + 512, + 160 + ] }, { "parameters": { - "jsCode": "return [{ json: { step: 'run_headlines_workflow(channel_id)', state_store: '/code/state/headlines_graph.sqlite', nodes: ['fetch_naver', 'fetch_sea', 'extract_terms', 'format', 'send'], channel_id: $json.channel_id } }];" + "method": "POST", + "url": "=http://192.168.219.52:8505/api/news/sea/headlines", + "sendBody": true, + "specifyBody": "json", + "jsonBody": "={\"format\":\"json\"}", + "options": { + "response": { + "response": { + "fullResponse": true + } + } + } }, - "id": "sched-headlines-004", - "name": "LangGraph Workflow", - "type": "n8n-nodes-base.code", - "typeVersion": 2, - "position": [970, 240] + "id": "aeb5f661-29a0-461b-9d7b-1d8f68a2c005", + "name": "Call SEA Headlines API", + "type": "n8n-nodes-base.httpRequest", + "typeVersion": 4.2, + "position": [ + 512, + 304 + ] }, { "parameters": { - "jsCode": "return [{ json: { step: 'skill-news POST /api/news/naver/startup-headlines', format: 'slack' } }];" + "jsCode": "const runtime = $('Build Runtime Context').item.json;\nconst naver = $('Call Naver Headlines API').item.json;\nconst sea = $('Call SEA Headlines API').item.json;\n\nreturn {\n channel_id: runtime.channel_id,\n summary: [\n 'DB scheduler -> daily_headlines wrapper',\n 'run_headlines_workflow(channel_id)',\n 'fetch_naver + fetch_sea + extract_terms + format + send',\n 'Naver Slack text + SEA section inserted',\n 'keyword summary hidden, final blank lines kept in formatter'\n ].join('\\n'),\n runtime,\n naver_status: naver.statusCode,\n sea_status: sea.statusCode,\n final_delivery: 'rb8001 headlines_workflow.send_node -> Slack chat_postMessage'\n};" }, - "id": "sched-headlines-005", - "name": "Naver Headlines API", + "id": "aeb5f661-29a0-461b-9d7b-1d8f68a2c006", + "name": "Describe Actual Path", "type": "n8n-nodes-base.code", "typeVersion": 2, - "position": [1220, 160] + "position": [ + 816, + 224 + ] }, { "parameters": { - "jsCode": "return [{ json: { step: 'skill-news POST /api/news/sea/headlines', format: 'json' } }];" + "conditions": { + "number": [ + { + "value1": "={{ $json.naver_status }}", + "operation": "equal", + "value2": 200 + }, + { + "value1": "={{ $json.sea_status }}", + "operation": "equal", + "value2": 200 + } + ] + }, + "options": {} }, - "id": "sched-headlines-006", - "name": "SEA Headlines API", - "type": "n8n-nodes-base.code", + "id": "aeb5f661-29a0-461b-9d7b-1d8f68a2c007", + "name": "APIs Reachable?", + "type": "n8n-nodes-base.if", "typeVersion": 2, - "position": [1220, 320] + "position": [ + 1088, + 224 + ] }, { "parameters": { - "jsCode": "return [{ json: { step: 'rb8001 headlines_workflow.format_node', summary: ['네이버 Slack 텍스트 수신', '동남아 소식 섹션 삽입', '키워드 요약 미삽입', '클로징 후 명언, 마지막 빈줄 2줄'] } }];" + "jsCode": "return {\n channel: $json.runtime.channel_id,\n text: $json.summary\n};" }, - "id": "sched-headlines-007", - "name": "Format Briefing Text", + "id": "aeb5f661-29a0-461b-9d7b-1d8f68a2c008", + "name": "Build Runtime Summary", "type": "n8n-nodes-base.code", "typeVersion": 2, - "position": [1470, 240] + "position": [ + 1344, + 160 + ] }, { "parameters": { - "jsCode": "return [{ json: { step: 'rb8001 headlines_workflow.send_node -> Slack chat_postMessage', channel_id: 'C09C98KK2TT' } }];" + "jsCode": "return {\n channel: $('Build Runtime Context').item.json.channel_id,\n text: 'Actual runtime path documented, but referenced APIs were not reachable in this visualization run.'\n};" }, - "id": "sched-headlines-008", - "name": "Slack Delivery", + "id": "aeb5f661-29a0-461b-9d7b-1d8f68a2c009", + "name": "Build Fallback Summary", "type": "n8n-nodes-base.code", "typeVersion": 2, - "position": [1720, 240] + "position": [ + 1344, + 304 + ] + }, + { + "parameters": { + "resource": "message", + "operation": "post", + "channel": "={{ $json.channel }}", + "text": "={{ $json.text }}", + "otherOptions": {} + }, + "id": "aeb5f661-29a0-461b-9d7b-1d8f68a2c010", + "name": "Slack Delivery View", + "type": "n8n-nodes-base.slack", + "typeVersion": 2, + "position": [ + 1616, + 224 + ] } ], "connections": { @@ -89,78 +180,96 @@ "main": [ [ { - "node": "DB Job Config", + "node": "Build Runtime Context", "type": "main", "index": 0 } ] ] }, - "DB Job Config": { + "Build Runtime Context": { "main": [ [ { - "node": "daily_headlines Wrapper", - "type": "main", - "index": 0 - } - ] - ] - }, - "daily_headlines Wrapper": { - "main": [ - [ - { - "node": "LangGraph Workflow", - "type": "main", - "index": 0 - } - ] - ] - }, - "LangGraph Workflow": { - "main": [ - [ - { - "node": "Naver Headlines API", + "node": "Call Naver Headlines API", "type": "main", "index": 0 }, { - "node": "SEA Headlines API", + "node": "Call SEA Headlines API", "type": "main", "index": 0 } ] ] }, - "Naver Headlines API": { + "Call Naver Headlines API": { "main": [ [ { - "node": "Format Briefing Text", + "node": "Describe Actual Path", "type": "main", "index": 0 } ] ] }, - "SEA Headlines API": { + "Call SEA Headlines API": { "main": [ [ { - "node": "Format Briefing Text", + "node": "Describe Actual Path", "type": "main", "index": 0 } ] ] }, - "Format Briefing Text": { + "Describe Actual Path": { "main": [ [ { - "node": "Slack Delivery", + "node": "APIs Reachable?", + "type": "main", + "index": 0 + } + ] + ] + }, + "APIs Reachable?": { + "main": [ + [ + { + "node": "Build Runtime Summary", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Build Fallback Summary", + "type": "main", + "index": 0 + } + ] + ] + }, + "Build Runtime Summary": { + "main": [ + [ + { + "node": "Slack Delivery View", + "type": "main", + "index": 0 + } + ] + ] + }, + "Build Fallback Summary": { + "main": [ + [ + { + "node": "Slack Delivery View", "type": "main", "index": 0 }