Finesse Team Layouts

UpdateTeamsLayout.py
# Gerry O'Rourke
# 30 September 2024
# Version 1.0
 
#################################################################################################################################################
# 1. Configure a template Finesse config against an individual team using Finesse Admin GUI and confirm all OK.                                 #
# Document the Team ID which has been configured with this template (team ID is a column on the Finesse Admin teams page)                       #
#                                                                                                                                               #
# 2. Download the template using the API - https://<finesse-server/finesse/api/Team/<Team-ID>/LayoutConfig                                      #
# example: https://finesse-a.example.com/finesse/api/Team/5259/LayoutConfig                                                                     #
# This will ensure that the xml file is in the correct format.                                                                                  # 
# Note - you can use a browser to do this. You will be prompted for the Finesse admin's username & password. 									#
# and once the layout xml is displayed on the screen -  just right click and select "Save As" 													#
#                                                                                                                                               #
# 3. Upload the template to a webserver - in the below example I upload to the IIS Server where I also run the python script,                   #
# hence I use http://localhost.                                                                                                                 #
#                                                                                                                                               #
# 4. Configure the team_ids array and the layoutName Variable (the filename)- as per below example.                                             #
# NOTE - If layoutName is NOT set - the default layout is assumed! 																				#
#                                                                                                                                               #
# 5. Configure the Finesse URL, admin, password and the webserver url where the layoutName templates are located.								#
# 																																				#
# The script will downloads the XML template file and uploads it to the relevant teams (with a delay of 0.5 seconds between each team).         #
# Repeat the steps for each Template and group of teams you need to update                                                                      #
#################################################################################################################################################
 
import requests # used for http requests
from requests.auth import HTTPBasicAuth
import sys # used for sys.exit
import urllib3 # 
import os #check / creating folders
urllib3.disable_warnings() #Surpress cert warnings
import xml.etree.ElementTree as ET
from time import sleep
 
# Set Finesse FQDN, username & password below
finesseHost = 'ucce-finesse-a.example.com'
finesseUsername = 'admin'
finessePassword = 'Pa$$w0rd'
 
# Location where you place the layout templates you want to upload to Finesse.
template_base_url = 'http://localhost/layouts/'
 
# Set team_ids & set 'layoutName'. If no layoutName set - it will set those teams to use the default layout. 
# i.e. comment out 'layoutName' is you want to set the default layout for those teams.
 
#Team1
#team_ids = [5075] 
#layoutName = 'Layout-simple-template1.xml'
 
#Team2
#team_ids = [5333] 
#layoutName = 'Layout-simple-template2.xml'
 
#BothTeams (set as many team ids you need)
team_ids = [5075,5333] 
layoutName = 'Layout-Home-MyStats-MyHist-LCM-Chat-PeopleFinder.xml' # all gadgets example
 
 
##################################################################################################################################################
 
def get_layout():
    url = template_base_url + '/' + layoutName 
    response = requests.get(url)
    responseStatusCode = (response.status_code)
    responseText = response.text
    if (responseStatusCode == 200):
        #print(responseText)
        xml = responseText
 
        for id in team_ids:
            layout_update(id,xml)
            sleep(500/1000)
    else:
        print('StatusCode: ' + str(responseStatusCode))
        print('failed to retrieve Layout File: ' + layoutName)
 
def layout_update(id,xml):
    url = 'https://' + finesseHost + '/finesse/api/Team/' + str(id) + '/LayoutConfig'
    basic = HTTPBasicAuth(finesseUsername, finessePassword)
    response = requests.put(url, verify=False, auth=basic, headers={"Content-Type":"application/xml"}, data = xml)
    responseStatusCode = (response.status_code)
    responseText = response.text
    if (responseStatusCode == 200):
        print('Team Id: ' + str(id) + ' updated.')
    else:
        print ('statusCode: ' + str(responseStatusCode))
        print('Layout Update failed with team id ' + str(id))    
        print (xml)
        exit(1)
 
def are_you_sure():
    confirm = input('\nAre you sure you want to continue (Y/N)?')
    if confirm == 'Y' or confirm =='y':
        print("...")
    else:
        print("No Confirmation Inputted. Exiting...\n") 
        exit()
 
try:
    team_ids
except NameError:
    print("'team_ids' has been not defined.\nSet 'team_ids' correctly. Exiting...")
    exit(1)
else:
    print("'team_ids' is set to: " + str(team_ids)) 
 
try:
    layoutName
except NameError:
    print("'layoutName' has been NOT been defined, hence the **default** layout will be set for these teams.")
    are_you_sure()
    print('Starting Layout Update...') 
    xml = '<TeamLayoutConfig><useDefault>true</useDefault></TeamLayoutConfig>'
    for id in team_ids:
        layout_update(id,xml)
        sleep(500/1000)
 
else:
    print("'layoutName' is set to: " + layoutName + '\n') 
    print('Starting Layout Update...')
    are_you_sure()
    get_layout()
  • vendors/cisco/uc/ucce/finesse/layouts.txt
  • Last modified: 2024/09/30 17:25
  • by gerardorourke