Meetings and public rooms


Meetings are a special type of conferences with multiple participants, with the following characteristics:

  • They have a URL is which know by every participant

  • They have a start and end date

  • They have a predefined list of attendees (participants)

  • They can be created via a REST API

A meeting is accessed via a URL which is only valid for that specific meeting. This is URL is called the “meeting URL” and its starting path can be configured in the service configuration.

The meetings service allows users to schedule meetings where participants can be invited. The service will take care of sending a meeting invitation via email or SMS. For every email meeting invitation, an ICS (calendar) file is also sent as an attachment. This calendar file includes the meeting’s name, its URL, organizer and start and end dates.

Capabilities required

Users that want to create and manage meetings must have the meetings capability assigned. If no meetings capability is assigned for a user, that user will be unable to schedule new meetings (but he still will be able to join someone else’s meetings).

Configuring the service

The service is configured via the wac.ini file. It contains a top-level entry named [meetings] that holds the service’s details.


Default value




(mandatory) The host that will be used to build invitation’s links. If not given, the public IP of the Quobis AS will be used.



Notification mechanisms used to inform the user about the meeting creation or update. Can be “email”, “sms” or both.



The format to use for the meeting URL. If unique, the meeting ID is used. If user the creator user’s alias is used.



Where to find the sms and email template folders, relative to config/



Needed token to short links by using a Bitly account. If left blank, this feature won’t be used.


Available languages

Languages of the templates that will be used. Currently available ones are es, en and ca. By default, all will be used.



If specified, the platform will send a reminder to every participant in the meeting N minutes before the start time. Additionally, a push notification is also sent, unconditionally



If specified, the meeting invitations will contain information in order to join the meeting through a regular phone call

A configuration example of the meetings section in the wac.ini is shown below:

 2linkHost = https://meetings.wac/
 3inviteMechanisms[] = email
 4inviteMechanisms[] = sms
 5; templatePath = meetings/tpl
 6; shortenerToken = '<ACCESS TOKEN>'
 7; languagesTemplates[] = es
 8; languagesTemplates[] = en
 9; remindBefore = 10
10; pstnExtension = +34999999999

Email notifications

When creating a meeting and specifying a valid email in the request, email notifications are sent to participants. These emails are sent using the optional mailer service. Templates are used in order to specify how the content of the email will look like. You can refer to the details reading the Email service documentation.

SMS notifications

When creating a meeting and specifying a valid phone (MSISDN format) in the participant information, SMS invites are sent to participants. Those SMS are sent using the optional sendsms service. To define how the invites look like, templates are used. You can refer to the details reading the SMS notifications documentation.

Mobile push notifications

Meetings makes use of the PushNotifications service for sending out a reminder of the meeting using mobile providers’ push notifications service. The push payload will be:

1 {
2     "type": "meeting-reminder",
3     "info": {
4             "id":,
5             "name":
6         }
7 }

Please note that above payload is not admin-configurable.

Templates definition

One important aspect of the meetings service is the ability to configure the contents of the meeting notifications sent to participants. The service allows to configure them depending on the channel used to send them (SMS or email, currently) and the meeting’s defined language. Templates are defined in the given templatePath from the configuration (relative to ./config) and are structured in the following manner (default values used):

 +- meetings/
     +- tpl/
         +- email/
         |   +- en/
         |   |   +- {from,html,subject,text}.hbs
         |   +- es/
         |       +- {from,html,subject,text}.hbs
         +- sms/
             +- en/
             |   +- {from,text}.hbs
             +- es/
                 +- {from,text}.hbs

As you can see, the file hierarchy is defined by the mechanism used to send the meeting invitation (sms or email) and, underneath, the language of the meeting. This way we have full control on how to build the meeting invitation. Additionally, for each of the mechanism, each of its parts is described in one single file for increased flexibility. For instance, in the case of the SMS, the sender of the SMS can be defined in the from.hbs file while the contents of the SMS itself, are defined in the text.hbs file. In the case of the email we have more fields available, so there are more files to be customized. Particularly for email we have both text.hbs and html.hbs. This way the email will be properly rendered in all email readers, no matter if they support HTML or not. All the templates are defined using hbs files, which are Handlebars files. Handlebars is a third party library that helps users to define templates by separating the JavaScript code from the HTML or text template itself. See the linked website above for further information.

Apart from the standard Handlebars tags and syntax, we provide the formatDate and formatTime helpers to localize the date strings to the meeting invitation’s language. For example:

Your meeting {{ }} will start on {{ formatDate
meeting.validSince }} at {{ formatTime meeting.validSince
hour="numeric" minute="numeric" hour12=false timeZone=”Europe/Madrid” timeZoneName="short" }}

You can see the full list of parameters that can be fed in the Intl documentation, under the options description. The data passed to the templates is the following:


The email address or phone number of the recipient

Name of the meeting.

Id of the user creating the meeting.


Domain of the user creating the meeting.


Username of the user creating the meeting.

Email address of the user creating the meeting.


Timestamp of when the user creating the meeting was created.


Timestamp of when the user creating the meeting last logged in.


Role of the user creating the meeting.


Capabilities of the user creating the meeting.


Mobile phone number of the user creating the meeting.


Number of the user creating the meeting.


Alias of the user creating the meeting.


Ids of the users participating in the meeting.


Default language for the meeting.


List of the participants in the meeting.


Timestamp of the date since which the meeting is available.


Timestamp of the date until which the meeting URL is available.


URL of the meeting.


Meeting DDI extension.

Please have a look at the provided templates in config/meetings/tpl to explore all the possibilities. A sample template may be:

<p>Hi {{ party }},<br/> you have been invited to a meeting via our communications platform.</p>
<p>To join us, please
<a href="{{ meeting.url}}">this link</a>
{{#if meeting.ddi.extension}} or dial {{meeting.ddi.extension}} and introduce the code{{}}{{/if}}.</p>
<p>If you cannot make it, please answer "No" to the RSVP.</p>

Calendar file

When sending a meeting invitation by email, a calendar file is attached. This file is formatted according to RFC-5545. The main fields to note that are included are: meeting’s starting and ending dates and times, meeting’s name, URL and organizer. The organizer is an RFC-defined value of the format Name <email@address.tld>. This service will use the meeting’s creator username as Name and its email address. If no email address is defined, a dummy will be used.

Logs: known log messages

Error messages

  • error: Invalid linkHost: the configuration parameter linkHost must be set to a valid URL. Do not include a trailing slash.

  • error: Unable to send reminder for meeting: meetingId. Cause: msg: an error occurred when trying to send a meeting reminder using Push Notifications. Please review Push Notifications service’s logs.

  • error: Error while processing onSessionRegistered: an error occurred when a user joined the meeting’s URL. The full error must be printed following this line, which will give you details about the precise failure.

  • error: Error while processing onSessionDown: an error occurred when a user disconnected from the meeting. The full error must be printed following this line, which will give you details about the precise failure.

  • error: Process onDeleteUser failed: an error occurred when a deleted user was removed from its meetings. The full error must be printed following this line, which will give you details about the precise failure.

Warning messages

  • warn: unable to load resource for sms|email (msg): the service was unable to find the meeting invitation generator for the indicated mechanism. Probably the meeting invitation mechanism was misspelled or is not available.

  • warn: Cannot send the meeting invitation, not available: a meeting invitation was not sent because the meeting created by the application was configured to do not send a meeting invitation from the sippo-server instance. This message is a confirmation that this server MUST NOT send a meeting invitation.

  • warn: Cannot send meeting invitation by email: Email service not available: the meeting invitation cannot be sent by email because there’s no such service enabled.

  • warn: Cannot send meeting invitation by sms: SMS service not available: the meeting invitation cannot be sent by SMS because there’s no such service enabled.

  • warn: Failed to invite participant INVITE to meeting NAME(id): the service was unable to send the given meeting invitation.

  • warn: The sms template TPL is too large. It will be sent several SMS by meeting: the configured template, named TPL is too large to fit one single SMS. It will span across several SMS. This message only appears when the languagesTemplates variable is set.

  • warn: Field <FIELD> hasn't been used in TPL: if an optional field <FIELD> available for the configured template TPL has not been used, this warning is issued. This message only appears when the languagesTemplates variable is set.

Public rooms

Public rooms are conferences that are always available and that don’t have a start or endtime. It’s URL is created “on the fly” and there user can access the conference room even if they are not authenticated. Public rooms are reachable under the following path: http://your-system-domain/c/any-identifier. Any identifier that follows this pattern will result in the setup of a conference room that is reachable by any user who knows this URL.


Public rooms can be a quite handy resource but the system administrator needs to take into account that anyone can use the service.