Quobis WAC release notes
v4.4
v4.4.0
Released 17th September 2021
New features
meetings: improve email and SMS notifications’ configuration
meetings: react to deleted users that participate in meetings
meetings: add timezone information to meeting templates
meetings: allow complete disabling of notifications
xmpp: provide connection information in hosts-meta files
sipmappings: assign SIP mapping on login from a pool
conflog: timezone information support for participants
billing: billing information service
user: return 409 on conflict when updating/creating instead of 403
wac: inform web app root URL via hosts-meta files
presence: ensure no duplicate subscriptions are created
db: do not recreate already-existing indexes on restart
mwi: send subscribe requests to SIP proxy on session recover
Bug fixes
users: fix updating mobile phone field
mwi: fix handling of new sessions
user: fix phone number normalization and remove duplicated country code
resolver: fix to allow resolving users with * in their username
Known issues
The call ends for all the participants when trying to adding a new one and this call is not set up (QA-2530)
v4.3
v4.3.4
Bug fixes
meetings: stop parsing users meetings field
v4.3.3
Released 10th June 2021
Bug fixes
sipmappings: assign sipMapping automatically in login
sippools: change collection name to use md5 instead of plain domain
v4.3.2
Released 2nd June 2021
No changes
v4.3.1
Released 28th May 2021
Bug fixes
QSS
room-update
event is not being sent when there is a ACL modification (QA-2276)
v4.3.0
Released 14th May 2021
Backend
New features and changes
Global
A new permissions service that allows to setup policies per domain and user and consume them via the REST API.
Added “screensharing” capability by default in the domain creation
An event
speakerChanged
is generated when a participant in a conference starts or stops speaking. This event can be consumed from the SDKs to provide this information to the rest of participants. Available in the Javascript SDK.An event is generated when a participant starts/stops sharing his/her screen
Authentication
Added support for OpenID as an external authentication service
Deployment
New feature “Blue-Green deployment” that allows to have two enviroments in parallel. That means that it can be used to migrate users from existing environment to a new one in order to test that everything works properly. This migration can be done on a per user basis updating the info of the user by using the Service API.
Meetings
Ability to set and start time, end time and meeting password
Recording
New set of recording permissions that allow fine-grained control on who can record what
Three new levels of quality recording
Recordings can be provided merged or separately into single files.
Telephony and PBX
Added MWI (“Message Waiting Indicator”) integration with SIP-based external voicemail platforms. In addition, the voicemail SIP address is now also reachable via a generic destination string (“voicemail”).
Bug fixes
Fixed a bug that prevented SIP users to leave the conference room under some circumstances (QSS-284)
Unneeded Credentials added to STUN ICE servers in the Dispatcher (QA-1824)
Conference log update events are sent as many times as a user appears as candidate in a call (QA-1923)
Improve log line in QSS registry (FOEHN-591)
DataPipe export “symbol” instead of the proper enum (QA-1864)
Meeting PIN is not being send on the SMS (QA-1938)
Users removed from the system remain listed as members of the chat groups to which they belonged (QA-1942)
Active conferences has not an associated chat (QA-1921)
All alerts are displayed as send/received at current time when alerts tab is opened (QA-1943)
Push notifications (iOS): sound property must be set to default (QA-1854)
MWI does not sent sipMapping password in unregister (QUOBDEV-1059)
Wrapper restarts if the plugindata received is empty (QA-1749)
QSS-watchdog-registry stop working if database connection is lost (QSS-276)
An anonymous user can delete itself via API (SRV-1722)
Anonymous users can modify their own data via API (SRV-1723)
Alert iOS Pushes are not working properly (QUOBDEV-827)
Calls from the native app do not connect (QA-1668)
Push notifications of chat non-text messages are not received (QA-1658)
Contacts marked as favourite loose its value when reloading the browser (QA-1615)
Alert template parameters are set to “null” when updating any of their values (QA-1692)
Contacts API returns a 404 error when a user tries to update a contact (QA-1573)
Known issues
Users removed from the system remain listed as members of the chat groups to which they belonged (QA-1942)
Meeting PIN is not being send on the SMS (QA-1938)
Active conferences has not an associated chat (QA-1921)
The xmpp-server doesn’t connect to postgresql after an environment crash (QA-1863)
A malformed requests in erebus should respond with 400, not 500 (QA-1768)
Users can have its role changed to anonymous even if their domain doesn’t allow it (QA-1760)
Allow WAC to locally query itself instead of using public URL when validating an access token (QA-1761)
Credentials OpenAPI definition missing query parameter (QA-1762)
There are some users registered with multiple Firebase push tokens (QA-1755)
When a disconnected user’s ID is called, the call is redirected to PSTN (QA-1757)
The response codes are different depending if the callee is a pstn or a domain user (QA-1754)
Technical improvements
Updated restify to 8.5.1 to fix security vulnerabilities (QUOBDEV-824)
Automatically fix npm security vulnerable packages (QUOBDEV-823)
Drop apn dependency in the QSS (QUOBDEV-822)
Make addressbook service compatible with new static contacts service (QUOBDEV-819)
Deprecate old dnie service (ROAD-1328)
Deprecate old click2call service (ROAD-1327)
Deprecation of sippo-cob-static (ROAD-1326)
Wac <> xmpp events must be sent in chronological order (QUOBDEV-769)
Optimization of framerate for screensharing (SIPPOJS-739)
The inviteMany method should has the same behaviour than the regular invite
When groups are requested via the Addressbook service, the received id in the response is the groupId
v4.2
v4.2.7
Temporary recording files are not deleted when configured to record in “audio only” mode (QA-1681)
v4.2.5
ConferenceLogs events were not being sent to the caller when the call was canceled (QA-1850)
Missing “sound” property default value for iOS notifications (QA-1854)
v4.2.0
Released January 2021
Backend
New features and changes
Global
A SIP load balancer service is now available to route incoming SIP calls to a pool of audiomixers using several call routing strategies (round robin, priority based, etc…) for better performance and scalability.
Support to SIP authentication using INVITE & REFER authentication has been added so to the SIP proxy.
A new service called “Erebus” has been included in the architecture. Erebus is an API gateway that implements a websocket multiplexer that enables clients to access all of the system services using just one single connection. It reduces login and setup time (less TLS handshakes) and reduces the required bandwidth. This new way of connecting to the server is backward compatible.
Three client websocket connections (into wrapper, sippo-server, and QSS services) have been multiplexed via Erubus into a single websocket connection. This change reduces significantly the call setup and connection setup times. More connections will be passed via Erebus in the upcoming versions.
Added a websocket keepalive message in the websocket connection from the clients in order to prevent the drop of the connection by a firewall. This ping message is automatically sent by the SDKs each 75 seconds and is answered by the system (wrapper service). The 75 seconds value is hardcoded and cannot be changed.
Asterisks are allowed as part of the username and alias fields.
Authentication
Support to several redirect URIs in the oAuth2 authentication process in order to support several type of devices (desktop browser, mobile browser, native app, etc…) with a single oAuth2 host.
Conferences
Added a new functionality “agent assigner” that allows the dispatching of incoming calls to a set of users depending on several criteria. The assignment decision can be taken by an external system (typically, a contact-center or PBX) or locally by the Quobis wac.
A “404 Not Found” SIP error code is sent as a failure message when user does not exist in the system or if the domain in the Request-URI does not match any of the domains handled by the recipient of the request, as defined in RFC-3261.
SDK clients can now register into a SIP or IMS network via a SIP REGISTER. A valid registration on the system will triger a delegated SIP registration into an external SIP network using the ims-credentials values. Please note that this configuration has been deployed in stand-alone configuration only.
Conference URLs path for public rooms is now configurable and set by default to
htttps://wac-public-uri/c/public_room
. This change has been done to isolate meeting URL from conference URLs
Contacts
A major refactor has been made in order to provide a easiest way to manage and consume contact information. Some methods have been deprecated in the Javascript and iOS SDK. Two new services, “UserContacts” and “Addressbooks”, have been created as result of this refactor.
Deployment
Support to “Lightweight Kubernetes K3s” deployments (www.k3s.io) in addition to standard Kubernets K8s deployment. K3s is a highly available, certified Kubernetes distribution designed resource-constrained systems. Quobis recommends k3s deployments for lab and testing deployments.
Deployment using docker-compose is no longer supported.
The audiomixer, SFU and SIP-proxy services are now running as pods inside the Kubernetes cluster.
K8s cluster can check the health status of the XMPP, o2p, sippo-server, wrapper, dispatcher and QSS containers.
A storage quota parameter (maxStorageQuota) can be set in the installation process via the Ansible installer. This parameter is optional, applies to the entire namespaced and defaults to 60GB for the disk space used by databases, uploaded files, chats and backups. It the parameter is removed, there is no space limitation.
Media
Ability to configure the system to use dynamic TURN credentials to prevent fraudulent usage of the media server and DoS attacks. This functionality is configured by setting two new parameters in file
quobis-dispatcher-config.js
(“secret
” and “expirationHours
”)
Meetings
Meetings can be optionally password-protected for better privacy and security. This password protecion applies both for system users and external users as well.
Meeting organizer automatically receives the meeting invitation email when the meeting is created.
Meeting URLs path for public rooms is now configurable and set by default to
htttps://wac-public-uri/m/meeting_ID
. This change has been done to isolate meeting URL from conference URLsAdded “
VALARM
” support into the attached ICS file of the meeting invitation emails as defined in RFC2445. That allows the calendar client to raise a reminder before the meeting starts. This time can be configured in the “remindBefore
” parameters, which defaults to 10 minutes.
Messaging
Join/leave group announcements are now available in the chat history.
Notifications
Two different Callkit push certificates can be configured for the same APNs: one for VoIP pushes and another for chat pushes.
Mobile push notification payload now includes contact information of the caller party, following the standard order (contact name, display name, username and finally phone number) so the applications don’t need to resolve that information locally.
Recording
Added parameter “recordingType“ that allows the selection of which media streams are recorded: audio and video, only audio, only video or nothing at all.
Audio and video raw files used during the preprocessing phase are deleted from the temporary folders after they are successfully processed if the configuration parameter “clean_temporary_files” in config/config.json is set to true
Security
Ability to set a client IP source ranges to be excluded from rate-limiting (configuration option: limit-whitelist). This is useful in some specific scenarios like contact-centers where most of the traffic is coming from the same IP range.
A password policy can now be set with some rules such as minimum length, minimum number of letters/numbers, lowercase/uppercase usage, symbols and spaces, password blacklist, etc…) in order to comply with ISO-27001 requirements. These policies are system-wide and can be configured at file
config/passwordpolicies.json
Restricted avatar uploads to base64 format URI with images to prevent potential XSS attacks.
Added a homoglyph check to reject usernames that might look alike to the existing one, in order to avoid homograph attacks and typosquatting. For example, that happens where the Latin character “a” (Unicode U+0061) is replaced with the Cyrillic character “а” (Unicode U+0410)
Bug fixes
System was not taking into account the participants limit value when we have users with different media options (JW-63)
It was possible to create and domain with an empty domain name which leaded to a login failure (SRV-1692)
System does not start when the agent assigner services is enable and there are not agents defined (SRV-1674)
Meeting invitations are not sent to guests that are a user contact but don’t belong to the user’s domain (QUOBDEV-654)
Meeting invitations are not sent if the user domain is written completely with uppercase letters (QUOBDEV-651)
Calls transferred to a SIP destination caused a wrong entry in the conference log in parallel-SIP scenarios which also caused a crash in the iOS SDK (QSS-281)
Calls were not correctly setup after a redirection from one audiomixer to another with parallel-sip configuration and HA setup (QSS-288, QSS-234)
Users were allowed to set another username in uppercase as their alias (SRV-1610)
Incoming SIP that matched a
wac-ims-credentials
that starts with a (+) symbol were rejected (QSS-179)Filters
createdAtBefore
andcreatedAtSince
were not working as expected, as they usedLessThanOrEqual
orGreaterThanOrEqual
filters rather than``LessThan`` andGreaterThan
filters (SRV-1664)The call does not progress when calling to a ringing group and the first user of the group is offline (QSS-266)
An ongoing call ends if the user logs out from another session (QSS-270)
Making a call to a user group with a space in its ID gets no answer and ends after a timeout (QUOBDEV-694)
Known issues
Service sippo-exporter crashes sending a GET to
api/queues
(DEVOPS-301)Presence remains as “busy” if a user is in a call and the connection is closed abruptly (ASLO-33)
Technical improvements
Mobile push notification implementation has been completely redesigned in order to comply with the last iOS policies and to accomodate both hybrid and native applications. All push notifications are now sent from the sippo-server services, including chat notifications which were previously sent by the XMPP server.
Unify user group events into a single one (group-updated)
REST API
New features and changes
Global
REST API documentation is now described using the OpenAPI format.
Auditing
Added /kmanage/k8s/getlogs endpoint to gain get logs of an specific pod (
kubectl logs <pod-name>
)Added endpoint /kmanage/loglevel to set the log level of /kmanage endpoints between levels “Info”, “Warn”,”Error”,”Debug” and “Trace” without service restart
Added two endpoints to manage system backups:
/kmanage/backups/getbackups
: lists all backup file available in the system/kmanage/backups/downloadbackups
: download available backup files
Added endpoint /kmanage/reporting/getreport that gets reports of the last 24 hours.
Conferences
Added endpoint /kmanage/siponhold to obtain conference object from
roomId
and sent it to the audiomixer service to implement a SIP reINVITEAdded several endpoint for the “Agent assignment” functionality:
/kmanage/agentassigner/list
that gets every agent assigner entries/kmanage/agentassigner/delete/{id}
that deletes and agent assigner element/kmanage/agentassigner/showroute/{id}
that shows the route of this entry at the agent assigner/kmanage/agentassigner/addroute
that creates a new route to the agent assigner element
Contacts
Added endpoint UserContacts for better contact management.
Added endpoint AddressBooks for better contact management.
Deployment
Added endpoint
/kmanage/template
to get swagger template file in JSON formatAdded several endpoints to gain visibility over the Kubernetes cluster status:
/kmanage/k8s/clusterstate
: lists the cluster state (kubectl get pods -o wide
)/kmanage/k8s/clusterservices
: lists the running services (kubectl get svc --all-namespaces -o wide
)/kmanage/k8s/getlogs
: gets logs of a specific pod (kubectl logs <pod-name>
)
Meetings
Added boolean field
isPasswordProtected
to the meeting object that indicates if a meeting is protected by a password.Added query parameter
userId
to filter meetings to which an specific user has been invited.
Messaging
Added endpoint
/kmanage/xmpp-server/getuserschat
that returns a list of users with sent chats and the number of sent chat by each user (1-by-1 chats and group chats)Added an endpoint to delete sent chats by an specific user (
/kmanage/xmpp-server/deleteuserchats
)Endpoint /xmpp/roster/{username}: replaced by full subset:
xmpp/push
xmpp/push/register
/xmpp/push/unregister
Notifications
Endpoint
/pushNotifications/{userId}
replaced by`/pushNotifications/byUserId/{userId}
:
Recording
Added endpoint
/kmanage/getrecord
to list all recording files available in the system.Added endpoint
/kmanage/downloadrecord
to download a recording file.
Users
Added endpoint
/kmanage/usergroup/logout
to force logout of every participant of a given user group.Added endpoint
/kmanage/user/location
to obtain the location of a user.
Bug fixes
Information exposure through error message on
/sapi/o/token
(SEC-59)Unauthenticated user could query presence information via
/sapi/presence/wac-user
(SEC-61)Log message returned in response to endpoints credentials and domains (SEC-68)
Potential denial of service on
/sapi/sessions
requests that results in “504 Gateway time-out” after around three minutes (SEC-62)Information leakage in
/sapi/filesharing
endpoint (SEC-69)
v4.1
v4.1.0
Backend
New features
Global
Global improvements regarding the internal work of the system. The unified system based on a message-broker allows to add more services and remove them easily, giving more flexibility to the architecture. The main change comes from latency optimization, based on a ws-proxy that allows a unique system connection with better and improved performance.
Auditing
Regarding monitoring software it was enhanced with log view and troubleshooting filters navigation. No more consoles to extract logs. Just use the logs, cross metrical performance KPIs data with direct container logs and get your info easy and direct.
Conferences
Attended transfer (available only in the Javascript SDK in this version).
Deployment
TLS 1.3 support is included. Your apps are now more secure, more efficient, more reliable.
NGINX was selected as ingress-controlled for the cluster, so some enhances here from the original Traefik media
SIP early media support and more options regarding the codec selection and media bandwidth allocation for calls. Also were applied some audio improvements to reduce audio-noise on calls.
Meetings
Meetings now include more options to add flexibility to the meeting invites. REST API was improved to support more use cases
Messaging
The main change here is the storage of chat conversations. Enhanced reliability, performance, flexibility to store on the backend architecture.
Notifications
Improved and resolved multiple issues with chat notifications.
Users
Ability to reach SIP endpoints for anonymous users.
A list of other minor features follows:
Add error logs in QSS when “resolvePush” is set to true and it is not possible to reach Push service in sippo-server
CDR (call detail record) display and download in Sippo manager
Integrate services logs viewer in Sippo manager
Generic filter in /conferences/ endpoint to retrieve list of conferences
Screen sharing support in the desktop application
Allow more than 9 video participants on a conference
Prevent certain types of files (JS, HTML and any potentially harmful type) from being transferred (filetransfer)
Avoid credentials being leaked by SAPI endpoints
CORS configuration mechanism
Backend server resource reach-ability service
Transition from Socket.io to plain Websocket
Apply traffic security and anti-DoS measures to k8s ingress (nginx)
Support to multiple audiomixers (high availability)
Include the busy tone when call is rejected
Background noise reduction techniques in SippoSDK-JS and webphone
Provide audio toggle for mobile applications
Ability to change the default bandwidth of the video flows
Early media support with sippoMS.sfu
Automatic SMS / email notification to users when creating a meeting
Improve mail templates for more customization on body and headers
Chat / call / SIP agent assigner (SDK, REST endpoint)
Migrate XMPP storage to SQL based system
Ability to enable/disable “conference chats” in Application Server
Group chat push notifications -
Restrict registration to a single endpoint
Add REFER support on the SIP integration
SIP/WebRTC: On hold music for held participants
Add SIP header manipulation for AudioMixers
v4.0
v4.0.0
The list below shows the overview of the main features added since the previous version at each category. A detailed list is provided in the next subchapter.
Backend
New features
Global
The internal architecture has been separated into Sippo AS and Sippo MS. Besides that, new features have been implemented as a number of microservices -interconnected by a high performance message broker- to improve resilience and scalability.
On the client side, two new mobile SDKS have been added for iOS and Android operating systems.
Auditing
Sippo manager has been released to provide better logging and monitoring capabilities. Logs can also now be sent to an external ElasticSearch server for analytics and troubleshooting.
Authentication
Added delegated authentication against Microsoft ADFS servers and upgraded Google oAuth to work with newer Google versions
Conferences
Added a number of PBX-like features such as ringing groups, attended transfer, unattended transfer, onHold, etc… That means that Sippo wac can provide signalling capabilities on its own, without requiring a third-party PBX o SIP backend.
A new service named “conferencelog” allows also to retrieve the conferences where a user has participated, including those where multiple participants are joining and leaving during the conference and also including low-level information on invited participants, rejected and accepted invites, transferred users, etc..
Integration with external SIP backend has been also improved with a “SIP parallel leg” approach. That means that service providers can easily add collaboration to exiting voice-only networks.
Room management is more powerful in this version, as it’s possible to mix and match PSTN users, Sippo users and guest users in the same room. We’ve also changed the associated logic so room ownership is now handled in a more efficient way.
Contacts
Phonebook service has been added to better handle shared contacts and group contacts. In addition to personal contacts and domain contacts, administrators can now define a set of contacts that are assigned to specific users or groups. Users can also manage their own private phonebooks in addition to the ones created by the administrator. Improved mobile and directory synchronization of contacts is also included in this version.
Deployment
Deployment over Docker infrastructure is now fully supported and it’s the recommended deployment choice for trials and PoCs. Automation has been done with Ansible scripts that don’t require any manual installation. On the other hand, deployment over Kubernetes infrastructure is now the default choice for production environments. Deployments over public cloud are now also supported in Amazon AWS and Microsoft Azure.
On the testing side, a number of load testing scripts and functionality testing scripts are available using third-party QA tools, in order to test the deployment before production.
Media
Sippo MS has been included into the architecture so a third-party WebRTC media server is now an optional choice. This media server can handle H264, VP8 codecs and is also able to interact with traditional voice networks using G711 codecs.
This version also enables screen sharing from Chrome and Firefox without requiring a plugin (desktop only).
Meetings
Meetings have been refactored to make them more flexible and manageable, so that they can have a DDI assigned to access the meeting from PSTN or PBX (dial-in).
Messaging
This version incorporates a completely redesigned messaging service, that allows to have permanent chat between users, personal chat rooms, predefined chat rooms and other improvements. It also adds new user capabilities so administrators can allow or disallow messaging functions to users and user groups. That means for example that some user can have chat functions or are able to create groups, while others cannot do that.
Notifications
Mobile notification have been improved both on iOS Callkit and Android Callservice, with deeper integration with the existing javascript SDK and the new native SDKs. One to one Incoming chat messages are also notified with a push message.
Recording
This version allows to configure codec specifications for stored recorded file. In addition, new integration options with storage services allows to actively notify about a file ready to be stored (or share with participants).
Users
Users can now be classified into groups (usergroups). That allows new use case such as to define ringing groups to call all participants of a predefined group, and also to have predefined phonebooks.
Find below a complete list of new features included in this release:
Connector to AD/LDAP for oAuth authentication
Ability to delegate authentication with Google oAuth
Ability to delegate authentication with MS ADFS
Domains can have default contacts that are searchable to every domain user
Added abstraction layer to support different database schemas
Ability to distribute Sippo AS and MS microservices into several hosts
Ability to customize recording video container
Recording support for h264 and vp8
Added “SIP parallel leg” functionality to interop with SIP networks
Sippo manager: user management (create, edit, update, delete)
Sippo manager: dashboard with business KPI and system status graphics
Send audio and video clips
Ability to send DTMFs on the SIP channel on conferences (RFC2833 and RFC4733)
Added “Agent assigner” service to interact with external services in contact-center scenarios.
Toggle camera support for SippoSDK-JS and SippoSDK-iOS
Ephemeral chat group for anonymous rooms
Support for getNativeDisplayMedia: Firefox, Chrome
Recording support for H264 and VP8
REST conference status exposition
Support to transfer of PSTN calls to other Sippo users or PSTN
Improved security login mechanism
Improved signalling headers to identify “to” field in parallel-SIP environments
oAuth2 tokens can have now a expiration time and argument name
Support to remote logging into an Elastic Search instance
User alias enhances: editable by waccli and allow dots in users’ aliases regular expression
REST API
This version of the REST API has a number of new methods in order to allow external systems to interact with the new backend functionalites available in this realease, specially around conference management, user management and phonebook management.