-
-
Notifications
You must be signed in to change notification settings - Fork 360
As a member, my calendar will automatically update if the event changes #436
Comments
I'll try to put it in my own words. What is the problem we want to solve?If I RSVP to an event at my chapter, I want to be able to have that in my calendar.
The second option would allow for updates if the organiser change things (like moving date or venue or even cancelling the event). The „add to Google button” prefills Google calendar with event details via Query Parameters. The user only needs to confirm the addition. The alternative discussed was more involved (adding for permission to access the calendar on the user's behalf. Making a decision which calendar to add an event to etc). When downloading the file, I'd miss those updates. So I could take a trip just to learn, that the event isn't going to happen. We want to avoid that if possible. |
I talked with @Zeko369 on Discord about it more in-tech. Since Google (or another provider) would crawl the ICS file periodically, it needs permission to do so.
(the exact structure is open for discussion). Since anybody with that URL will have access to that subscription it is important to stress, that this URL must only be pasted into the calendar (e.g. Google calendar, see link in original post) and NOT SHARED. Lastly, I could imagine keeping an auth trail akin to https://github.com/settings/security-log to see, who accessed the link (with timestamp and User Agent?). This way, suspicious behaviour could be detected. It shouldn't be limited to auth tokens generated in this context. |
So, is the idea for MVP to use a feed-based link that has all of a member's event subscriptions, or have the member copy and paste a link to their calendar for each specific event? The authorization tokens above sound more applicable to a specific person's calendar feed and not as much for a single event link. True? Fran, was the link you used for your university for a specific event, or did you have a link with a feed of all events |
Also, if the idea is to have a feed link with calendar data for multiple events, we'd want to decide if we're talking about a link with all events which are happening for a specific chapter, or only events the member registered to attend. |
One event => not updatable, simple to add (one click or download .ics) We can have whatever customisation you want on the /user feed, but you can also subscribe to specific venue/chapter (more for information stuff / ie that Hackgreenville thingy) |
Thanks. I was thinking your initial example was a replacement for the "Add to Google Calendar" button, but a link for a single event where that single event was kept up to date. Never heard of that and I didn't realize you were talking about feeds. Technically, you could have a feed URL specific to an event, so that would be possible, but probably not an ideal implementation for the feed provider or consumer. |
Pretty sure google calendar only supports adding calendars dynamically, so I don't really know how we would implement updatable events. I could be wrong though. |
I'm not saying it's a good idea, but I was that you could create a webcal / feed with just one event. People would need to add each feed link and the calendar would have a lot more feeds to keep in sync, but seems like it's doable since it would just be a feed with n=1. |
Also if you only have one event it would still show in your "user" calendar |
Yeah, I agree. Though, in a different tool / interface / use case it would be feasible and may actually be a neat protocol. I've never used it but I wonder if that would be similar to having a https://github.com/pubsubhubbub/ on a single thing you want to track. |
For reference: PubSubHubBub is now known as WebSub in some parts of the web. |
I have a prototype of this working with ICAL emails and same IDs for events, will PR soon |
More notes from Fran about the direction of this feature were shared in the June 26, 2021 meeting.
|
Hey @Zeko369 do you have a branch with the prototype that we can take a look at? I know you've got a lot on, so I'd be happy to finish of whatever you've put together so far. |
@QuincyLarson @ojeytonwilliams I've setup a couple fake events to test integrations with Google, Outlook, iPhone Calendar, and Yahoo. I'm going to wait until tomorrow to update the event and see if anything auto-updates. If you want to register and add to your own calendars as extra tests, then the links are below. https://www.meetup.com/Hack-Greenville/events/282100731/ Eventbrite has an Add to Calendar link on the event page and it's not necessary to register to use that feature. The "Add to Calendar" link in the Eventbrite confirmation email seems to have the same effect, even without registering. |
Cheers, I've signed up for both. Interestingly meetup sent an ics file, but eventbright just sent their own ticket. |
Thanks. I don't think either of them are going to auto-update, even with the iCal file and Add to Calendar links, but we'll see. |
@ojeytonwilliams @QuincyLarson TLDR; there is no automatic updating of the calendars with Meetup and Eventbrite. They are actually worse at sending emails and iCals on updates than I was expecting. @ojeytonwilliams if you want to confirm your experience, then check your calendar. The modified events changed to a different date / time and have "Modified" in the event title. Detailed Findings
How it May be Possible to Update a Calendar and Reasons Meetup and Eventbrite Likely Don't Try
|
It looks like Meetup is the least bad in that they send something. We can easily implement that. I dug into the spec a little and it seems that the key property is METHOD which is defined here.
I'm guessing the magic happens (if it happens at all) if you send a REQUEST iCalendar with the same ids at the first invite. As for "Invites", I think the magic is happening behind the scenes because Google Calendar updates even if you don't email the attendees. Presumably because it's all handled by Google. That said, they also email you a new .ics file which is exactly the same as the original invite, but with any changes to the event (date changes, etc) and updates to LAST-MODIFIED and SEQUENCE, so that calendar software can figure out which .ics is most recent. I tested this by importing the invite .ics and then importing the update .ics into Google Calendar and it behaved exactly as you'd expect: the original invite appeared and was replaced by the update. At the very least we could mirror that, using something like https://www.npmjs.com/package/ics and tracking SEQUENCE in the db. |
@ojeytonwilliams yes, I noticed the REQUEST in the iCal files from Google, Outlook, and Yahoo calendar invites. I have copies of all the files from Meetup, Eventbrite, and the calendar-to-calendar iCal files that did the magic updates. The takeaway for me is that magic updating isn't likely an MVP. Even if it's easy to implement the REQUEST / invite iCal files, there are potential issues with sending a member an "invite" for something they just RSVPed for an instance of Chapter. I think the default will ask the recipient "Yes" / "No" for if they are coming and it's easy to imagine that someone receives that and makes false assuptions. For example, if someone on a waitlist received an invite with a "Yes" / "No" they might assume a "Yes" reply means they are confirming when the reality is they may still be on the waitlist. Similarly, a member who RSVP'ed on the Chapter site may change their reply to "No" in their calendar and assume that cancels their reservation on the website, which wouldn't be the case unless we did something super slick and hosted our own service to receive responses to those calendar invites / REQUEST iCal files. The PUBLISH method is used Meetup iCal files, which is why it doesn't attempt to update the calendar on subsequent iCals for the same event.
It seems the iCal from Eventbrite doesn't even declare a method, so that's acting similar to METHOD:PUBLISH
In practice, Evenbrite relies more on the "Add to Google", "Add to Outlook", "Add to Yahoo" links in their emails and doesn't actually send any iCals. There's a link to download an iCal in the email and you can trigger an iCal download after an RSVP,
Add to Google Add to Outlook Add to Yahoo |
I agree. If we can get the magic working, great, but I think you're right - it's probably too much for the MVP.
This sounds tough. It sounds cool, but I'm not sure where to start! Definitely something that will need a bit of thought and prototyping before we can proceed. |
What I thought about this recently: What we currently doAt this time, all of Chapters interactions with users are via the app itself or email. Why this is an issueIt creates additional friction for users, since they will have to update their calendars manually. Potentially resulting in missed events and frustration. What we can doMake use of the Google calendar api to update user's calendars for them. Potential issuesWe'd need to investigate the api, integrate with Google auth, fallback to email for users that don't want to use Google's services and make sure that we store refresh tokens securely. In addition, it's possible that we may need to verify with Google, depending on precisely which scopes we need. Calendar is probably fine, but if we need to send emails through Google, that might require verification. So, in conclusion this is potentially a little involved, but it would be great to get it in the MVP. I recommend we tackle this last, though, simply because it will take a while to get right and we can beta test the email-only version while we do that. |
As with Quincy's Google calendar invite for today's meeting, it's necessary to send an .ics file with Google manages to make this work, and it may still be a decent standard, but there are questions about if it's the best approach for Chapter. |
Quincy is most interested in exploring the Google Calendar API as there are questions on if the iCal / webcal method is reliable. |
As mentioned in the last comment, we determined Quincy and others aren't convinced the .ics file protocol for auto-updating calendar events is the way to go. It may work okay, but this also assumes we're able to send a .ics file to an email that uses the METHOD:REQUEST and does not include a "Will you attend?" (Yes, No, Maybe). As mentioned above, we could easily confuse a user if they are clicking (Yes, No, Maybe) in their local calendar, but setting a false assumption that their local calendar response will update their RSVP in Chapter. .ics would be less of an issue if it works and we can send an "invite" without the (Yes, No, Maybe) options, which may not be possible. This may also be why Meetup and Eventbrite don't send an invite through .ics because it could easily confuse people. In particular, if there's a wait list for an event and you send an "invite" to a local calendar, then someone may assume that's a confirmation when it was just a reminder of the event details. I'm not sure if a Google Calendar API approach will avoid these potential pitfalls, but checking that out seems to be the next step after today's meeting. |
@allella Neither am I, to be honest, but testing out the Google Calendar API is very high priority right now. We'll know soon enough if it's workable and if it addresses these concerns. If not, we can do some thinking about how to avoid them. |
Is there a more specific expected/ideal workflow for this? Looking at the documentation, generally two pieces are needed to be able to edit events - calendar id and event id. Event id can be defined when creating event. For calendar id there's couple options:
|
I've only just started looking into this, but it seems that basically everything of interest requires a sensitive scope and must be audited by Google before the app can be published. Even if we want to create events on calendars that we own, we'd still need to access a sensitive scope: The exception is
In principle this is enough, but I've not tested it yet. However, Google's guide recommends using the Anyways, to your comment:
@gikf I could be wrong, but I believe the user in question would be a chapter admin. The calendar should be one they have access to. i.e. when a Chapter is created someone will need to create a Calendar for it and then admins would be granted access. We can store that calendar id in the db and use it when creating events. Ideally all of this would be on a secondary calendar, so that we don't need any sensitive scopes. All of this comes with the caveat that I'm still learning the Google Calendar API, but this is my current understanding. |
If calendar would be created externally After event is created on the Chapter calendar, how that would be connected with the user taking part in the event? Do they add manually add Chapter calendar, or would be adding individual events? |
It would be sensitive, so assuming the secondary calendar approach fails, we'll need sensitive scopes. However, I'd very much prefer to avoid using
My understanding is that the Chapter admin would create an event where the https://developers.google.com/calendar/api/concepts/sharing#inviting_attendees_to_events explains this (and a few other things) |
Related: #1004 in that we want to make sure we and Google collectively only send one reminder. Also, I think people would expect unsubscribing to prevent them getting any notifications, including ones from Google Calendar. |
@allella since the Google calendar integration seems to be working, I think we have enough functionality for the MVP. As we get user feedback, I'll add more issues, but I think this issue is resolved. |
Quincy was targeting a feature to integrate with Google Calendar to update events when they are changed or cancelled.
In the Nov 7th meeting, we talked about not using Google Auth, or depending on Google services.
In that case, iCal and similar techniques are the way to add a calendar to various calender tools.
The text was updated successfully, but these errors were encountered: