Security: Sync from Public / sync-from-public (push) Has been cancelled
Test: Benchmark Nightly / build (push) Has been cancelled
Test: Benchmark Nightly / Notify Cats on failure (push) Has been cancelled
CI: Python / Checks (push) Has been cancelled
Test: Evals Python / Workflow Comparison Python (push) Has been cancelled
Util: Check Docs URLs / check-docs-urls (push) Has been cancelled
Test: Visual Storybook / Cloudflare Pages (push) Has been cancelled
Test: E2E Performance / build-and-test-performance (push) Has been cancelled
Test: Workflows Nightly / Run Workflow Tests (push) Has been cancelled
Util: Cleanup CI Docker Images / Delete stale CI images (push) Has been cancelled
Test: Benchmark Destroy Env / build (push) Has been cancelled
Util: Update Node Popularity / update-popularity (push) Has been cancelled
Test: E2E Coverage Weekly / Coverage Tests (push) Has been cancelled
273 lines
7.6 KiB
JSON
273 lines
7.6 KiB
JSON
{
|
|
"nodes": [
|
|
{
|
|
"id": "a0942cc5-a244-4205-abed-397a31f355de",
|
|
"name": "Every Night at 8pm",
|
|
"type": "n8n-nodes-base.scheduleTrigger",
|
|
"typeVersion": 1.3,
|
|
"position": [250, 450],
|
|
"parameters": {
|
|
"rule": {
|
|
"interval": [
|
|
{
|
|
"field": "days",
|
|
"daysInterval": 1,
|
|
"triggerAtHour": 20,
|
|
"triggerAtMinute": 0
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "508922f0-e2ba-4a8b-8397-fa12f36933d4",
|
|
"name": "Workflow Configuration",
|
|
"type": "n8n-nodes-base.set",
|
|
"typeVersion": 3.4,
|
|
"position": [250, 300],
|
|
"parameters": {
|
|
"mode": "manual",
|
|
"duplicateItem": false,
|
|
"includeOtherFields": true,
|
|
"include": "all",
|
|
"assignments": {
|
|
"assignments": [
|
|
{
|
|
"id": "id-1",
|
|
"name": "newsApiKey",
|
|
"value": "<__PLACEHOLDER_VALUE__NewsAPI Key__>",
|
|
"type": "string"
|
|
},
|
|
{
|
|
"id": "id-2",
|
|
"name": "telegramChatId",
|
|
"value": "<__PLACEHOLDER_VALUE__Telegram Chat ID__>",
|
|
"type": "string"
|
|
},
|
|
{
|
|
"id": "id-3",
|
|
"name": "searchQuery",
|
|
"value": "artificial intelligence OR AI OR machine learning",
|
|
"type": "string"
|
|
},
|
|
{
|
|
"id": "id-4",
|
|
"name": "fromDate",
|
|
"value": "={{ $now.toFormat('yyyy-MM-dd') }}",
|
|
"type": "string"
|
|
}
|
|
]
|
|
},
|
|
"options": {}
|
|
}
|
|
},
|
|
{
|
|
"id": "12d07412-22f5-40f5-8a80-5403aeb6bc72",
|
|
"name": "Fetch AI News from NewsAPI",
|
|
"type": "n8n-nodes-base.httpRequest",
|
|
"typeVersion": 4.3,
|
|
"position": [250, 300],
|
|
"parameters": {
|
|
"method": "GET",
|
|
"url": "https://newsapi.org/v2/everything",
|
|
"authentication": "none",
|
|
"sendQuery": true,
|
|
"specifyQuery": "keypair",
|
|
"queryParameters": {
|
|
"parameters": [
|
|
{
|
|
"name": "q",
|
|
"value": "={{ $('Workflow Configuration').first().json.searchQuery }}"
|
|
},
|
|
{
|
|
"name": "from",
|
|
"value": "={{ $('Workflow Configuration').first().json.fromDate }}"
|
|
},
|
|
{
|
|
"name": "sortBy",
|
|
"value": "popularity"
|
|
},
|
|
{
|
|
"name": "language",
|
|
"value": "en"
|
|
},
|
|
{
|
|
"name": "apiKey",
|
|
"value": "={{ $('Workflow Configuration').first().json.newsApiKey }}"
|
|
}
|
|
]
|
|
},
|
|
"sendHeaders": false,
|
|
"sendBody": false,
|
|
"options": {}
|
|
}
|
|
},
|
|
{
|
|
"id": "929f4b47-e149-4b6d-8225-c1fcf11750ae",
|
|
"name": "Extract Top 5 Articles",
|
|
"type": "n8n-nodes-base.code",
|
|
"typeVersion": 2,
|
|
"position": [250, 300],
|
|
"parameters": {
|
|
"mode": "runOnceForAllItems",
|
|
"language": "javaScript",
|
|
"jsCode": "// Extract top 5 articles from NewsAPI response\nconst articles = $input.first().json.articles || [];\n\n// Take the first 5 articles\nconst top5Articles = articles.slice(0, 5);\n\n// Map each article to the desired format\nconst outputItems = top5Articles.map(article => ({\n json: {\n title: article.title,\n description: article.description,\n url: article.url,\n publishedAt: article.publishedAt,\n source: article.source?.name\n }\n}));\n\nreturn outputItems;"
|
|
}
|
|
},
|
|
{
|
|
"id": "f9bb837e-4ef3-4724-838d-21498b2023df",
|
|
"name": "Summarize Articles with GPT-4o-mini",
|
|
"type": "@n8n/n8n-nodes-langchain.openAi",
|
|
"typeVersion": 2,
|
|
"position": [250, 300],
|
|
"parameters": {
|
|
"resource": "text",
|
|
"operation": "response",
|
|
"modelId": {
|
|
"__rl": true,
|
|
"mode": "id",
|
|
"value": "gpt-4o-mini"
|
|
},
|
|
"responses": {
|
|
"values": [
|
|
{
|
|
"type": "text",
|
|
"role": "user",
|
|
"content": "={{ 'Summarize this article in exactly two sentences:\\n\\nTitle: ' + $json.title + '\\n\\nDescription: ' + $json.description }}"
|
|
}
|
|
]
|
|
},
|
|
"simplify": true
|
|
}
|
|
},
|
|
{
|
|
"id": "13f39397-537f-4ec4-9d40-7d3326207471",
|
|
"name": "Aggregate Summaries",
|
|
"type": "n8n-nodes-base.code",
|
|
"typeVersion": 2,
|
|
"position": [250, 300],
|
|
"parameters": {
|
|
"mode": "runOnceForAllItems",
|
|
"language": "javaScript",
|
|
"jsCode": "// Aggregate all article summaries into a single formatted message\nconst items = $input.all();\n\nif (!items || items.length === 0) {\n return [{ json: { message: 'No articles to summarize', topArticleSummary: '' } }];\n}\n\n// Build the formatted message for Telegram\nlet telegramMessage = '🤖 *Daily AI News Digest*\\n\\n';\n\n// Store the top article summary separately for image generation\nlet topArticleSummary = '';\n\nitems.forEach((item, index) => {\n const title = item.json.title || 'No title';\n // Extract summary from OpenAI response message field\n const summary = item.json.message || 'No summary available';\n const url = item.json.url || '';\n // Extract source from the original article data\n const source = item.json.source?.name || item.json.source || 'Unknown source';\n \n // Store the first article's summary for image generation\n if (index === 0) {\n topArticleSummary = summary;\n }\n \n // Format each article\n telegramMessage += `*${index + 1}. ${title}*\\n`;\n telegramMessage += `📰 Source: ${source}\\n`;\n telegramMessage += `${summary}\\n`;\n \n if (url) {\n telegramMessage += `🔗 [Read more](${url})\\n`;\n }\n \n telegramMessage += '\\n';\n});\n\ntelegramMessage += '\\n_Generated at ' + new Date().toLocaleString() + '_';\n\nreturn [{\n json: {\n message: telegramMessage,\n topArticleSummary: topArticleSummary,\n articleCount: items.length\n }\n}];"
|
|
}
|
|
},
|
|
{
|
|
"id": "8cf9e959-308f-4394-a1f2-8e960a2a51e4",
|
|
"name": "Generate Image for Top Article",
|
|
"type": "@n8n/n8n-nodes-langchain.openAi",
|
|
"typeVersion": 2,
|
|
"position": [250, 300],
|
|
"parameters": {
|
|
"resource": "image",
|
|
"operation": "generate",
|
|
"model": "dall-e-3",
|
|
"prompt": "={{ 'Create a modern, professional illustration representing this AI news: ' + $json.topArticleSummary }}",
|
|
"options": {
|
|
"size": "1024x1024",
|
|
"returnImageUrls": false
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "871fdf3b-c938-49b8-a191-41f3a7807657",
|
|
"name": "Send to Telegram",
|
|
"type": "n8n-nodes-base.telegram",
|
|
"typeVersion": 1.2,
|
|
"position": [250, 300],
|
|
"parameters": {
|
|
"resource": "message",
|
|
"operation": "sendPhoto",
|
|
"chatId": "={{ $('Workflow Configuration').first().json.telegramChatId }}",
|
|
"binaryData": true,
|
|
"binaryPropertyName": "data",
|
|
"additionalFields": {
|
|
"caption": "={{ $('Aggregate Summaries').first().json.message }}",
|
|
"parse_mode": "Markdown"
|
|
}
|
|
},
|
|
"webhookId": "20d8bdd5-3903-44e0-9bdb-0897614722c5"
|
|
}
|
|
],
|
|
"connections": {
|
|
"Every Night at 8pm": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "Workflow Configuration",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"Workflow Configuration": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "Fetch AI News from NewsAPI",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"Fetch AI News from NewsAPI": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "Extract Top 5 Articles",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"Extract Top 5 Articles": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "Summarize Articles with GPT-4o-mini",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"Summarize Articles with GPT-4o-mini": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "Aggregate Summaries",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"Aggregate Summaries": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "Generate Image for Top Article",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
},
|
|
"Generate Image for Top Article": {
|
|
"main": [
|
|
[
|
|
{
|
|
"node": "Send to Telegram",
|
|
"type": "main",
|
|
"index": 0
|
|
}
|
|
]
|
|
]
|
|
}
|
|
},
|
|
"name": "Daily AI News Digest with Summary and Image to Telegram"
|
|
}
|