-
Notifications
You must be signed in to change notification settings - Fork 15
Slack
Someone types "my laptop won't charge" into a Slack channel. It becomes a ticket. You answer it from the FreeITSM inbox, and your reply appears in that Slack thread β so the person asking never leaves Slack, and never has to learn there is a service desk behind it.
Set up under System β Integrations β Slack.
Developers: the architecture, the file map and the traps are in the Slack β Developer Guide.
- A message in the Slack channel you choose becomes a ticket, with the sender as the requester.
- Your reply from the inbox appears in that Slack thread.
- Anything else said in the thread lands on the same ticket.
- Screenshots shared in Slack come across as attachments.
It behaves like any other channel once the ticket exists: SLAs, assignment, priorities, reporting and company routing all work the same way as they do for email, WhatsApp or web chat.
There is no FreeITSM-hosted Slack service, and there never will be. You create an app inside your own Slack workspace, and it talks straight to your own server.
That is a deliberate choice. Publishing a single shared app β the way a hosted product would β would mean this project ran a server that every customer's Slack traffic passed through, permanently, and became a data processor for other people's companies. For something free and self-hosted, that is the wrong trade.
What it means for you:
- Your messages never pass through anyone else's machine.
- There is no central service that can be switched off, rate-limited or discontinued.
- There is nobody to trust beyond Slack and your own server.
The catch, stated plainly: for Slack to send anything to FreeITSM, it has to reach your server from the internet over https://. An install that is only reachable inside your own network can still post out to Slack (see Webhooks) but cannot receive.
The in-app guide β System β Integrations β Slack β How to set up Slack β is the full step-by-step, written for someone who has never opened Slack. In outline:
- Add the workspace in FreeITSM first. The Slack app needs the web address to send messages to, and that address contains the row's own id β so the row has to exist before the app can.
-
Create the Slack app from the manifest FreeITSM generates. At
api.slack.com/apps, choose Create New App β From a manifest and paste it. That sets the name, the permissions and the address in one go. - Copy the two secrets back β the signing secret and the bot token.
-
Invite the app to a channel:
/invite @YourApp.
Both produce something that looks like success, which is what makes them worth calling out.
Click the yellow "Reinstall to Workspace" banner. Slack grants an app its permissions at the moment it is installed. An app created from a manifest holds a token missing most of them until you reinstall. Nothing appears broken β tickets still arrive, they just say "Slack user @U0A1B2C3" instead of a name. Fix it and the names correct themselves on that person's next message.
An app cannot read a channel it is not in. No error, no warning: messages simply never arrive. /invite @YourApp in the channel.
Both are checked by the health check below, so you do not have to remember them.
The tick button on a workspace runs nine checks and tells you what to do about anything it finds. It exists because almost every way this can break looks like success β the token is valid, the app is connected, tickets even arrive, and one thing is quietly wrong.
| Check | What it catches |
|---|---|
| Switched on | The workspace is marked inactive |
| Credentials stored | A missing bot token or signing secret |
| Slack accepts the token | A revoked, mistyped or pre-install token |
| Permissions | The reinstall trap β the failure with no symptom |
| Can read names | Tickets would arrive as "Slack user @Uβ¦" |
| Address Slack sends to | An address Slack cannot use: http://, localhost, a private range |
| Reachable from the internet | Slack cannot get through to you |
| In the channel | The missing /invite β the commonest failure of all |
| Messages arriving | Nothing has ever come through β and if something has, that also proves your signing secret is right |
If the reachability check cannot confirm your address but Slack has reached you before, it says so rather than claiming a fault. That test makes your server call its own public address, which loops back through the same web server, and some tunnels drop it even when everything is fine.
A thread is a ticket. This is the one place Slack deliberately differs from WhatsApp. On WhatsApp a person has one running conversation with the service desk, so the sender identifies it. In Slack the same person can have several unrelated threads going at once β so the thread is the conversation. A new message in the channel starts a new ticket; a reply inside a thread lands on the existing one.
Watch one channel. Leave Only watch this channel blank and every channel the app is invited to raises tickets β which on a busy channel means a ticket per message. Name a dedicated channel such as #it-help.
Names, and what happens when Slack cannot give us one. FreeITSM asks Slack for the sender's email and matches it to an existing FreeITSM user, so their tickets and company line up with everything else. When there is no match it falls back to a named requester β "Sam Okafor (Slack)", or "Slack user @U0A1B2C3" if even the name is unavailable. Never a blank requester, and never a silent failure.
No reply deadline. WhatsApp has a 24-hour business-messaging window; Slack has nothing of the kind. You can reply to a thread from last year.
More than one company. Pin a workspace to a single company, or leave it shared and let the sender decide β the same model as every other channel. See Multi-Tenancy.
| What you see | What it usually means |
|---|---|
| Slack refuses to create the app, complaining about the request URL | Slack cannot reach your server. It must be https:// and reachable from outside your network. |
| Messages never become tickets | Nine times in ten the app was never invited to the channel. Otherwise check the signing secret is saved β without it everything is refused. |
| Tickets say "Slack user @U0A1B2C3" | The reinstall trap. OAuth & Permissions β Reinstall to Workspace, then copy the bot token again. Existing requesters correct themselves on their next message. |
| The test says the token was rejected | Copied before installing the app, or from the wrong field. It must start xoxb-, from OAuth & Permissions. |
| Replies fail with "not in channel" | The app was removed from the channel after setup. Invite it again. |
| One person's messages all pile onto one ticket | They are replying in the same thread. A new message in the channel starts a new ticket. |
Run the health check first β it will usually name the problem before you have to look anything up.
No message shortcuts (raising a ticket from any message via the β¦ menu), no /ticket slash commands, no ticket cards with buttons, no incident channels, and no chatbot. Slack is a way in and a way to reply, not yet a place to work.
- Slack β Developer Guide β how it is built, and why
- WhatsApp channel Β· Web chat channel β the same engine underneath
- Issue trackers (Jira, Azure DevOps) β also under Integrations, but a completely different thing
- Webhooks β posting out to Slack, which needs none of this
- Multi-Tenancy β pinning a workspace to one company
FreeITSM β an open-source IT Service Management platform Β· github.com/edmozley/freeitsm Β· MIT licence
- Installation
- β° Scheduled tasks (cron jobs)
- Architecture
- AI Providers
- Internationalisation (i18n)
- Timezones & Time Handling
- Theming & Dark Mode
- β¨οΈ Command palette (βK)
- π Searching inside tickets
- π Attached documents
- MobileβFriendly
-
Security
- Layer 1 β which modules you can enter
- β³ π§© Module Access Control
- β³ π οΈ Module Access β Developer Guide
- Layer 2 β what you can administer
- β³ π Roles & Permissions
- β³ π οΈ Roles β Developer Guide
- β³ π€ Why capabilities are constants
- Layer 3 β the System module
- β³ π Admin Access Control
- Hardening
- β³ π Security review response 2026-08
- β³ π‘οΈ Security hardening 2026-08
- β³ π οΈ Security hardening 2026-08 β Developer Guide
- β³ π‘οΈ Round three β plain English
- β³ π οΈ Round three β Developer Guide
- Single Sign-On (SSO)
- ποΈ LDAP & Active Directory
- Browser Extension
- API Reference
-
π REST API β how it works
- β³ π« REST API: Tickets
- β³ π» REST API: Assets
- β³ π΄ REST API: Problems
- β³ π REST API: Changes
- β³ π REST API: Knowledge
- β³ β REST API: Tasks
- β³ ποΈ REST API: CMDB
- β³ π REST API: Contracts
- β³ ποΈ REST API: Calendar
- β³ πΏ REST API: Software
- β³ π¦ REST API: Service Status
- β³ βοΈ REST API: Morning Checks
- β³ π REST API: Forms
- β³ βοΈ REST API: Workflow
- β³ πΊοΈ REST API: Network Mapper
- β³ π§ Using the API docs page
- β³ π OpenAPI specification
- β³ β OpenAPI: kept correct
- β³ π οΈ Maintaining the catalogue
- Watchtower
-
Tickets
- β³ Mailbox Authentication
- β³ π€ Email send log
- β³ Basic IMAP mailboxes
- β³ Email rendering & images
- β³ SLA Management
- β³ WhatsApp channel
- β³ π¬ Web chat channel
- β³ π£ Slack channel
- β³ π Linking tickets
- β³ ποΈ Canned responses
- β³ βοΈ Limiting replies to particular senders
- β³ βοΈ Email signatures
- β³ π The public web address
- β³ π Raising a ticket for someone else
- β³ π Merging tickets
- β³ β Splitting tickets
- β³ β Selecting several tickets
- β³ π οΈ Snoozing tickets β Developer Guide
- β³ π₯ Collision detection
- β³ β±οΈ Time tracking
- Problem Management
- Tasks
- Assets
- Knowledge
- Change Management
- Calendar
- Morning Checks
- Reporting
- Software
- Forms
- Contracts
- Service Status
- π Notifications
- π¨ War Room
- Self-Service Portal
- LMS
- Process Mapper
- CMDB
- Network Mapper
- Workflows
- Issue trackers (Jira, Azure DevOps)
- System
-
Overview
- β³ π Progress tracker
- β³ Concepts & vocabulary
- β³ Email routing & mailboxes
- β³ Settings: global vs per-company
- β³ Users & self-service
- β³ Staff cross-company access
- β³ Worked examples
- β³ Pitfalls & gotchas
- β³ Scope: what it's for
- β³ π οΈ Developer Guide (make a module multi-company)
- β³ ποΈ Case study: CMDB (a linked graph)
- β³ π§ͺ Test harness (prove it's isolated)