# Agenda-afspraken aanmaken met Apps Script Agenda-afspraken aanmaken met Apps Script is een krachtige manier om planning te automatiseren. Je koppelt een spreadsheet of formulier aan Google Agenda en laat afspraken automatisch verschijnen. In dit artikel leer je losse afspraken, afspraken met gasten en herhalende reeksen aanmaken, plus hoe je bestaande events uitleest. [[TOC]] ## De juiste agenda kiezen Elke gebruiker heeft een standaardagenda en kan daarnaast meerdere agenda's hebben. Je opent de standaardagenda met `getDefaultCalendar()` of een specifieke agenda op id met `getCalendarById()`. ```javascript function openAgenda() { const agenda = CalendarApp.getDefaultCalendar(); Logger.log('Agenda: ' + agenda.getName()); } ``` :::info title="Agenda-id vinden" Het id van een gedeelde agenda vind je in de Agenda-instellingen onder "Agenda integreren". Het ziet eruit als een e-mailadres, bijvoorbeeld `id@group.calendar.google.com`. Gebruik `CalendarApp.getCalendarById('id@group.calendar.google.com')` om die agenda aan te spreken. De volledige referentie staat op developers.google.com/apps-script/reference/calendar. ::: ## Een eenvoudige afspraak maken De basis is `createEvent()` met een titel, een begintijd en een eindtijd. Tijden geef je als JavaScript `Date`-objecten: ```javascript function maakAfspraak() { const agenda = CalendarApp.getDefaultCalendar(); const start = new Date('2026-06-10T14:00:00'); const eind = new Date('2026-06-10T15:00:00'); const event = agenda.createEvent('Projectoverleg', start, eind); Logger.log('Afspraak aangemaakt met id ' + event.getId()); } ``` ## Gasten, locatie en beschrijving toevoegen Met een opties-object als vierde argument verrijk je de afspraak: ```javascript function maakAfspraakMetGasten() { const agenda = CalendarApp.getDefaultCalendar(); const start = new Date('2026-06-11T10:00:00'); const eind = new Date('2026-06-11T11:00:00'); agenda.createEvent('Kwartaalreview', start, eind, { description: 'Bespreking van de Q2-cijfers en doelen.', location: 'Vergaderzaal De Brug', guests: 'collega1@cloud-captains.com,collega2@cloud-captains.com', sendInvites: true }); } ``` Met `sendInvites: true` krijgen gasten een uitnodiging in hun mail. Zonder dat veld worden ze wel toegevoegd, maar niet gemaild. :::tip title="Zet het doel in de beschrijving" Voeg altijd een duidelijke `description` toe met de agenda van de afspraak. Gasten zien die tekst in hun uitnodiging, wat scheelt in heen-en-weer-mailen over het doel van de meeting. ::: ## Een herhalende reeks maken Voor terugkerende afspraken, zoals een wekelijkse standup, gebruik je `createEventSeries()` met een herhalingsregel die je opbouwt via `newRecurrence()`: ```javascript function maakWekelijkseStandup() { const agenda = CalendarApp.getDefaultCalendar(); const start = new Date('2026-06-01T09:00:00'); const eind = new Date('2026-06-01T09:15:00'); const herhaling = CalendarApp.newRecurrence() .addWeeklyRule() .onlyOnWeekdays([CalendarApp.Weekday.MONDAY, CalendarApp.Weekday.WEDNESDAY]) .times(20); agenda.createEventSeries('Dagelijkse standup', start, eind, herhaling); } ``` Deze reeks plant een standup elke maandag en woensdag, 20 keer in totaal. Wil je in plaats van een vast aantal keren tot een einddatum doorgaan, vervang `.times(20)` dan door `.until(new Date('2026-12-31'))`. ## Bestaande afspraken uitlezen Wil je weten wat er gepland staat, vraag dan events op binnen een periode: ```javascript function leesAfsprakenVandaag() { const agenda = CalendarApp.getDefaultCalendar(); const begin = new Date(); begin.setHours(0, 0, 0, 0); const eind = new Date(); eind.setHours(23, 59, 59, 999); const events = agenda.getEvents(begin, eind); events.forEach(function(e) { Logger.log(e.getTitle() + ' om ' + e.getStartTime()); }); } ``` ## Het hele proces op een rij De stappen om vanuit een script een afspraak in te plannen lopen altijd in dezelfde volgorde: :::howto title="Zo plan je een afspraak vanuit een script" 1. Kies de agenda met `getDefaultCalendar()` of `getCalendarById()`. 2. Maak `Date`-objecten voor de begin- en eindtijd. 3. Roep `createEvent()` aan, met een opties-object als je gasten, locatie of beschrijving wilt. 4. Zet `sendInvites: true` om gasten direct een uitnodiging te mailen. 5. Log het event-id of de titel ter controle. ::: :::warn title="Let op de tijdzone van het script" `Date`-objecten worden uitgelegd in de tijdzone van het script, niet die van de gebruiker. Stel de juiste tijdzone in via Projectinstellingen in de editor (of in `appsscript.json`). Anders kan een afspraak een uur verschuiven, zeker rond de zomer- en wintertijdwisseling. ::: ## Een Google Meet-link toevoegen De basis `CalendarApp` voegt niet rechtstreeks een Google Meet-link toe. Daarvoor gebruik je de geavanceerde Calendar-service (Advanced Calendar Service), die je eerst onder "Services" in de editor activeert. Je maakt het event dan via `Calendar.Events.insert()` met een `conferenceData`-blok en `conferenceDataVersion: 1`. De Meet-link verschijnt automatisch in de uitnodiging. ## Koppelen aan een formulier De echte kracht ontstaat als je dit combineert met andere diensten. Laat bijvoorbeeld een formulierinzending automatisch een afspraak inplannen, zie [[apps-script-formulier-response|formulierreacties verwerken]]. Zo bouw je een reserveringssysteem zonder externe tools. :::faq ### Hoe maak ik een afspraak voor de hele dag? Gebruik `createAllDayEvent('Titel', new Date('2026-06-10'))`. Die heeft geen begin- en eindtijd nodig, alleen een datum. ### Worden gasten automatisch uitgenodigd? Alleen als je `sendInvites: true` meegeeft in het opties-object. Anders staan ze wel als gast in de afspraak, maar krijgen ze geen mail. ### Kan ik een Google Meet-link toevoegen? Via de basis `CalendarApp` niet rechtstreeks. Daarvoor gebruik je de geavanceerde Calendar-service met `conferenceData`. Die activeer je eerst onder Services in de editor. ### Hoe verwijder ik een afspraak? Haal de afspraak op en roep `event.deleteEvent()` aan. Voor een hele reeks gebruik je `series.deleteEventSeries()`. ### Waarom staat mijn afspraak op het verkeerde tijdstip? Bijna altijd door de tijdzone-instelling van het script. Controleer de tijdzone in Projectinstellingen en zorg dat je `Date`-objecten kloppen met die zone. ### Kan ik dit script automatisch laten draaien? Ja, koppel de functie aan een trigger, bijvoorbeeld bij een formulierinzending of op een vast tijdstip. Dat stel je in onder Triggers in de editor. :::