Event-Triggered Maintenance
Table of Contents
Adding New Users
When new GAINS users need to be added to Zendesk as agents/light agents:
- Submit a ticket to AppOps to add the user to the appropriate Active Directory groups:
- Zendesk_Administrators - This should be limited to Agents intended to have Administrator access to Zendesk (currently John, Maroline, Mike, Jeff, Laurie, Sergio, and Matt)
- Zendesk_Agents - This is a license-limited group, and only GAINS users in Professional Services and AppOps should be given this access.
- Zendesk_LightAgents - Developers, Product, and other tech team members should be added to this group so they can view tickets and interact with them
- Zendesk_EndUsers - All GAINS users can be added to this group to prompt the creation of an end user account, but it only gives them access to the help center (help.gainsystems.com), and will not allow them access to the Agent portal (gains.zendesk.com). It's important to note that this is not required as users should be able to register for an end user account freely. Registration with an @gainsystems.com email will automatically add them to the GAINS organization.
- Note: it takes up to 30 minutes for the designation to propagate from AD to Azure, and finally to Zendesk.
- Once the user appears in Zendesk (applicable to Agents only):
- Ensure they have appropriate permissions:
- Guide Admin Center >> People >> Team >> Team Members
- Click on the user's name
- In the Role and Access tab, ensure they have access to Support as an Agent, Guide as an Agent, and Explore as a Viewer
- Ensure they are part of the appropriate groups and have a proper default group:
- Navigate to Support
- In the search box, enter their name
- In the results tab, click on the Users tab
- Click on their name
- On the left, click on Groups
- Select the appropriate groups
- At the bottom, designate the most appropriate Default Group
- Click Close
- Fill out other fields as appropriate
- Ensure they have appropriate permissions:
- If the user is a member of the Professional Services group:
- The user will need to be added to the Organization Account Manager dropdowns (Admin Center >> People >> Configuration >> Organization Fields). Add the user's name (in "Last, First" format) to the following fields:
- Primary Account Manager
- Additional Account Manager 1
- Additional Account Manager 2
- A triggers should be created for the user that adds them as a Follower to any tickets for customers for which they are account managers, and assigns tickets directly to them in the event they are the primary account manager and the customer is in Hypercare (Admin Center >> Objects and Rules >> Business Rules >> Triggers).
- Under the Set Primary Account Manager category:
- Click into an existing "Set Account Manager as Follower - Name" trigger
- In the upper right, click the 3 dots menu (...) and click Clone
- Rename the trigger "Set Account Manager as Follower - [Last, First]"
- Designate the account manager's name in each of the following conditions: Primary Account Manager, Additional Account Manager 1, and Additional Account Manager 2
- In the actions section, ensure it reads "Add Follower" and designates the new account manager's name
- Click Create
- Under the Bypass Customer Support in Hypercare category:
- Click into an existing "Route tickets to Primary Account Manager when Hypercare - Name" trigger
- In the upper right, click the 3 dots menu (...) and click Clone
- Rename the trigger "Route tickets to Primary Account Manager when Hypercare - [Last, First]"
- Designate the account manager's name in the Primary Account Manager condition.
- In the actions section, ensure it reads "Assignee" and designates the new account manager's name
- Click Create
- Under the Set Primary Account Manager category:
- If the new account manager is initially assigned to any customers, ensure that they are designated in the customer's Organization page as the Primary Account Manager, Additional Account Manager 1, or Additional Account Manager 2
- The user will need to be added to the Organization Account Manager dropdowns (Admin Center >> People >> Configuration >> Organization Fields). Add the user's name (in "Last, First" format) to the following fields:
Adding a New Value Added Reseller (VAR)
NetLogistik and Accenture are two Value Added Resellers that we partner with. They should more detailed forms like GAINS Staff for submitting tickets than most customers, as they have more technical know-how. However, we cannot expose our Staff Form to them because it contains information about our Customer list and our internal infrastructure. We create a separate clone form of our internal Staff Form that has a reduced customer list (must be a new field with only their customers). The Request Type field should also be cloned, taking all but identifiers related to GAINS out (hardware, networking, in-house VMs, etc).
When a new VAR is added, we also have to remove the forms they should not have access to in the Help Center Form. You can do so using the commented out template code below in the Hide & Show Ticket Forms Based on Organizations section. The code is commented out in gold.
Help Center Theme Updates
When the help center theme is updated, it would behoove us to ensure that our manual changes to the theme carry over.
Our current theme is Copenhagen. To customize the theme and manage these items, navigate to Guide >> Guide Admin >> 👁️ (Customize Design) >> under Live Theme, click Customize >> Edit Code (bottom right). The information below identifies which assets in theme are updated.
Limit Article Suggestions to Customer in Ticket Form
3/6/23 - For customer experience improvements, Laurie suggested that fewer suggestions be made to the customer when they are designating a subject line.
Updates to Style.css
/** Limit number of article suggestions to suggestions < x in (n+x)
For example, if you wanted to limit to 3, expressions should be (n+4) **/
.searchbox-suggestions li:nth-child(n+4) {
display: none;
}
Move CC's to End of Help Center Ticket Form
3/6/23 - For customer experience improvements, Laurie suggested that CC's be moved to the end of the form.
Updates to Style.css
/** Reorder fields in help center form, CC's at the end **/
/** Everything else after subject and cc and before footer **/
#new_request {
display: flex;
width: 100%;
flex-direction: column;
}
.form-field ~ .form-field {order: 0;}
/* When moving the CC list, a space appears over the Request Type from the suggestion list.
We commented out the "margin-top: 30px" line in the .form .suggestion-list element
(~ line 630) then use this to apply the margin-top only when suggestion list is visible. */
.form .suggestion-list h2 {
margin-top: 25px;
}
/* Replace FIELDID with your custom ID (ex: if your field id is 'request_custom_fields_1500007306061_label' then, replace FIELDID with 1500007306061 ) */
.form footer,
.form-field.request_cc_emails {
order: 1;
}
Hide & Show Ticket Forms Based on Organizations
Zendesk Implementation - In order to maintain separate forms for each partner, the customer, and GAINS staff, this workaround allows us to designate which forms are available based on organization. The primary purpose in this is to minimize extraneous fields to customers and prevent customers and partners from accessing our customer list.
Updates to document_head.hbs
<script src="https://code.jquery.com/jquery-3.6.0.js" integrity="sha256-H+K7U5CnXl1h5ywQfKtSj8PCmoN9aaq30gDh27Xc0jk=" crossorigin="anonymous"></script>
Note: This should be updated with the latest jquery with some level of regularity.
- Google "JQuery link"
- Click on the link for jQuery CDN (releases.jquery.com)
- Select the uncompressed version of the most recent stable release
- Copy the <script></script> from the Code Integration popup
- Paste in place of existing jQuery script in document_head.hbs
Updates to script.js
The following code block is what prevents the forms from showing to organization users who shouldn't see them.
This code identifies if a user is a member of specific organizations, then hides a given segment's appropriate form(s) if the user is not a member of that segment.
- Assume user is part of no organization
- Check if the user belongs to the GAINS organization, if yes, set isGAINS = true
- (inactive) Check if the user belongs to the Accenture organization, if yes, set isAcc = true
- (inactive) Check if the user belongs to the NetLogistik organization, if yes, set isNLG = true
- If the user does not belong to the above organizations, set isCustomer = true
- If the user is not a customer, hide the Customer Support Form
- (inactive) If the user is not an Accenture user, hide the Accenture Form
- (inactive) If the user is not a NetLogistik user, hide the NetLogistik Form
- If the user is not a GAINS user, hide the GAINS Staff Support Form (inactive), and the GAINS Staff Form (active)
Note: The steps above in grey are inactive because the code below in green is commented out. If we ever create separate forms for Accenture and NetLogistik as planned, the code should be uncommented.
This code gets pasted into the end of script.js
//Hide Form Based on User Organization Membership
$(window).on('load', function() {
var i = 0;
isGAINS = false;
isAcc = false;
isNLG = false;
/* THIS COMMENT BLOCK IS A TEMPLATE FOR A NEW VAR
SHOULD WE EVER ADD ONE. RENAME VARIABLE ACCORDINGLY
isNewVAR = false;
*/
isCustomer = false;
var checkExist = setInterval(function() {
i++;
if ($("a.nesty-input").length){
clearInterval(checkExist);
$("a.nesty-input").each(function() {
$(this).bind( "click", function() {
for (var c in HelpCenter.user.organizations) {
console.log(HelpCenter.user.organizations[c].name);
if (HelpCenter.user.organizations[c].name == "GAINS"){
isGAINS = true;
//} else if (HelpCenter.user.organizations[c].name == "Accenture"){
// isAcc = true;
//} else if (HelpCenter.user.organizations[c].name == "NetLogistik"){
// isNLG = true;
/* THIS COMMENT BLOCK IS A TEMPLATE FOR A NEW VAR SHOULD WE
EVER ADD ONE. UPDATE VARIABLE NAME ACCORDING TO ABOVE.
} else if (HelpCenter.user.organizations[c].name == "NewVAROrgName"){
isNewVAR = true;
*/
} else {
isCustomer = true;
}
//reserve space for additional organizations
}
if (isCustomer == false){ //If not a Customer, remove the following
$("#5466646780315").remove(); // Customer Support Form
}
/*if (isAcc == false){ //If not a user from Accenture, remove the following
$("#AccForm").remove(); //Remove the Accenture form
}*/
/*if (isNLG == false){ //If not a user from Accenture, remove the following
$("#NLGForm").remove(); //Remove the NetLogistik Form
}*/
/* THIS COMMENT BLOCK IS A TEMPLATE FOR A NEW VAR SHOULD WE
EVER ADD ONE. UPDATE VARIABLE NAME ACCORDING TO ABOVE.
if (isNewVAR == false){ //If not a user from Accenture, remove the following
$("#NewVARForm").remove(); //Remove the New VAR Form
}*/
if (isGAINS == false){ //If not a GAINS User, remove the following
$("#4416918580507").remove(); // GAINS Staff Support Form (inactive)
$("#9034190278811").remove(); // GAINS Staff Form (active)
}
});
});
}
if (i > 10){
clearInterval(checkExist);
}
}, 100);
});
Note: Each time a new form is created, this needs to be updated.
Forms to hide are designated by form ID. If you need a form ID that isn't already listed above:
- Go to Zendesk Admin Center
- In Objects and Rules >> Tickets, select Forms
- Click on the form of which you need the ID
- In the address bar, you'll see an address like:
https://gains.zendesk.com/admin/objects-rules/tickets/ticket-forms/edit/5466646780315 - In the above example, the form ID is 5466646780315
To hide (remove) a given form, you'll repurpose the following code replacing "9034190278811" with the form ID from step 5 above. It should be placed within an if statement for the appropriate organization.
$("#9034190278811").remove();