Goodmorning,
I have started discovering Google Apps Script and am amazed by the infinite possibilities. I am quite new to programming and regularly call on 'Gemini' for help.
Recently, a script (which synced perfectly one-way between Google Calendar and Todoist) suddenly started giving error messages, as seen in the image. Gemini can't solve this, so I'm turning to 'humans.'
Does anyone recognize this message and where could the solution be found?
Greetings, Peter.
and in Dutch,
Goedemorgen,
Ik ben begonnen met het ontdekken Google Apps Script, en sta vertelt van de oneindige mogelijkheden
ik ben vrij onbekend met programmeren en roep dan ook regelmatig de hulp van 'Gemini' in.
Zo krijg ik in een script (dat perfect 1 way syncte tussen Google agenda en Todoist) opeens foutmeldingen, zoals: zie afbeelding.
Gemini kan dit niet oplossen, dus ik wijk nu uit naar 'naar de mens'.
Kent iemand een dergelijke melding en waar zou de oplossing gevonden kunnen worden...
Groet Peter
Goedemorgen Peter,
Wat leuk om te lezen dat je enthousiast bent over Google Apps Script 😊
Een 1-way sync tussen Google Calendar en Todoist is al meteen een mooie (en niet eenvoudige) use-case.
Omdat je verwijst naar “zie afbeelding”, maar ik de foutmelding zelf hier niet zie, ga ik je eerst helpen met de meest voorkomende oorzaken bij dit soort scripts. 90% van de plotselinge fouten bij een werkende Calendar ↔ Todoist sync komt neer op één van deze vier punten:
Als je script de Google Calendar API of de Todoist REST API gebruikt met een access token, dan is de kans groot dat:
het access token verlopen is
de refresh token niet meer geldig is
scopes gewijzigd zijn
de API opnieuw geautoriseerd moet worden
Typische foutmeldingen:
401 Unauthorized
Invalid Credentials
Request had invalid authentication credentials
Exception: Access denied
Ga naar:
Apps Script → Triggers → Verwijder trigger → opnieuw aanmaken
En voer daarna handmatig een functie uit zodat je opnieuw autorisatie krijgt.
Ook belangrijk:
function testAuth() { Logger.log(CalendarApp.getDefaultCalendar().getName()); }
Als dit al een fout geeft → dan zit het probleem in Google autorisatie.
Todoist heeft de afgelopen jaren meerdere API-wijzigingen doorgevoerd (v7 → v8 → REST v2).
Als je script iets doet als:
UrlFetchApp.fetch("https://api.todoist.com/rest/v2/tasks", options);
Controleer dan:
Gebruik je nog het juiste endpoint?
Is je API token nog geldig?
Staat je token correct in de headers?
Correct voorbeeld:
const options = { method: "post", headers: { "Authorization": "Bearer " + TODOIST_TOKEN, "Content-Type": "application/json" }, payload: JSON.stringify({ content: "Test taak", due_string: "tomorrow" }), muteHttpExceptions: true }; const response = UrlFetchApp.fetch("https://api.todoist.com/rest/v2/tasks", options); Logger.log(response.getResponseCode()); Logger.log(response.getContentText());
👉 Let op muteHttpExceptions: true — anders zie je de echte foutmelding niet goed.
Veel sync scripts draaien via:
ScriptApp.newTrigger("syncCalendar") .timeBased() .everyMinutes(15) .create();
Soms:
Trigger wordt automatisch uitgeschakeld
Quota limiet bereikt
Script exceeded maximum execution time
Controleer:
Apps Script → Executions → Bekijk rode errors
Google verandert soms onderliggende API-validatie.
Bijvoorbeeld:
Exception: Service invoked too many times
Exceeded maximum execution time
Invalid argument: startTime
Controleer ook of je Advanced Services gebruikt:
Calendar API (Advanced Service)
Of gewoon CalendarApp
Kun je hier exact de foutmelding plakken?
Bijvoorbeeld:
Exception: Request failed for https://api.todoist.com returned code 401
Of:
TypeError: Cannot read properties of undefined
De exacte tekst is cruciaal.
Open Apps Script editor
Ga naar Executions
Klik op de laatste rode fout
Kopieer de volledige error message
Plak die hier
Voor productie-waardige sync tussen Calendar en Todoist raad ik aan:
Gebruik PropertiesService om sync-IDs op te slaan
Gebruik LockService om dubbele runs te voorkomen
Gebruik batch verwerking i.p.v. per event calls
Log altijd response codes
Voorbeeld veilige logging:
function safeFetch(url, options) { try { const response = UrlFetchApp.fetch(url, options); Logger.log(response.getResponseCode()); return response; } catch (err) { Logger.log("ERROR: " + err.toString()); throw err; } }
Peter — geen zorgen 🙂
Dit soort “plotselinge” fouten zijn bijna altijd:
verlopen token
API wijziging
trigger issue
--
You received this message because you are subscribed to the Google Groups "Google Apps Script Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-apps-script-c...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/google-apps-script-community/637de9af-3d9f-4fb8-b3fd-e5d2c9254b43n%40googlegroups.com.
--
To view this discussion visit https://groups.google.com/d/msgid/google-apps-script-community/66d8ab02-f327-4566-8723-17caba1b9cebn%40googlegroups.com.