Nextcloud/Appointments
1. Select a Calendar (Simple Mode)
Manage Appointment Slots > Calendars > Main Calendar
Main Calendar - when you create new appointments they are placed here and are shown in the your public page(s). It is recommended to create a separate calendar.
Calendar for booked appointments - if this calendar is different from the main calendar, once an appointment is booked it will be moved here.
2. Enter Organization Info
See the "User/Organization Info" section for required Name, Location and Email Address settings.
3. Add Appointments
Please use the Manage Appointment Slots > Add Appointment Slots dialog or see "External mode" below.
1. Set "Schedule Generator" settings2. Use "3 Dot" dropdown menus3. Adjust times/Add break times by dragging slots up/down4. Duplicate the day's slots by clicking "Copy to Next" day option in ellipsis menu
Timezone Options:
Calendar Timezone - your calendar's timezone will be used. This option should be used if you are booking events where people participate from different locations(timezones), like phone calls or video conferences. Appointment time is "casted" to visitors local time.
Example: 12:00PM America/New_York timezone appointment based in New York
Local (floating) - LOCAL(FLOATING) TIMEZONES ARE NOT SUPPORTED
4. Customize Public Page
GDPR Compliance
Any text in the "GDPR Compliance" field will trigger display of the "GDPR" check box. Plain text (no html) will work as is, but if you need to add a link to a privacy policy please read on... For the link to work properly you should separate it from the <label> element, and the <label>'s "for" attribute MUST be set to "appt_gdpr_id", example:
<label for="appt_gdpr_id">Some text </label><a href="PRIVACY_POLCY_URL">Privacy Policy</a><label for="appt_gdpr_id"> some more text.</label>
Appointment's Title
If an event's title/summary starts with an "_" character then the title will be displayed next or below the time in the form. For example: _Language Lessons will be displayed as "Language Lessons"
Style Override
Insert custom <style></style> element to override default page style. Try something like this for example:
<style> #header{ background: transparent !important; } #content{ background: linear-gradient(to bottom, #ff00cc, #333399) !important; } #body-public #content { min-height: 100%; } form{ background:whitesmoke;box-shadow: 3px 3px 25px 0px rgba(0,0,0,0.75); } .srgdev-ncfp-form-header{ border-bottom: 3px solid #961AB1; } </style>
5. Email Settings
Email Attendee when the appointment is modified and/or deleted - Attendees will be notified via email when their upcoming appointments are updated or deleted in the calendar app or via some other external mechanism. Only changes to Date/Time, Status or Location will trigger the "Modified" notification.
Email Me when an appointment is updated - A notification email will be sent to you when an appointment is booked via the public page or an upcoming appointment is confirmed or canceled via the email links.
Skip email validation step - When this option is selected the "... action needed" validation email will NOT be sent to the attendee. Instead the "... Appointment is confirmed" message is going to be sent right away, and the "All done" page is going to be shown when the form is submitted.
useDefaultEmail - Most instance of NC won't have the particular configuration allowing to send emails on behalf of organizers. Therefore, the default email address as per Mail Settings is used, and your address is added in the "Reply-To:" header field. If your Nextcloud configuration supports sending out emails for individual users, Admins can override the 'useDefaultEmail' directive like so: occ config:app:set appointments useDefaultEmail --value no
Additional Email Text - this text is appended as paragraph to the end of validation and confirmation emails. Currently only pain text is allowed, HTML will be escaped.
Enable sharing and pass along the public page link Public Page [...] > Show URL/link. Upcoming appointments will be available on the booking page.
7. Check Status in the Calendar
Once an appointment is booked it will be visible in the calendar with "⌛ pending" status. The attendee can "✔️ Confirm" or "Cancel" the appointment via an email link, the status change will be reflected in the calendar upon page reload.
8. Time slot mode
Simple mode - Use provided "Add Appointment Slots" dialog to add "available" time slots. Recurrence is not suported in this mode.
Weekly Template - in this mode you can set a weekly template and it will be repeted automatically.
Destination Calendar (Weekly Template) - Booked/pending appointments will be placed into this calendar.
Check for conflicts in… - these calendars will be checked for conflicting events in addition to the Destination Calendar.
Appointment Properties - Duration: if you set multiple duration choices for an appointment, then a visitor will be able to pick on of them. Title: if this is set then the title will be displayed next or below the time in the form.
External mode - Use Nextcloud's Calendar App or any other CalDAV compatible client to add "available" timeslots. Most recurrence rules are supported in this mode. Two calendars are required: a "Source Calendar" to keep track of your availability timeslots and a "Destination Calendar" for booked appointments.
Source Calendar (External mode) - Any event with "Show As" a.k.a. "Time As" a.k.a. "Free/Busy" a.k.a. "Time Transparency" set to "Free" (RFC5545 specs "TRANSP:TRANSPARENT") will be available for booking in the public form. Most recurrence rules are supported. Also see Require "Appointment" category.
Destination Calendar (External mode) - Booked appointments will be placed in here. In addition to booked appointments, any events in this calendar marked as "Busy" will prevent conflicting timeslots in the "Source Calendar" from appearing in the public form. Also see Require "Appointment" category.
Optimize recurrence (External mode) - If recurrent events are used in the "Source Calendar" the start (DTSTART) date will be pushed forward once in a while in order to improve performance.
Require "Appointment" category (External mode) - When this option is set only events with with "Category" set to "Appointment" (in Engilsh) will be considered.
Auto-fix "Source" timeslots (External mode) - Some calendar apps do not allow users to set Free/Busy parameter, resulting in timeslots not being available for booking. If this option is enabled AND the first character of the Description/Notes is "_" then the Free/Busy will be set to "Free" and "Appointment" category will be added automatically when a new event is created in the "Source" calendar.
9. Talk App Integration
Talk rooms/conversations can be automatically created when an appointment is confirmed. FLOATING timezones are not supported.
Guest password - when this option is selected Talk rooms will be password protected. An autogenerated pseudo random password will be sent to attendees along with a room/conversation link.
Customize email text - you can override default email message. There are two tokens available, Vorlage:Url and if you use password protection Vorlage:Pass, they will be replaced with the room's URL and the password if used.
For example, this:
Please use this link Vorlage:Url to contact me.Your password is: Vorlage:Pass
will look similar to this:
Please use this link https://my_domain.com/index.php/call/to6d6y4e to contact me.Your password is: dj984jjr
"Meeting Type" form field - when this option is enabled, a <select> drop-down similar to the one bellow will be added to the form. If a visitor selects an 'In-person' meeting, a Talk room for this appointment will NOT be created.
Select meeting type In-person meeting Online (audio/video)
Type change email text - if this field is not empty and has two tokens Vorlage:Link text (can contain any text) and Vorlage:New type (MUST be new_type), then this text will be attached to the email and attendees will be able to switch their meeting type simply by clicking the link Vorlage:Link text.
For example, this:
Click Vorlage:Here to change your appointment type to Vorlage:New type.
will look similar to this:
Click here to change your appointment type to Online (audio/video).
Talk rooms will be created and deleted automatically when a meeting type changes.
10. iFrame/Embedding
1. If the iframe is under a different domain use occ to set allowed Frame Ancestor Domain:php occ config:app:set appointments "emb_afad_YourUserName" --value "your.domain.com"2. Email confirm/cancel buttons need to be redirected.Use occ to set base URL for the host page with a query parameter available at the end of the URL:php occ config:app:set appointments "emb_cncf_YourUserName" --value "your.domain.com/page_url?some_param_name="Example using PHP:... <?php $src='PROVIDED_EMBEDDABLE_URL'; if(isset($_GET['some_param_name'])){ // Email Confirm/Cancel button was clicked $src=substr($src,0,-4).'cncf?d='.urlencode($_GET['some_param_name']); } echo '<iframe src = "'.$src.'"></iframe>'; ?> ...Nextcloud occ: https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/occ_command.htmlFrame Ancestors: https://w3c.github.io/webappsec-csp/#directive-frame-ancestors
11. Contributor Features
Contributor feature can be unlocked by obtaining a contributor key in any of the following ways:# Contribute any amount to this app development or sponsor a feature over at the Funding page.
- Contribute code via a pull request on GitHub.
- If you are a member of the Nexcloud team on transifex.com please contact me directly.
- Contact me if any of the above methods do not work for you.
Once you receive your key/code you can enter it in the Settings > Contributor Key section.