The traditional way to send a calendar invite is to define the event, attach or hyperlink to an ICS file in email, and user can accept or decline the event for the date/time pre-defined in the event definition.
The use case we have is for a notification or reminder for a self-scheduled event sent via email, meaning the user should be able to schedule the event or task at a time of their choice. An example is an online training that they need to take before end of year, but it does not matter when they take it. However, we want the user to be able to click on an hyperlink, which should open their default calendar, and add the task/event to their calendar at a time of their own choosing. (This way the task/event gets scheduled and is expected to have a better completion rate rather than being forgotten. Users can cut and paste the information into the calendar but this friction leads to most ignoring that email)
We would like to be able to define the Subject and duration (say 30 mins) and some body content such a link to the online course or webinar recording when the scheduled time comes. Ideally the only thing the user should have to select is a time slot.
First, is it possible to do this by a simple URI scheme? Has a standard developed for calendar events, say something with the simplicity of mailto:example@foo.com?subject=hello world
which opens up the default mail client with recipient and subject prefilled but for calendars? (cap or webcal were noted but support seems sparse)
The bulk of our users are Office 365/ Outlook users.
If not, we can create a custom web app which would spit out an ICS or similar attachment. A hyperlink in email will point to the web app with query parameters that would contain the information needed to create the even, and the web app would generate the calendar file with the proper mime type which will open the user's calendar app. In this case, how should one construct this ICS file so that the actual scheduling happens in the user's native calendar where they can review their open slots? Our stack is C#/.NET so pointers to any libraries suited to this task would be appreciated.
Any other ideas or feedback on how you may have addressed this requirement?