Route Service Requests for Approval Using Helpdesk
Altiris Helpdesk Solution will soon provide inherent capabilities to manage service request workflow, but until then many customers have asked about how such workflow could be configured using technology available in the product today. The solution described in this article creates a workflow methodology to manage the service request process through its approval stage. Work activities following the approval stage are more or less conventional.
Altiris products covered in this document:
- Helpdesk Solution (required)
Process Flow
- A customer calls with a service request
- Details of the service request are added to a ticket
- During the ticket creation, an email action is generated that will result in an email-based approval mechanism
- The approver receives the email and either rejects or approves the request
- Based upon the outcome from the approver, additional workflow is generated to fulfill the request
Setup
Step 1 - Add custom statuses to the database
- Select "Lookups" from the Admin flyout in Helpdesk
- Edit the Status lookup type.
- Add two lookups with the following properties:
| ID | Value | Status |
| 700 | Approved | Active |
| 800 | Rejected | Active |
Step 2 - Quick Incident Configuration
Create a quick incident with the following properties:
- Name: New Service Request
- Shared: Yes
- Status: Active
- For new incidents:
- Set "Category" to "Service Request"
- Set "Status" to "Requested"
- Set "Impact" to "Low"
- Set "Urgency" to "Low"
- Set "Priority" to "Low"
- Set "Comment" to "Enter the details of your service request here"
- Set "Title" to "Enter the description of your service request here"
Step 3 - Email Templates
Coding the HTML in these templates was easy. All I did was rob from other templates and HTML examples and managed to make it work. I am NOT an HTML expert by any stretch, but I know enough to get by. All you have to do is look for text blocks and make edits that you want. Further, if you want to modify the links that are presented to the users in the email message body, you can alter the URLs in the HTML hrefs and set incident values by using cmd statements.
For instance, look at the code in this block (I copied the HTML tag syntax from an existing file):
<p class=MsoNormal><a href="http://demo2k3ns/aexhd/worker/default.aspx?cmd=editItem&id=WORKITEM(workitem_number)&workitem_status_lookup_id=700&workitem_comment=The request has been approved. Please add any comments you wish to add and then save.">Click here to approve the request</a></p>
Let's pick it apart:
The statement cmd=editItem will edit an existing Work Item.
Appended to that statement is an ampersand and value (the ampsersand tells the url to add successive values) - &id=WORKITEM(workitem_number). The value in this case is a token, WORKITEM(workitem_number), which returns the value of the ID number of the work item from whence the email was sent.
Then, there is a "set" command &workitem_status_lookup_id=. This tells Helpdesk to set the value for a field. This one is a little unique because the value for workitem_status_lookup_id can only be numeric, since it is a foreign key relation to the workitem_status_lookup table. In Step 1, you added a couple of rows to this table, which included the numeric IDs of 700 and 800 for "Approved" and "Rejected", respectively. In the url, we set the value of workitem_status_lookup_id=700, which will result in the Status for the request being set to "Approved".
Appended to that is another "set" command, noted by &workitem_comment=, where the comment for the work item will be set to a string that equals "The request has been approved. Please add any comments you wish to add and then save."
Finally, we customize the presentation of the link by adding the text "Click here to approve the request". That will result in a Click here to approve the request link, with a value of
color="#0000FF">http://demo2k3ns/aexhd/worker/default.aspx?cmd=editItem&id=WORKITEM(workitem_number)&workitem_status_lookup_id=700&workitem_comment=The request has been approved. Please add any comments you wish to add and then save.
The bottom line is that this stuff is pretty easy to work with once you get the hang of it. Experiment with it!
Important Note
In the email templates, you will need to change the server name in the hrefs to the name of your NS. Optionally, change the company name to the name of your company. The server name is noted by <servername> and the company name is noted by YourCompanyName in the HTML. It should not be necessary to change anything else in the HTML unless of course you want to.
Now, create an email template with the following properties (Purpose - This is an email action template that is to be used in conjunction with the email button in an incident. It will send an approval request to an approver. E-mail notifications are to be used with Notify Rules that are triggered automatically when certain criteria is set.):
- Name: Approval Request
- From: MODIFIED_BY_WORKER(worker_full_name)
- From address: MODIFIED_BY_WORKER(worker_email)
- Subject: New Service Request
- Type: E-mail action
- Interpret as HTML: On
Body (just paste this in and change the company name and server name):
<html>
<head>
<title>Approval Request Form</title>
<style>
body
{
margin:0px;
padding: 0px;
font-size: x-small;
font-family: verdana;
color:dimgray;
background: #F7FBFF;
}
a
{
color: blue;
text-decoration: underline;
}
div.banner
{
background-color: #7396B5;
padding:6px;
}
div.body
{
padding:6px;
}
table.banner
{
border:#7396B5 0px solid;
color: #000063;
}
table
{
font-size:x-small;
}
.txtSubTitle
{
font-weight: bold;
font-size: x-small;
color: #42698c;
font-family: Verdana;
}
.txtRateHeading
{
font-size: xx-small;
font-weight: bold;
color: black;
vertical-align: bottom;
}
.txtIndent
{
color:dimgray;
padding-left:20px;
padding-right:5px;
white-space:nowrap;
}
.txtMsgValue
{
color:black;
font-weight:bold;
width:100%;
}
hr
{
width: 100%;
color: gainsboro;
height: 1px;
}
</style>
</head>
<body>
<basefont face="Verdana,Arial,Geneva,Sans-Serif" size="2">
<!-- Header =========================================== -->
<div class="banner">
<table cellpadding="0" cellspacing="0" class="banner" ID="Table1">
<tr valign="top">
<td nowrap style="PADDING-LEFT:10px">
<span
style="FONT-WEIGHT:normal;FONT-SIZE:xx-small;COLOR:#f7fbff"><big>YourCompanyName</big><br></span>
<span style="FONT-WEIGHT: bold;FONT-SIZE: 16pt;COLOR:
#000063">Service Request</span>
</td>
</tr>
</table>
</div>
<!-- Message =========================================== -->
<div class=Section1>
<p class=MsoNormal><b>Request Number:</b> WORKITEM(workitem_number)</a></p>
<p class=MsoNormal><b>Request Title:</b> WORKITEM(workitem_title)</a></p>
<p class=MsoNormal><b>Comments:</b> WORKITEM(workitem_comment)</a></p>
<p class=MsoNormal><a href="http://<servername>/aexhd/worker/default.aspx?cmd=editItem&id=WORKITEM(workitem_number)&workitem_status_lookup_id=700&workitem_comment=The request has been approved. Please add any comments you wish to add and then save.">Click here to approve the request</a></p>
<p class=MsoNormal><a href="http://<servername>/aexhd/worker/default.aspx?cmd=editItem&id=WORKITEM(workitem_number)&workitem_status_lookup_id=800&workitem_comment=The request has been rejected. Please add an explanation and then save.">Click here to reject the request</a></p>
<p class=MsoNormal>Thank you,</a></p>
<p class=MsoNormal>MODIFIED_BY_WORKER(worker_full_name)</a></p>
<p class=MsoNormal>MODIFIED_BY_WORKER(worker_email)</a></p>
<p class=MsoNormal><o:p> </o:p></p>
</div>
</form>
</basefont>
</body>
</html>
Create another template with the following properties (Purpose - This is an email notification template that is to be used to inform the request owner that the approver has approved the request.):
- Name: Request Approved
- From: MODIFIED_BY_WORKER(worker_full_name)
- From address: MODIFIED_BY_WORKER(worker_email)
- Subject: Request #WORKITEM(workitem_number) has been approved.
- Type: E-mail notification
- Interpret as HTML: On
Body (just paste this in and change the company name and server name):
<html>
<head>
<title>Request Approved</title>
<style>
body
{
margin:0px;
padding: 0px;
font-size: x-small;
font-family: verdana;
color:dimgray;
background: #F7FBFF;
}
a
{
color: blue;
text-decoration: underline;
}
div.banner
{
background-color: #7396B5;
padding:6px;
}
div.body
{
padding:6px;
}
table.banner
{
border:#7396B5 0px solid;
color: #000063;
}
table
{
font-size:x-small;
}
.txtSubTitle
{
font-weight: bold;
font-size: x-small;
color: #42698c;
font-family: Verdana;
}
.txtRateHeading
{
font-size: xx-small;
font-weight: bold;
color: black;
vertical-align: bottom;
}
.txtIndent
{
color:dimgray;
padding-left:20px;
padding-right:5px;
white-space:nowrap;
}
.txtMsgValue
{
color:black;
font-weight:bold;
width:100%;
}
hr
{
width: 100%;
color: gainsboro;
height: 1px;
}
</style>
</head>
<body>
<basefont face="Verdana,Arial,Geneva,Sans-Serif" size="2">
<!-- Header =========================================== -->
<div class="banner">
<table cellpadding="0" cellspacing="0" class="banner" ID="Table1">
<tr valign="top">
<td nowrap style="PADDING-LEFT:10px">
<span
style="FONT-WEIGHT:normal;FONT-SIZE:xx-small;COLOR:#f7fbff"><big>YourCompanyName</big><br></span>
<span style="FONT-WEIGHT: bold;FONT-SIZE: 16pt;COLOR:
#000063">Service Request Approved</span>
</td>
</tr>
</table>
</div>
<!-- Message =========================================== -->
<div class=Section1>
<p class=MsoNormal><b>Request #WORKITEM(workitem_number) has been approved</b></a></p>
<p class=MsoNormal><b>Request Title:</b> WORKITEM(workitem_title)</a></p>
<p class=MsoNormal><b>Comments:</b> WORKITEM(workitem_comment)</a></p>
<p class=MsoNormal><a href="http://<servername>/aexhd/worker/default.aspx?cmd=editItem&id=WORKITEM(workitem_number)">Finish processing the request</a></p>
<p class=MsoNormal>Thank you,</a></p>
<p class=MsoNormal>YourCompanyName Service Desk</a></p>
<p class=MsoNormal><o:p> </o:p></p>
</div>
</form>
</basefont>
</body>
</html>
Create another template with the following properties (Purpose - This is an email notification template that is to be used to inform the request owner that the approver has rejected the request.):
- Name: Request Rejected
- From: MODIFIED_BY_WORKER(worker_full_name)
- From address: MODIFIED_BY_WORKER(worker_email)
- Subject: Request #WORKITEM(workitem_number) has been rejected.
- Type: E-mail notification
- Interpret as HTML: On
Body (just paste this in and change the company name and server name):
<html>
<head>
<title>Request Rejected</title>
<style>
body
{
margin:0px;
padding: 0px;
font-size: x-small;
font-family: verdana;
color:dimgray;
background: #F7FBFF;
}
a
{
color: blue;
text-decoration: underline;
}
div.banner
{
background-color: #7396B5;
padding:6px;
}
div.body
{
padding:6px;
}
table.banner
{
border:#7396B5 0px solid;
color: #000063;
}
table
{
font-size:x-small;
}
.txtSubTitle
{
font-weight: bold;
font-size: x-small;
color: #42698c;
font-family: Verdana;
}
.txtRateHeading
{
font-size: xx-small;
font-weight: bold;
color: black;
vertical-align: bottom;
}
.txtIndent
{
color:dimgray;
padding-left:20px;
padding-right:5px;
white-space:nowrap;
}
.txtMsgValue
{
color:black;
font-weight:bold;
width:100%;
}
hr
{
width: 100%;
color: gainsboro;
height: 1px;
}
</style>
</head>
<body>
<basefont face="Verdana,Arial,Geneva,Sans-Serif" size="2">
<!-- Header =========================================== -->
<div class="banner">
<table cellpadding="0" cellspacing="0" class="banner" ID="Table1">
<tr valign="top">
<td nowrap style="PADDING-LEFT:10px">
<span
style="FONT-WEIGHT:normal;FONT-SIZE:xx-small;COLOR:#f7fbff"><big>YourCompanyName</big><br></span>
<span style="FONT-WEIGHT: bold;FONT-SIZE: 16pt;COLOR:
#000063">Service Request Rejected</span>
</td>
</tr>
</table>
</div>
<!-- Message =========================================== -->
<div class=Section1>
<p class=MsoNormal><b>Request #WORKITEM(workitem_number) has been rejected</b></a></p>
<p class=MsoNormal><b>Request Title:</b> WORKITEM(workitem_title)</a></p>
<p class=MsoNormal><b>Comments:</b> WORKITEM(workitem_comment)</a></p>
<p class=MsoNormal><a href="http://<servername>/aexhd/worker/default.aspx?cmd=editItem&id=WORKITEM(workitem_number)">Finish processing the request and contact the customer</a></p>
<p class=MsoNormal>Thank you,</a></p>
<p class=MsoNormal>YourCompanyName Service Desk</a></p>
<p class=MsoNormal><o:p> </o:p></p>
</div>
</form>
</basefont>
</body>
</html>
Step 4 - Notify Rules
Create a new Notify Rule with the following properties:
- Name: Request Approved
- Send e-mail: Request Approved (from pick list)
- Send to: To: Owned by worker
- Notify: When ALL of these are TRUE
"Status" is the same as "Approved" - <end>
- Visible: Yes
- Locked: No
- Default: Yes
- Active: Yes
Purpose - This rule uses the "Request Approved" E-mail Template in order to inform the owner that a request has been approved.
Create another Notify Rule with the following properties:
- Name: Request Rejected
- Send e-mail: Request Rejected (from pick list)
- Send to: To: Owned by worker
- Notify: When ALL of these are TRUE
"Status" is the same as "Rejected" - <end>
- Visible: Yes
- Locked: No
- Default: Yes
- Active: Yes
Purpose - This rule uses the "Request Rejected" E-mail Template in order to inform the owner that a request has been rejected.
Making it Work
A customer calls to request a service of some kind. The worker then fills out the incident record, or uses the "New Service Request" Quick Incident. The worker proceeds to fill out the details of the service request, adding comments to the comments field such as service or equipment needed, estimated cost, and any other relevant details. The worker then clicks the email button to mail the new service request to a person with the authority to approve the request. Upon saving the request, this email is then sent to this approver.
The approver receives the email in his/her inbox and upon reviewing the comments of the request, is presented with two choices - to either approve or reject the request. If the approver clicks the "approve" link, he/she will launch the helpdesk console with the ticket open in front of them. The status will have been changed to "Approved" and there is a comment instructing the approver to add any additional comments they desire and then save the request. Should they use the "reject" link, the status is changed to "Rejected" and again they are instructed to add an explanation and then save the request.
Once the request is saved, Notify rules are triggered for the appropriate response. If the status was set to "Approved", then the owner of the request will be sent an email stating that the request was approved. There is a link in the email to reopen the request for further processing. If however, the status had been set to "Rejected", then the owner of the request will be sent an email stating that it was rejected and they can then link back to it to contact the customer with the bad news and close the request.
The Scenario in Detail
Figure 1. Customer calls the helpdesk with his/her service request. The "New Service Request" Quick Incident is used. This could easily be done through self service as well.
Figure 2. The new Incident (Request) is created. The default values for the Title and Comment field are shown (they were subsequently changed before I actually saved the Incident). Other defaults are Category (Service Request), Priority (Low), Urgency (Low), Impact (Low), and Status (Requested).
Figure 3. The Email button is clicked in order to send the approval request to an authorized approver.
Figure 4. The approver's email address is added to the "These addresses:" section and the E-mail template used is "Approval Request". No other comments are necessary in the message block.
Note
Note: When the Approval Request email template was created, it was set to a type of "E-mail action". That is what makes it available to this pick list. Once done, the incident (request) is then saved.
Figure 5. The email arrives in the approver's inbox. The approver then has the choice to either approve the request or reject the request.
Figure 6. An approved request.
Figure 7. A rejected request.
Figure 8. If the request was approved, the "Approved Service Request" email gets sent to the owner with the approver's comments. The owner can then link back to the ticket to finish processing the request.
Figure 9. If the request was rejected, the owner receives the "Rejected Service Request" email. The approver's rejection reason is displayed, and the owner can link back to the request to contact the customer and then close it.
That's it. Enjoy!
- Login or register to post comments
- 6717 reads
- Printer-friendly version
























Great Stuff
Hey Sean,
This is great stuff. Have you seen what's coming with service desk and talked to make sure that this sort of process is included?
Andrew
Altiris Service Desk for the future
I have an ongoing dialog with [PM] Dan Sherwood about this very subject. This process has certainly served as a catalyst for our discussions and strategy as it pertains to Service Request functionality in a future release. Expect great things out of this particular solution in the future.
For the Future...
Any idea or hint as to when that future may be arriving?
Current ETA
It looks like the beta will start toward the end of Q1 with a target ship date at the end of Q2.
Bear in mind that this is software, dates slip. That's the best I have for now. For details, direct your question to your local sales team.
:-P
I think you are part of my local sales team :-)
You just probably have not figured out who I am!
Fair enough
I'll admit that's true.
Approval - Rejection
Hello all,
This is a nice solution but can it also work without the approver needing to go into the console?
We want, for example, that the approver just clicks the button and the change is approved automatically without consuming a license and without business users needing to go into the helpdesk console.
Thx
Steve
Way to "approve" the ticket without logging on as a worker?
yes, there are at least two ways to update a ticket without logging on as a worker.
1. Use the Suvey Template as a model. You can manipulate the POST to update fields in the ticket.
2. Use the "data island" feature as part on an email template. Create an email action template with "data islands" (this is an XML-like feature of the email template) of the information and imbed this information in an email template.
When the approver replies to the email, Helpdesk inbox processor will parse the "data islands" in the email and update the ticket.
3. Call the HDWS from another application to update a ticket.
The Helpdesk product guide and Helpdesk integration guide provide more information on how to do this.
Also e-mail processing
Have an incident rule that when all are true{ status is set to resolved, comment contains "close this ticket" and any are true { user is x, or user is y or user is z) then the ticket is closed.
Have a validation rule that is invalid when workers close it that are not allowed to.
Neil
There are some issues here
1. Use the Suvey Template as a model. You can manipulate the POST to update fields in the ticket.
It's a great idea and I have modeled it plenty, but it only works when the current contact submits. Will not work for an approver/assignee. We're working on this.
2. Use the "data island" feature as part on an email template. Create an email action template with "data islands" (this is an XML-like feature of the email template) of the information and imbed this information in an email template.
When the approver replies to the email, Helpdesk inbox processor will parse the "data islands" in the email and update the ticket.
Data islands are sweet, but static. Helpdesk will parse the text looking for the island and will change the data in the ticket accordingly; however, it's relatively static. Doesn't give the emailer much in terms of choices.
3. Call the HDWS from another application to update a ticket.
This will consume a license. You can use a commit=no option in the URL which at least will not open the Worker Screen while saving data, but I believe even that will consume a license.
Stay tuned. We're keenly aware of the desires here and will ultimately be offering some cool abilities.
Any progress?
Any progress on this? I'm trying to implement this as part of a Change Mgmt process and need to have approvers who should not or can't launch the console. Help!
Need this also
Just configured all of this today and then realized it would only work for workers. Any info on non-worker approvals or impersonating a worker would be great.
any updates?
Hi Sean,
Any updates on this feature? Hope we can have this soon.
Quick Incident
I can see how this could be very useful. We have just loaded the Helpdesk solution and I am still trying to configure it to best meet our business needs.
We incorporated the new hire process and telephone and IT needs into our solution already but with some tweaking I think we can get even more of our business processes into this work flow for better trackability of related tasks. Which is hard to do when you work for a state agency. I value the info I get from other users and I try to incorporate those things that enhance my environment. Thanks