Google Calendar API with Service User - Reminder overrides are not set

743 Views Asked by At

Problem:

  • When using the service user auth and inserting / updating a calendar event, the reminders are not overridden
  • The event is inserted / updated correct APART from the reminders are always at the default (email > 10m, popup > 30m).

Context:

  • Node.js using standard libraries below
  • Valid service account with downloaded credentials.json
  • Service account ([email protected]) has write access to [email protected] calendar

Code:

const {google} = require('googleapis')
const {auth} = require('google-auth-library')
const credentials = require('./credentials.json')

const addEvent = async (auth) => {
  const calendar = google.calendar({version: 'v3', auth})
  const insertRes = await calendar.events.insert({
    calendarId: '[email protected]',
    resource: {
      summary: 'Test API',
      start: {
        dateTime: '2020-06-02T12:55:00.000',
        timeZone: 'Europe/London'
      },
      end: {
        dateTime: '2020-06-02T12:56:00.000',
        timeZone: 'Europe/London'
      },
      reminders: {
        useDefault: false,
        overrides: [
          {method: 'popup', 'minutes': 5}
        ]
      }
    }
  })
  console.log('insertRes', insertRes.data)
}

const getAuth = async () => {
  let client = auth.fromJSON(credentials)
  client.scopes = ['https://www.googleapis.com/auth/calendar', 'https://www.googleapis.com/auth/calendar.events']
  return client
}
const init = async () => {
  const auth = await getAuth()
  await addEvent(auth)
}
init()

Response: from console.log(insertRes)

{ kind: 'calendar#event',
  etag: '"3182200547452000"',
  id: '6063phndufgppo8rfev1XXXXXX',
  status: 'confirmed',
  htmlLink:
   'https://www.google.com/calendar/event?eid=NjA2M3BobmR1ZmdwcG84cmZldjFjdWh2YzQgZGFuZ2FyZmllbGR1a0Bnb29nbGVtYWlsXXXXXX',
  created: '2020-06-02T12:17:53.000Z',
  updated: '2020-06-02T12:17:53.768Z',
  summary: 'Test API',
  creator:
   { email: '[email protected]' },
  organizer: { email: '[email protected]', self: true },
  start:
   { dateTime: '2020-06-02T12:55:00+01:00',
     timeZone: 'Europe/London' },
  end:
   { dateTime: '2020-06-02T12:56:00+01:00',
     timeZone: 'Europe/London' },
  iCalUID: '[email protected]',
  sequence: 0,
  reminders: { useDefault: false, overrides: [{"method":"popup","minutes":5}] }
}

Hopefully someone can shed a light on the issue for me.

Thanks

2

There are 2 best solutions below

1
On BEST ANSWER

It seems to be a bug, already reported on Google's Public Issue Tracker

Give it a "star" to show that more people are affected and to receive updates on the issue.

1
On

The service account user is a user more or less just like you. One can only modify reminders for the current user, not for other users.

The reminder is set, but for the "wrong" user. Try to get the event through api with the service account user, you will see the reminder there. Add a reminder with your own user through UI and do the api request again, you will not be able to see the new reminder.

If you want to set reminders on events for yourself, be sure to use your own account to modify the event, for example with OAuth 2.0.