User Groups

Introduction

In addition to the classification of users into domains, Quobis WAC allows the creation of group of users that have something in common or share some characteristics. This is a quite common practice for example in business environments, where users are classified into departments or teams, but it also applies to a lot of other use cases where we need to combine users into different sets. Quobis WAC provides a number of functionalities to ease the management of these groups and to automatically include group calling and group chatting features.

In Quobis WAC, an “user group” is a set of system users (also referred to as “users group participants”) that has the following characteristics:

  • It is given a name (a string)

  • It has an associated chat group

  • It is a “callable” entity

  • It has one or more associated phonebooks

The associated chat group, which has the same name as its associated user group, is automatically synchronized with the group participants. That means that if the owner adds/changes/removes an user from the userGroup, the system will automatically add/change/remove that user from the ChatGroup. On the other hand, when a user is added to a user group by someone else, the system will include that chat group in the list of groups that this user belongs to.

_images/usergroups.png

Calling to an user group

The fact that groups are “callable” means that a audio or video call be placed to them. A user group can also be a destination of a call transfer (attended or direct). In order to do that, the ID that needs to be called when making the call is the user group ID.

Please note that this behaviour means that the callee does not make a call to each group participant, it’s the signaling server which makes that on its behalf. That also means that the caller does not know the actual users that he/she is calling when dialing into the user group. This call is registered in the call details records as a regular call, being the callee the user group ID.

Calling strategies for ringing groups

The participants of an user group are ordered, according to its position in the database (as stored in JSON format in the “participants” field in the /usersGroup/{groupId} endpoint). This order is taken into account when calling to an user group. The system will start calling the participants of the user group, one after another, following the order in the group. This behaviour is set according to these two parameters of the QSS:

"ringingGroup": {
            "stepDelay": 0,
            "maxSteps": 5
     },

This is the effect of these two parameters:

  • Parameter stepDelay: defines the number of seconds to wait before calling the next participant in the list. Defaults to 0 seconds, maximum value 60 seconds.

  • Parameter maxSteps: defines the maximum number of participants that will be called. For example, if we have a usergroup with 10 participants and the value of maxSteps is 5, then only the fist 5 participants will be called. This parameter is only taken into account when te value of stepDelays is different from zero. Its default value is five participants.

This functionality has been implemented as follows:

  • If “stepDelay” is set to zero, the calling strategy is like a simultaneous ringing.

  • If a user answers the call, it will be connected to the caller party. The remaining calls will stop ringing inmediately.

  • If an user rejects the call, that action won’t be notified to the caller party and the call will keep ringing for the rest of participants.

  • If no one accepts the call (not answering or rejecting) the caller will receive a “No answer” message or “Busy” messages (depending on the answer of the last called participant)

_images/usergroups_ringing.png

Other special characteristics of the user groups are:

  • User groups have a owner, which is a participant who can add, change or remove users from the usersGroup that he/she has created.

  • A user group can only have one owner and it cannot be changed after it’s created.

  • A participant can be owner of one of more user groups.

  • A participant can belong to one of more user groups.

  • There is no limit in the number of users in a UserGroup

  • The associated chat group is not a standard one so no actions can be done via the REST API with these chats. The system will remove it automatically only after the user group is removed. Attempting to interact with these type of chat groups via the REST API will thrown an error.

  • In the event that a user is transferring or calling to a group to which he/she belongs to, he/she won’t be included in the callee list. For example, if Alice belongs to a user group with Bob, Carol and David, and Alice calls into that user group, only Bob, Carol and David will get an incoming call.

  • An incoming call to a user group will end when the global call timeout is reached (as set in the configuration variable “watchdog.invites.expiration” of the QSS.watchdog-invites service) even if the “maxSteps” number of participants has not been reached.

Known issues

Multi-device environments: please note that, in case that a user has active sessions in several devices, each device will be considered as a participant. That means that, in the case of sequential ringing, the call will ring first on one device, then on his second device, etc… instead of jumping to the next participant. This behaviour may be fixed in future versions”.

Configuration

The service needs to be enabled in the wac.ini file in order to work, with the following configuration (it is activated by default after a standard deployment). There is no specific configuration rather than activating the service as shown below.

[usersgroup]
backend[] = UsersGroup

[backend.UsersGroup]
module = UsersGroup

This service can be reached via the Quobis WAC REST APIs where a number of methods are available to create a group, get a list of groups and other CRUD operations.

Log messages

These are the log messages associated with the user groups management:

  • error: Specified participant does not exist: an error occurred when trying to add a participant that doesn’t exist yet

  • error: User ${user.id} is not the owner of the group: an error occurred when a user tries to manage a group in which he is not the owner.