Dell World User Forum 2013 December 9-12 Austin, TX K1000 Service Desk Advanced Gerald Gillespie & John Verbosky
A Typical Day in Corporate America 2
A funny thing happened to me on the way Mary in IT is walking around with stuff in their hands is stopped by someone they know John employee complains of problem Mary is all flustered,s he knows the answer but can t act on it Tells John to wait 5 seconds John knows it will be more like an hour so he goes to early lunch 3
Pay Me Now or Pay Me MORE Later Helpdesk is not one size fits all Good Platform Tailor it to meet your needs Everyone can probably benefit from some small changes Big Helpdesk Bigger changes Smaller Helpdesk Smaller changes 14% 32% 12% Statistics 82% Invented for PPT Meaningful Noise Stuff we spend too much time talking about 4
Advanced Helpdesk = ROI 5
The Truth Very important for an effective, tailored helpdesk* Email Best Practices Custom fields Hidden Queues Ticket Rules Shortcut URLs *in order from awesome to important 6
Email Best Practices Trust the K1000 to deliver your mail Do: Address emails directly to Queues Add other parties by using email tokens Add other parties by BCC: if necessary Click reply on emails from K1000 and reply only to that queue Do Not: Add other people to To: list nor CC: list for Queue bound email Use Rich-text only emails 7
Email Best Practices Use tokens to enhance modification and creation of tickets @labelname=value Use on new or existing Tokens must be at the top Regular body comes after Tokens are not in comments 8
Email Best Practices POP3 and SMTP secure configuration 5.5 added secure connections for getting email down and out of kbox Get email IN to your queues using specific POP3 configurations Get email OUT of your K1000 using SMTP relay Create User records that represent the addresses of your queues Even if you have LDAP create them local Use role login not allowed 9
Email Best Practices My awesome rule for emailing stakeholders Emails all stakeholders on a ticket Only emails people once E.g. if submitter ends up on cc list it will only email them once Marks CREATE, UPDATE or CLOSED in subject Puts the owner type of updater in subject E.g. subject: [TICK:123] UPDATED (submitter): Monitor broken 10
Email Best Practices Other awesome email rules you can implement without knowing a lot about rules Suite of rules to help with email loops K1000 is an auto-responder after all Notify a team (distribution list) on ticket creation Schedule the periodic creation of a ticket Periodic tasks 11
The Truth Very important for an effective, tailored helpdesk* Email Best Practices Custom Fields Hidden Queues Ticket Rules Shortcut URLs *in order from awesome to important 12
Custom Fields New datatypes all about user experience Datatypes for custom fields in the K1000 single select multi select text date (calendar picker) timestamp (picker) user (filtered list from Users tab) link (hyperlinked URL) Notes (large text field) Number Checkbox (easier true/false) 13
Custom Fields Advanced usage Can write to custom fields by email @custom_fieldname=value And by rules Update HD_TICKET set CUSTOM_15= new value where ID in (<TICKET_IDS>) Custom fields can hold the result of a query Type should be a select type Prefix is query: Return 1 column Order it by first column E.g. query: select NAME from MACHINE order by 1 14
The Truth Very important for an effective, tailored helpdesk* Email Best Practices Custom fields Hidden Queues Ticket Rules Shortcut URLs *in order from awesome to important 15
Hidden Queues Not really a secret Allow submitter to see the queue for ticket they created Can create queues that users cannot see Perhaps use processes to manage more granular tickets (child tickets) in a hidden queue Definitely create hidden queues for email traps root@k1000.company.com www@k1000.company.com Any other weird addresses you see for k1000.company.com in your mail gateway 16
Hidden Queues Root mail queue Turn off all email actions on this queue You can setup a rule to have it email you for notification if you like Allow all unknown submitters to email this queue 17
The Truth Very important for an effective, tailored helpdesk* Email Best Practices Custom fields Hidden Queues Ticket Rules Shortcut URLs *in order from awesome to important 18
Anatomy of a Ticket Rule 19
Ticket Rules Schedule & Priority Frequency and Order Each rule has a schedule Rules that run on save (click save or email received) Rules that run on batch (15 minutes, hourly, etc) Order is the tie breaker for rules that run at same time Can use order to implement a chain of logic Leave gaps in the order numbers to allow for future expansion. E.g. 100, 200, etc I like to make the order of all batch rules in the 1000 s for organization Can still control times in the rule itself 20
Ticket Rules Controlling time in a rule A rule that runs hourly but only returns results during business hours Select ID from HD_TICKET where hour(now()) >=8 and hour(now()) < 18 Can controls dates as well Foundation of SLA rules that I have published 21
Anatomy of a Ticket Rule 22
Ticket Rules Conditions to inspect select query select query is always attempted at the schedule Use query to look for a condition to action on Priority of the ticket is high Machine associate to the ticket has not sync d in 24 hours? If query returns 1 or more rows then it will continue. 0 rows returned will stop this rules execution but other rules scheduled at this time will still be attempted If you want to do an update then query should return a column called ID If you have multiple ID columns then last one is used Select HD_TICKET.ID, USER.ID from Alias secondary IDs for clarity Select HD_TICKET.ID, USER.ID as USER_ID 23
Ticket Rules Conditions to inspect select query select query is different based upon schedule On Ticket Save Always use <CHANGE_ID> and optionally <TICKET_JOIN> Select HD_TICKET.ID from HD_TICKET join HD_TICKET_CHANGE C on C.HD_TICKET_ID = HD_TICKET.ID and C.ID=<CHANGE_ID> where <TICKET_JOIN> Technically doesn t have to be about tickets but should be 15 Minutes, Hourly, etc Just run the query as if it s a report, but still return unique columns names (e.g. ID) Doesn t even have to be about tickets 24
Ticket Rules Conditions to inspect select query <CHANGE_ID> Special token in an on ticket save rule that provides the internal value of the last change (i.e. comment). Optional, but necessary when you want to obtain information about the change Like a trigger. Provides a reference for before and after values Example value: 12345 <TICKET_JOIN> Special token in an on ticket save rule that provides the ticket number reference for the ticket that triggered the save. Critical for all on ticket save rules If you don t use it then the system will secretly add it to end of the query. Example value: HD_TICKET.ID = 123 25
Ticket Rules Important tables for your select query Select ID From HD_TICKET Join HD_TICKET_CHANGE C on C.HD_TICKET_ID = HD_TICKET.ID And C.ID = <CHANGE_ID> Join HD_TICKET_CHANGE_FIELD F on F.HD_TICKET_CHANGE_ID = C.ID and F.FIELD_CHANGED= CUSTOM_FIELD_VALUE0 26
Anatomy of a Ticket Rule 27
Ticket Rules Insert Comment Only useful if your query is returning a ticket ID number or a grup of numbers Inserts a ticket comment User listed on comment is a generic system user called ticket rule (user id 0) Advanced usage is to put in a unique stub that you will change in your update E.g rule123stub Update HD_TICKET T set COMMENT = Just what do you think you\ re doing dave where T in (<TICKET_IDS>) and COMMENT= rule123stub New comment does not fire rules and rules yet to come <CHANGE_ID> will continue to be what it was 28
Anatomy of a Ticket Rule 29
Ticket Rules Email Results send query results to someone For testing or debugging use the general purpose send query results to someone Sends a simple table in an email with results. Equivalent to running the query in mysql workbench BUT with no guessing Can be used as a light-weight reporting mechanism with a schedule No attachments -- results are in email body 30
Ticket Rules Email Results send email for each result row Every row that is returned in the query can construct an email on ticket save rules typically return one row (one ticket) implying one email Example of one ticket returning many rows is the email all stakeholders rule E.g. Select HD_TICKET.ID, USER.EMAIL, USER_NAME from HD_TICKET join USER on USER.ID in (SUBMITTER_ID, OWNER_ID) where <TICKET_JOIN> But to keep it simple you could have two rules that do this job one for each user Subject, destination and contents of emails can use variables from query E.g. from above query Subject: [TICK:$id] ticket updated Email Column: EMAIL Body: Hi there $user_name 31
Anatomy of a Ticket Rule 32
Ticket Rules Modify Tickets Update Query Update query can do a modification of many tables in the K1000 including tickets The update query leverages the select query through <TICKET_IDS> token <TICKET_IDS> is a comma-separated list of all the entries from the select query s ID column. E.g 1 1,100,123 Usually wrapped in an in statement because of that feature Update HD_TICKET set CUSTOM_FIELD_VALUE0 = foo where ID in (<TICKET_IDS>) If you expect one result use = for safety. It will fail if not a single result Update HD_TICKET.. Where ID=<TICKET_IDS> 33
Ticket Rules Modify Tickets Update Query You can do INSERT/ REPLACE statements here, but not recommended Not future proof at all Sometimes hard to guess or compute values Usually require INSERTing into related tables so now you have to have multiple rules doing one INSERT so relationship can end up in a transient state Only for truly advanced usage REPLACE is if there is a chance the value already exists Good use case is to join two existing objects like a USER and a LABEL into USER_LABEL_JT Replace into USER_LABEL_JT(USER_ID, LABEL_ID) select U.ID, L.ID from USER U left join LABEL L on L.NAME = Needed label where L.ID is null 34
Ticket Rules Ticket Rule Run Log Run Log shows events and errors of the rule s last execution Purged each time it runs troubleshooting can be frustrating if something else can trigger rule and overwrite log If necessary have a rule that runs last to gather run logs. Output will be ugly though select ID,TITLE, LAST_RUN_LOG from HD_TICKET_RULE where MODIFIED > date_sub(now(), interval 5 minute) order by ORDINAL asc 35
The Truth Very important for an effective, tailored helpdesk* Email Best Practices Custom fields Hidden Queues Ticket Rules Shortcut URLs *in order from awesome to important 36
Shortcut URLs Modify or bookmark the URL directly to navigate directly to common locations to save time Login to the K1000 with http://k1000/adminui to expose full URL Navigate to places to learn the location Slightly modify the location to meet your needs E.g. Existing Ticket : http://k1000/adminui/ticket.php?id=1234 Existing KB Article: http://k1000/adminui/advisory.php?id=123 37
Select to retype header 38
Shortcut URLs My first ByNumber script 39 javascript:s=prompt('enter Ticket Number (blank for list)','');srt='?&order[]=sort_owner_name&order[]=priority_number&order[]=impact_ordinal&qu EUE_ID=';hst='https://support.kace.com/adminui';lst='/ticket_list.php';newwin=false;if(s.toLowerCase().substr(0, 5)=='webex'){newloc='https://kace.webex.com/kace/sc30/t.php?P='+s.substr(5,s.length).replace(/ /g,'').replace(/:/g,'');if(window.location.href.substr(0,24)=='https://support.kace.com'){newwin=true;}}ticket=new RegExp('%5E(%5B0-9%5D%7C%5B %5D)*%24');if(ticket.test(s)){newloc=hst+'/ticket.php?ID='+encodeURIComponent(s.replace(/ /g,''));}if(s.tolowercase()=='new'){newloc=hst+lst+'/ticket.php?queue_id=1';}bug=new RegExp('%5E%5BAz%5D%7B1%2C%7D%5B0-9%5D*-%5B0-9%5D%7B3%2C%7D%24');if(bug.test(s.replace(/ /g,''))){newloc='https://jira.kace.com/browse/'+s.replace(/ /g,'');if(window.location.href.substr(0,24)=='https://support.kace.com'){newwin=true;}}tether=new RegExp('%5Etether%5B%3A%5D%3F(%5B0-9%5D%7C%5B %5Ct%5D)*%24');if(tether.test(s.toLowerCase())){newloc='http://tether.kace.com/tethercpl/?forTicket='+s.substr(6,s.length).replace(/ /g,'').replace(/:/g,'');if(window.location.href.substr(0,24)=='https://support.kace.com'){newwin=true;}}if(s.tolower Case().substr(0,2)=='me'){newloc='https://support.kace.com/adminui/asset.php?ID=469';}if((s.toLowerCase()==' na' s.length==0 s==1)){newloc=hst+lst+srt+'1';}if(s.tolowercase()=='emea'){newloc=hst+lst+srt+'13';}if(s.tolow ercase()=='l3'){newloc=hst+lst+srt+'15';}if(s.tolowercase()=='assist'){newloc=hst+lst+'?aq_search=search&find FIELDS[WFIELD1]=HD_TICKET.SUBMITTER_FULLNAME&FINDFIELDS[EXP_SELECT1]=CONTAINS&FINDFIELDS[IN PUT1]=Gerald&FINDFIELDS[UNION_SELECT2]=0&FINDFIELDS[UNION_SELECT3]=0&FINDFIELDS[UNION_SELEC T4]=0&ORDER[]=STATUS_ORDINAL&ORDER[]=PRIORITY_NUMBER&ORDER[]=SORT_OWNER_NAME&ORDER[] =TITLE&QUEUE_ID=15';}if(s!=null){if(newwin){window.open(newloc);windows.location.href=newloc;}else{windo w.location.href=newloc;}}
Ticket Rules By Example Ticket Rule for service catalog Implement canned solutions We have known solutions in the form of scripts Going to deploy to a submitter s machine Really cool part is we can do this by email or Go app! 40
Hey, that wasn t funny Rewind Mary now walking around with smartphone in her hands is stopped by John John complains of same problem Mary says calmly it would really help if you opened a ticket. Here let me help you with that Creates ticket on phone 41
Hey, that wasn t funny Cont d Asks for description of problem Mary says oh that, hey no biggie Using Go app, chooses a custom field for solutions to solve said problem Walk a few steps to John s cubicle and computer They reboot and see that problem is now fixed. Woot! Potentially shows John how to fix that themselves next time via selfserve ticket queue 42
Resources itninja.com Very casual, other Dell customers General questions Companion blog to presentation is at http://www.itninja.com/blog/view/k1000- service-desk-advanced Kace.com/support Kb articles new releases Documentation Stackoverflow.com (advanced) General SQL and regex help No K1000 expertise and expect complete questions but very responsive 43
44 Questions?
The Truth Very important for an effective, tailored helpdesk* Email Best Practices Custom fields Hidden Queues Ticket Rules Shortcut URLs Customizations 45 *in order from awesome to important
Customizations Anything can be done for the right price Customizations via proserve Small customizations that add big value are best UI customizations are the most common Getting a data point in a new place Dynamic behaviour on screen before save (like conditional fields) Corporate colors scheme We use a plugin we wrote called jkuery to facilitate it Survives upgrades Customer owns and controls the code (when they want) Backed up with your backups I called Ticket Rules for the front end because one should use it with the same philosophy in mind 46