GoogleCalendarAPI accept/decline event

倾然丶 夕夏残阳落幕 提交于 2019-12-23 10:51:40

问题


I am working on GoogleCalendar API and using node.js as a platform to build my application. I am able to create events using authentication procedure and creating the calendar event using the access token generated while authenticating.

My question is that suppose if we have any attendee in the event and I want to accept/decline the event using the calendar API from the attendee's side, how can we do that?

I have tried fetching the calendar event of the attendee and matching it with the iCalUID of the event which was originally created and then modifying the event using update event on the attendee's calendar.


回答1:


Event creator or owner cannot modify the response of attendees. Only attendees can modify their status.

To update the status on the side of the user, You may use the Event.update API and provide value for 'attendees.responseStatus'. Attendee's response status has 4 (four) possible value (described below).

'needsAction' - has not responded to the invitation. 'declined' - has declined the invitation. 'tentative' - has tentatively accepted the invitation 'accepted' - has accepted the invitation.

In addition to this, You can use the word "primary" as value for the calendar id to represent the currently logged in user

CalendarId: Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the "primary" keyword. (string).

For the id, you need to use the "id" returned by the Events.list API not the "iCalUID". Those two are different as described here.

Other fields that you need to provide are the email (of the attendee), startdate and enddate.

For more information, you may view the official documentation, link below: https://developers.google.com/google-apps/calendar/v3/reference/events




回答2:


Here is an example in java, using PATCH. Create an event object with the just the information you want to change, in this case the attendee and the response status. This code is running as the attendee.

final Event event = new Event()
    .setAttendees(Arrays.asList(new EventAttendee().setEmail(email)
    .setResponseStatus("declined")));
try 
    getCalendarService(googleAccountCredential).events()
       .patch(CALENDAR_PRIMARY, calendarEventId, event)
       .setSendNotifications(true)
       .setOauthToken(googleAccountCredential.getToken()).execute();
    return true;
} catch (final Exception ex) {
...
    return false;
}

            }



回答3:


To respond, you need to get the event with the same event id from the attendee's calendar and then perform a patch or an update operation changing the response status of this attendee from needsAction to accepted / declined.

A bit of documentation on how events are copied between attendees and organizers: https://developers.google.com/google-apps/calendar/concepts/sharing




回答4:


Here is an example in python for Google Calendar Api v3. You can either use update or patch. Both of them are working.

all_attendees = event['attendees']
event['attendees'] = [{
    'email': 'you@example.com',
    'self': True,
    'responseStatus': 'accepted',
    'additionalGuests': 0,
}]
updated_event = service.events().patch(calendarId=calendar_id, eventId=event_id, body=event).execute()

Have fun




回答5:


Like Android Enthusiast discussed, only the attendee can update his or her calendar from the attendee's side. You should also check the documentation as he suggested. The answer below is a working example for node.js and python

To update the event, you need to have the eventId and the user email. Get the event from the calendar(with the eventID), loop through all the attendees, change responseStatus for that particular attendee and then update the google calendar

For node js using the google api


const { google } = require('googleapis');

const calendar = google.calendar({ version: 'v3', auth: 'YOUR-API-KEY-HERE' });

#get the event to be updated
let theEvent = calendar.events.get({ calendarId: 'primary', eventId: eventId })

#loop through the whole attendee
for (let i = 0, i < theEvent['atendees'].length; i++){
    if (theEvent['atendees'][i]['email'] === userEmail){
        theEvent['atendees'][i]['responseStatus'] = 'accepted'
    }
}
#update the google event
calendar.events.update({ calendarId: 'primary', eventId: theEventId, body: theEvent}, function(err, event) {
  if (err) {
    console.log('there was an error');
    return;
  }
  console.log('Event updated');
});

For python using googleapiclient

from googleapiclient.discovery import build

calendar = build('calendar', 'v3', credentials=credential)

event = calendar.events().get(calendarId='primary', eventId='eventId').execute()

For attendee in  event['atendees']:
    if atendee['email'] == user_email:
        attendee['responseStatus'] = 'accepted'
        break
#update the google event
udated_event = calendar.events().update(calendarId='primary', eventId=eventId, body=event).execute()


来源:https://stackoverflow.com/questions/34647444/googlecalendarapi-accept-decline-event

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!