Workflow: Code Todoist Create

Workflow Details

Download Workflow
{
    "nodes": [
        {
            "id": "d49ee203-5bd1-45c0-859d-f1b248bfdf71",
            "name": "Sticky Note3",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                280,
                40
            ],
            "parameters": {
                "color": 5,
                "width": 424.49078626456611118555883876979351043701171875,
                "height": 154.7766688696993924168054945766925811767578125,
                "content": "### \ud83d\udc68\u200d\ud83c\udfa4 Setup\n1. Add Todoist creds\n2. Create a `template` list to copy from in Todoist. Add days and due times on each task as necessary.\n3. Set the projects to copy from and to write to in each **Todoist** node"
            },
            "typeVersion": 1
        },
        {
            "id": "e69dd4e2-7ff6-4613-a1c9-ac1f3da37955",
            "name": "Get all tasks from template project",
            "type": "n8n-nodes-base.todoist",
            "position": [
                860,
                420
            ],
            "parameters": {
                "filters": {
                    "projectId": "2299363018"
                },
                "operation": "getAll",
                "returnAll": true
            },
            "credentials": {
                "todoistApi": {
                    "id": "1",
                    "name": "Todoist account"
                }
            },
            "executeOnce": true,
            "retryOnFail": true,
            "typeVersion": 1
        },
        {
            "id": "fa907d45-3822-4549-9f84-8385bb4183cc",
            "name": "Parse task details",
            "type": "n8n-nodes-base.code",
            "position": [
                1080,
                420
            ],
            "parameters": {
                "mode": "runOnceForEachItem",
                "jsCode": "const item = {};\n\nitem.description = $input.item.json.description;\nitem.content = $input.item.json.content;\n\nconst parts = item.description.split(';').map((v) => v.trim());\nparts.forEach((v) => {\n  const tag = v.split(':');\n  if (tag && tag.length === 2) {\n    item[tag[0]] = tag[1].trim();\n  }\n});\n\nif (item.due) {\n  item.due = parseTimeString(item.due);\n}\n\nreturn item;\n\nfunction parseTimeString(timeString) {\n    const regex = \/^(\\d{1,2})(\\.)?(\\d{2})?([ap]m)$\/i;\n    const match = timeString.match(regex);\n    \n    if (!match) {\n        throw new Error(\"Invalid time format\");\n    }\n\n    let hours = parseInt(match[1], 10);\n    let minutes = match[3] ? parseInt(match[3], 10) : 0;\n    const period = match[4].toLowerCase();\n\n    if (hours === 12) {\n        hours = period === 'am' ? 0 : 12;\n    } else {\n        hours = period === 'pm' ? hours + 12 : hours;\n    }\n\n    \/\/ Check if minutes are valid\n    if (minutes < 0 || minutes >= 60) {\n        throw new Error(\"Invalid minutes\");\n    }\n\n    const now = DateTime.now().set({ hour: hours, minute: minutes, second: 0, millisecond: 0 });\n    return now.toUTC();\n}\n"
            },
            "typeVersion": 1
        },
        {
            "id": "4989bac6-0741-4cdc-bc9c-e7800f9b3019",
            "name": "Sticky Note2",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                1140,
                600
            ],
            "parameters": {
                "color": 7,
                "width": 351.42307692307639399587060324847698211669921875,
                "height": 222.50000000000005684341886080801486968994140625,
                "content": "### \ud83d\udc46 This adds due dates to tasks from description.. \n### For example in the description of a task\n`days:mon,tues; due:8am`\n### So that it will create a task every Monday and Tuesday that's due at 8am \u23f0"
            },
            "typeVersion": 1
        },
        {
            "id": "accc330b-1b67-4181-8735-94b0debc8d70",
            "name": "Keep tasks that match today",
            "type": "n8n-nodes-base.filter",
            "position": [
                1300,
                420
            ],
            "parameters": {
                "conditions": {
                    "string": [
                        {
                            "value1": "={{ $json.days }}",
                            "value2": "={{ ['sun', 'mon', 'tues', 'wed', 'thurs', 'fri', 'sat', 'sun'][new Date().getDay()] }}",
                            "operation": "contains"
                        },
                        {
                            "value1": "={{ $json.days }}",
                            "value2": "={{ ['sun', 'mon', 'tues', 'wed', 'thurs', 'fri', 'sat', 'sun'][new Date().getDay()] }}",
                            "operation": "contains"
                        }
                    ]
                },
                "combineConditions": "OR"
            },
            "typeVersion": 1
        },
        {
            "id": "dbe1fc24-1833-493b-b444-de21a4b3c3c5",
            "name": "Every day at 5:10am",
            "type": "n8n-nodes-base.scheduleTrigger",
            "position": [
                620,
                420
            ],
            "parameters": {
                "rule": {
                    "interval": [
                        {
                            "triggerAtHour": 5,
                            "triggerAtMinute": 10
                        }
                    ]
                }
            },
            "typeVersion": 1.100000000000000088817841970012523233890533447265625
        },
        {
            "id": "b4737822-89aa-4ca0-bd9b-c5f9a16360c0",
            "name": "Every day at 5am",
            "type": "n8n-nodes-base.scheduleTrigger",
            "position": [
                400,
                220
            ],
            "parameters": {
                "rule": {
                    "interval": [
                        {
                            "triggerAtHour": 5,
                            "triggerAtMinute": 10
                        }
                    ]
                }
            },
            "typeVersion": 1.100000000000000088817841970012523233890533447265625
        },
        {
            "id": "2a9adc4b-552b-47a9-a32c-54d8d4bfb669",
            "name": "Get all tasks from Inbox",
            "type": "n8n-nodes-base.todoist",
            "position": [
                620,
                220
            ],
            "parameters": {
                "filters": {
                    "projectId": "938017196"
                },
                "operation": "getAll",
                "returnAll": true
            },
            "credentials": {
                "todoistApi": {
                    "id": "1",
                    "name": "Todoist account"
                }
            },
            "executeOnce": false,
            "retryOnFail": true,
            "typeVersion": 1,
            "alwaysOutputData": true
        },
        {
            "id": "d4794543-3002-4663-8979-360eb437fb4e",
            "name": "If list not empty",
            "type": "n8n-nodes-base.if",
            "position": [
                840,
                220
            ],
            "parameters": {
                "conditions": {
                    "string": [
                        {
                            "value1": "={{ $json[\"id\"] }}",
                            "operation": "isNotEmpty"
                        }
                    ]
                }
            },
            "typeVersion": 1
        },
        {
            "id": "297fcbcb-efe3-4965-b836-34e78a3b452d",
            "name": "if it has daily label",
            "type": "n8n-nodes-base.if",
            "position": [
                1080,
                220
            ],
            "parameters": {
                "conditions": {
                    "boolean": [
                        {
                            "value1": "={{ ($json[\"labels\"] || []).includes('daily') }}",
                            "value2": true
                        }
                    ]
                }
            },
            "typeVersion": 1
        },
        {
            "id": "0365a865-f03b-4afc-a535-4e3892fc3add",
            "name": "Delete task",
            "type": "n8n-nodes-base.todoist",
            "position": [
                1280,
                220
            ],
            "parameters": {
                "taskId": "={{ $json[\"id\"] }}",
                "operation": "delete"
            },
            "credentials": {
                "todoistApi": {
                    "id": "1",
                    "name": "Todoist account"
                }
            },
            "retryOnFail": true,
            "typeVersion": 1
        },
        {
            "id": "b14a8ecc-ee07-4a33-ab4b-122c98694c60",
            "name": "Sticky Note",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                1740,
                440
            ],
            "parameters": {
                "color": 7,
                "width": 256.14371825927645431875134818255901336669921875,
                "height": 100,
                "content": "### \ud83d\udc48\ud83c\udffd Every new task has `daily` label that gets deleted in the other flow"
            },
            "typeVersion": 1
        },
        {
            "id": "d951f461-685e-4507-b010-bce2be0e3709",
            "name": "Create new task in Inbox",
            "type": "n8n-nodes-base.todoist",
            "position": [
                1520,
                420
            ],
            "parameters": {
                "labels": [
                    "daily"
                ],
                "content": "={{ $json.content }}",
                "options": {
                    "description": "={{ $json.description }}",
                    "dueDateTime": "={{ $json.due }}"
                },
                "project": {
                    "__rl": true,
                    "mode": "list",
                    "value": "938017196",
                    "cachedResultName": "Inbox"
                }
            },
            "credentials": {
                "todoistApi": {
                    "id": "1",
                    "name": "Todoist account"
                }
            },
            "retryOnFail": true,
            "typeVersion": 2,
            "alwaysOutputData": false
        }
    ],
    "pinData": [],
    "connections": {
        "Every day at 5am": {
            "main": [
                [
                    {
                        "node": "Get all tasks from Inbox",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "If list not empty": {
            "main": [
                [
                    {
                        "node": "if it has daily label",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Parse task details": {
            "main": [
                [
                    {
                        "node": "Keep tasks that match today",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Every day at 5:10am": {
            "main": [
                [
                    {
                        "node": "Get all tasks from template project",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "if it has daily label": {
            "main": [
                [
                    {
                        "node": "Delete task",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Get all tasks from Inbox": {
            "main": [
                [
                    {
                        "node": "If list not empty",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Keep tasks that match today": {
            "main": [
                [
                    {
                        "node": "Create new task in Inbox",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Get all tasks from template project": {
            "main": [
                [
                    {
                        "node": "Parse task details",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        }
    }
}
Back to Workflows

Related Workflows

Telegram Googletaskstool Create Triggered
View
⚡AI-Powered YouTube Playlist & Video Summarization and Analysis v2
View
Manual Rundeck Automate Triggered
View
HTTP Deepl Automation Webhook
View
Wait Splitout Automation Webhook
View
Wait Slack Monitor Webhook
View
Manual Stickynote Process Triggered
View
Postgrestool Stickynote Automation Triggered
View
Send a private message on Zulip
View
RAG on living data
View