AutomationFlowsData & Sheets › N8n Dailyline Sender

N8n Dailyline Sender

N8N Dailyline Sender. Uses googleSheets, httpRequest. Scheduled trigger; 17 nodes.

Cron / scheduled trigger★★★★☆ complexity17 nodesGoogle SheetsHTTP Request
Data & Sheets Trigger: Cron / scheduled Nodes: 17 Complexity: ★★★★☆ Added:

This workflow follows the Google Sheets → HTTP Request recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "nodes": [
    {
      "parameters": {
        "content": "## \u23f0 \u5b9a\u6642\u89f8\u767c\n\n\u6bcf\u5929\u65e9\u4e0a 6:00 \u57f7\u884c",
        "height": 264,
        "width": 220,
        "color": 5
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -16,
        0
      ],
      "id": "4c18ee39-7a7c-473c-916f-7b8bbc93e158",
      "name": "Sticky Note - Trigger"
    },
    {
      "parameters": {
        "content": "## \ud83d\udcca \u8b80\u53d6 Google Sheets\n\n\u7be9\u9078 sent=FALSE \u7684\u524d 10 \u7b46",
        "height": 712,
        "width": 280,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        224,
        0
      ],
      "id": "21b488f5-989f-4036-a787-fc54313fc42e",
      "name": "Sticky Note - Read Sheets"
    },
    {
      "parameters": {
        "content": "## \ud83d\udcf1 \u767c\u9001 LINE\n\n\u7d44\u5408 Flex Message \u4e26\u767c\u9001\n\uff08\u542b\u6458\u8981\u7d71\u8a08 Bubble\uff09",
        "height": 568,
        "width": 400,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        704,
        0
      ],
      "id": "d8b3f009-f029-4b1b-8f9d-91ce7ca327dc",
      "name": "Sticky Note - LINE"
    },
    {
      "parameters": {
        "content": "## \u2705 \u66f4\u65b0\u72c0\u614b\n\n\u5c07\u5df2\u767c\u9001\u7684\u6587\u7ae0\u6a19\u8a18\u70ba sent=TRUE",
        "height": 568,
        "width": 260,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        1120,
        0
      ],
      "id": "02956191-b410-4553-995d-236f0df8dbb8",
      "name": "Sticky Note - Update"
    },
    {
      "parameters": {
        "content": "## \ud83d\udd00 \u6aa2\u67e5\u662f\u5426\u6709\u6587\u7ae0\n\n\u6709\u6587\u7ae0 \u2192 \u767c\u9001\n\u7121\u6587\u7ae0 \u2192 \u8df3\u904e\u6216\u901a\u77e5",
        "height": 264,
        "width": 200,
        "color": 3
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        524,
        0
      ],
      "id": "sticky-check-articles",
      "name": "Sticky Note - Check"
    },
    {
      "parameters": {
        "content": "## \u2699\ufe0f \u8a2d\u5b9a\u8aaa\u660e\n\n\u4f7f\u7528\u524d\u8acb\u5148\u8a2d\u5b9a\uff1a\n1. Google Sheets Credentials\n2. LINE Channel Access Token (Header Auth)\n3. \u66ff\u63db YOUR_LINE_USER_ID\n4. \u66ff\u63db Google Sheets \u6587\u4ef6 ID",
        "height": 200,
        "width": 300,
        "color": 1
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -16,
        300
      ],
      "id": "sticky-setup-guide",
      "name": "Sticky Note - Setup"
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 24
            }
          ]
        }
      },
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        16,
        112
      ],
      "id": "e9dfe487-7395-4a3b-9b20-f80ef199aec8",
      "name": "\u6bcf\u65e5 6:00 \u89f8\u767c"
    },
    {
      "parameters": {
        "documentId": {
          "__rl": true,
          "value": "YOUR_GOOGLE_SHEET_ID",
          "mode": "id"
        },
        "sheetName": {
          "__rl": true,
          "value": "RSS_Feeds",
          "mode": "name"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.5,
      "position": [
        288,
        112
      ],
      "id": "69721bfa-0fdd-4a4c-83e5-c87c67d4fd5c",
      "name": "Read Google Sheets"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": false,
            "leftValue": "",
            "typeValidation": "loose",
            "version": 2
          },
          "conditions": [
            {
              "id": "filter-sent",
              "leftValue": "={{ $json.sent }}",
              "rightValue": "TRUE",
              "operator": {
                "type": "string",
                "operation": "notEquals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.filter",
      "typeVersion": 2.2,
      "position": [
        288,
        320
      ],
      "id": "981ab90a-8329-4152-ac2d-2a6f77d0eae2",
      "name": "Filter Unsent"
    },
    {
      "parameters": {
        "aggregate": "aggregateAllItemData",
        "options": {}
      },
      "type": "n8n-nodes-base.aggregate",
      "typeVersion": 1,
      "position": [
        464,
        560
      ],
      "id": "9aecc555-50e8-47e9-923b-0d728c9326a7",
      "name": "Aggregate Items"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "check-has-items",
              "leftValue": "={{ $json.data.length }}",
              "rightValue": 0,
              "operator": {
                "type": "number",
                "operation": "gt"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        560,
        112
      ],
      "id": "if-has-articles",
      "name": "\u6709\u6587\u7ae0\uff1f"
    },
    {
      "parameters": {
        "jsCode": "const items = $input.first().json.data || [];\nconst today = new Date().toLocaleDateString('zh-TW', {\n  year: 'numeric',\n  month: '2-digit',\n  day: '2-digit'\n});\n\n// \u4f86\u6e90\u5c0d\u61c9 emoji\uff08\u53ef\u81ea\u884c\u64f4\u5145\uff09\nconst sourceEmoji = {\n  'DK': '\ud83d\udcdd',\n  'HN': '\ud83d\udd25',\n  'Steam': '\ud83c\udfae',\n  'LY Blog': '\ud83c\uddef\ud83c\uddf5'\n};\n\n// \u4f86\u6e90\u5c0d\u61c9\u984f\u8272\uff08\u53ef\u81ea\u884c\u64f4\u5145\uff09\nconst sourceColor = {\n  'DK': '#4A90A4',\n  'HN': '#FF6600',\n  'Steam': '#1B2838',\n  'LY Blog': '#00C300'\n};\n\n// ===== \u5efa\u7acb\u6458\u8981\u7d71\u8a08 Bubble =====\nconst sourceCounts = {};\nitems.forEach(item => {\n  const src = item.source || 'Unknown';\n  sourceCounts[src] = (sourceCounts[src] || 0) + 1;\n});\n\n// \u5efa\u7acb\u4f86\u6e90\u7d71\u8a08\u5217\u8868\nconst sourceStats = Object.entries(sourceCounts).map(([source, count]) => {\n  const emoji = sourceEmoji[source] || '\ud83d\udcf0';\n  return {\n    \"type\": \"box\",\n    \"layout\": \"horizontal\",\n    \"contents\": [\n      {\n        \"type\": \"text\",\n        \"text\": `${emoji} ${source}`,\n        \"size\": \"sm\",\n        \"color\": \"#555555\",\n        \"flex\": 4\n      },\n      {\n        \"type\": \"text\",\n        \"text\": `${count} \u7bc7`,\n        \"size\": \"sm\",\n        \"color\": \"#111111\",\n        \"align\": \"end\",\n        \"flex\": 1\n      }\n    ]\n  };\n});\n\n// \u6458\u8981 Bubble\nconst summaryBubble = {\n  \"type\": \"bubble\",\n  \"size\": \"kilo\",\n  \"header\": {\n    \"type\": \"box\",\n    \"layout\": \"vertical\",\n    \"contents\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"\ud83d\udcca \u4eca\u65e5\u6458\u8981\",\n        \"weight\": \"bold\",\n        \"size\": \"lg\",\n        \"color\": \"#1DB446\"\n      },\n      {\n        \"type\": \"text\",\n        \"text\": today,\n        \"size\": \"xs\",\n        \"color\": \"#999999\",\n        \"margin\": \"sm\"\n      }\n    ],\n    \"paddingAll\": \"15px\",\n    \"backgroundColor\": \"#F5F5F5\"\n  },\n  \"body\": {\n    \"type\": \"box\",\n    \"layout\": \"vertical\",\n    \"contents\": [\n      {\n        \"type\": \"box\",\n        \"layout\": \"horizontal\",\n        \"contents\": [\n          {\n            \"type\": \"text\",\n            \"text\": \"\u7e3d\u8a08\",\n            \"size\": \"md\",\n            \"color\": \"#555555\",\n            \"weight\": \"bold\",\n            \"flex\": 4\n          },\n          {\n            \"type\": \"text\",\n            \"text\": `${items.length} \u7bc7`,\n            \"size\": \"md\",\n            \"color\": \"#1DB446\",\n            \"weight\": \"bold\",\n            \"align\": \"end\",\n            \"flex\": 1\n          }\n        ]\n      },\n      {\n        \"type\": \"separator\",\n        \"margin\": \"lg\"\n      },\n      {\n        \"type\": \"box\",\n        \"layout\": \"vertical\",\n        \"contents\": sourceStats,\n        \"margin\": \"lg\",\n        \"spacing\": \"sm\"\n      }\n    ],\n    \"paddingAll\": \"15px\"\n  }\n};\n\n// ===== \u5efa\u7acb\u6bcf\u7bc7\u6587\u7ae0\u7684 bubble =====\nconst articleBubbles = items.map((item, index) => {\n  const emoji = sourceEmoji[item.source] || '\ud83d\udcf0';\n  const color = sourceColor[item.source] || '#666666';\n  \n  const title = item.title || item.col_1 || item.link || '\u7121\u6a19\u984c';\n  const summary = item.summary || '\u7121\u6458\u8981\u5167\u5bb9';\n  const link = item.link || 'https://example.com';\n  \n  return {\n    \"type\": \"bubble\",\n    \"size\": \"kilo\",\n    \"header\": {\n      \"type\": \"box\",\n      \"layout\": \"horizontal\",\n      \"contents\": [\n        {\n          \"type\": \"text\",\n          \"text\": emoji,\n          \"size\": \"sm\",\n          \"flex\": 0\n        },\n        {\n          \"type\": \"text\",\n          \"text\": item.source || 'Unknown',\n          \"size\": \"sm\",\n          \"color\": color,\n          \"weight\": \"bold\",\n          \"margin\": \"sm\"\n        }\n      ],\n      \"paddingAll\": \"12px\",\n      \"backgroundColor\": \"#F5F5F5\"\n    },\n    \"body\": {\n      \"type\": \"box\",\n      \"layout\": \"vertical\",\n      \"contents\": [\n        {\n          \"type\": \"text\",\n          \"text\": title,\n          \"weight\": \"bold\",\n          \"size\": \"md\",\n          \"wrap\": true,\n          \"maxLines\": 2\n        },\n        {\n          \"type\": \"text\",\n          \"text\": summary,\n          \"size\": \"sm\",\n          \"color\": \"#666666\",\n          \"wrap\": true,\n          \"margin\": \"md\",\n          \"maxLines\": 5\n        }\n      ],\n      \"paddingAll\": \"12px\"\n    },\n    \"footer\": {\n      \"type\": \"box\",\n      \"layout\": \"vertical\",\n      \"contents\": [\n        {\n          \"type\": \"button\",\n          \"action\": {\n            \"type\": \"uri\",\n            \"label\": \"\u95b1\u8b80\u539f\u6587\",\n            \"uri\": link\n          },\n          \"style\": \"primary\",\n          \"color\": color,\n          \"height\": \"sm\"\n        }\n      ],\n      \"paddingAll\": \"12px\"\n    }\n  };\n});\n\n// \u7d44\u5408\uff1a\u6458\u8981 + \u6587\u7ae0\u5011\nconst allBubbles = [summaryBubble, ...articleBubbles];\n\n// \u7d44\u5408\u6210 carousel\nconst flexMessage = {\n  \"type\": \"flex\",\n  \"altText\": `\ud83d\udcf0 \u6bcf\u65e5\u8cc7\u8a0a\u6458\u8981 - ${today} (${items.length}\u7bc7)`,\n  \"contents\": {\n    \"type\": \"carousel\",\n    \"contents\": allBubbles\n  }\n};\n\n// \u56de\u50b3 Flex Message \u548c\u539f\u59cb items (\u4f9b\u5f8c\u7e8c\u66f4\u65b0\u7528)\nreturn {\n  json: {\n    flexMessage,\n    items,\n    rowNumbers: items.map((item, idx) => item.row_number)\n  }\n};"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        752,
        112
      ],
      "id": "c326027c-5dac-453b-b8eb-b834856f5685",
      "name": "Build Flex Message"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.line.me/v2/bot/message/push",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"to\": \"YOUR_LINE_USER_ID\",\n  \"messages\": [\n    {{ JSON.stringify($json.flexMessage) }}\n  ]\n}",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        944,
        112
      ],
      "id": "fddc401e-32e0-4e9d-9521-aa437009f78f",
      "name": "LINE Push Message"
    },
    {
      "parameters": {
        "jsCode": "// \u53d6\u5f97\u8981\u66f4\u65b0\u7684 items\nconst items = $('Build Flex Message').first().json.items;\n\n// \u70ba\u6bcf\u500b item \u5efa\u7acb\u66f4\u65b0\u8cc7\u6599\nreturn items.map(item => ({\n  json: {\n    title: item.title,\n    link: item.link,\n    summary: item.summary,\n    source: item.source,\n    created_at: item.created_at,\n    sent: 'TRUE'\n  }\n}));\n"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1168,
        112
      ],
      "id": "70cdc265-82b5-4067-9519-4b7e653953b8",
      "name": "Prepare Update Data"
    },
    {
      "parameters": {
        "operation": "update",
        "documentId": {
          "__rl": true,
          "value": "YOUR_GOOGLE_SHEET_ID",
          "mode": "id"
        },
        "sheetName": {
          "__rl": true,
          "value": "RSS_Feeds",
          "mode": "name"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "sent": "={{ $json.sent }}",
            "row_number": 0,
            "link": "={{ $json.link }}"
          },
          "matchingColumns": [
            "link"
          ],
          "schema": [
            {
              "id": "link",
              "displayName": "link",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "summary",
              "displayName": "summary",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "source",
              "displayName": "source",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "created_at",
              "displayName": "created_at",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "sent",
              "displayName": "sent",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "displayName": "row_number",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "number",
              "canBeUsedToMatch": true,
              "readOnly": true,
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {
          "cellFormat": "USER_ENTERED"
        }
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.5,
      "position": [
        1168,
        352
      ],
      "id": "65af66ad-73e0-49d6-b397-88751d0a6da9",
      "name": "Update sent=TRUE"
    },
    {
      "parameters": {
        "maxItems": 10
      },
      "type": "n8n-nodes-base.limit",
      "typeVersion": 1,
      "position": [
        304,
        560
      ],
      "id": "1f7c99de-ab8e-4459-b48b-ded2bd1944eb",
      "name": "Limit 10"
    },
    {
      "parameters": {},
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        752,
        320
      ],
      "id": "no-op-skip",
      "name": "\u7121\u6587\u7ae0 - \u8df3\u904e"
    }
  ],
  "connections": {
    "\u6bcf\u65e5 6:00 \u89f8\u767c": {
      "main": [
        [
          {
            "node": "Read Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Google Sheets": {
      "main": [
        [
          {
            "node": "Filter Unsent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Unsent": {
      "main": [
        [
          {
            "node": "Limit 10",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Limit 10": {
      "main": [
        [
          {
            "node": "Aggregate Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate Items": {
      "main": [
        [
          {
            "node": "\u6709\u6587\u7ae0\uff1f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u6709\u6587\u7ae0\uff1f": {
      "main": [
        [
          {
            "node": "Build Flex Message",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "\u7121\u6587\u7ae0 - \u8df3\u904e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build Flex Message": {
      "main": [
        [
          {
            "node": "LINE Push Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "LINE Push Message": {
      "main": [
        [
          {
            "node": "Prepare Update Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Update Data": {
      "main": [
        [
          {
            "node": "Update sent=TRUE",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "meta": {
    "templateCredsSetupCompleted": true
  }
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

N8N Dailyline Sender. Uses googleSheets, httpRequest. Scheduled trigger; 17 nodes.

Source: https://gist.github.com/kkdai/1fa447799a498be089ad56fe95e80a3a — original creator credit. Request a take-down →

More Data & Sheets workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Data & Sheets

This workflow automates video distribution to 9 social platforms simultaneously using Blotato's API. It includes both a scheduled publisher (checks Google Sheets for videos marked "Ready") and a subwo

Google Sheets, HTTP Request, Form Trigger +2
Data & Sheets

YogiAI. Uses googleSheets, googleSheetsTool, httpRequest, stopAndError. Scheduled trigger; 61 nodes.

Google Sheets, Google Sheets Tool, HTTP Request +1
Data & Sheets

This workflow monitors Google Calendar for events indicating that a customer will visit the company today or the next day, retrieves the required details, and sends reminder notifications to the relev

Google Calendar, Google Sheets, HTTP Request +1
Data & Sheets

ofn hook v0.24.0 beta. Uses start, httpRequest, functionItem, itemLists. Scheduled trigger; 42 nodes.

Start, HTTP Request, Function Item +3
Data & Sheets

Security teams, DevOps engineers, vulnerability analysts, and automation builders who want to eliminate repetitive Nessus scan parsing, AI-based risk triage, and manual reporting. Designed for orgs fo

Email Send, HTTP Request, Google Sheets +1