Freshservice
Works with: Freshservice (cloud). What SafeHanded does in Freshservice: private notes on every step · a customer-visible reply for link delivery · the chain-of-custody certificate attached on purge · close-to-purge · request from a ticket (deep link).
Before you start
Section titled “Before you start”- A Freshservice admin, and a SafeHanded Owner/Admin on the Team plan or above.
- About ten minutes.
1. Connect
Section titled “1. Connect”- In Freshservice, open your profile settings and copy Your API key.
- In SafeHanded: Settings → Integrations, choose Connect and pick
Freshservice. Give the connection a name, enter your domain URL (e.g.
https://acme.freshservice.com) and the API key, then click Connect and test.
2. Close detection
Section titled “2. Close detection”Nothing to set up. SafeHanded polls Freshservice for status changes, so resolving or closing a ticket purges its credential on the next poll. SafeHanded re-reads the ticket via the API before anything is purged — see how ticketing works.
3. Request from a ticket (deep link)
Section titled “3. Request from a ticket (deep link)”Freshservice has no built-in button that opens a web address, so add the link as a canned response that agents drop into a private note.
- In Freshservice, go to Admin → Canned Responses and click New response. Name it, for example, Create SafeHanded request.
- In the body, write Create a SafeHanded request: and paste the link below.
{{ticket.id}}is Freshservice’s placeholder for the ticket’s ID (it is also under Insert Placeholders); Freshservice fills it in when the response is used. - Save, and share it with the agent groups that need it.
- On a ticket, the agent adds a private note, inserts the canned response, saves the note and clicks the link in it.
https://safehanded.com/app/requests/new?ticket={{ticket.id}}To copy this link, open Settings → Integrations, select your Freshservice integration and go to its Activity tab.
Want a proper sidebar button instead? That needs a small Freshworks Marketplace app (the ticket_sidebar location); the canned response needs no app.
Choosing a preset (optional). A preset is a saved request — the reason, how long the credential is kept, who receives it and how the link is sent. To start from one, add &preset= and the preset’s slug to the end of the link, for example &preset=password-reset. Each preset’s slug is shown, with a copy button, under Settings → Request presets. With no preset in the link, SafeHanded uses the client’s default preset, then the organisation default (Settings → Policy → Default preset for new requests), and otherwise the policy defaults.
No click at all. Point a Workflow Automator Web Request node at a generic webhook integration’s trigger URL (Settings → Integrations → Generic webhook) with the SafeHanded trigger body; SafeHanded then creates the request with no one present. This needs a second ticketing integration (the generic webhook), which the MSP plan allows; the Team plan includes one ticketing integration. A request created this way is linked through the generic webhook integration, so its close-to-purge follows that integration’s setup, not Freshservice’s polling.
4. Status mapping
Section titled “4. Status mapping”Freshservice statuses are integers — 2 Open → open, 3 Pending → pending, 4 Resolved → resolved, 5 Closed → closed. A custom status appears as Status and its number (for example Status 6) and shows as unknown (never purge) until you map it under Status mapping on the integration’s Configuration tab.
What technicians see
Section titled “What technicians see”- Private notes: created · submitted · (optionally) revealed · destroyed · expired · revoked · rotation recommended.
- Public reply (if the preset delivers in-ticket): the secure link and a one-line explanation — never the challenge code.
- The certificate PDF attached on destruction, if Attach the chain-of-custody certificate to the ticket is on in your policy.
Troubleshooting
Section titled “Troubleshooting”| Symptom | Cause / fix |
|---|---|
| Test connection fails | Check the API key (profile settings) and the domain (include https://). |
| Picker misses an older ticket | The picker matches the 100 most recent tickets by subject or ticket ID. Open the new-request link with ?ticket= and the ticket’s ID added to link an older ticket. |
| “Unknown status” on the card | Map the status (shown as Status and its number) under Status mapping. |