Google Calendar for Business has a feature where you can set up "Appointment Slots". It works as follows:
Create an event on a calendar, and select the "Appointment slots" option. You can configure the slots to have a certain duration, or be a single slot. See screenshot:

Then, you can share a link to the calendar where people can book time on your calendar in those appointment slots:

I would like this feature in Nextcloud. I know that the calendar is backed by CalDAV and I have a feeling that this is not an actual feature of CalDav, so it would require some significant changes to the calendar app itself, or possibly not even be part of the calendar app at all?
Is this a feature that would be welcome in the default Nextcloud calendar? If so, I am willing to help implement it (I will need guidance though, I have no familiarity with developing Nextcloud apps).
Just found a small project, which works with Nextcloud: https://github.com/samjaninf/appointment-planer
Some possible requirements:
The idea of this module is to enable my customers to do booking of appointments with me (the operator of the cloud) on their own. For that
Do do so, that module has to run on the cloud server and needs to provide two web interfaces:
The result should be a browser interpretable calendar view, which can be integrated to a web page - as well as CalDAV client readable output.
Config interface needs at least these controls:
User interface therefore needs these entries:
@dgsiegel is this issue basically what is similar to Calendly? If you can share any screenshots of the Calendly flow or how you use it, that would be great :)
Here is an example of how Outlook does it on mobile, starting in Mail:

@dgsiegel is this issue basically what is similar to Calendly? If you can share any screenshots of the Calendly flow or how you use it, that would be great :)
Yes, that's about right. Ideally, instead of sending out an invite I could send a link, where people not registered on my Nextcloud instance can select a time and date for a meeting.
I haven't really used Calendy, but from my understanding, it dosen't seem like Calendy has as much control over which blocks of time are available for people to book.
A lot of times I don't want people to be able to book my time, even if I don't have an official event on my calendar (for example, maybe that is my "get in the flow" time, and I don't want that to necessarily be on my calendar, but I don't want people to book appointments in the middle of it). I couldn't figure out how to do that in Calendy, which is why I ended up using Google Calendar instead.
I have missed this bug. I got thinking about this last year. Being able to assign a subset of slots from the calendar and the recipient can choose by himself on what to use. It is used in a few CRM apps for sales people to book appointments
Here is screenshots from pipedrive. One of the options is to schedule fixed slots.
These are for my calendar and creating a visible slot:





This is for the recipient:

I might have clients that would be able to chip in for this feature.
@jancborchardt now you have screenshots from pipedrive (which works like calendly)
A good thing would be if you could setup several different links with different type of slots.
Let me repost something from another ticket here so it doesn't get lost:
It's best if we tackle this issue incrementally:
Once those two things are implemented, adding slot support will be much easier.
@nolens im going to check if they would like to add to it :)
Can this be closed and continued at https://github.com/SergeyMosin/Appointments
As long as your app is relying on private APIs and might hence break with any update of Nextcloud, I cannot accept it as a solution.
If we want to implement this properly, using only public supported APIs, there is no way around implementing the server changes i discussed further above.
I know it's not a solution integrated with Nextcloud and it will probably take time to achieve a production ready solution.
But open source project such as https://github.com/alextselegidis/easyappointments could help to get some inspiration.
I would really like to see such tool integrated to Nextcloud.
@georgehrke RE: public supported APIs
NC public APIs do not support creating/updating events from _public pages_, however this can be done without private APIs via sabre/dav plugin and \Sabre\CalDAV\Backend\BackendInterface (https://github.com/nextcloud/3rdparty/blob/a70e51b4cce278e006090d91cf26d616cb73e911/sabre/dav/lib/CalDAV/Backend/BackendInterface.php#L6) interface, which is public and well documented.
info.xml:
...
<sabre>
<plugins>
<plugin>OCA\Appointments\SabrePlugin</plugin>
</plugins>
<collections>
<collection>OCA\Appointments\SabreCollection</collection>
</collections>
</sabre>
...
SabrePlugin.php
...
$this->server = $server;
$server->on('method:GET', function(RequestInterface $request, ResponseInterface $response) {
$url = $request->getPath();
if(strpos($url,"appointments")===0){
$user=$this->getUserFromPath($url);
/** @var \OCA\DAV\CalDAV\CalendarHome */
$calendarHome=$this->server->tree->getNodeForPath('calendars/'.$user);
if($calendarHome instanceof \OCA\DAV\CalDAV\CalendarHome) {
/** @var \Sabre\CalDAV\Backend\BackendInterface */
$backend = $calendarHome->getCalDAVBackend();
if($backend instanceof \Sabre\CalDAV\Backend\BackendInterface){
\OC::$server->getLogger()->debug(var_export(
$backend->getCalendarsForUser('principals/users/'.$user),
true));
// $backend->updateCalendarObject(...)
// ...
}
}
}
});
...
This way my app would not directly use your private APIs (unless you are planing to get rid of sabre).
If implemented this way, does this resolve the "Private API" issue ?
This would be so much easier if the _BackendInterface_ would be exposed somewhere, maybe in ICalendar perhaps.
@georgehrke Public APIs - New Plan:
I can actually just set up an authentication backend for requests from my public form page as per https://github.com/nextcloud/server/blob/dc0ee357a42763738cb13d368b25c1b94619cbca/apps/dav/lib/Server.php#L115 and then just send AJAX requests directly to ...remote.php/dav/calendars/... before the form is submitted.
This solution uses zero private APIs and once implemented should satisfy the "no private APIs" requirement. Please confirm.
@SergeyMosin That would still require largely refactoring your app, so it's using the CalDAV interface via javascript, right?
Generally speaking, this is also a feature i would like to see directly in the calendar app, not in the 3rdparty app.
I want to push for basic write support in OCP instead so that we avoid this kind of issues (Polls app also would be interested, and probably many more).
Generally speaking, this is also a feature i would like to see directly in the calendar app, not in the 3rdparty app.
I would like this as well, but I feel like we wouldn't want to have as much as features and options @SergeyMosin app has.
I want to push for basic write support in OCP instead so that we avoid this kind of issues (Polls app also would be interested, and probably many more).
I'm totally in favour of adding write-support for \OCP\Calendar as well, but that will require us to break our current simple event format. It just takes the first VEVENT block and turns it into a simple key-value array. So it doesn't support calendar-objects with multiple events (like recurrence-exceptions, etc.)
Let me create a tech-debt ticket in the server for that. Will link it later.
That would still require largely refactoring your app, so it's using the CalDAV interface via javascript, right?
Yes, it would become some sort of hybrid of two sabre plugins (one for custom auth from public pages and one for updating calendar objects) and the nextcloud frontend.
Let me create a tech-debt ticket in the server for that. Will link it later.
Here we go: https://github.com/nextcloud/server/issues/20154
Hi @jospoortvliet , just a heads up that there's no bounty on this on bountysource's website here
@brymut I believe it was a six-month limited bounty, but I'm not 100% sure. The bounty source website does not provide much information about it:

Yep, quite possibly
Sorry guys, I have no idea how this works exactly... These changes are done by a bot using my account so I actually am clueless ;-)
Most helpful comment
Generally speaking, this is also a feature i would like to see directly in the calendar app, not in the 3rdparty app.