Here this HTTP node 
{
“nodes”: [
{
“parameters”: {
“pollTimes”: {
“item”: [
{
“mode”: “everyMinute”
}
]
},
“documentId”: {
“__rl”: true,
“value”: “{{Google Sheet ID}}”,
“mode”: “list”,
“cachedResultName”: “{{Google Sheet name}}”,
“cachedResultUrl”: “{{Google Sheet url}}”
},
“sheetName”: {
“__rl”: true,
“value”: “gid=0”,
“mode”: “list”,
“cachedResultName”: “sheet”,
“cachedResultUrl”: “{{Google Sheet url}}”
},
“event”: “rowAdded”,
“options”: {}
},
“type”: “n8n-nodes-base.googleSheetsTrigger”,
“typeVersion”: 1,
“position”: [
-420,
-160
],
“id”: “34b2fa08-4ba1-40db-9fd2-a53320806940”,
“name”: “Google Sheets Trigger”,
“credentials”: {
“googleSheetsTriggerOAuth”: {
“id”: “{{Google Sheets Trigger ID}}”,
“name”: “{{Google Sheets Trigger}}”
}
}
},
{
“parameters”: {
“jsCode”: “function padTime(timeStr) {\n const [h, m] = timeStr.split(‘:’);\n return ${h.padStart(2, '0')}:${m.padStart(2, '0')}
;\n}\n\nfunction parseReminders(input) {\n const reminders = ;\n const reminderParts = String(input).split(‘,’).map(part => part.trim().toLowerCase());\n for (const part of reminderParts) {\n let minutes;\n const num = parseInt(part);\n if (part.includes(‘week’)) minutes = num * 7 * 24 * 60;\n else if (part.includes(‘day’)) minutes = num * 24 * 60;\n else if (part.includes(‘hour’)) minutes = num * 60;\n else minutes = num || 10;\n if (!isNaN(minutes)) {\n reminders.push({\n method: ‘popup’,\n minutes: minutes\n });\n }\n }\n return reminders; //.length > 0 ? reminders : [{ method: ‘popup’, minutes: 10 }];\n}\n\nconst eventsToCreate = ;\nfor (const row of $input.all()) {\n const reminderInput = row.json[‘Reminder Minutes’] || ‘10’;\n const reminders = parseReminders(reminderInput);\n const startDate = row.json[‘Start Date’];\n const startTime = padTime(row.json[‘Start Time’]);\n const endDate = row.json[‘End Date’];\n const endTime = padTime(row.json[‘End Time’]);\n const eventData = {\n summary: row.json[‘Event Name’],\n description: row.json[‘Description’] || ‘’,\n start: {\n dateTime: ${startDate}T${startTime}:00
,\n timeZone: ‘Asia/Bangkok’,\n },\n end: {\n dateTime: ${endDate}T${endTime}:00
,\n timeZone: ‘Asia/Bangkok’,\n },\n reminders: {\n useDefault: false,\n overrides: reminders.slice(0, 5) // Google Calendar รองรับ max 5 overrides\n },\n };\n eventsToCreate.push({ json: eventData });\n}\nreturn eventsToCreate;\n”
},
“type”: “n8n-nodes-base.code”,
“typeVersion”: 2,
“position”: [
-240,
-160
],
“id”: “62477d01-3078-4954-aca0-ac305a45cb05”,
“name”: “Code”
},
{
“parameters”: {
“method”: “POST”,
“url”: “{{Google CalendarOAuth url}}”,
“authentication”: “predefinedCredentialType”,
“nodeCredentialType”: “{{googleCalendarOAuth}}”,
“sendBody”: true,
“specifyBody”: “json”,
“jsonBody”: “={\n \"summary\": \"={{ $json.summary }}\",\n \"description\": \"={{ $json.description }}\",\n \"start\": { \"dateTime\": \"={{ $json.start.dateTime }}\", \"timeZone\": \"Asia/Bangkok\" },\n \"end\": { \"dateTime\": \"={{ $json.end.dateTime }}\", \"timeZone\": \"Asia/Bangkok\" },\n \"reminders\": {\n \"useDefault\": false,\n \"overrides\": {{ JSON.stringify($json.reminders.overrides) }}\n }\n }"\n}”,
“options”: {}
},
“type”: “n8n-nodes-base.httpRequest”,
“typeVersion”: 4.2,
“position”: [
-40,
-160
],
“id”: “c6e7ae9c-54b7-4aeb-896b-1ca930876651”,
“name”: “HTTP Request”,
“credentials”: {
“httpHeaderAuth”: {
“id”: “{{httpAuthID}}”,
“name”: “{{Api Key Name}}”
},
“{{googleCalendarOAuth}}”: {
“id”: “{{googleCalendarOAuth Id}}”,
“name”: “{{Google Calendar Name}}”
}
}
}
],
“connections”: {
“Google Sheets Trigger”: {
“main”: [
[
{
“node”: “Code”,
“type”: “main”,
“index”: 0
}
]
]
},
“Code”: {
“main”: [
[
{
“node”: “HTTP Request”,
“type”: “main”,
“index”: 0
}
]
]
}
},
“pinData”: {},
“meta”: {
“templateCredsSetupCompleted”: true,
“instanceId”: “{{instanceID}}”
}
}