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 →
{
"name": "Set Reminder - Reminder Scheduling",
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "set_reminder",
"responseMode": "responseNode",
"options": {}
},
"id": "52e6cbe0-d0a4-4aac-84cb-0a45d6eb1cd5",
"name": "Webhook - Receive Reminder Action",
"type": "n8n-nodes-base.webhook",
"typeVersion": 1,
"position": [
0,
0
]
},
{
"parameters": {
"functionCode": "const received = $input.item.json;\nconst action = received.body ?? received;\nconst payload = action.payload ?? {};\n\nconst rawReminderTime = payload.reminder_time ?? payload.time ?? null;\nconst parsedTime = rawReminderTime ? new Date(rawReminderTime) : null;\nconst hasValidDate = !!parsedTime && !Number.isNaN(parsedTime.getTime());\n\nconst nowMs = Date.now();\nconst targetMs = hasValidDate ? parsedTime.getTime() : 0;\nconst isPastTime = hasValidDate ? targetMs <= nowMs : false;\nconst delaySeconds = hasValidDate ? Math.max(0, Math.floor((targetMs - nowMs) / 1000)) : null;\n\nconst channels = Array.isArray(payload.notification_channels) && payload.notification_channels.length\n ? payload.notification_channels\n : ['voice', 'push'];\n\nconst language = (action.context?.language || action.language || 'fr').toLowerCase();\n\nreturn {\n json: {\n action_id: action.action_id ?? 'unknown',\n user_id: action.user_id ?? 'unknown',\n intent: action.intent ?? 'set_reminder',\n language,\n title: payload.title ?? payload.task ?? 'Rappel',\n description: payload.description ?? null,\n reminder_time: rawReminderTime,\n recurrence: payload.recurrence ?? null,\n notification_channels: channels,\n is_valid_time: hasValidDate,\n is_past_time: isPastTime,\n delay_seconds: delaySeconds,\n created_at: new Date().toISOString()\n }\n};"
},
"id": "6f14667f-5d53-4f10-8f4c-2d978e4fd6f2",
"name": "Extract Reminder Data",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [
220,
0
]
},
{
"parameters": {
"conditions": {
"string": [
{
"value1": "={{$json.is_valid_time && !$json.is_past_time ? 'yes' : 'no'}}",
"operation": "equal",
"value2": "yes"
}
]
}
},
"id": "afc2ba44-2529-4f8d-8de6-4d29f27eae69",
"name": "IF Reminder Time Valid",
"type": "n8n-nodes-base.if",
"typeVersion": 1,
"position": [
440,
0
]
},
{
"parameters": {
"functionCode": "const j = $input.item.json;\nconst reminderId = `rem_${j.action_id}_${Date.now()}`;\n\nconst messages = {\n fr: `Rappel '${j.title}' cree pour ${j.reminder_time}.`,\n en: `Reminder '${j.title}' created for ${j.reminder_time}.`,\n ar: `Reminder '${j.title}' created for ${j.reminder_time}.`\n};\n\nreturn {\n json: {\n ...j,\n status: 'success',\n result: {\n reminder_id: reminderId,\n title: j.title,\n description: j.description,\n reminder_time: j.reminder_time,\n recurrence: j.recurrence,\n notification_channels: j.notification_channels,\n scheduled_in_seconds: j.delay_seconds,\n scheduled: true\n },\n error: null,\n voice_text: messages[j.language] || messages.fr\n }\n};"
},
"id": "96f1b323-0511-48c6-8157-ea250f7b5f75",
"name": "Build Success Result",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [
660,
-90
]
},
{
"parameters": {
"functionCode": "const j = $input.item.json;\n\nconst reason = !j.is_valid_time\n ? 'invalid_reminder_time'\n : (j.is_past_time ? 'reminder_time_in_past' : 'unknown_validation_error');\n\nconst messages = {\n fr: `Impossible de creer le rappel '${j.title}'. Heure invalide ou passee.`,\n en: `Unable to create reminder '${j.title}'. Time is invalid or in the past.`,\n ar: `Unable to create reminder '${j.title}'. Time is invalid or in the past.`\n};\n\nreturn {\n json: {\n ...j,\n status: 'failed',\n result: null,\n error: reason,\n voice_text: messages[j.language] || messages.fr\n }\n};"
},
"id": "5a5d3f27-58cd-43dc-91f8-204362f3f0f4",
"name": "Build Failure Result",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [
660,
90
]
},
{
"parameters": {
"method": "POST",
"url": "http://host.docker.internal:8000/callback/n8n",
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ { action_id: $json.action_id, status: $json.status, result: $json.result, error: $json.error, execution_time_ms: null } }}",
"options": {
"timeout": 5000
}
},
"id": "f188d026-10ad-4f2f-a8cb-c1ad09d30a1c",
"name": "Callback Backend",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 3,
"position": [
880,
0
]
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify({ action_id: $json.action_id, status: $json.status, result: $json.result, error: $json.error }) }}",
"options": {}
},
"id": "0443f9de-e2bb-4c6e-b2d3-e0d3f9f9b95e",
"name": "Respond to Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1,
"position": [
1100,
0
]
}
],
"connections": {
"Webhook - Receive Reminder Action": {
"main": [
[
{
"node": "Extract Reminder Data",
"type": "main",
"index": 0
}
]
]
},
"Extract Reminder Data": {
"main": [
[
{
"node": "IF Reminder Time Valid",
"type": "main",
"index": 0
}
]
]
},
"IF Reminder Time Valid": {
"main": [
[
{
"node": "Build Success Result",
"type": "main",
"index": 0
}
],
[
{
"node": "Build Failure Result",
"type": "main",
"index": 0
}
]
]
},
"Build Success Result": {
"main": [
[
{
"node": "Callback Backend",
"type": "main",
"index": 0
},
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
},
"Build Failure Result": {
"main": [
[
{
"node": "Callback Backend",
"type": "main",
"index": 0
},
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
}
},
"active": true,
"settings": {
"executionOrder": "v1",
"availableInMCP": false
},
"meta": {
"templateCredsSetupCompleted": true
},
"id": "setReminderWorkflow0001",
"tags": []
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Set Reminder - Reminder Scheduling. Uses httpRequest. Webhook trigger; 7 nodes.
Source: https://github.com/Montassarnawara/gob-edge-ai/blob/469bdf18ec1ef069f2ba7916183f0013483c9067/n8n/wf_set_reminder.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This n8n template provides enterprise-level version control for your workflows using GitHub integration. Stop losing hours to broken workflows and manual exports – get proper commit history, visual di
This flow creates dummy files for every item added in your *Arrs (Radarr/Sonarr) with the tag .
eek-Go v2 (Batch-Then-Review). Uses httpRequest. Webhook trigger; 75 nodes.
This workflow receives webhook requests from a content calendar and uses the X API v2 to publish text posts, threads, image/video posts, and polls, as well as delete existing posts and run a credentia
This workflow acts as a central API gateway for all technical indicator agents in the Binance Spot Market Quant AI system. It listens for incoming webhook requests and dynamically routes them to the c