Skip to content

Self Care Portal 4.4.x Technical Release Notes

Self Care Portal 4.4.0

Build Info

The released package has the following build information:

bash
Version: 4.4.0
Last build time: Thu Aug 27 2026 11:11:58 GMT+0000 (Coordinated Universal Time)
Last commit: 830f25cc3

Minimal versions of the other modules

The APIO BroadWorks Gateway must be at least in 1.14.1.

The APIO Core must be at least in 2.18.0.

Specific upgrade improvements

Breaking change in the configuration

The parameter responseGroupSizeLimit, that was at root level, has been moved into a new structure to clearly indicate that it relates only to the Groups widget in the Tenant Dashboard.

bash
"tenant": {
    "dashboard" : {
      "responseGroupSizeLimit":  200
    }    
}

The legacy parameter is still supported but is deprecated. If both are present only the new one will be used.

Workflows delivered

The following workflow packages have new versions due to changes or new APIs:

  • F4B - Akixi: first official delivery
  • F4B:
    • f4b_tenant_post_cloud_connection and f4b_tenant_get_cloud_connections to handle MS Teams OC connections
  • F4B - MS Teams:
    • The DR workflows have some improvement (never delivered) for delete Trunk Users
    • Most of the DR startup events have their url changed to include direct-routing in them
    • The legacy OC call flows have been migrated to a 'f4b_' name and improved to use one App Data, instead of 2, as in DR mode
    • Most of the OC startup events have their url changed to include operator-connect in them
    • f4b_macro_user_delete_msteams, f4b_macro_teams_integrated_client: removed non-breaking spaces
  • Self Care Portal:
    • bwksenh_usercreation, bwksenh_user_addDevice_ZTC: removed non-breaking spaces

The following packages have not changed since 4.3.0 but are provided again as for all minor releases:

  • F4B - AD Synch
  • F4B - Webex
  • F4B - NIMS
  • F4B - Nemo

Updates of BroadWorks GateWay configuration

If Dubber Group Administrators are needed:

bash
"CALL_RECORDING_ENABLE_GROUP_ADMIN": true

If the asynchronous retries for Dubber are needed:

bash
"CALL_RECORDING_THREADING": true

and https://bw-gw-config.bxl.netaxis.be/configuration_objects/backends/call_recording.html#service-data

If it is requested to keep dub points

bash
"CALL_RECORDING_KEEP_DUB_POINT": true

Others

If it is requested to remove OCI error messages from the backend answer

bash
"REMOVE_OCI_ERROR_MESSAGE" : true

If it is requested to allow the End User to modify his details

bash
"ALLOW_END_USER_UPDATE_PROFILE": "Restricted"

If the Group Admin needs to see all the Enterprise numbers for the End User Outgoing CLI

bash
"GROUP_ADMIN_ALLOWED_GET_ENT_NUMBERS": true

Together with the portal configuration

bash
"users": {
    "outgoingCliAllowTenantLevelNumbers": true
}

New labels

Here are the new labels introduced in 4.4

bash
"v4_4": {
    "Allow outgoing route point call": "Allow outgoing route point call",
    "Are you sure you want to delete {{count}} restrictions from the list": "Are you sure you want to delete 1 restriction from the list?",
    "Are you sure you want to delete {{count}} restrictions from the list_plural": "Are you sure you want to delete {{count}} restrictions from the list?",
    "Assign number": "Assign number",
    "Call Recording Enabled": "Call Recording Enabled",
    "Delete trunk failed": "Delete trunk failed",
    "Due to tenant size, widget is disabled; click on 'More groups' for full list": "Due to tenant size, widget is disabled; click on 'More groups' for full list",
    "Due to tenant size, widget is disabled; click on 'More sites' for full list": "Due to tenant size, widget is disabled; click on 'More sites' for full list",
    "Fetch cloud connection trunks failed": "Fetch cloud connection trunks failed",
    "MS Teams account": "MS Teams account",
    "MS Teams user ID": "MS Teams user ID",
    "Refresh status": "Refresh status",
    "Relaunch": "Relaunch",
    "Retry": "Retry",
    "Select only from my group": "Select only from my group",
    "This user cannot be assigned as additional line": "This user cannot be assigned as additional line because has reached the limit of additional devices",
    "callRecordingCustomerInfo": {
      "Add customer information": "Add customer information",
      "Added group call recording customer info": "Added group call recording customer info",
      "Call Recording Customer Information (Group)": "Call Recording Customer Information (Group)",
      "Company Name": "Company Name",
      "Customer Information": "Customer Information",
      "Failed adding group call recording customer info": "Failed adding group call recording customer info",
      "Failed retrieve group call recording customer info": "Failed retrieve group call recording customer info",
      "Failed to delete group call recording customer info": "Failed to delete group call recording customer info",
      "Primary Account Administrator": "Primary Account Administrator",
      "Sub Domain": "Sub Domain"
    },
    "cloudConnections": {
      "Fetching cloud connection trunk failed": "Fetching cloud connection trunk failed",
      "MS Teams is active for your account": "MS Teams is active for your account",
      "Something did go wrong, please try again": "Something did go wrong, please try again",
      "Sorry, MSTeams is currently not enabled for your account": "Sorry, MSTeams is currently not enabled for your account",
      "This type of cloud connection is already added": "This type of cloud connection is already added",
      "This type of cloud connection is not supported": "This type of cloud connection is not supported",
      "This type of cloud connection is not supported yet": "This type of cloud connection is not supported yet",
      "Trunk creation failed": "Trunk creation failed",
      "Updating cloud connection trunk failed": "Updating cloud connection trunk failed",
      "deleteCloudConnectionTrunkGroup": "Are you sure you want to delete the trunk? This action cannot be undone.",
      "logOnMSteams": "Log on MS Teams",
      "msTeams": {
        "A tenant can only be used once on this platform": "A tenant can only be used once on this platform",
        "As this Enterprise is onboarded in MS Teams Direct Routing": "As this Enterprise is onboarded in MS Teams Direct Routing",
        "Check Onboarding Wizard": "Check Onboarding Wizard",
        "Client ID": "Client ID",
        "Display name": "Display name",
        "Do the setup": "Do the setup",
        "Enable integrations": "Enable integrations",
        "Failed to fetch msTeams status": "Failed to fetch msTeams status",
        "Failed to get MS Teams info": "Failed to get MS Teams info",
        "Failed to load MS Teams users": "Failed to load MS Teams users",
        "Failed to update MS Teams info": "Failed to update MS Teams info",
        "Get": "Get",
        "Integration": "Integration",
        "Integration setup": "Integration setup",
        "Link MS Teams": "Link MS Teams",
        "MS Teams Cloud Connection": "Microsoft Teams Cloud Connection",
        "MS Teams Cloud Connection successfully updated": "MS Teams Cloud Connection successfully updated",
        "MS Teams Cloud Connection update failed": "MS Teams Cloud Connection update failed",
        "MS Teams Tenant ID": "MS Teams Tenant ID",
        "MS Teams account details": "MS Teams account details",
        "MSteamsUnavailableLicenses": "MSteamsUnavailableLicenses",
        "Microsoft graph integration": "Microsoft graph integration",
        "New MS Teams user": "New MS Teams user",
        "O365 admin": "O365 admin",
        "Onboarding": "Onboarding",
        "Please change the ": "Please change the ",
        "Please link this user to a MS Teams User": "Please link this user to a MS Teams User",
        "Powershell integration": "Powershell integration",
        "Provide": "Provide",
        "Save": "Save",
        "Secret": "Secret",
        "Secret length should be equal 40 symbols": "Secret length should be equal 40 symbols",
        "Set a domain for the tenant and validate it against Microsoft": "Set a domain for the tenant and validate it against Microsoft",
        "Start now": "Start now",
        "There are no more available licenses in MS Teams": "There are no more available licenses in MS Teams",
        "To use MS Teams you must have a phone number assigned": "To use MS Teams you must have a phone number assigned",
        "Trunk number creation failed": "Trunk number creation failed",
        "UPN": "UPN",
        "Unassign failed": "Unassign failed",
        "Update Azure App Details": "Update Azure App Details",
        "Updated successfully": "Updated successfully",
        "We cannot link your Microsoft Tenant to this account because the tenant is already linked to another subscription": "We cannot link your Microsoft Tenant to this account because the tenant is already linked to another subscription",
        "You are missing the MS Teams user ID": "You are missing the MS Teams user ID",
        "Your MS Teams account can be created": "Your MS Teams account can be created",
        "a global admin account and let us add the integration": "a global admin account and let us add the integration",
        "accountBeingCreated": "Your account is being created, it can takes several minutes. Please check again later",
        "accountCreated": "This step is required to validate your new domain as being voice capable. Please, be sure your Microsoft tenant owns a valid E1, E3 or E5 license. This license will be released after the step is successfully completed. It usually takes around 2 minutes to complete this step.",
        "accountTitle": "Create a dummy account and associate an E1 / E3 / E5 license to it",
        "activationProcess": "(*) the activation process will create a dummy 0365 user and assign a spare E1, E3 and E5 license. After activation the user will be deleted again.",
        "assignMSteamsNumber": "Select the MS Teams user that you want to assign each number to ",
        "assignPhoneNumberAdmin": "Please assign a phone number to this User in order that he can use MS Teams.",
        "assignPhoneNumberUser": "Please ask you administrator to assign you a phone number to be able to use MS Teams.",
        "azureApp": "Azure AD application",
        "confirmUnlink0365Tenant": "Are you sure you want to unlink your O365 from our platform? We will remove all phonenumbers, direct routing configurations and our Graph Application. This action cannot be undone. You will have to start from scratch",
        "createMsTeamsRouting": "Create MS Teams routing policies and remove associated license from the dummy user",
        "createMsTeamsRoutingError": "Create MS Teams routing policies and remove associated license from the dummy user failed. Please, wait for a couple of minutes and try again.",
        "createMsTeamsRoutingStep": "In this final step, we remove the license from the dummy user created before and configure an SBC entry and call policies on your Teams space to properly route the calls. It usually takes around 15 minutes to complete this step.",
        "descTextPart1": "If you want our platform to configure direct routing for your tenant, we need to setup a dedicated ",
        "descTextPart2": "By granting this application the correct rights we will be able to access your tenant through",
        "downloadFile": "Please download the powershell script with the button below and then run it using a global admin account. If you receive SecurityError, open powershell as administrator and play the following command 'Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass'.",
        "errorAccountCreate": "The dummy account couldn’t be created or you are missing a valid E1, E3 or E5license. Please verify you have a valid license and try again.",
        "firstAddIntegration": "Please first add an Integration. Without this we cannot make the required changes in your account",
        "linkNeedForMSteams": "It is needed to link the user to a MS Teams User. Please, ask you administrator to link your user to a MS Teams user",
        "linkService": "Linking this service to Microsoft Teams will do following changes to you Microsoft account:",
        "linkYourAccount": "Link your Microsoft Teams to our service. As soon as you link your tenant, you will be able to assign numbers to users (teams).",
        "manualSetup": "Manual setup - Powershell (1/2)",
        "manualSetupPW": "Manual setup - Powershell (2/2)",
        "manually": "manually",
        "microsoftGraph": "Microsoft graph: to list your domains, your employees and their O365 licenses",
        "msTeamsUsersName": "MSTeams user's name",
        "newDomain": "New domain will be added & activated",
        "newDomainCloudConnectionError": "The new domain for your tenant couldn’t be created or verified. Possible causes are a DNS failure, a lack of rights or a technical problem using Microsoft’s services. Please, retry in a few minutes. If the problem persists, please, contact our support.",
        "newDomainCreated": "A new domain is being set for your tenant and Microsoft is being asked to verify it. It usually takes around 1 hour to complete.",
        "notInitiatedMessage": "Sorry, this page is available only if your status is not initiated yet.",
        "powerShellDirectRouting": "Powershell: configure direct routing, manage resource accounts, manage phonenumber assignment of users",
        "powershell": "powershell",
        "provideClientInfo": "Please provide here the client ID and secret of the integration you’ve just setup:",
        "saveFile": "Please save the client ID and secret generated by the script. You will need this in the next step.",
        "script that you can run": "script that you can run",
        "temporarily": "temporarily",
        "to an admin of another tenant and try again": "to an admin of another tenant and try again",
        "weAreSorry": "We are sorry!",
        "willLinkTeamsTenant": "We will link your teams tenant to our platform (SBC)",
        "willSetupVoicePolices": "We will setup the voice policies and routes accordingly"
      }
    },
    "error": {
      "An exception has interrupted the session; Your data is not lost, a reload usually restores the connection": "An exception has interrupted the session. Your data is not lost, a reload usually restores the connection.",
      "Code": "Code",
      "Connection Lost": "Connection Lost",
      "Hide Technical Details": "Hide Technical Details",
      "Reload Page": "Reload Page",
      "Retry without reloading": "Retry without reloading",
      "Show Technical Details": "Show Technical Details",
      "The application encountered an unexpected problem": "The application encountered an unexpected problem",
      "Timestamp": "Timestamp"
    }
  }

New features

Refactoring of Feature Options tab

The different call flow types had their own Features Options tab that were almost an identical copy orf each other.
A new shared component is replacing these dedicated components for simplification of the code.

No new configuration parameter.

No new translation label.

Add translations for audit log columns

The audit logs pages had only part of their fields translated, the static ones. Now all of them are available in the translation mechanism.

No new configuration parameter.

The new labels are in the dynamic.json

bash
  "changeLogs": {
    "All": "All",
    "Created": "Created",
    "Duration": "Duration",
    "id": "id",
    "Last update": "Last update",
    "Type of change": "Type of change",
    "Site ID": "Site ID",
    "Object id": "Object id",
    "Change": "Change",
    "User": "User",
    "Status": "Status"
  },

It must be noted that if in the future the APIO Core is returning different fields, this list will have to be adapted.

[End user Main phone Additional line] Failure to check line availability to allow assignment+ bad error message

When assigning additional lines to a Main Phone, there was no preliminary check that the target user had still free SCA.
Leading to potential errors when trying to add the extra line.
From this release, the portal is checking if the target user hasis still free SCA and does not allow to add him as extra lines if not.

No new configuration parameter.

The new label in the translation.json:

bash
  "v4_4": {
    "This user cannot be assigned as additional line": "This user cannot be assigned as additional line because has reached the limit of additional devices",
  }

Group Details - Voice Portal Settings - editable or not by configuration

New configuration options to allow to disable the edition of some of the parameters of the Voice Portal.

bash
"group": {
    "voicePortal": {
      "canEditPhonenumber": true,
      "canEditExtension": true,
      "canEditOutgoingCli": true,
      "canEditActiveStatus": true,
      "canEditDetails": true
    }
}

No new translation label.

End User: Extension, outgoing phone number - editable or not by configuration

Introduced the possibility to restrict the modification of the extension and/or outgoing CLI phone number of an End User.

bash
"users": {
    "canEditExtension": true,
    "canEditOutgoingCli": true
}

No new translation label.

Allow an end user to modify part of his settings

Introduced the possibility foe an End User to edit part of his details.

bash
"users": {
    "userCanEditDetails": false
}

If this feature is enabled in the portal (disabled by default), it is needed to also configure the BW GW to accept these PUT requests.
It is controlled by the following Configuration Setting:

bash
"ALLOW_END_USER_UPDATE_PROFILE": "Restricted"

No new translation label.

Department CLI Name - editable or not by configuration

bash
"group": {
    "department": {
        "userCanEditDetails": true
    }
}

No new translation label.

GroupDepartments Add/Delete by configuration

bash
"group": {
    "department": {
        "canAddInstance": true,
        "canDeleteInstance": true
    }
}

No new translation label.

End User Devices - New configuration options for Ringing and Activation features

bash
"users": {
    "deviceManagement": {
        "canEditRingingOptions": true,
        "canEditExtraDevicesOptions": true
    }
}

No new translation label.

Dubber Group Administrator

bash
"groupAdmins": {
    "callRecordingSupport": false
}

If this feature is enabled in the portal (disabled by default), it is needed to also configure the BW GW to accept these requests.
It is controlled by the following Configuration Setting:

bash
"CALL_RECORDING_ENABLE_GROUP_ADMIN": true

a new label is added:

bash
  "v4_4": {
    "Call Recording Enabled": "Call Recording Enabled"
}

DNIS - Management configuration options

Allow the make some configuration options read-only in the DNIS edit modal window. Both for CCP and RP.

bash
"routePoints": {
    "dnis": {
      "canEditExtension": true,
      "canEditName": true,
      "canEditOutgoingCli": true,
      "canEditPhonenumber": true
    }
},
"callCentersPremium": {
    "dnis": {
      "canEditExtension": true,
      "canEditName": true,
      "canEditOutgoingCli": true,
      "canEditPhonenumber": true
    }
}

No new translation label.

This feature is the very first step fo the Akixi integration to allow preliminary tests, including connectivity, of the solution.

It had been drafetyd in 4.1 but is only delivered officially in 4.4 due ti long delays to have a working environment with Akixi.

It is offering to End Users a button to open Akixi web portal in a new tab.
It is available as soon as there are call center standard, call center premium or call center supervisor licenses assigned to the End User.

The feature is introducing a new module externalAnalytics.

This feature introduces also 1 new optional banners (one by level).

It must be noted that the new labels are prefixed 4_1_1 as it was the original planned version for the introduction of this feature.

There is 1 new entries in the app.routes:

  • userExternalAnalytics

The feature relies on the workflow and startup event

http
GET /api/v01/{proxy}/session/akixi_sso    f4b_akixi_sso

Part of the package F4B - Akixi

Important note: initially the feature was also for Group Admin and Tenant Admin. But it has been discovered that Akixi does not do auto-provisioning for these type of users, only for agents and supervisors. Therefore, it has been descoped of this first phase of integration. Some translation lables have been kept in the translation.jso for futur usage.

move app.routes.json to object

It is now possible to define the app.routes into an object %ui_id%/routes such as it was already possible with the configuration using %ui_id%/config.

The behavior is not exactly the same: the portal will try to fetch %ui_id%/routes:

  • if it finds it, it will use it and will ignore the app.routes.json
  • if it does not find it or is an invalid json, it will fetch the legacy app.routes.json file

This new mechanism allows to define the routes in one single place and avoid the risk of human mistakes of adapting the same file on several servers.

End User Additional Lines/Devices Add/DeAssign configurable

Extend the logic associated to the existing parameters allowing/preventing to add/delte (extra) devices to the multi-lines feature.

No new configuration parameter.

No new translation label.

Do not allow to save custom announcement without announcement

In several pages it was possible to select "custom announcement" and save without selecting one. The backend was of course rejecting this with an error message. In other pages the check was done.

No new configuration parameter.

No new translation label.

Perform Logout using POST instead of GET

No new configuration parameter.

No new translation label.

User Outgoing CLI: allow to choose numbers from the whole Enterprise

bash
"users": {
    "outgoingCliAllowTenantLevelNumbers": false
}

Important: this features must also be enabled at BW GW level

bash
"GROUP_ADMIN_ALLOWED_GET_ENT_NUMBERS": true

No new translation label.

Add support of Transfer To Mailbox option for IVR menus

New possible value Transfer To Mailbox in the IVR lenu configuration

New translation label :

bash
"Transfer To Mailbox": "Transfer To Mailbox"

Note: it has been added at root level where the other IVR actions were.

Rework the Group and Tenant Dashboards

This huge refactoring of these 2 Dashboards has been done in the following way:

  • the widgets are now displayed as soon as possible in a loading state instead of waiting that the data for all the widgets has been received.
  • the widgets render as soon as possible what they can already render: their structure and the static labels.
  • as soon as a widget receives its own data, it finishes its rendering of the dynamic part of the widget
  • the 4 widgets displaying counters are using new APIs at BW GW level that calculates the counters at its level to speed up to E2E time to render.
  • for the Group Dashboard as we do not know how many call flow widgets will be displayed before the data are received a fake set of loading widgets are displayed and then replaced by the real ones
  • the data loaded for the Dashboard are kept in cache to be re-used with an API call if moving to another page and then back to the Dashboard.
  • Before when the responseGroupSizeLimit was used and an error was reported, the Groups widget was hidden. Now it is shown with a message explaining why there is no Group listed.

We have set of new configuration parameters For the quantity of call flows statistic widgets displayed during the loading of the data.

bash
"group": {
    "dashboard" : {
      "statisticsWidgetDefaultLength":  4
    }    
}

The parameter responseGroupSizeLimit, that was at root level, has been moved into a new structure to clearly indicate that it relates only to the Groups widget in the Tenant Dashboard.

bash
"tenant": {
    "dashboard" : {
      "responseGroupSizeLimit":  200
    }    
}

The legacy parameter is still supported but is deprecated. If both are present only the new one will be used.

The duration of the keeping in cache of the data for the dashboards is configurable by the following parameters (in seconds).

bash
"dataCaching": {
    "groupDashboard": 30,
    "tenantDashboard": 30
}

Two new labels have been added for the Groups widget on the Tenant Dashboard when responseGroupSizeLimit triggers an error.

bash
"v4_4": {
    "Due to tenant size, widget is disabled; click on 'More groups' for full list": "Due to tenant size, widget is disabled; click on 'More groups' for full list",
    "Due to tenant size, widget is disabled; click on 'More sites' for full list": "Due to tenant size, widget is disabled; click on 'More sites' for full list"    
}

Group Call Recording - onboarding form - first version

This is the first step for the Call Cabinet integration.
This page is hidden by default because there is no Call Cabinet provisioning logic associated yet. Therefore, it can not be used yet.

Its display is controlled by the following configuration parameters and it MUST remain disabled with 4.4.

bash
"group": {
    "dashboard" : {
      "statisticsWidgetDefaultLength":  4
    }    
}

It has also its own data caching duration parameter.

bash
"group": {
    "callRecordingCustomerInfo"  : {
      "enabled": true
    }  
}

A new set of labels have been also introduced.

bash
"v4_4": {
    "callRecordingCustomerInfo": {
      "Add customer information": "Add customer information",
      "Added group call recording customer info": "Added group call recording customer info",
      "Call Recording Customer Information (Group)": "Call Recording Customer Information (Group)",
      "Company Name": "Company Name",
      "Customer Information": "Customer Information",
      "Failed adding group call recording customer info": "Failed adding group call recording customer info",
      "Failed retrieve group call recording customer info": "Failed retrieve group call recording customer info",
      "Failed to delete group call recording customer info": "Failed to delete group call recording customer info",
      "Primary Account Administrator": "Primary Account Administrator",
      "Sub Domain": "Sub Domain"
    }
  }

MS Teams improvements : OC + DR (not testable for now)

This very buf task was to have on Self Care Portal code base that supports both MS Teams Operator Connect and MS Teams Direct Routing. And not two distinct branches and deliveries as before.

Note that the DR code was still in 3.x format so it had to be refactored.

WARNING, that the tests on this feature were very limited due to environment constraints.
They must be tested again on the test env of a customer who have all the needed setup before being put in production.

The logic is based first on configuration parameters that indicate if one mode or both are supported in this deployment.
When you add a MS Teams Cloud Connection to a Tenant, if one mode is configured it is automatically selected. If both modes are enabled the user need to choose. One Tenant (Enterprise only) can be only in one mode.

Then, once a mode is selected, the "existing" specific logic (onboarding wizard, dedicated pages) is triggered. With some improvements in the user experience.

For the configuration, the merge of the old OC config and the old DR config forced to define a new structure as they were not compatible.

bash
  cloudConnection: {
    canAddCloudConnection: true,
    msTeams: {
      modes: {
        direct_routing: true,
        operator_connect: true,
      },
      interval: 10000,
      directRoutingOptions: {
        autoCreateTrunkUser: false,
        linkTrunkUser: true,
        autoCreateHpbxUser: false,
        linkHpbxUser: true,
      },
    },
  },

A full new set of labels has been added replacing most of the legacy ones of the new ones

bash
"v4_4": {
    "Fetch cloud connection trunks failed": "Fetch cloud connection trunks failed",
    "MS Teams account": "MS Teams account",
    "MS Teams user ID": "MS Teams user ID",
    "Refresh status": "Refresh status",
    "Relaunch": "Relaunch",
    "Retry": "Retry",
    "cloudConnections": {
      "Fetching cloud connection trunk failed": "Fetching cloud connection trunk failed",
      "MS Teams is active for your account": "MS Teams is active for your account",
      "Something did go wrong, please try again": "Something did go wrong, please try again",
      "Sorry, MSTeams is currently not enabled for your account": "Sorry, MSTeams is currently not enabled for your account",
      "This type of cloud connection is already added": "This type of cloud connection is already added",
      "This type of cloud connection is not supported": "This type of cloud connection is not supported",
      "This type of cloud connection is not supported yet": "This type of cloud connection is not supported yet",
      "Trunk creation failed": "Trunk creation failed",
      "Updating cloud connection trunk failed": "Updating cloud connection trunk failed",
      "deleteCloudConnectionTrunkGroup": "Are you sure you want to delete the trunk? This action cannot be undone.",
      "logOnMSteams": "Log on MS Teams",
      "msTeams": {
        "A tenant can only be used once on this platform": "A tenant can only be used once on this platform",
        "As this Enterprise is onboarded in MS Teams Direct Routing": "As this Enterprise is onboarded in MS Teams Direct Routing",
        "Check Onboarding Wizard": "Check Onboarding Wizard",
        "Client ID": "Client ID",
        "Display name": "Display name",
        "Do the setup": "Do the setup",
        "Enable integrations": "Enable integrations",
        "Failed to fetch msTeams status": "Failed to fetch msTeams status",
        "Failed to get MS Teams info": "Failed to get MS Teams info",
        "Failed to load MS Teams users": "Failed to load MS Teams users",
        "Failed to update MS Teams info": "Failed to update MS Teams info",
        "Get": "Get",
        "Integration": "Integration",
        "Integration setup": "Integration setup",
        "Link MS Teams": "Link MS Teams",
        "MS Teams Cloud Connection": "Microsoft Teams Cloud Connection",
        "MS Teams Cloud Connection successfully updated": "MS Teams Cloud Connection successfully updated",
        "MS Teams Cloud Connection update failed": "MS Teams Cloud Connection update failed",
        "MS Teams Tenant ID": "MS Teams Tenant ID",
        "MS Teams account details": "MS Teams account details",
        "MSteamsUnavailableLicenses": "MSteamsUnavailableLicenses",
        "Microsoft graph integration": "Microsoft graph integration",
        "New MS Teams user": "New MS Teams user",
        "O365 admin": "O365 admin",
        "Onboarding": "Onboarding",
        "Please change the ": "Please change the ",
        "Please link this user to a MS Teams User": "Please link this user to a MS Teams User",
        "Powershell integration": "Powershell integration",
        "Provide": "Provide",
        "Save": "Save",
        "Secret": "Secret",
        "Secret length should be equal 40 symbols": "Secret length should be equal 40 symbols",
        "Set a domain for the tenant and validate it against Microsoft": "Set a domain for the tenant and validate it against Microsoft",
        "Start now": "Start now",
        "There are no more available licenses in MS Teams": "There are no more available licenses in MS Teams",
        "To use MS Teams you must have a phone number assigned": "To use MS Teams you must have a phone number assigned",
        "Trunk number creation failed": "Trunk number creation failed",
        "UPN": "UPN",
        "Unassign failed": "Unassign failed",
        "Update Azure App Details": "Update Azure App Details",
        "Updated successfully": "Updated successfully",
        "We cannot link your Microsoft Tenant to this account because the tenant is already linked to another subscription": "We cannot link your Microsoft Tenant to this account because the tenant is already linked to another subscription",
        "You are missing the MS Teams user ID": "You are missing the MS Teams user ID",
        "Your MS Teams account can be created": "Your MS Teams account can be created",
        "a global admin account and let us add the integration": "a global admin account and let us add the integration",
        "accountBeingCreated": "Your account is being created, it can takes several minutes. Please check again later",
        "accountCreated": "This step is required to validate your new domain as being voice capable. Please, be sure your Microsoft tenant owns a valid E1, E3 or E5 license. This license will be released after the step is successfully completed. It usually takes around 2 minutes to complete this step.",
        "accountTitle": "Create a dummy account and associate an E1 / E3 / E5 license to it",
        "activationProcess": "(*) the activation process will create a dummy 0365 user and assign a spare E1, E3 and E5 license. After activation the user will be deleted again.",
        "assignMSteamsNumber": "Select the MS Teams user that you want to assign each number to ",
        "assignPhoneNumberAdmin": "Please assign a phone number to this User in order that he can use MS Teams.",
        "assignPhoneNumberUser": "Please ask you administrator to assign you a phone number to be able to use MS Teams.",
        "azureApp": "Azure AD application",
        "confirmUnlink0365Tenant": "Are you sure you want to unlink your O365 from our platform? We will remove all phonenumbers, direct routing configurations and our Graph Application. This action cannot be undone. You will have to start from scratch",
        "createMsTeamsRouting": "Create MS Teams routing policies and remove associated license from the dummy user",
        "createMsTeamsRoutingError": "Create MS Teams routing policies and remove associated license from the dummy user failed. Please, wait for a couple of minutes and try again.",
        "createMsTeamsRoutingStep": "In this final step, we remove the license from the dummy user created before and configure an SBC entry and call policies on your Teams space to properly route the calls. It usually takes around 15 minutes to complete this step.",
        "descTextPart1": "If you want our platform to configure direct routing for your tenant, we need to setup a dedicated ",
        "descTextPart2": "By granting this application the correct rights we will be able to access your tenant through",
        "downloadFile": "Please download the powershell script with the button below and then run it using a global admin account. If you receive SecurityError, open powershell as administrator and play the following command 'Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass'.",
        "errorAccountCreate": "The dummy account couldn’t be created or you are missing a valid E1, E3 or E5license. Please verify you have a valid license and try again.",
        "firstAddIntegration": "Please first add an Integration. Without this we cannot make the required changes in your account",
        "linkNeedForMSteams": "It is needed to link the user to a MS Teams User. Please, ask you administrator to link your user to a MS Teams user",
        "linkService": "Linking this service to Microsoft Teams will do following changes to you Microsoft account:",
        "linkYourAccount": "Link your Microsoft Teams to our service. As soon as you link your tenant, you will be able to assign numbers to users (teams).",
        "manualSetup": "Manual setup - Powershell (1/2)",
        "manualSetupPW": "Manual setup - Powershell (2/2)",
        "manually": "manually",
        "microsoftGraph": "Microsoft graph: to list your domains, your employees and their O365 licenses",
        "msTeamsUsersName": "MSTeams user's name",
        "newDomain": "New domain will be added & activated",
        "newDomainCloudConnectionError": "The new domain for your tenant couldn’t be created or verified. Possible causes are a DNS failure, a lack of rights or a technical problem using Microsoft’s services. Please, retry in a few minutes. If the problem persists, please, contact our support.",
        "newDomainCreated": "A new domain is being set for your tenant and Microsoft is being asked to verify it. It usually takes around 1 hour to complete.",
        "notInitiatedMessage": "Sorry, this page is available only if your status is not initiated yet.",
        "powerShellDirectRouting": "Powershell: configure direct routing, manage resource accounts, manage phonenumber assignment of users",
        "powershell": "powershell",
        "provideClientInfo": "Please provide here the client ID and secret of the integration you’ve just setup:",
        "saveFile": "Please save the client ID and secret generated by the script. You will need this in the next step.",
        "script that you can run": "script that you can run",
        "temporarily": "temporarily",
        "to an admin of another tenant and try again": "to an admin of another tenant and try again",
        "weAreSorry": "We are sorry!",
        "willLinkTeamsTenant": "We will link your teams tenant to our platform (SBC)",
        "willSetupVoicePolices": "We will setup the voice policies and routes accordingly"
      }
    },
  },

The F4B - MS Teams workflows package have been modified to include direct routing (from Self Care Portal 3.4) and from the legacy OC version.
Some urls have changed in order that all end points specific to a mode have the mode in the url.
The structure of the Tenant Application Data(s) stored in the BW GW has been aligned to use the format of the DR variant that was better structured.

Bugs solving

Porting form 4.3.1

The 4.4.0 contains all bugs fixes from 4.3.1.

In addition, it contains already 4 bug fixes that will be part of the future 4.3.2 but that were ready at the time of packaging.

[Speed Dials Free Entry] Number field accepts letters

Speed dials entries are supposed to be phone numbers / extension, but it was also accepting letters.

Fix the error message for deletion of digits strings + ocp code for users without departments + other labels issues

At the same time a few other translations errors have been found and fixed.

No new configuration parameter.

New translation labels:

bash
"v4_4": {
    "Are you sure you want to delete {{count}} restrictions from the list": "Are you sure you want to delete 1 restriction from the list",
    "Are you sure you want to delete {{count}} restrictions from the list_plural": "Are you sure you want to delete {{count}} restrictions from the list",
}

Fixed translations labels (in some languages the short label was used instead of a long text):

bash
{
    "numbersAddFail": "The assignment of the phone number has failed",
    "numbersAddFail_plural": "The assignment of the phone numbers has failed",
    "numbersAddSuccess": "The assignment of the phone number was successful",
    "numbersAddSuccess_plural": "The assignment of the phone numbers was successful",
}

The following elements where only present in the EN version (note that they could be added in custom translations to fix it), they have been added in all languages.

bash
"v4_1": {
    "contactTypes": {
      "Call flows": "Call flows",
      "Colleague": "Colleague",
      "Group": "Group",
      "Group contact": "Group contact",
      "Me": "Me",
      "Tenant": "Tenant",
      "Tenant contact": "Tenant contact",
      "User": "User",
      "User contact": "User contact"
    },
}

Mobile version of search number is not working for some cases

Proxy present in SSO requests while it must not

"No number" not being translated in several pages

No new label: re-using the one already used in similar pages.

[IVR Submenu] Back to Submenu option not present

Fixes in workflows

See the list of updated workflows.

Default configuration

Please find below “for info” the default configuration hardcoded at JavaScript level and used if the parameters are not found in the configuration file / configuration object.

This is given in JavaScript syntax so it can obviously not be copied as such in the json configuration (file or object), but the parameters names are the same therefore it gives the needed information.

bash
{
  appTitle: 'UC Control Hub',
  name: 'UC Control Hub',
  customTranslations: false,
  templateName: 'B2B_services',
  ui_id: 'roger',
  backendUrl: '',
  apiVersion: 'api/v01',
  proxyName: 'p1',
  showMobileBGImage: true,
  showWelcomeModal: false,
  welcomeMessages: {},
  authentication: {
    webseal: false,
    customLogOut: {
      enabled: false,
      route: '/forgot-password',
    },
    neverTrust2fa: false,
    neverTrust2faEmail: false,
    neverTrust2faTotp: true,
    mfaModes: [],
  },
  login: {
    links: [],
  },
  inactivityTimeout: {
    enabled: false,
    timeout: 20,
    warningTime: 1,
  },
  ivr: {
    phoneNumberMandatory: false,
    canEditPhonenumber: true,
    canManageAlternateNumbers: true,
    canEditName: true,
    statTables: {
      showNumber: true,
      showName: true,
      showExclusionPeriod: false,
    },
    canAddInstance: true,
    canDeleteInstance: true,
    canEditExtension: true,
    allowed_actions: [
      {
        action: 'Go To Submenu',
        action_type: 'submenu',
      },
      {
        action: 'Transfer To Operator',
        action_type: 'number',
      },
      {
        action: 'Transfer To Number With Prompt',
        action_type: 'number',
      },
      {
        action: 'Transfer To Number',
        action_type: 'number',
      },
      {
        action: 'Play Announcement',
        action_type: 'announcement',
      },
      {
        action: 'Repeat Menu',
      },
      {
        action: 'Exit',
      },
      {
        action: 'Back To Parent Menu',
      },
    ],
    submenusTemplateKeys: [
      {
        action: 'Exit',
        description: 'Exit',
        key: '*',
        parameter: '',
      },
    ],
    levelFACs: 'user',
    showDialingScope: false,
  },
  languages: [
    {
      value: 'en',
      name: 'English',
      shortName: 'EN',
    },
  ],
  modules: {
    nims: false,
    ldap_synchronization: false,
    nemo: false,
    npact: false,
    msteams: false,
    externalAnalytics: false,
  },
  users: {
    phoneNumberMandatory: false,
    idBasedOnPhoneNumber: false,
    canEditPhonenumber: true,
    canEditExtension: true,
    canManageAlternateNumbers: true,
    canEditDetails: true,
    emailMandatory: false,
    showAddInEmergencyHG: false,
    departmentMandatory: false,
    licenseMandatory: false,
    tenantBulkTemplateExcelName: 'tenant_bulk_template.xlsx',
    groupBulkTemplateExcelName: 'bulk_template.xlsx',
    canEditLicenses: true,
    canAddUser: true,
    canDeleteUser: true,
    showBulkUpdates: true,
    showOutgoingCli: true,
    canEditOutgoingCli: true,
    statTables: {
      showNumber: true,
      showFirstName: true,
      showLastName: true,
      showExclusionPeriod: false,
    },
    deviceManagement: {
      showResetButton: false,
      showRebootButton: true,
      showEditButton: true,
      showDeleteButton: true,
      showDeleteMultipleLinesButton: true,
      canAddExtraDevice: true,
      canDeleteExtraDevice: true,
      canEditMacAddress: true,
      addDeviceOptions: {
        existingDevice: true,
        newDevice: true,
        noDevice: true,
      },
      showRebuildButton: false,
      canEditRingingOptions: true,
      canEditExtraDevicesOptions: true,
    },
    levelFACs: 'group',
    needNumberForBlf: false,
    outgoingCliAssignedOnly: false,
    canEditName: true,
    canEditCliName: true,
    canEditEmail: true,
    userCanEditDetails: false,
    outgoingCliAllowTenantLevelNumbers: false,
  },
  huntgroups: {
    phoneNumberMandatory: false,
    canEditPhonenumber: true,
    canEditExtension: true,
    canManageAlternateNumbers: true,
    canEditName: true,
    canAddInstance: true,
    canDeleteInstance: true,
    statTables: {
      showNumber: true,
      showName: true,
      showExclusionPeriod: false,
    },
    levelFACs: 'user',
  },
  callQueues: {
    phoneNumberMandatory: false,
    canEditPhonenumber: true,
    canEditExtension: true,
    canEditName: true,
    exposePassword: false,
    canManageAlternateNumbers: true,
    canAddInstance: true,
    canDeleteInstance: true,
    statTables: {
      showNumber: true,
      showName: true,
      showExclusionPeriod: false,
    },
    levelFACs: 'user',
  },
  callCenters: {
    phoneNumberMandatory: false,
    canEditPhonenumber: true,
    canEditExtension: true,
    canEditName: true,
    exposePassword: false,
    canManageAlternateNumbers: true,
    canAddInstance: true,
    canDeleteInstance: true,
    statTables: {
      showNumber: true,
      showName: true,
      showExclusionPeriod: false,
    },
    levelFACs: 'user',
  },
  callCentersPremium: {
    phoneNumberMandatory: false,
    canEditPhonenumber: true,
    canEditExtension: true,
    canEditName: true,
    dnis: {
      canAddInstance: true,
      canDeleteInstance: true,
      canEditExtension: true,
      canEditName: true,
      canEditOutgoingCli: true,
      canEditPhonenumber: true,
    },
    exposePassword: false,
    canManageAlternateNumbers: true,
    canAddInstance: true,
    canDeleteInstance: true,
    statTables: {
      showNumber: true,
      showName: true,
      showExclusionPeriod: false,
    },
    levelFACs: 'user',
  },
  instantGroupCalls: {
    phoneNumberMandatory: false,
    canEditExtension: true,
    canEditPhonenumber: true,
    canEditName: true,
    canManageAlternateNumbers: true,
    canAddInstance: true,
    canDeleteInstance: true,
    levelFACs: 'user',
  },
  groupPaging: {
    canEditExtension: true,
    canEditPhonenumber: true,
    canManageAlternateNumbers: true,
    canAddInstance: true,
    canDeleteInstance: true,
    levelFACs: 'user',
  },
  pickupGroups: {
    canAddInstance: true,
    canDeleteInstance: true,
  },
  trunking: {
    enabled: true,
    authentication: 'optional',
    pilotUserStep: false,
    access_data: [],
    noAuthentication_accessInfo: 'forbidden',
    authentication_accessInfo: 'forbidden',
    canAddTrunks: true,
    canDeleteTrunks: true,
    canAddDID: true,
    canDeleteDID: true,
  },
  tenantTrunking: {
    canAddDID: true,
  },
  group: {
    canEditDetails: true,
    canEditCliNumber: true,
    numbers: {
      showActivation: false,
      canAssign: true,
      canUnassign: true,
    },
    deviceManagement: {
      showRebootButton: true,
      showEditButton: false,
      showAddButton: true,
      showDeleteButton: true,
      canEditMacAddress: true,
      showRebuildButton: false,
    },
    department: {
      canEditCliNumber: true,
      canAddInstance: true,
      canDeleteInstance: true,
      canEditCliName: true,
    },
    virtual_users: {
      showCallType: false,
    },
    voicePortal: {
      canEditPhonenumber: true,
      canEditExtension: true,
      canEditOutgoingCli: true,
      canEditActiveStatus: true,
      canEditDetails: true,
    },
    groupCliMandatory: false,
    callRecordingCustomerInfo: {
      enabled: false,
    },
    dashboard : {
      statisticsWidgetDefaultLength:  4
    }
  },
  tenant: {
    dashboard : {
      //responseGroupSizeLimit : 100 // commented as by default no value. Present for completeness.
    }
  },
  tenantLicenses: {
    userLicenses: {
      enabled: true,
      showLimits: true,
    },
    otherLicenses: {
      enabled: true,
      showLimits: true,
    },
    trunkingLicenses: {
      enabled: true,
      showLimits: true,
    },
    numberEntitlements: {
      enabled: true,
      showLimits: true,
    },
  },
  groupLicenses: {
    userLicenses: {
      enabled: true,
      showEditButton: true,
      showLimits: true,
    },
    otherLicenses: {
      enabled: true,
      showEditButton: true,
      showLimits: true,
    },
    trunkingLicenses: {
      enabled: true,
      showEditButton: true,
      showLimits: true,
    },
  },
  licenseDefinition: {
    groupServices: ['Auto Attendant', 'Auto Attendant - Standard', 'Call Pickup', 'Hunt Group'],
    userServices: [],
  },
  tenantGroups: {
    showAddButton: true,
    showDeleteButton: true,
    addGroupWizard: {
      showUserLicensesStep: true,
      showOtherLicensesStep: true,
      showTrunkingLicensesStep: false,
    },
  },
  webexDownloadLink: 'https://www.webex.com/downloads.html',
  supportWebexLink: 'https://help.webex.com/contact',
  useLocaleInUserProfile: true,
  showLogoutChangePassword: true,
  showHelp: true,
  showFAQ: true,
  changeLog: true,
  showAdvancedModeSwitch: true,
  tenantAdmins: {
    externalSyncEnabled_allowCRUD: true,
  },
  groupAdmins: {
    externalSyncEnabled_allowCRUD: true,
    callRecordingSupport: false,
  },
  advancedMode_defaultValue: {
    admin: true,
    tenant_admin: true,
    group_admin: true,
    user: false,
  },
  FAQLinks: {
    ar: {
      admin: '',
      tenant_admin: '',
      group_admin: '',
      user: '',
    },
    de: {
      admin: '',
      tenant_admin: '',
      group_admin: '',
      user: '',
    },
    en: {
      admin: '',
      tenant_admin: '',
      group_admin: '',
      user: '',
    },
    es: {
      admin: '',
      tenant_admin: '',
      group_admin: '',
      user: '',
    },
    fr: {
      admin: '',
      tenant_admin: '',
      group_admin: '',
      user: '',
    },
    nl: {
      admin: '',
      tenant_admin: '',
      group_admin: '',
      user: '',
    },
    pt: {
      admin: '',
      tenant_admin: '',
      group_admin: '',
      user: '',
    },
  },
  defaultLng: 'en',
  // New from 3.0
  includeWebexTenantProfile: true,
  includeWebexGroupProfile: true,
  customLoginSSOLink: 'https://uc-dev.bxl.netaxis.be/sso',
  currency: 'EUR',
  // New from 3.1
  nemoCdrsPageSize: 20,
  serviceProviderGroupDetails: {
    contactInformationMandaotry: false,
    addressInformationMandaotry: false,
  },
  enterpriseDetails: {
    contactInformationMandaotry: false,
    addressInformationMandaotry: false,
  },
  requestsTimestemp: {
    configPhoneTypes: 300000,
    analyticsTables: 300000,
    analyticsStats: 300000,
    systemServicesCallRecordingPlatforms: 300000,
    configsServicePacks: 300000,
    configsVirtualServicePacks: 300000,
    configsUserServices: 300000,
  },
  voicemailConfirmationModal: false,
  webexDirectorySynchro: false,
  isResetPinCode: true,
  isResetPinCodeForCallFlows: true,
  navLinks: {
    admin: ['tenants', 'search', 'synchronisation'],
    tenant: [
      'tenantHome',
      'tenantStatistics',
      'tenantExternalAnalytics',
      'tenantCallFlows',
      'tenantAccounts',
      'groups',
      'tenantLicenses',
      'tenantPhoneNumbers',
      'tenantPortingRequests',
      'tenantCloudConnections',
      'tenantMobility',
      'tenantSchedules',
      'tenantScheduleInfo',
      'tenantContacts',
      'tenantAdmins',
      'tenantSearch',
      'tenantPortingRequestsInstance',
      'tenantTrunkingGroups',
      'tenantSynchronisation',
      'tenantDetail',
    ],
    group: [
      'groupHome',
      'groupStatistics',
      'groupExternalAnalytics',
      'groupPhoneNumbers',
      'groupCloudConnections',
      'groupCallFlows',
      'groupAccounts',
      'groupTrunking',
      'groupLicenses',
      'groupSchedules',
      'groupScheduleInfo',
      'groupDepartments',
      'groupMobility',
      'groupCallingSettings',
      'groupDevices',
      'groupContacts',
      'groupAdmin',
      'groupDetail',
    ],
    user: [
      'userHome',
      'userRecentCalls',
      'userAdvancedCallLogs',
      'userIncomingCalls',
      'userContacts',
      'userOutgoingCalls',
      'userReceptionist',
      'userDevices',
      'userMobility',
      'userVoicemail',
      'userExternalVoicemail',
      'userSchedules',
      'userScheduleInfo',
      'userMedia',
      'userCallCenter',
      'userExternalAnalytics',
      'userCallRecording',
      'userExecutivesAndAssistants',
      'userAdvancedSettings',
      'userDetail',
    ],
    ivr: [
      'groupIvrHome',
      'groupIvrChangeLog',
      'groupIVRStatistics',
      'groupIvrRecentCalls',
      'groupIvrMenus',
      'groupIvrIncomingCalls',
      'groupIvrOutgoingCalls',
      'groupIvrSchedules',
      'groupIvrVoicemail',
      'groupIvrMedia',
      'groupIvrSettings',
      'groupIvrDetail',
    ],
    huntGroup: [
      'groupHuntGroupHome',
      'groupHuntGroupChangeLog',
      'groupHuntGroupSettings',
      'groupHuntGroupStatistics',
      'groupHuntGroupRecentCalls',
      'groupHuntGroupAgents',
      'groupHuntGroupIncomingCalls',
      'groupHuntGroupOutgoingCalls',
      'groupHuntGroupVoicemail',
      'groupHuntGroupMedia',
      'groupHuntGroupDetail',
    ],
    callQueue: [
      'groupCallQueueHome',
      'groupCallQueueChangeLog',
      'groupCallQueueStatistics',
      'groupCallQueueSettings',
      'groupCallQueueRecentCalls',
      'groupCallQueueAgents',
      'groupCallQueueIncomingCalls',
      'groupCallQueueOutgoingCalls',
      'groupCallQueueMedia',
      'groupCallQueueVoicemail',
      'groupCallQueueDetail',
    ],
    callCenter: [
      'groupCallCenterHome',
      'groupCallCenterChangeLog',
      'groupCallCenterStatistics',
      'groupCallCenterSettings',
      'groupCallCenterRecentCalls',
      'groupCallCenterAgents',
      'groupCallCenterIncomingCalls',
      'groupCallCenterOutgoingCalls',
      'groupCallCenterVoicemail',
      'groupCallCenterMedia',
      'groupCallCenterSupervisors',
      'groupCallCenterDetail',
    ],
    callCenterPremium: [
      'groupCallCenterPremiumHome',
      'groupCallCenterPremiumChangeLog',
      'groupCallCenterPremiumSettings',
      'groupCallCenterPremiumRecentCalls',
      'groupCallCenterPremiumStatistics',
      'groupCallCenterPremiumAgents',
      'groupCallCenterPremiumIncomingCalls',
      'groupCallCenterPremiumOutgoingCalls',
      'groupCallCenterPremiumSchedules',
      'groupCallCenterPremiumVoicemail',
      'groupCallCenterPremiumMedia',
      'groupCallCenterPremiumSupervisors',
      'groupCallCenterPremiumDnis',
      'groupCallCenterPremiumDetail',
    ],
    routePoint: [
      'groupRoutePointHome',
      'groupRoutePointSettings',
      'groupRoutePointRecentCalls',
      'groupRoutePointIncomingCalls',
      'groupRoutePointOutgoingCalls',
      'groupRoutePointSchedules',
      'groupRoutePointVoicemail',
      'groupRoutePointMedia',
      'groupRoutePointDnis',
      'groupRoutePointDetail',
    ],
    groupPaging: [
      'groupPagingHome',
      'groupPagingChangeLog',
      'groupPagingSettings',
      'groupPagingIncomingCalls',
      'groupPagingOutgoingCalls',
      'groupPagingMedia',
      'groupPagingDetail',
    ],
    instantGroupCall: [
      'groupInstantGroupCallHome',
      'groupInstantGroupCallChangeLog',
      'groupInstantGroupCallSettings',
      'groupInstantGroupCallDetail',
    ],
  },
  navLinksDesktop: {
    admin: ['tenants', 'search', 'synchronisation'],
    tenant: [
      'tenantHome',
      'tenantStatistics',
      'tenantExternalAnalytics',
      'tenantCallFlows',
      'tenantAccounts',
      'groups',
      'tenantLicenses',
      'tenantPhoneNumbers',
      'tenantCloudConnections',
      'tenantMobility',
      'tenantContacts',
      'tenantAdmins',
      'tenantSchedules',
      'tenantScheduleInfo',
      'tenantPortingRequests',
      'tenantPortingRequestsInstance',
      'tenantTrunkingGroups',
      'tenantSynchronisation',
      'tenantSearch',
      'tenantDetail',
    ],
    group: [
      'groupHome',
      'groupCallFlows',
      'groupAccounts',
      'groupContacts',
      'groupStatistics',
      'groupExternalAnalytics',
      'groupPhoneNumbers',
      'groupCloudConnections',
      'groupMobility',
      'groupLicenses',
      'groupSchedules',
      'groupScheduleInfo',
      'groupDepartments',
      'groupCallingSettings',
      'groupDevices',
      'groupMedia',
      'groupTrunking',
      'groupAdmin',
      'groupDetail',
    ],
    user: [
      'userHome',
      'userContacts',
      'userRecentCalls',
      'userAdvancedCallLogs',
      'userIncomingCalls',
      'userOutgoingCalls',
      'userReceptionist',
      'userDevices',
      'userMobility',
      'userVoicemail',
      'userExternalVoicemail',
      'userColleagueInfo',
      'userSchedules',
      'userScheduleInfo',
      'userMedia',
      'userCallCenter',
      'userExternalAnalytics',
      'userCallRecording',
      'userExecutivesAndAssistants',
      'userAdvancedSettings',
      'userDetail',
    ],
    ivr: [
      'groupIvrHome',
      'groupIvrChangeLog',
      'groupIVRStatistics',
      'groupIvrRecentCalls',
      'groupIvrMenus',
      'groupIvrIncomingCalls',
      'groupIvrOutgoingCalls',
      'groupIvrSchedules',
      'groupIvrVoicemail',
      'groupIvrMedia',
      'groupIvrSettings',
      'groupIvrDetail',
    ],
    huntGroup: [
      'groupHuntGroupHome',
      'groupHuntGroupChangeLog',
      'groupHuntGroupSettings',
      'groupHuntGroupStatistics',
      'groupHuntGroupRecentCalls',
      'groupHuntGroupAgents',
      'groupHuntGroupIncomingCalls',
      'groupHuntGroupOutgoingCalls',
      'groupHuntGroupVoicemail',
      'groupHuntGroupMedia',
      'groupHuntGroupDetail',
    ],
    callQueue: [
      'groupCallQueueHome',
      'groupCallQueueChangeLog',
      'groupCallQueueStatistics',
      'groupCallQueueSettings',
      'groupCallQueueRecentCalls',
      'groupCallQueueAgents',
      'groupCallQueueIncomingCalls',
      'groupCallQueueOutgoingCalls',
      'groupCallQueueMedia',
      'groupCallQueueVoicemail',
      'groupCallQueueDetail',
    ],
    callCenter: [
      'groupCallCenterHome',
      'groupCallCenterChangeLog',
      'groupCallCenterStatistics',
      'groupCallCenterSettings',
      'groupCallCenterRecentCalls',
      'groupCallCenterAgents',
      'groupCallCenterIncomingCalls',
      'groupCallCenterOutgoingCalls',
      'groupCallCenterVoicemail',
      'groupCallCenterMedia',
      'groupCallCenterSupervisors',
      'groupCallCenterDetail',
    ],
    callCenterPremium: [
      'groupCallCenterPremiumHome',
      'groupCallCenterPremiumChangeLog',
      'groupCallCenterPremiumSettings',
      'groupCallCenterPremiumRecentCalls',
      'groupCallCenterPremiumStatistics',
      'groupCallCenterPremiumAgents',
      'groupCallCenterPremiumIncomingCalls',
      'groupCallCenterPremiumOutgoingCalls',
      'groupCallCenterPremiumSchedules',
      'groupCallCenterPremiumVoicemail',
      'groupCallCenterPremiumMedia',
      'groupCallCenterPremiumSupervisors',
      'groupCallCenterPremiumDnis',
      'groupCallCenterPremiumDetail',
    ],
    routePoint: [
      'groupRoutePointHome',
      'groupRoutePointSettings',
      'groupRoutePointRecentCalls',
      'groupRoutePointIncomingCalls',
      'groupRoutePointOutgoingCalls',
      'groupRoutePointSchedules',
      'groupRoutePointVoicemail',
      'groupRoutePointMedia',
      'groupRoutePointDnis',
      'groupRoutePointDetail',
    ],
    groupPaging: [
      'groupPagingHome',
      'groupPagingChangeLog',
      'groupPagingSettings',
      'groupPagingIncomingCalls',
      'groupPagingOutgoingCalls',
      'groupPagingMedia',
      'groupPagingDetail',
    ],
    instantGroupCall: [
      'groupInstantGroupCallHome',
      'groupInstantGroupCallChangeLog',
      'groupInstantGroupCallSettings',
      'groupInstantGroupCallDetail',
    ],
  },
  tabsOrder: {
    admin: [
      {
        search: ['users', 'sites', 'devices', 'phoneNumbers'],
      },
      {
        synchronisation: ['tenants', 'sites', 'users'],
      },
    ],
    tenant: [
      {
        tenantDetail: ['main', 'voiceMessagingSettings'],
      },
      {
        tenantAccounts: ['list', 'kpi', 'kpiReport', 'bulkCreations', 'bulkUpdates'],
      },
      {
        tenantLicenses: ['UserLicenses', 'NumberEntitlements', 'Orders'],
      },
      {
        tenantPhoneNumbers: ['assignedNumbers', 'disconnected', 'reserved'],
      },
      {
        tenantSchedules: ['time_schedules', 'time_schedules_advanced', 'calendar_schedules'],
      },
      {
        tenantCallFlows: {
          IVRs: ['list', 'kpi', 'kpiReport'],
          queues: ['list', 'kpi', 'kpiReport'],
          callCenters: ['list', 'kpi', 'kpiReport', 'unavailableCodes'],
          callCentersPremium: ['list', 'kpi', 'kpiReport', 'dispositionCodes', 'unavailableCodes'],
          routePoints: ['list', 'kpi', 'kpiReport', 'dispositionCodes', 'unavailableCodes'],
          huntGroups: ['list', 'kpi', 'kpiReport'],
          groupPagings: ['list', 'settings'],
          instantGroupCalls: ['list'],
        },
      },
      {
        tenantContacts: ['phoneBook', 'virtualExtensions'],
      },
      {
        tenantCloudConnections: {
          msteams: ['tenant', 'licenses', 'numbers', 'users', 'resourceAccounts'],
        },
      },
      {
        tenantSearch: ['users', 'devices', 'sites'],
      },
      {
        tenantSynchronisation: ['groups', 'users'],
      },
      {
        tenantStatistics: ['tenant', 'site', 'cdrs'],
      },
      {
        tenantExternalAnalytics: ['tenantCcReporting'],
      },
    ],
    group: [
      {
        groupCallFlows: {
          IVRs: ['list', 'kpi', 'kpiReport'],
          queues: ['list', 'kpi', 'kpiReport'],
          callCenters: ['list', 'kpi', 'kpiReport', 'unavailableCodes'],
          callCentersPremium: ['list', 'kpi', 'kpiReport', 'dispositionCodes', 'unavailableCodes'],
          huntGroups: ['list', 'kpi', 'kpiReport'],
          routePoints: ['list', 'kpi', 'kpiReport', 'dispositionCodes', 'unavailableCodes'],
          instantGroupCalls: ['list'],
        },
      },
      {
        groupAccounts: ['list', 'kpi', 'kpiReport', 'bulkUpdates', 'bulkJobs'],
      },
      {
        groupDetail: [
          'main',
          'extensionSettings',
          'voicePortal',
          'callRecordingPlatform',
          'inventoryReport',
        ],
      },
      {
        groupContacts: ['phoneBook', 'virtualExtensions'],
      },
      {
        groupCloudConnections: {
          'msteams-direct-routing': ['general', 'trunking'],
        },
      },
      {
        groupLicenses: ['GroupUserLicenses'],
      },
      {
        groupSchedules: ['time_schedules', 'time_schedules_advanced', 'calendar_schedules'],
      },
      {
        groupCallingSettings: [
          'callingPlan',
          'incomingCallingPlan',
          'digitsStrings',
          'authCodes',
          'featureAccessCodes',
          'groupForwarding',
          'callCapacityGroups',
          'CallParkGroups',
          'callProcessingPolicy',
          'faxToEmail',
        ],
      },
      {
        groupDevices: ['devicesInventory', 'devicesOptions'],
      },
      {
        groupMedia: ['announcements', 'musicOnHold', 'customRingback'],
      },
      {
        groupStatistics: ['site', 'cdrs'],
      },
      {
        groupExternalAnalytics: ['groupCcReporting'],
      },
    ],
    user: [
      {
        userDetail: [
          'main',
          'licenses',
          'phoneNumbers',
          'userIds',
          'featureAccessCodes',
          'externalApplications',
          'webexAccount',
          'msTeamsAccount',
          'advancedSettings',
        ],
      },
      {
        userContacts: ['phoneBook', 'speedDial8', 'speedDial100', 'siteDirectory', 'busyLampField'],
      },
      {
        userIncomingCalls: [
          'dontDisturb',
          'callWaiting',
          'incomingCallPlan',
          'callForwardingServices',
          'callBlocking',
          'callIdPresentation',
          'sequentialRing',
          'callNotify',
          'announcement',
          'selectingForwarding',
          'simultaneousRing',
          'priorityAlert',
          'pushToTalk',
          'automaticHoldRetrieve',
          'customRingback',
        ],
      },
      {
        userExecutivesAndAssistants: ['userExecutiveAssistants', 'userExecutives'],
      },
      {
        userExecutiveAssistants: ['assistants', 'call-routing', 'screening', 'alerting'],
      },
      {
        userOutgoingCalls: ['settings', 'callingPlan', 'pushToTalk'],
      },
      {
        userReceptionist: [
          'receptionistOffice',
          'receptionistSmallBusiness',
          'receptionistEnterprise',
        ],
      },
      {
        userDevices: ['SIPphones', 'SIPcredentials', 'flexibleSeat', 'registration'],
      },
      {
        userMedia: ['announcements', 'musicOnHold'],
      },
      {
        userMobility: ['onNetMobility', 'offNetMobility', 'remoteOffice', 'businessMode'],
      },
      {
        userVoicemail: ['inbox', 'settings', 'announcements', 'voicePasscode'],
      },
      {
        userSchedules: ['time_schedules', 'time_schedules_advanced', 'calendar_schedules'],
      },
      {
        userAdvancedSettings: ['privacySettings', 'interceptSettings', 'groupPagings'],
      },
      {
        userExternalAnalytics: ['userCcReporting'],
      },
    ],
    IVR: [
      {
        groupIvrDetail: ['main', 'featureOptions', 'phoneNumbers', 'featureAccessCodes'],
      },
      {
        groupIvrMenus: ['businessHours', 'afterHours', 'holiday', 'submenu'],
      },
      {
        groupIvrIncomingCalls: [
          'callForwardingServices',
          'callBlocking',
          'callNotify',
          'announcement',
          'selectingForwarding',
        ],
      },
      {
        groupIvrOutgoingCalls: ['settings', 'callingPlan'],
      },
      {
        groupIvrVoicemail: ['inbox', 'settings', 'announcements', 'voicePasscode'],
      },
      {
        groupIvrSettings: ['privacySettings'],
      },
    ],
    'hunt group': [
      {
        groupHuntGroupSettings: [
          'huntingMode',
          'forwardingSettings',
          'advancedSettings',
          'privacySettings',
          'callingLineIDSettings',
        ],
      },
      {
        groupHuntGroupIncomingCalls: [
          'callForwardingServices',
          'callBlocking',
          'callNotify',
          'announcement',
          'selectingForwarding',
        ],
      },
      { groupHuntGroupOutgoingCalls: ['settings', 'callingPlan'] },
      {
        groupHuntGroupDetail: ['main', 'featureOptions', 'phoneNumbers', 'featureAccessCodes'],
      },
      {
        groupHuntGroupVoicemail: ['inbox', 'settings', 'announcements', 'voicePasscode'],
      },
    ],
    'call queue': [
      {
        groupCallQueueIncomingCalls: [
          'callForwardingServices',
          'callBlocking',
          'callNotify',
          'announcement',
          'selectingForwarding',
        ],
      },
      {
        groupCallQueueOutgoingCalls: ['settings', 'callingPlan'],
      },
      {
        groupCallQueueVoicemail: ['inbox', 'settings', 'announcements', 'voicePasscode'],
      },
      {
        groupCallQueueSettings: [
          'callQueuePolicy',
          'bouncedSettings',
          'overflowSettings',
          'agentSettings',
          'advancedSettings',
          'privacySettings',
        ],
      },
      {
        groupCallQueueDetail: ['main', 'featureOptions', 'phoneNumbers', 'featureAccessCodes'],
      },
    ],
    'call center': [
      {
        groupCallCenterSettings: [
          'callQueuePolicy',
          'bouncedSettings',
          'overflowSettings',
          'agentSettings',
          'advancedSettings',
          'strandedCalls',
          'dailyReportSettings',
          'unavailableCodes',
          'privacySettings',
        ],
      },
      {
        groupCallCenterIncomingCalls: [
          'callForwardingServices',
          'callBlocking',
          'callNotify',
          'announcement',
          'selectingForwarding',
        ],
      },
      {
        groupCallCenterOutgoingCalls: ['settings', 'callingPlan'],
      },
      {
        groupCallCenterDetail: ['main', 'featureOptions', 'phoneNumbers', 'featureAccessCodes'],
      },
      {
        groupCallCenterVoicemail: ['inbox', 'settings', 'announcements', 'voicePasscode'],
      },
    ],
    callCenterPremium: [
      {
        groupCallCenterPremiumDetail: [
          'main',
          'featureOptions',
          'phoneNumbers',
          'featureAccessCodes',
        ],
      },
      {
        groupCallCenterPremiumSettings: [
          'callQueuePolicy',
          'queueStatusNotifications',
          'bouncedSettings',
          'overflowSettings',
          'agentSettings',
          'advancedSettings',
          'strandedCalls',
          'dispositionCodes',
          'unavailableCodes',
          'dailyReportSettings',
          'privacySettings',
        ],
      },
      {
        groupCallCenterPremiumDnis: ['dnisOverview', 'dnisAnnouncements'],
      },
      {
        groupCallCenterPremiumIncomingCalls: [
          'callForwardingServices',
          'callBlocking',
          'callNotify',
          'announcement',
          'selectingForwarding',
        ],
      },
      { groupCallCenterPremiumOutgoingCalls: ['settings', 'callingPlan'] },
      {
        groupCallCenterPremiumVoicemail: ['inbox', 'settings', 'announcements', 'voicePasscode'],
      },
    ],
    'route point': [
      {
        groupRoutePointDetail: ['main', 'featureOptions', 'phoneNumbers', 'featureAccessCodes'],
      },
      {
        groupRoutePointSettings: [
          'callQueuePolicy',
          'bouncedSettings',
          'overflowSettings',
          'agentSettings',
          'advancedSettings',
          'strandedCalls',
          'dispositionCodes',
          'unavailableCodes',
          'dailyReportSettings',
          'privacySettings',
        ],
      },
      {
        groupRoutePointDnis: ['dnisOverview', 'dnisAnnouncements'],
      },
      {
        groupRoutePointIncomingCalls: [
          'callForwardingServices',
          'callBlocking',
          'callNotify',
          'announcement',
          'selectingForwarding',
        ],
      },
      { groupRoutePointOutgoingCalls: ['settings', 'callingPlan'] },
      {
        groupRoutePointVoicemail: ['inbox', 'settings', 'announcements', 'voicePasscode'],
      },
    ],
    'group paging': [
      {
        groupPagingDetail: ['main', 'features', 'phoneNumbers', 'featureAccessCodes'],
      },
      {
        groupPagingSettings: ['originators', 'targets', 'privacy'],
      },
      {
        groupPagingIncomingCalls: [
          'callBlocking',
          'announcement',
          'callForwardingServices',
          'callNotify',
        ],
      },
      { groupPagingOutgoingCalls: ['settings'] },
    ],
    'instant group call': [
      {
        groupInstantGroupCallDetail: [
          'main',
          'featureOptions',
          'phoneNumbers',
          'featureAccessCodes',
        ],
      },
      {
        groupInstantGroupCallSettings: [
          'igcCallPolicies',
          'igcMaxTimeUnanswered',
          'igcUsersList',
          'privacySettings',
        ],
      },
    ],
  },

  cloudConnection: {
    canAddCloudConnection: true,
    msTeams: {
      modes: {
        direct_routing: true,
        operator_connect: false,
      },
      interval: 10000,
      directRoutingOptions: {
        autoCreateTrunkUser: false,
        linkTrunkUser: true,
        autoCreateHpbxUser: false,
        linkHpbxUser: true,
      },
    },
  },
  customTemplates: false,
  voiceMail: {
    settings: {
      defaultMaximumTranscribeEmails: 5,
      allowEmptyListTranscribeEmails: false,
    },
    messages: {
      showTranscriptionForEndUser: true,
    },
  },
  forbiddenExtensions: [],
  landingPage: {
    group: {
      login: 'groupIndex',
      list: 'groupHome',
      search: 'groupDetail',
    },
  },
  loginPage: {
    showLoginTooltip: false,
  },
  useNavigatorLanguage: true,
  useFullNavigatorLanguageCode: false,
  bulkServiceConfig: [
    {
      id: 'Edit incoming calls settings',
      popoverArr: ['Do not disturb'],
    },
    {
      id: 'Edit call forwarding',
      popoverArr: ['Always', 'Busy', 'No reply', 'Unreachable'],
    },
    {
      id: 'Edit outgoing calls settings',
      popoverArr: ['Hide my number'],
    },
  ],
  showCountryCodeInCallLogs: true,
  routePoints: {
    phoneNumberMandatory: false,
    canEditPhonenumber: true,
    canEditPhoneNumber: true,
    canEditExtension: true,
    canEditName: true,
    canAddInstance: true,
    canDeleteInstance: true,
    dnis: {
      canAddInstance: true,
      canDeleteInstance: true,
      canEditExtension: true,
      canEditName: true,
      canEditOutgoingCli: true,
      canEditPhonenumber: true,
    },
    statTables: {
      showNumber: true,
      showName: true,
    },
  },
  csvDelimiters: [';'],
  nemoAllCdrs: {
    fetchSize: 10000,
    mainFieldsOnly: false,
  },
  hideIds: {
    ownId: false,
    userId: false,
    groupId: false,
  },
  dateFormats: {
    languageCodeForDates: '',
    countryCodeForDates: '',
  },
  audioFileConstraints: {
    maxAudioFileDuration: 600,
    maxAudioFileSize: 10000,
    group_custom_ringback: 1000,
    call_center_entrance_message: 2000,
    call_center_comfort_message: 2000,
    ivr_menu_greeting: 2000,
    ivr_menu_play_ann: 2000,
    user_custom_ringback: 1000,
    user_voicemail: 2000,
    user_pre_altering_ann: 2000,
  },
  showBanners: {
    showBannerInCallFlowsCallLogs: false,
    showBannerInTenantCdrs: false,
    showBannerInGroupCdrs: false,
    showBannerInTenantCcReporting: false,
    showBannerInGroupCcReporting: false,
    showBannerInUserCcReporting: false,
  },
  analytics: {
    umami: {
      enabled: false,
    },
  },
  passwordExpirationWarning: {
    enabled: false,
    days: 7,
  },
  hideDepartments: false,
  dataCaching : {
    groupDashboard: 30,
    tenantDashboard: 30,
    callRecordingCustomerInfo: 60,
  },
}

Default routes

Please find below “for info” the default routes hardcoded at JavaScript level and used if the parameters are not found in the app.routes.json file / routes object.

This is given in JavaScript syntax so it can obviously not be copied as such in the json format (file or object), but the parameters names are the same therefore it gives the needed information.

bash
export const routesConfig = {
  admin: {
    home: { enabled: true },
    tenants: { enabled: true },
    info: { enabled: true },
    search: {
      enabled: true,
      tabs: {
        users: true,
        sites: true,
        phoneNumbers: true,
        devices: true,
      },
    },
    synchronisation: {
      enabled: true,
      tabs: {
        tenants: true,
        sites: true,
        users: true,
      },
    },
  },
  tenant: {
    tenantHome: {
      enabled: true,
      widgets: {
        groupsWidget: true,
        licensesWidget: true,
        phoneNumbersWidget: true,
        mobileNumbersWidget: true,
        onlineChargingWidget: false,
      },
    },
    tenantChangeLog: { enabled: true },
    tenantDetail: {
      enabled: true,
      tabs: {
        main: true,
        voiceMessagingSettings: true,
      },
    },
    tenantAccounts: {
      enabled: true,
      tabs: {
        users: {
          enabled: true,
          tabs: {
            list: true,
            kpi: true,
            kpiReport: false,
            bulkCreations: true,
            bulkUpdates: true,
            bulkJobs: false,
          },
        },
        workspaces: false,
        virtualExtensions: true,
        trunkingDIDs: {
          enabled: true,
          tabs: {
            list: true,
          },
        },
      },
    },
    groups: { enabled: true },
    tenantLicenses: {
      enabled: true,
      tabs: {
        UserLicenses: true,
        NumberEntitlements: false,
        Orders: false,
      },
    },
    tenantPhoneNumbers: {
      enabled: true,
      tabs: {
        assignedNumbers: true,
        disconnected: true,
        reserved: true,
      },
    },
    tenantSchedules: {
      enabled: true,
      tabs: {
        time_schedules: false,
        time_schedules_advanced: true,
        calendar_schedules: true,
      },
    },
    tenantScheduleInfo: {
      enabled: true,
    },
    tenantCallFlows: {
      enabled: true,
      tabs: {
        IVRs: {
          enabled: true,
          tabs: {
            list: true,
            kpi: true,
            kpiReport: false,
          },
        },
        queues: {
          enabled: true,
          tabs: {
            list: true,
            kpi: true,
            kpiReport: false,
          },
        },
        callCenters: {
          enabled: true,
          tabs: {
            list: true,
            kpi: true,
            kpiReport: false,
            unavailableCodes: true,
          },
        },
        callCentersPremium: {
          enabled: true,
          tabs: {
            list: true,
            kpi: true,
            kpiReport: false,
            dispositionCodes: true,
            unavailableCodes: true,
          },
        },
        routePoints: {
          enabled: true,
          tabs: {
            list: true,
            kpi: false, // page does not exist
            kpiReport: false, // page does not exist
            dispositionCodes: true,
            unavailableCodes: true,
          },
        },
        huntGroups: {
          enabled: true,
          tabs: {
            list: true,
            kpi: true,
            kpiReport: false,
          },
        },
        exclusiveHuntGroups: {
          enabled: false,
          tabs: {
            list: true,
            kpi: false, // page does not exist
            kpiReport: false, // page does not exist
          },
        },
        groupPagings: {
          enabled: true,
          tabs: {
            list: true,
            settings: true,
          },
        },
        instantGroupCalls: {
          enabled: true,
          tabs: {
            list: true,
          },
        },
      },
    },

    tenantMobility: { enabled: true },
    tenantContacts: {
      enabled: true,
      tabs: {
        phoneBook: true,
        virtualExtensions: true,
      },
    },
    tenantAdmins: { enabled: true },
    tenantPortingRequests: {
      enabled: true,
    },
    tenantCloudConnections: {
      enabled: true,
      tabs: {
        'msteams-operator-connect': {
          enabled: true,
          tabs: {
            tenant: true,
            licenses: true,
            numbers: true,
            users: false,
            resourceAccounts: false,
          },
        },
        'msteams-direct-routing': {
          enabled: true,
          tabs: {
            tenant: true,
            integration: true,
          },
        },
        webex: {
          enabled: false,
        },
        zoom: {
          enabled: false,
        },
      },
    },
    tenantTrunkingGroups: {
      enabled: true,
    },
    tenantPortingRequestsInstance: { enabled: true },
    tenantSearch: {
      enabled: true,
      tabs: {
        users: true,
        devices: true,
        sites: true,
      },
    },
    tenantSynchronisation: {
      enabled: true,
      tabs: {
        groups: true,
        users: true,
      },
    },
    tenantStatistics: {
      enabled: true,
      tabs: {
        tenant: true,
        site: true,
        cdrs: true,
      },
    },
    tenantExternalAnalytics: {
      enabled: false,
      tabs: {
        tenantCcReporting: true,
      },
    },
  },
  group: {
    groupHome: {
      enabled: true,
      widgets: {
        statistic: {
          enabled: true,
          blocks: {
            IVR: true,
            huntGroups: true,
            exclusiveHuntGroups: false,
            queues: true,
            callCenter: true,
            pickupGroups: true,
            callCenterPremium: true,
            routePoints: true,
            groupPagings: true,
            instantGroupCalls: true,
          },
        },
        licensesWidget: true,
        usersWidget: true,
        assignedNumbers: true,
        devicesWidget: true,
      },
    },
    groupCallFlows: {
      enabled: true,
      tabs: {
        IVRs: {
          enabled: true,
          tabs: {
            list: true,
            kpi: true,
            kpiReport: false,
          },
        },
        queues: {
          enabled: true,
          tabs: {
            list: true,
            kpi: true,
            kpiReport: false,
          },
        },
        callCenters: {
          enabled: true,
          tabs: {
            list: true,
            kpi: true,
            kpiReport: false,
            unavailableCodes: true,
          },
        },
        callCentersPremium: {
          enabled: true,
          tabs: {
            list: true,
            kpi: true,
            kpiReport: false,
            dispositionCodes: true,
            unavailableCodes: true,
          },
        },
        huntGroups: {
          enabled: true,
          tabs: {
            list: true,
            kpi: true,
            kpiReport: false,
          },
        },
        exclusiveHuntGroups: {
          enabled: false,
          tabs: {
            list: true,
            kpi: false,
            kpiReport: false,
          },
        },
        routePoints: {
          enabled: true,
          tabs: {
            list: true,
            kpi: false,
            kpiReport: false,
            dispositionCodes: true,
            unavailableCodes: true,
          },
        },
        instantGroupCalls: {
          enabled: true,
          tabs: {
            list: true,
          },
        },
        pickupGroups: true,
        externalServices: false,
        groupPagings: {
          enabled: true,
          tabs: {
            list: true,
            settings: true,
          },
        },
      },
    },
    groupAccounts: {
      enabled: true,
      tabs: {
        users: {
          enabled: true,
          tabs: {
            list: true,
            kpi: true,
            kpiReport: false,
            bulkUpdates: true,
            bulkJobs: true,
          },
        },
        workspaces: false,
        virtualExtensions: true,
        trunkingDIDs: {
          enabled: true,
          tabs: {
            list: true,
          },
        },
      },
    },
    groupChangeLog: { enabled: true },
    groupDetail: {
      enabled: true,
      tabs: {
        main: true,
        extensionSettings: true,
        voicePortal: true,
        callRecordingPlatform: true,
        inventoryReport: true,
      },
    },
    groupContacts: {
      enabled: true,
      tabs: {
        phoneBook: true,
        virtualExtensions: true,
      },
    },
    groupPhoneNumbers: {
      enabled: true,
    },
    groupMobility: {
      enabled: true,
    },
    groupLicenses: {
      enabled: true,
      tabs: {
        GroupUserLicenses: true,
      },
    },
    groupSchedules: {
      enabled: true,
      tabs: {
        time_schedules: false,
        time_schedules_advanced: true,
        calendar_schedules: true,
      },
    },
    groupScheduleInfo: {
      enabled: true,
    },
    groupDepartments: {
      enabled: true,
    },
    groupCloudConnections: {
      enabled: true,
      tabs: {
        'msteams-direct-routing': {
          enabled: true,
          tabs: {
            general: true,
            trunking: true,
          },
        },
        webex: {
          enabled: false,
        },
        zoom: {
          enabled: false,
        },
      },
    },
    groupCallingSettings: {
      enabled: true,
      tabs: {
        callingPlan: true,
        incomingCallingPlan: true,
        digitsStrings: true,
        authCodes: true,
        featureAccessCodes: true,
        groupForwarding: true,
        callCapacityGroups: true,
        CallParkGroups: {
          enabled: true,
          tabs: {
            members: true,
            settings: true,
          },
        },
        callProcessingPolicy: true,
        faxToEmail: {
          enabled: false,
        },
      },
    },
    groupDevices: {
      enabled: true,
      tabs: {
        devicesInventory: true,
        devicesOptions: true,
      },
    },
    groupMedia: {
      enabled: true,
      tabs: {
        announcements: true,
        musicOnHold: true,
        customRingback: true,
      },
    },
    groupAdmin: {
      enabled: true,
    },
    groupTrunking: {
      enabled: true,
    },
    groupStatistics: {
      enabled: true,
      tabs: {
        site: true,
        cdrs: true,
      },
    },
    groupExternalAnalytics: {
      enabled: false,
      tabs: {
        groupCcReporting: true,
      },
    },
  },
  user: {
    userHome: {
      enabled: true,
      widgets: {
        webex: { enabled: true, advanced: true, displayNotAssigned: false },
        callSettings: {
          enabled: true,
          advanced: false,
          displayNotAssigned: false,
        },
        privacyCallSettings: {
          enabled: true,
          advanced: false,
          displayNotAssigned: false,
        },
        mobilityContainer: {
          enabled: true,
          advanced: false,
          displayNotAssigned: false,
        },
        callLogs: { enabled: true, advanced: false, displayNotAssigned: false },
        voicemail: {
          enabled: true,
          advanced: false,
          displayNotAssigned: false,
        },
        registrations: { enabled: true, advanced: true },
        callCenters: {
          enabled: true,
          advanced: false,
          displayNotAssigned: false,
        },
        callings: { enabled: true, advanced: false },
        callRecording: {
          enabled: true,
          advanced: false,
          displayNotAssigned: false,
        },
        businessMode: {
          enabled: false,
          advanced: false,
          displayNotAssigned: false,
        },
        receptionist: {
          enabled: true,
          advanced: false,
          displayNotAssigned: false,
        },
      },
    },
    userChangeLog: { enabled: true },
    userDetail: {
      enabled: true,
      tabs: {
        main: { enabled: true, advanced: false },
        licenses: { enabled: true, advanced: true },
        phoneNumbers: { enabled: true, advanced: false },
        userIds: { enabled: true, advanced: true },
        featureAccessCodes: { enabled: true, advanced: false },
        externalApplications: { enabled: false, advanced: true },
        webexAccount: { enabled: true, advanced: true },
        msTeamsAccount: { enabled: true, advanced: true },
        advancedSettings: {
          enabled: true,
          advanced: true,
        },
      },
    },
    userAdvancedSettings: {
      enabled: true,
      advanced: true,
      tabs: {
        interceptSettings: true,
        privacySettings: true,
        groupPagings: true,
      },
    },
    userRecentCalls: {
      enabled: true,
    },
    userColleagueInfo: {
      enabled: true,
    },
    userContacts: {
      enabled: true,
      tabs: {
        phoneBook: { enabled: true, advanced: false },
        speedDial8: { enabled: true, advanced: true },
        speedDial100: { enabled: true, advanced: true },
        siteDirectory: { enabled: true, advanced: false },
        busyLampField: { enabled: true, advanced: true },
      },
    },
    userIncomingCalls: {
      enabled: true,
      tabs: {
        callForwardingServices: { enabled: true, advanced: false },
        callBlocking: { enabled: true, advanced: true },
        callIdPresentation: { enabled: true, advanced: false },
        sequentialRing: { enabled: true, advanced: true },
        callNotify: { enabled: true, advanced: true },
        announcement: { enabled: true, advanced: true },
        selectingForwarding: { enabled: true, advanced: true },
        simultaneousRing: { enabled: true, advanced: true },
        priorityAlert: { enabled: true, advanced: true },
        pushToTalk: { enabled: true, advanced: true },
        automaticHoldRetrieve: {
          enabled: true,
          advanced: true,
        },
        incomingCallPlan: { enabled: true, advanced: true },
        customRingback: { enabled: true, advanced: true },
        dontDisturb: {
          enabled: true,
          advanced: false,
        },
        callWaiting: {
          enabled: true,
          advanced: true,
        },
      },
    },
    userExecutivesAndAssistants: {
      enabled: true,
      advanced: true,
      tabs: {
        userExecutiveAssistants: true,
        userExecutives: true,
      },
    },
    userOutgoingCalls: {
      enabled: true,
      tabs: {
        settings: { enabled: true, advanced: false },
        callingPlan: { enabled: true, advanced: false },
        pushToTalk: { enabled: true, advanced: true },
      },
    },
    userReceptionist: {
      enabled: true,
      tabs: {
        receptionistOffice: { enabled: true, advanced: false },
        receptionistSmallBusiness: { enabled: true, advanced: false },
        receptionistEnterprise: { enabled: true, advanced: false },
      },
    },
    userDevices: {
      enabled: true,
      advanced: true,
      tabs: {
        SIPphones: true,
        SIPcredentials: true,
        flexibleSeat: true,
        registration: true,
      },
    },
    userMobility: {
      enabled: true,
      advanced: true,
      tabs: {
        onNetMobility: true,
        offNetMobility: true,
        remoteOffice: true,
        businessMode: false,
      },
    },
    userVoicemail: {
      enabled: true,
      advanced: false,
      tabs: {
        inbox: true,
        settings: true,
        announcements: true,
        voicePasscode: true,
      },
    },
    userSchedules: {
      enabled: true,
      advanced: true,
      tabs: {
        time_schedules: false,
        time_schedules_advanced: true,
        calendar_schedules: true,
      },
    },
    userScheduleInfo: {
      enabled: true,
    },
    userMedia: {
      enabled: true,
      advanced: false,
      tabs: {
        announcements: true,
        musicOnHold: true,
      },
    },
    userCallCenter: {
      enabled: true,
    },
    userCallRecording: {
      enabled: true,
      advanced: false,
    },
    userAdvancedCallLogs: {
      // Disabled and not yet in app.routes.json as the feature is not yet officially delivered
      enabled: false,
      advanced: true,
    },
    userExternalVoicemail: {
      enabled: false,
    },
    userExternalAnalytics: {
      enabled: true,
      advanced: true,
      tabs: {
        userCcReporting: { enabled: true },
      },
    },
  },
  IVR: {
    groupIvrHome: {
      enabled: true,
    },
    groupIvrChangeLog: { enabled: true },
    groupIvrDetail: {
      enabled: true,
      tabs: {
        main: true,
        featureOptions: true,
        phoneNumbers: true,
        featureAccessCodes: { enabled: true, advanced: false },
      },
    },
    groupIvrRecentCalls: {
      enabled: true,
    },
    groupIvrMenus: {
      enabled: true,
      tabs: {
        businessHours: true,
        afterHours: true,
        holiday: true,
        submenu: true,
      },
    },
    groupIvrIncomingCalls: {
      enabled: true,
      tabs: {
        callForwardingServices: true,
        callBlocking: true,
        callNotify: true,
        announcement: true,
        selectingForwarding: true,
        incomingCallPlan: true,
      },
    },
    groupIvrOutgoingCalls: {
      enabled: true,
      tabs: {
        settings: true,
        callingPlan: true,
      },
    },
    groupIvrVoicemail: {
      enabled: true,
      tabs: {
        inbox: true,
        settings: true,
        announcements: true,
        voicePasscode: true,
      },
    },
    groupIvrSchedules: {
      enabled: true,
    },
    groupIvrMedia: {
      enabled: true,
    },
    groupIVRStatistics: {
      enabled: false,
    },
    groupIvrSettings: {
      enabled: true,
      tabs: {
        privacySettings: true,
      },
    },
  },
  'hunt group': {
    groupHuntGroupHome: {
      enabled: false,
    },
    groupHuntGroupSettings: {
      enabled: true,
      tabs: {
        huntingMode: true,
        forwardingSettings: true,
        advancedSettings: true,
        privacySettings: true,
        callingLineIDSettings: true,
      },
    },
    groupHuntGroupRecentCalls: {
      enabled: true,
    },
    groupHuntGroupAgents: {
      enabled: true,
    },
    groupHuntGroupIncomingCalls: {
      enabled: true,
      tabs: {
        callForwardingServices: true,
        callBlocking: true,
        callNotify: true,
        announcement: true,
        selectingForwarding: true,
        incomingCallPlan: true,
      },
    },
    groupHuntGroupOutgoingCalls: {
      enabled: true,
      tabs: {
        settings: true,
        callingPlan: true,
      },
    },
    groupHuntGroupVoicemail: {
      enabled: true,
      tabs: {
        inbox: true,
        settings: true,
        announcements: true,
        voicePasscode: true,
      },
    },
    groupHuntGroupMedia: {
      enabled: true,
    },
    groupHuntGroupChangeLog: { enabled: true },
    groupHuntGroupDetail: {
      enabled: true,
      tabs: {
        main: true,
        featureOptions: true,
        phoneNumbers: true,
        featureAccessCodes: { enabled: true, advanced: false },
      },
    },
    groupHuntGroupStatistics: {
      enabled: false,
    },
  },
  'exclusive hunt group': {
    groupExclusiveHuntGroupHome: {
      enabled: false,
    },
    groupExclusiveHuntGroupSettings: {
      enabled: true,
      tabs: {
        huntingMode: true,
        forwardingSettings: true,
        advancedSettings: true,
      },
    },
    groupExclusiveHuntGroupRecentCalls: {
      enabled: true,
    },
    groupExclusiveHuntGroupAgents: {
      enabled: true,
    },
    groupExclusiveHuntGroupIncomingCalls: {
      enabled: true,
      tabs: {
        callForwardingServices: true,
        callBlocking: true,
        callNotify: true,
        announcement: true,
        selectingForwarding: true,
        incomingCallPlan: true,
      },
    },
    groupExclusiveHuntGroupOutgoingCalls: {
      enabled: true,
      tabs: {
        settings: true,
        callingPlan: true,
      },
    },
    groupExclusiveHuntGroupVoicemail: {
      enabled: false,
      tabs: {
        inbox: true,
        settings: true,
        announcements: true,
      },
    },
    groupExclusiveHuntGroupMedia: {
      enabled: true,
    },
    groupExclusiveHuntGroupChangeLog: {
      enabled: false,
    },
    groupExclusiveHuntGroupDetail: {
      enabled: true,
      tabs: {
        main: true,
        featureOptions: true,
        phoneNumbers: true,
        featureAccessCodes: { enabled: true, advanced: false },
      },
    },
    groupExclusiveHuntGroupStatistics: {
      enabled: false,
    },
  },
  'call queue': {
    groupCallQueueSettings: {
      enabled: true,
      tabs: {
        callQueuePolicy: true,
        bouncedSettings: true,
        overflowSettings: true,
        agentSettings: true,
        advancedSettings: true,
        privacySettings: true,
      },
    },
    groupCallQueueRecentCalls: {
      enabled: true,
    },
    groupCallQueueAgents: {
      enabled: true,
    },
    groupCallQueueIncomingCalls: {
      enabled: true,
      tabs: {
        callForwardingServices: true,
        callBlocking: true,
        callNotify: true,
        announcement: true,
        selectingForwarding: true,
        incomingCallPlan: true,
      },
    },
    groupCallQueueOutgoingCalls: {
      enabled: true,
      tabs: {
        settings: true,
        callingPlan: true,
      },
    },
    groupCallQueueMedia: {
      enabled: true,
    },
    groupCallQueueHome: {
      enabled: false,
    },
    groupCallQueueVoicemail: {
      enabled: true,
      tabs: {
        inbox: true,
        settings: true,
        announcements: true,
        voicePasscode: true,
      },
    },
    groupCallQueueChangeLog: { enabled: true },
    groupCallQueueDetail: {
      enabled: true,
      tabs: {
        main: true,
        featureOptions: true,
        phoneNumbers: true,
        featureAccessCodes: { enabled: true, advanced: false },
      },
    },
    groupCallQueueStatistics: {
      enabled: false,
    },
  },
  'call center': {
    groupCallCenterHome: {
      enabled: true,
      widgets: {
        agents: true,
        inboundCalls: true,
        waitingTimes: true,
        agentStatistics: true,
        callLogs: true,
        callSettings: true,
        hideMyNumbers: true,
        callCenters: true,
        voiceMails: true,
      },
    },
    groupCallCenterSettings: {
      enabled: true,
      tabs: {
        callQueuePolicy: true,
        bouncedSettings: true,
        overflowSettings: true,
        agentSettings: true,
        advancedSettings: true,
        strandedCalls: true,
        dailyReportSettings: true,
        unavailableCodes: true,
        privacySettings: true,
      },
    },
    groupCallCenterRecentCalls: {
      enabled: true,
    },
    groupCallCenterAgents: {
      enabled: true,
    },
    groupCallCenterSupervisors: {
      enabled: true,
    },
    groupCallCenterIncomingCalls: {
      enabled: true,
      tabs: {
        callForwardingServices: true,
        callBlocking: true,
        callNotify: true,
        announcement: true,
        selectingForwarding: true,
        incomingCallPlan: true,
      },
    },
    groupCallCenterOutgoingCalls: {
      enabled: true,
      tabs: {
        settings: true,
        callingPlan: true,
      },
    },
    groupCallCenterVoicemail: {
      enabled: true,
      tabs: {
        inbox: true,
        settings: true,
        announcements: true,
        voicePasscode: true,
      },
    },
    groupCallCenterMedia: {
      enabled: true,
    },
    groupCallCenterChangeLog: { enabled: true },
    groupCallCenterDetail: {
      enabled: true,
      tabs: {
        main: true,
        featureOptions: true,
        phoneNumbers: true,
        featureAccessCodes: { enabled: true, advanced: false },
      },
    },
    groupCallCenterStatistics: {
      enabled: false,
    },
  },
  'route point': {
    groupRoutePointHome: {
      enabled: true,
      widgets: {
        agents: true,
        inboundCalls: true,
        waitingTimes: true,
        agentStatistics: true,
        callLogs: true,
        callSettings: true,
        hideMyNumbers: true,
        callCenters: true,
        voiceMails: true,
        dnis: true,
        schedules: true,
      },
    },
    groupRoutePointDetail: {
      enabled: true,
      tabs: {
        main: true,
        featureOptions: true,
        phoneNumbers: true,
        featureAccessCodes: { enabled: true, advanced: false },
      },
    },
    groupRoutePointSettings: {
      enabled: true,
      tabs: {
        callQueuePolicy: true,
        bouncedSettings: true,
        overflowSettings: true,
        agentSettings: true,
        advancedSettings: true,
        strandedCalls: true,
        dispositionCodes: true,
        unavailableCodes: true,
        dailyReportSettings: true,
        privacySettings: true,
      },
    },
    groupRoutePointRecentCalls: {
      enabled: true,
    },
    groupRoutePointSchedules: {
      enabled: true,
    },
    groupRoutePointDnis: {
      enabled: true,
      tabs: {
        dnisOverview: true,
        dnisAnnouncements: true,
      },
    },
    groupRoutePointIncomingCalls: {
      enabled: true,
      tabs: {
        callForwardingServices: true,
        callBlocking: true,
        callNotify: true,
        announcement: true,
        selectingForwarding: true,
        incomingCallPlan: true,
      },
    },
    groupRoutePointOutgoingCalls: {
      enabled: true,
      tabs: {
        settings: true,
        callingPlan: true,
      },
    },
    groupRoutePointVoicemail: {
      enabled: true,
      tabs: {
        inbox: true,
        settings: true,
        announcements: true,
        voicePasscode: true,
      },
    },
    groupRoutePointMedia: {
      enabled: true,
    },
  },
  callCenterPremium: {
    groupCallCenterPremiumHome: {
      enabled: true,
      widgets: {
        agents: true,
        inboundCalls: true,
        waitingTimes: true,
        agentStatistics: true,
        callLogs: true,
        callSettings: true,
        hideMyNumbers: true,
        callCenters: true,
        voiceMails: true,
        dnis: true,
        schedules: true,
      },
    },
    groupCallCenterPremiumChangeLog: { enabled: true },
    groupCallCenterPremiumDetail: {
      enabled: true,
      tabs: {
        main: true,
        featureOptions: true,
        phoneNumbers: true,
        featureAccessCodes: { enabled: true, advanced: false },
      },
    },
    groupCallCenterPremiumSettings: {
      enabled: true,
      tabs: {
        callQueuePolicy: true,
        queueStatusNotifications: true,
        bouncedSettings: true,
        overflowSettings: true,
        agentSettings: true,
        advancedSettings: true,
        strandedCalls: true,
        dispositionCodes: true,
        unavailableCodes: true,
        dailyReportSettings: true,
        privacySettings: true,
      },
    },
    groupCallCenterPremiumRecentCalls: {
      enabled: true,
    },
    groupCallCenterPremiumAgents: {
      enabled: true,
    },
    groupCallCenterPremiumSupervisors: {
      enabled: true,
    },
    groupCallCenterPremiumSchedules: {
      enabled: true,
    },
    groupCallCenterPremiumDnis: {
      enabled: true,
      tabs: {
        dnisOverview: true,
        dnisAnnouncements: true,
      },
    },
    groupCallCenterPremiumIncomingCalls: {
      enabled: true,
      tabs: {
        callForwardingServices: true,
        callBlocking: true,
        callNotify: true,
        announcement: true,
        selectingForwarding: true,
        incomingCallPlan: true,
      },
    },
    groupCallCenterPremiumOutgoingCalls: {
      enabled: true,
      tabs: {
        settings: true,
        callingPlan: true,
      },
    },
    groupCallCenterPremiumVoicemail: {
      enabled: true,
      tabs: {
        inbox: true,
        settings: true,
        announcements: true,
        voicePasscode: true,
      },
    },
    groupCallCenterPremiumMedia: {
      enabled: true,
    },
    groupCallCenterPremiumStatistics: {
      enabled: false,
    },
  },
  'group paging': {
    groupPagingHome: {
      enabled: false,
    },
    groupPagingSettings: {
      enabled: true,
      tabs: {
        originators: true,
        targets: true,
        privacy: true,
      },
    },
    groupPagingIncomingCalls: {
      enabled: true,
      tabs: {
        callBlocking: true,
        announcement: true,
        callForwardingServices: true,
        callNotify: true,
      },
    },
    groupPagingOutgoingCalls: {
      enabled: true,
      tabs: {
        settings: true,
      },
    },
    groupPagingMedia: {
      enabled: true,
    },
    groupPagingChangeLog: {
      enabled: false,
    },
    groupPagingDetail: {
      enabled: true,
      tabs: {
        main: true,
        features: true,
        phoneNumbers: true,
        featureAccessCodes: { enabled: true, advanced: false },
      },
    },
  },
  'instant group call': {
    groupInstantGroupCallHome: {
      enabled: true,
    },
    groupInstantGroupCallChangeLog: {
      enabled: true,
    },
    groupInstantGroupCallDetail: {
      enabled: true,
      tabs: {
        main: true,
        featureOptions: true,
        phoneNumbers: true,
        featureAccessCodes: { enabled: true, advanced: false },
      },
    },
    groupInstantGroupCallSettings: {
      enabled: true,
      tabs: {
        igcCallPolicies: true,
        igcMaxTimeUnanswered: true,
        igcUsersList: true,
        privacySettings: true,
      },
    },
  },
}