CHALLENGE

The Freshservice Ninja Challenge - Call for entries!

The Freshservice Ninja Challenge - Call for entries!
Userlevel 7
Badge +9

Hey everyone!

We are excited to introduce the Freshservice Ninja Challenge, an initiative where we want you to share your Freshservice expertise. Inspired by @keefe.andrews and the wealth of knowledge our community members possess, we want to create a focused platform that facilitates sharing product expertise with the community!

What is the challenge all about?

We wanted to create a compelling platform for our members that eases the process of sharing, discovering and learning some of the innovative ways of using Freshservice. Imagine getting to learn innovative practices from so many Freshservice users. Now that’s something we are sure will open up innumerable possibilities.

Who is it for?

Anyone who has used Freshservice - our IT Service Management tool, at any capacity within their organization or for their business.

How to be a part?

  • Share how you are creatively using workflows to enhance Freshservice at your organization and post  in the comments section. For inspiration, check out Keefe’s post 

  • Here are some prompts to get you started - 

    • Short overview of the workflow

    • What were you looking to solve 

    • How did you go about doing it?

    • Insights on what you were able to achieve

    • Advice to the community based on your experience

  • Be creative  - text 🧾, screenshots🖥, videos📽, illustrations🎨, podcasts 🔊 or postcards 📪. Choose any format that works for you.

  • There is no limit to the number of words or length of your post as long as it’s complete and meaningful.

  • If you want to share more than one amazing idea💡, we’d recommend you share each separately within this thread.

  • Don’t hold back!!! We want to hear all about the unique ways that you use Freshservice in your daily life - the more arcane, the better!

What do participants get?

  • Opportunity to be recognized as a key Refresh Community Contributor 

  • A chance to virtually interact with the Refresh Community team and the Freshservice team over a cup of coffee/ tea

  • Take your story to the world: Have your Freshservice experience compiled into an e-book 

  • Learn and collaborate with other contributors and transform the way you use Freshservice

  • Unveil the Freshservice Ninja Badge

What else can participants/ non-participants do?

  • Nominate potential participants

  • Help spread the word

  • Share your insights

  • Encourage other contributors by liking, commenting on their posts
 Bracing ourselves to meet our Freshservice Ninjas in action! :sunglasses: 

Accepting contributions till April 30, 2022

Ready, set, post post post!!!!!!

Watch out for more information/ updates about the challenge in the comments section. Subscribe to this post to stay notified.


26 replies

Userlevel 7
Badge +9

Continued…

Wanted to share the inception story with you all!

What’s the idea behind the Ninja Challenge?

A couple of months back, our Community champion and Freshservice user @keefe.andrewsbegan this amazing initiative putting together Freshservice How-To articles within the community offering novel approaches to using Freshservice in their organizations/ businesses. We loved this idea and realized there’s a lot of such insights and expertise with each of our members, and it would be great to create a platform that provides an opportunity to facilitate peer learning spanning different industries across our global Refresh community.

Userlevel 7
Badge +16

@rashmi.nag This is a fantastic idea and I can’t wait to participate. I will kick things off with a business problem that we were facing here where I work, and how I solved it with the Freshservice Workflow Automator

 

Our company has a policy where the Agents are required to enter a “Closing Comment” when they are set too close a ticket. This comment is designed to be public facing and indicate the final solution taken to solve an end users issue. 

The problem was that, yes we could add a private or public note to the ticket but there was no way to make that a mandatory requirement without having to micro-manage the process. Often in the hustle in bustle agents would forget to add their final comment, and nothing was stopping them from closing the tickets.

So I was presented with this problem as the Freshworks Administrator and I leveraged creating a custom paragraph text field labeled “Closing Comments” for both the new and existing ticket form. Then with workflow automator I was able to create a workflow that is triggered by changing the status of the ticket to closed, making the field now a required field, and triggering a webhook that reaches out to the Freshservice API, takes the contents of the closing comments field and adds it as a public note to the ticket.

I further enhanced this feature by creating a second workflow that will now run when a ticket is reopened, it again reaches out to the Freshservice API and clears the “Closing Comments” field, setting it up for the Agent to fill back out with their newest solutions.

 

Not overly complicated but gave us some major functionality that we needed and allowed us to keep training down and make it intuitive for the Agents.

Hopefully this little trick inspires others to contribute their solutions and ideas.

I have some others that I will be adding here as well!!!! :sunglasses:

Userlevel 1
Badge +6

@rashmi.nag - Can this challenge/workflow sharing be done for freshdesk too? Appreciate it’s not as powerful as freshservice but curious to see how other MSP’s and other businesses in general are utilising freshdesk with workflows/automations that we may not have thought of!

Userlevel 7
Badge +9

@zachary.king - Wohoo! Thank you for the being the first participant and sharing your expertise! Would love to see how others have made use the Workflow Automator.

Can’t wait to read your other contributions as well :smile:

 

Userlevel 7
Badge +9

Hi @Jerome.Haynes - Thank you for showing interest in contributing for Freshdesk as well. We’re definitely looking at doing this for all the Freshworks products and we’ll definitely keep you notified when the Freshdesk Challenge is LIVE! :blush: Glad to have you Championing this for us.

Userlevel 7
Badge +9

Nominating few of our Community MVPs to contribute to the challenge: @Denise.S.P @Krystal A @JiriGrohmann @raymondcanilao @CenturiTrish @pOttenbacher @GlennA @lavjoson @Bex @Sophie Murgatroyd @KeithW @Alefre @SLuethi @Warden Brown @mark.uther 

Bring it on!!

 

Userlevel 1
Badge +2

Nominating some of my colleagues: @Alefre, @ErikAlmSynerity ...

Userlevel 7
Badge +10

What a great idea :)

Userlevel 7
Badge +16

Ok ok...so here is another one that I built that was more to improve my personal workflow and increase my productivity.

We know that we can waste a lot of time when we are force to do a lot of context switching amongst different pieces of software. To solve this problem we usually seek software integrations, and Freshservice has come a long way in this area.

Part of my job requires me to work from a product backlog, which is housed inside of Microsoft’s Azure DevOps. I needed a way to allow users to raise Freshworks Product Enhancement Requests, which are tickets in freshservice, and have that information generate a product backlog item in DevOps. Also as part of my process, new feature enhancements require approval before I can start building them, so I needed a way to fire off an approval to my supervisor, have that annotated in DevOps, and in the freshservice ticket. So….here is what I did…

  • I created a Freshworks Product Enhancement Request ticket template for agents to use to fill our their requests. I created two custom fields for the form that are hidden from view except to me labeled “DevOps Work item ID” and “Requires Approval?”
  • Added and configured the Orchestration application for Microsoft Azure DevOps
  • Created a workflow that is triggered when the ticket is created to generate an Azure DevOps work item with the subject line and description. This adds the work item to my backlog and sets it to awaiting approval, and updates the ticket with the DevOps work item ID as a url and populates my custom field with the ID for reporting purposes.
  • Used Microsoft Power Automate to take the trigger of setting a work item to “Awaiting Approval” to generate a MS Teams Approval notification to my supervisor in Teams
  • When approved, it adds their comments to the work item, sets it to in progress on my backlog, and updates the freshservice ticket from awaiting approval to approved. 

Now work can being!!!!

It is a lot of fun solving these types of business problems. Love to automate as much of the process as possible!!! 

What are some other ways you all have used automation to help your workflow when working in Freshservice???

Userlevel 1
Badge +1

To keep our microsoft group structured and limited we had to stop allowing anyone to create MS team groups. Obviously this created another admin overhead for the IT admins to have to create these group on request. 

I managed to improve the process slightly by putting in a Service Catalog item for this so people have to provide all the relevant information up front which prevented the back and forth of tickets. 

I then took it a step further by introducing some Orchestration into the workflows to take away the admin overhead. Using Azure AD orchestration and the MS Teams Orchestration i managed to create the below steps to automate the process.

  1.   Requester creates the service Catalog form
  2. Azure AD Orchestration checks the user is active in the domain and pulls the user information (If user is not found or active it assigns ticket to IT admin to manually process)
  3. Based on the name of the group they have asked for Azure AD orchestration then goes away and checks of the team name already exists. (If team name exists the ticket will go to IT admin to manually process)
  4. MS Teams Orchestration then creates the Teams group and assigning the requester as owner of the group using the User ID from the Azure AD app.  
  5. The ticket is then assigned to IT and set as resolved. 

This helped removed the admin overhead as well as maintaining the structure MS group approach. 

Userlevel 4
Badge +7

We want our team working on the right tickets. One situation that comes up often is that a user is not available to do troubleshooting or there is some other reason where a specific delay is needed. We don’t want the time waiting for a scheduled appointment to be counted against the agent SLA so we developed the following process:

When a ticket is placed in a status of “Scheduled” we enable a required field “Date Scheduled” which the user is then required to add a date. We then have a separate process which uses the API to get all tickets which have a “Date Scheduled” which is in the past and reopen these tickets and clear the date field. We also present the date when the agent will next work on the ticket to the requester in the portal. In this way the agent can work their “open” tickets without worrying about the ones that have a scheduled day to continue work.

Here is the basics of the PowerShell script we use to run the API (FYI, this is not fully functioning as you will need the logic to build the headers for authentication,etc). The following code runs once per day using a scheduling application (could use windows scheduler)

function Get-FSFilteredTickets {
param (
[string]
[parameter(Mandatory)]
$querystring
)
$tickets = @()
$encoded = [system.web.httputility]::urlencode($querystring)
try {
$tickets = (Invoke-RestMethod -Headers $script:headers -Method Get -Uri "$script:freshserviceURL/tickets/filter?query=`"$encoded`"" -ContentType 'application/json' -ResponseHeadersVariable ResponseHeader).tickets
}
catch {
if ($_ -eq "no such host is known") {
Throw "no such host is known"
}
Write-Error -Message "querystring = $querystring"
Write-Error -Message $_

}
while ($ResponseHeader.Keys.Contains('Link')) {
$URL = [regex]::Match($ResponseHeader.Link[0].ToString(), "(?<=\<)(.*?)(?=\>)").value
try {
$tickets = $tickets + (Invoke-RestMethod -Headers $script:headers -Method Get -Uri $URL -ContentType 'application/json' -ResponseHeadersVariable ResponseHeader).tickets
}
catch {
Write-Error -Message "URL = $url"
Write-Error -Message $_
}
}

return $tickets

}

function set-FSTicketProperties {
param (
[parameter(Mandatory)]
[PSCustomObject]
$fields,
[parameter(Mandatory)]
[int]
$TicketID
)
$ticket = Get-FSTicketByID -TicketID $TicketID
if ($ticket.type -eq 'Service Request' -and $ticket.description -eq '') {
$fields | Add-Member -NotePropertyName description -NotePropertyValue $ticket.subject
}
$Updatejson = ConvertTo-Json -InputObject $fields -EscapeHandling EscapeNonAscii
try {
$Ticket = (Invoke-RestMethod -Headers $script:headers -Method put -Uri "$freshserviceURL/tickets/$TicketID" -body $Updatejson -ContentType 'application/json' -ResponseHeadersVariable ResponseHeader).ticket
}
catch {
Write-Error -Message "Ticket ID: $TicketID"
Write-Error -Message $_
$message = $_ | ConvertFrom-Json
Throw "Error Updating Ticket Set-FSTicketProperties, TicketID: $ticketID Error Message: $_ "
}
return $Ticket
}


$today = (get-date).tostring('yyyy-MM-dd')
$scheduledTickets = Get-FSFilteredTickets -querystring "date_scheduled :< `'$today`'"
foreach ($ticket in $scheduledTickets) {
if ($ticket.status -eq 6) {
$ticketFields = [PSCustomObject]@{
status = 2
custom_fields = @{
date_scheduled = $null
}
}
set-FSTicketProperties -TicketID $ticket.id -fields $ticketFields | Out-Null
}
}

 

Userlevel 7
Badge +9

Hi @Stratto! This sounds wonderful. Thanks for detailing out the problem, the solution and the steps taken. I’m sure a lot of our Freshservice users will find your contribution helpful.

Userlevel 3
Badge +9

How to integrate Freshervice with O365 with the Workflow Automator and Power Automate

 

While the workflow tool in Freshservice is VERY powerful, sometimes we need to integrate with other tools.  Those of us in a Microsoft environment have a very powerful piece of middleware called Powerautomate (previously called Flow).  Using the Freshservice Workflow Automator, Freshservice API, and Powerautomate I am able to integrate with all applications in the Microsoft space including Excel, Outlook, Teams, Sharepoint, etc.  I can use these services as either data sources for lookups, or as applications to execute commands. I am also able to write back to Freshservice and update the ticket with this data.  I have developed a process that can be used for all Freshservice Microsoft customers.  I have helped a number of companies with this process.  If you are using Freshservice and O365 this is for you.  It is a game changer.

 

Here is what you need to do in summary

  • Create a Workflow Automator in Freshservice, then create an action that will trigger a POST webhook. 
    • Add any of the fields that you want to send over to Powerautomate.
    • The fields are important because the fields will create what is called a schema.  If you update the fields you want to use, you have to update the schema
  • Now go to Powerautomate. The trigger is you will use is the “When and HTTP request is received” trigger. 
    • You have to save the flow to get the URL.
  • Go back to Freshservice and add the URL into the Webhook action, then trigger the automation. 
    • This will pass the payload to Powerautomate
  • Go back to Powerautomate, the flow will have failed, this is as deisgned.  Check your log, copy the code.
  • In Powerautomate go to the trigger click the “Use sample payload to generate schema”, then paste the code in.
    • This will create the schema
  • Now all of your Freshservice fields (that you picked) are available in Powerautomate
  • You can then do whatever you want with these fields.

An example of what this should look like is below. 

 

In this example if the Requester is a VIP I trigger the workflow then post a Teams IM with the details so the ticket for our VIPs dont get lost in emails.  But using this same logic I can update a spreadsheet on Sharepoint or Onedrive, send a calendar entry from Outlook, or create a task in Planner.

Now lets say I want to write back to Freshservice.  Freshservice makes this very easy with their robust API. 

Check out the API docs before you get started, if you have never worked with an API don’t worry, after this you get to call yourself a developer.  In no time flat you will git it...

  • You need to get your API key under your profile settings in Freshservice. 
    • Copy this and keep it secret!!!
  • In Powerautomate choose the HTTP action
  • The method here is PUT but the API docs will tell you which method to use.
    • GET PUT POST are the three you use a lot and it depends if you want to read, write to an existing ticket, or create a new ticket
  • Put in the URL of the API entry point you want to use.  Here I am updating a ticket.
  • With authentication you put in the API key as the username and x as the password
    • It’s a weird implementation, but it works.
  • Then to update the ticket you put the fields and variable in the body. You can even update custom fields. 
    • Formating here needs to be precise
    • The format you read will be the format your write back in
    • You need to read the actual backend field name in the API to get the field name for custom fields.

 

 

Userlevel 3
Badge +9

@ggallaway Nice script!

I looked at Powershell but quickly moved away from it in favor of Powerautomate.  Have you looked at using Powerautomate at all for this integration?  It is much easier to work with the API using Powerautomate, all the header stuff is prebuilt you just need to supply the correct data.

Userlevel 3
Badge +2

Overview

Our situation was this: We already had a well defined On-boarding process with a fair amount of automation in our old tool sets. We found that there was no native way to have successive workflows kick off, or to set a timed delay in the start of a workflow.

Setup

  • We added four fields to the ticket form
    • Memo
    • Parameter 1
    • Parameter 2
    • Parameter 3
  • In the on-boarding module, besides the tickets that were created for items such as Deploy Computer, Software installed, needed permissions, etc., we created the following 3 tickets
    • Employee ID
    • AD Account
    • O365 Account
  • We still use MS System Center Orchestrator for some automated tasks that we cannot run in Freshservice

What we did

  1. When the Employee ID ticket was created, the first workflow would kick off and send a webhook api call to our Orchestrator server.
  2. Orchestrator would run its automations (SQL query to on prem server, get user id info, or create a new one).
    1. The last step of the Orchestrator runbook was to make its own API call back to Freshservice and update the ticket with the UserID (Parameter 1 field).
    2. It would also set the ticket to Pending
  3. A second workflow would pickup the status change of the Employee ID ticket and kick off
    1. This workflow would create the users AD account
    2. It would then run a webhook api call to Orchestrator
      1. This Orchestrator runbook would kickoff a sync of AD to AAD
      2. It would then create a Windows Scheduled Task for 30 minutes in the future
      3. This Windows Scheduled Task will kick off another Orchestrator runbook that makes an api call back to Freshservice and updates the AD Account ticket and sets it to resolved.
  4. A third workflow would pickup the Resolved status of the AD Ticket and kick off
    1. This workflow will check for the user in AAD
    2. Upon finding the user, it will assign licenses
    3. It will then email the hiring manager with the completed info
    4. And then it will resolve the O365 ticket.
  5. All the remaining tickets have been setup with the O365 ticket as the Predecessor ticket, so they now become active.

If anyone is interested in how I create the Windows Scheduled Task or interact with Orchestrator, feel free to reach out.

Userlevel 4
Badge +7

@ggallaway Nice script!

I looked at Powershell but quickly moved away from it in favor of Powerautomate.  Have you looked at using Powerautomate at all for this integration?  It is much easier to work with the API using Powerautomate, all the header stuff is prebuilt you just need to supply the correct data.

yeah, if you have the licensing and maintenance processes figured out to utilize powerautomate this task could easily be setup in there!

Userlevel 3
Badge +2

@patricksawyer thanks for that writeup.  I have been working on this and your example will help a lot.

Userlevel 3
Badge +9

@patricksawyer thanks for that writeup.  I have been working on this and your example will help a lot.

If you run into any problems let me know.  It takes about 15 minutes to walk someone through this.  I have shown this to several people and companies.

Userlevel 7
Badge +16

Just wanted to chime in and say…..WOW!!!! Everyone is crushing it with these combinations of freshservice workflow automator, orchestration applications, and third-party automation services. Some really great examples of taking complex business problems and leveraging the right services to find a solution. Albeit, maybe not simple to do but impressive nonetheless.

@ekrasner This solution you presented showing a way to delay actions is extremely helpful. I know that there are a number of us wondering what we can do to include time delays in ticket actions. Thank you for your writeup!!!

@patricksawyer Great minds think alike, I am a big advocate for using Power Automate for anyone who works inside a Microsoft O365 environment. I have pushed this product for the last few years on my colleagues and have been dubbed the “Automation Guy” that creates ways to save them all time and effort. Thank you for sharing how you have leveraged it for Freshservice as well!

Keep up the great work everyone!!!

Userlevel 3
Badge +9

Time Delay Action

 

I wanted to share my implementation of a time delayed reminder.  We have a problem with getting computers back when we replace a computer, or for a termination.  Once a PC is given to an employee it will trigger a process to enforce a return.  Once the criteria is met (different for replacement vs termination), I use my previous listed Power Automate integration to add the PC delivery date in a custom field.  Then I have a view in Freshservice which lists all the computers waiting for a return. I have another Flow in Power Automate which will look at the tickets in this view, and if the PC delivery date field is 7 days I remind HR or the Employee, 21 days I remind the supervisor, and 30 days I remind the CFO.  Basically Power Automate will determine what ticket needs the notification, will edit a field on the ticket, then the workflow automator will take that action and trigger the notification.

Userlevel 4
Badge +7

Our FreshService Admin created a way for supervisors to request a KB on a ticket. This is useful as we work through ticket reviews and want to encourage new documentation. The way it works is there is a field in the ticket that can be selected by anyone looking at the ticket as shown:
 

 

After this is selected a workflow runs to create service request for the agent that is currently assigned the ticket to request a KB be created, we use an object list of groups which write KBs, so if the ticket is not currently assigned to one of these groups a request is made that goes to the general helpdesk to direct.
 

 

To create the request we are using a Web Request with the following body for the place_request API call
 

{
  "quantity": 1,
  "email": "{{event_performer_email}}",
  "custom_fields": {
    "what_group_should_write_this_kb": {{R1.bo_display_id}},
    "describe_what_you_would_like_documented": "{{event_performer_name}} has requested a solution be created for the resolution of ticket [#{{ticket.id}}] - {{ticket.subject}}. Please refer to the ticket for relevant information. {{ticket.url}}"
  }
}

Userlevel 7
Badge +16

@ggallaway I really like this idea. Might have to bring it up with my team. We also are looking for ways to better integrate solution articles and leverage the ability to identify which tickets would make a great addition to the Knowledge base

Userlevel 1
Badge +3

 Get used asset list in Ticket Note

Whenever requester requests for any service request in Freshservice

 

Hello Everyone,

As there was one use case in my working company. Where the user needs to get all the Asset list whenever any requester request any asset in the service ticket.

  • Used a RestAPI & Advance Workflow to get this happen.
  • This workflow and RestAPI work when tickets get issued and Add up Note to Ticket when raised
  • Getting the used asset list of the requester makes it easy as we have to check manually. This workflow makes it easier to have that.
  • RestAPI used are https://api.freshservice.com/#filter_assets
  • To get the list of assets that are used by a particular requester we have to use
    https://(your_domain_url)/api/v2/assets?filter=[query]
  • [query] should be replaced by "user_id:requester.id"
    Eg. https://(your_domain_url)/api/v2/assets?filter="user_id:requester.id 27000897854”
  • This RestAPI request will get all the information of Assets that are under use by the requester.
  • To get the list of only names of assets, We also need to sort the data accordingly
  • I used JSON PARSER in the workflow to get only the Name of Asset after triggering the above RestAPI
  • My workflow -
    Ticket is Raised > Condition Ticket is Open > Web Request > JSON PARSER > Action – Add Note


  • Hope this helps you for some project, Happy Supporting
Userlevel 7
Badge +9

Hello hello!

Thank you Ninjas for sharing your expertise, exchanging learnings and being our champions.

We’ve got something brewing exclusively for you!

If you haven’t already guessed it….

…..

..

.

Check out this post

Looking forward to hearing from y’all!

Happy Weekend.

Userlevel 7
Badge +16

 Get used asset list in Ticket Note

Whenever requester requests for any service request in Freshservice

 

Hello Everyone,

As there was one use case in my working company. Where the user needs to get all the Asset list whenever any requester request any asset in the service ticket.

  • Used a RestAPI & Advance Workflow to get this happen.
  • This workflow and RestAPI work when tickets get issued and Add up Note to Ticket when raised
  • Getting the used asset list of the requester makes it easy as we have to check manually. This workflow makes it easier to have that.
  • RestAPI used are https://api.freshservice.com/#filter_assets
  • To get the list of assets that are used by a particular requester we have to use
    https://(your_domain_url)/api/v2/assets?filter=[query]
  • [query] should be replaced by "user_id:requester.id"
    Eg. https://(your_domain_url)/api/v2/assets?filter="user_id:requester.id 27000897854”
  • This RestAPI request will get all the information of Assets that are under use by the requester.
  • To get the list of only names of assets, We also need to sort the data accordingly
  • I used JSON PARSER in the workflow to get only the Name of Asset after triggering the above RestAPI
  • My workflow -
    Ticket is Raised > Condition Ticket is Open > Web Request > JSON PARSER > Action – Add Note


  • Hope this helps you for some project, Happy Supporting

This is brilliant!!! I wonder if I can tweak this to possibly do a list of software licenses when a requester makes the request to get a license count say for Microsoft O365 licenses, etc. Thank you for sharing @adityatawade!

Reply