I spent a long time creating, testing, debugging a workflow. Each node when executed manually works as I intend and if I press the last node in a respective chain of nodes, I’ll get the desired output.
However, the Start node and Cron node simply doesn’t trigger any flow. Absolutely nothing happens besides n8n saying I get a successful execution.
I inserted logging in a function node to see if my workflow reached there and attached to my container’s logs to see what happens and it doesn’t look like it doesn’t do anything.
.
Could someone maybe shed some light on why this might be? Is there a max time limit to n8n? Could this be a memory issue? The data set is only ~70 rows from a google sheet so I wasn’t expecting limitations.
Below is the JSON workflow, with some PII removed.
{
"name": "Church Birthday Broadcast",
"nodes": [
{
"parameters": {},
"name": "Start",
"type": "n8n-nodes-base.start",
"typeVersion": 1,
"position": [
160,
60
]
},
{
"parameters": {
"functionCode": "\nconst matchingDates = items.filter(record => {\n\n const [bdayMonth, bdayDay] = new Date(`${record.json.Birthday} ${new Date().getFullYear()}`).toLocaleDateString().split('/')\n\n const [currentMonth, currentDay] = new Date(new Date().toLocaleString(\"en-US\", {timeZone: \"America/New_York\"})).toLocaleDateString().split('/')\n\n if (Number(bdayMonth) === Number(currentMonth) && Number(bdayDay) === Number(currentDay) + 1) {\n return record;\n }\n return\n})\n\nconsole.log(\"I reach here\", new Date())\n\nreturn matchingDates"
},
"name": "Search for current bdays",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [
580,
270
]
},
{
"parameters": {
"sheetId": "1Ftc8TW-wCewZowx9AdRTfjDSuQrxQ_sa0HT4f6SdoZ8",
"options": {
"valueRenderMode": "FORMATTED_VALUE"
}
},
"name": "Read Youth Bday Records",
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 1,
"position": [
380,
270
],
"credentials": {
"googleApi": "Birthday Credentials "
}
},
{
"parameters": {
"operation": "share",
"fileId": "={{$json[\"id\"]}}",
"permissionsUi": {
"permissionsValues": {
"role": "writer",
"type": "user",
"emailAddress": "[email protected]"
}
},
"options": {
"emailMessage": "=Hey friend here's the spreadsheet for {{$node[\"Search for current bdays\"].json[\"Name\"]}}",
"sendNotificationEmail": true
}
},
"name": "Amend Share Permissions",
"type": "n8n-nodes-base.googleDrive",
"typeVersion": 1,
"position": [
1200,
250
],
"credentials": {
"googleApi": "Birthday Credentials "
}
},
{
"parameters": {
"triggerTimes": {
"item": [
{
"hour": 9
}
]
}
},
"name": "Every Day at 9am",
"type": "n8n-nodes-base.cron",
"typeVersion": 1,
"position": [
120,
270
]
},
{
"parameters": {
"from": "=+58283042559",
"to": "={{$json[\"Number\"]}}",
"message": "=Hey {{$json[\"Name\"]}},\n\n{{$json[\"message\"]}}\n\n{{$json[\"tripettoLink\"]}}\n\n- The Westmount Adventist Youth"
},
"name": "Send Birthday Reminder",
"type": "n8n-nodes-base.twilio",
"typeVersion": 1,
"position": [
1370,
-180
],
"credentials": {
"twilioApi": "AY Number"
}
},
{
"parameters": {
"httpMethod": "POST",
"path": "f33687d6-016f-4a4a-81bc-d9c21a4dc71f",
"options": {}
},
"name": "Get birthday message",
"type": "n8n-nodes-base.webhook",
"typeVersion": 1,
"position": [
20,
580
],
"webhookId": "f33687d6-016f-4a4a-81bc-d9c21a4dc71f"
},
{
"parameters": {
"operation": "append",
"sheetId": "={{$json[\"id\"]}}",
"range": "A:D",
"options": {}
},
"name": "Add Birthday Message",
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 1,
"position": [
870,
600
],
"credentials": {
"googleApi": "Birthday Credentials "
}
},
{
"parameters": {
"resource": "message",
"subject": "=A new birthday submission has been submitted",
"message": "=A new message has come in from {{$json[\"wishername\"]}}",
"toList": [
"[email protected]",
"[email protected]"
],
"additionalFields": {
"ccList": [
"[email protected]"
]
}
},
"name": "Notify of new spreadsheet addition ",
"type": "n8n-nodes-base.gmail",
"typeVersion": 1,
"position": [
1070,
610
],
"credentials": {
"gmailOAuth2": "Personal Credentials"
}
},
{
"parameters": {
"functionCode": "const {\n birthdayname,\n wishername,\n love_message,\n birthday_message\n} = items[0].json.body\n\nreturn [{\n json: {\n birthdayname,\n wishername,\n love_message,\n birthday_message\n }\n}]\n"
},
"name": "Parse message",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [
200,
580
]
},
{
"parameters": {
"operation": "copy",
"fileId": "1hWav2yd75tEomha6zxcvk0XGB6EGVku7JVacjYhTDOQ",
"options": {
"name": "={{$json[\"Name\"]}}'s Birthday Sheet - {{new Date().getFullYear()}}"
}
},
"name": "Copy Birthday Template",
"type": "n8n-nodes-base.googleDrive",
"typeVersion": 1,
"position": [
990,
250
],
"credentials": {
"googleApi": "Birthday Credentials "
}
},
{
"parameters": {
"functionCode": "const matchingDates = items.filter(record => {\n const [bdayMonth, bdayDay] = new Date(`${record.json.Birthday} ${new Date().getFullYear()}`).toLocaleDateString().split('/')\n\n const [currentMonth, currentDay] = new Date(new Date().toLocaleString(\"en-US\", {\n timeZone: \"America/New_York\"\n })).toLocaleDateString().split('/')\n\n if (Number(bdayMonth) === Number(currentMonth) && Number(bdayDay) === Number(currentDay) + 1) return record\n})\n\nlet message;\n\nif(matchingDates.length > 0){\n\n if(matchingDates.length === 1){\n\n const script =`Tomorrow we are celebrating ${matchingDates.length} birthday!\\n\\nThe individual's name is ${matchingDates[0].json.Name}!\\n\\nIf you would like to show your love and leave a message for ${matchingDates[0].json.Name} please click on the following link to fill out a form for their card:`\n message = script;\n } \n\n if(matchingDates.length > 1){\n\n const script =`Tomorrow we are celebrating ${matchingDates.length} birthdays!\\n\\nTheir names are:\\n ${matchingDates.map((record, index) => `${index + 1}. ${record.json.Name}`).join(\"\\n\")}!\\n\\nIf you would like to show your love and leave a message for them, please click on the following links to fill out a form for their cards:`\n message = script;\n} \n\n}\n\n\n\nconst remappedRecords = items.map(record => {\n return {\n json: {\n ...record,\n Number: `+${record.json.Number.replace(/\\(|\\)|\\s+|-/g, \"\")}`,\n matching: matchingDates,\n message: message\n \n }\n }\n\n})\nreturn remappedRecords"
},
"name": "Group Celebrants",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [
490,
-70
]
},
{
"parameters": {},
"name": "Don't send any messages",
"type": "n8n-nodes-base.noOp",
"typeVersion": 1,
"position": [
980,
100
]
},
{
"parameters": {},
"name": "Don't send any messages1",
"type": "n8n-nodes-base.noOp",
"typeVersion": 1,
"position": [
920,
460
]
},
{
"parameters": {
"operation": "list",
"queryFilters": {
"name": [
{
"value": "={{$json[\"birthdayname\"]}}"
}
]
},
"options": {}
},
"name": "Google Drive",
"type": "n8n-nodes-base.googleDrive",
"typeVersion": 1,
"position": [
450,
490
],
"credentials": {
"googleApi": "Birthday Credentials "
}
},
{
"parameters": {
"mode": "mergeByIndex",
"join": "inner"
},
"name": "Merge",
"type": "n8n-nodes-base.merge",
"typeVersion": 1,
"position": [
680,
600
]
},
{
"parameters": {
"mode": "mergeByIndex"
},
"name": "Merge1",
"type": "n8n-nodes-base.merge",
"typeVersion": 1,
"position": [
960,
-180
]
},
{
"parameters": {
"functionCode": "return items.map(records => {\n\n const url = records.json.matching.map(celebrant => ({\n url: `https://tripetto.app/run/E5431Hfh847P?birthday_name=${celebrant.json.Name}`\n }))\n return {\n json: {\n tripettoLink: url\n }\n }\n\n})\n"
},
"name": "Generate Tripetto base",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [
750,
-230
]
},
{
"parameters": {
"conditions": {
"number": [
{
"value1": "={{$json[\"matching\"].length}}",
"operation": "larger"
}
]
}
},
"name": "IF Birthdays",
"type": "n8n-nodes-base.if",
"typeVersion": 1,
"position": [
730,
-70
]
},
{
"parameters": {
"functionCode": "return items.map(record => {\n const links = record.json.tripettoLink.map((link, index) => {\n \n return `${record.json.matching[index].json.Name}: ${link.url}&wisher_name=${record.json.json.Name}`\n }).join(\"\\n\")\n return {\n json: {\n ...record.json.json,\n tripettoLink: links,\n matching: record.json.matching.map(rec => rec.json),\n message: record.json.message,\n Number: record.json.Number\n }\n }\n\n}).filter(record => {\n const namesList = record.json.matching.map(rec => rec.Name)\n return !namesList.includes(record.json.Name)\n\n})\n"
},
"name": "Filter and augment links",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [
1170,
-180
]
},
{
"parameters": {
"conditions": {
"number": [],
"boolean": [
{
"value1": "={{Object.values($json).length > 0}}",
"value2": true
}
]
}
},
"name": "Birthday today?",
"type": "n8n-nodes-base.if",
"typeVersion": 1,
"position": [
770,
270
]
},
{
"parameters": {},
"name": "Error Trigger",
"type": "n8n-nodes-base.errorTrigger",
"typeVersion": 1,
"position": [
1440,
450
]
},
{
"parameters": {
"resource": "message",
"subject": "error",
"message": "hi",
"toList": [
"[email protected]",
[]
],
"additionalFields": {}
},
"name": "Gmail",
"type": "n8n-nodes-base.gmail",
"typeVersion": 1,
"position": [
1640,
450
],
"credentials": {
"gmailOAuth2": "Personal Credentials"
}
}
],
"connections": {
"Search for current bdays": {
"main": [
[
{
"node": "Birthday today?",
"type": "main",
"index": 0
}
]
]
},
"Read Youth Bday Records": {
"main": [
[
{
"node": "Search for current bdays",
"type": "main",
"index": 0
},
{
"node": "Group Celebrants",
"type": "main",
"index": 0
}
]
]
},
"Get birthday message": {
"main": [
[
{
"node": "Parse message",
"type": "main",
"index": 0
}
]
]
},
"Add Birthday Message": {
"main": [
[
{
"node": "Notify of new spreadsheet addition ",
"type": "main",
"index": 0
}
]
]
},
"Parse message": {
"main": [
[
{
"node": "Google Drive",
"type": "main",
"index": 0
},
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Copy Birthday Template": {
"main": [
[
{
"node": "Amend Share Permissions",
"type": "main",
"index": 0
}
]
]
},
"Group Celebrants": {
"main": [
[
{
"node": "IF Birthdays",
"type": "main",
"index": 0
},
{
"node": "Generate Tripetto base",
"type": "main",
"index": 0
}
]
]
},
"Google Drive": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Merge": {
"main": [
[
{
"node": "Add Birthday Message",
"type": "main",
"index": 0
}
]
]
},
"Merge1": {
"main": [
[
{
"node": "Filter and augment links",
"type": "main",
"index": 0
}
]
]
},
"Generate Tripetto base": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 0
}
]
]
},
"IF Birthdays": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 1
}
],
[
{
"node": "Don't send any messages",
"type": "main",
"index": 0
}
]
]
},
"Filter and augment links": {
"main": [
[
{
"node": "Send Birthday Reminder",
"type": "main",
"index": 0
}
]
]
},
"Birthday today?": {
"main": [
[
{
"node": "Copy Birthday Template",
"type": "main",
"index": 0
}
],
[
{
"node": "Don't send any messages1",
"type": "main",
"index": 0
}
]
]
},
"Error Trigger": {
"main": [
[
{
"node": "Gmail",
"type": "main",
"index": 0
}
]
]
},
"Every Day at 9am": {
"main": [
[
{
"node": "Read Youth Bday Records",
"type": "main",
"index": 0
}
]
]
}
},
"active": true,
"settings": {
"saveManualExecutions": true
},
"id": "10"
}