Support · Your other tools
Channel alerts and webhooks
Post to Slack, Teams, Google Chat, or Discord when tickets come in or change, or send the details to another system.
Channel alerts and webhooks posts to a chat channel when something happens to a ticket, so the team sees new and overdue tickets where they already talk. It can also send every detail to another system, like Power Automate, Zapier, n8n, or a script of your own.
Find it under Settings, System, Channel alerts and webhooks, and click Add one.
These are one-way: the helpdesk posts, and nobody answers back through them. To let people open tickets from Slack or Microsoft Teams and get replies there, set up Slack and Teams apps instead (Slack, Teams).
Get the address from your chat app
Each chat app gives you a webhook address for a channel. Paste it into Webhook address.
Slack: make an app for your workspace at api.slack.com/apps, turn on Incoming Webhooks, and click Add New Webhook to Workspace. Pick the channel. The address starts with https://hooks.slack.com/services/.
Microsoft Teams: open Workflows in Teams and pick the Send webhook alerts to a channel template. Choose the team and channel and save. Copy the webhook address from the workflow’s details page. (The older “Incoming Webhook” connector is being retired by Microsoft, so use Workflows.)
Google Chat: in the space, open the space’s menu, then Apps & integrations, then Webhooks. Add one, name it, and copy its address.
Discord: open the channel’s settings, then Integrations, then Webhooks. Make a new one and click Copy Webhook URL.
The address works like a password: anyone who has it can post to that channel. The helpdesk keeps it encrypted and never shows it again after you save. To change where it goes, paste a new one.
Pick what it posts about
Under Post when, tick what the channel should hear about:
- A ticket comes in
- A ticket is assigned to someone
- A ticket’s status changes, like when it’s resolved
- Someone replies publicly. Internal notes never go out.
- A ticket goes past its SLA time
One change that’s more than one of these, like a reply that also resolves the ticket, makes one message, not two.
For tickets in and Priority narrow it down. A Facilities channel can hear only about Facilities tickets, or a channel for the on-call tech can hear only about urgent ones. Make as many webhooks as you need, each with its own settings, even several to the same channel.
What a message shows
A message has a headline (“Dana Smith replied”), the ticket’s number and title as a link, and who it’s from, its priority, status, who has it, and its category.
It doesn’t include what the ticket or reply says unless you tick Include what tickets and replies say. Leave that off if people outside the helpdesk team can see the channel, since tickets can hold private things.
Send a test
After saving, click Send a test. A sample message posts right away, and the page says whether it went through. If it didn’t, the reason is shown, like the address being wrong or the webhook having been removed.
Post from a routing rule
A rule can post too, for the times Post when can’t say it. For example: post to #it-leads when a ticket from a principal comes in, or when a ticket is tagged “outage”.
In the rule, add the action Post to chat or a webhook and pick where. The rule’s conditions decide, so the webhook’s own Post when, department, and priority settings don’t apply to rule posts. To have a webhook post only from rules, leave everything under Post when unticked.
The ticket’s history shows each post a rule made.
When a message doesn’t go through
Messages go out within a few seconds. If one doesn’t go through, it’s tried again in a minute, then 5 minutes, 20 minutes, an hour, and 4 hours. If the chat app says the webhook is gone (it was removed in Slack, say), it stops trying right away.
The list shows each webhook’s last message, and the webhook’s page shows its recent ones with what went wrong. Send again tries a failed one again. Messages are kept for 30 days.
Turning a webhook off drops whatever was waiting to go. Removing one doesn’t remove anything in Slack or Teams, so remove it there too if it’s no longer needed.
JSON for other systems
Pick JSON (anything else) to send the details to a system of your own. Each message is a POST with a body like this:
{
"events": ["replied", "status_changed"],
"headline": "Marcus Lee replied · Now Resolved",
"at": "2026-10-20T14:05:12.0000000Z",
"ticket": {
"id": 1042,
"title": "Printer in room 12 jams",
"url": "https://yourname.requestcrew.com/Tickets/1042",
"status": "Resolved",
"priority": "Normal",
"requester": { "name": "Dana Smith", "email": "dana.smith@example.com" },
"assignee": { "name": "Marcus Lee", "email": "marcus.lee@example.com" },
"team": "Help Desk",
"category": "Printers",
"department": "IT",
"location": "Main Office",
"createdAt": "2026-10-20T13:40:00.0000000Z"
},
"text": { "by": "Marcus Lee", "body": "Cleared the jam and replaced the roller." },
"rule": null
}
The events are created, assigned, status_changed, replied, and overdue. A post from a rule has the event rule and the rule’s name. text is only there when Include what tickets and replies say is ticked.
Answer with any 2xx status to say it arrived. Anything else counts as not delivered and is tried again, except 400, 401, 403, 404, 410, and 422, which mean trying again won’t help.
Checking the signature
A JSON webhook gets a signing secret when you add it, shown once. Each message carries three headers:
- X-RequestCrew-Delivery: an ID for the message. A retry has the same ID, so you can skip ones you’ve already handled.
- X-RequestCrew-Timestamp: when it was sent, in seconds since 1970.
- X-RequestCrew-Signature: sha256= and then the HMAC-SHA256 of the timestamp, a dot, and the raw body, made with the secret, in lowercase hex.
To check a message is real, make the same signature and compare. Also turn away a timestamp more than five minutes old, so an old message can’t be sent again. In Python:
import hmac, hashlib, time
def is_real(secret, timestamp, signature, body):
if abs(time.time() - int(timestamp)) > 300:
return False
made = hmac.new(secret.encode(), f"{timestamp}.".encode() + body, hashlib.sha256).hexdigest()
return hmac.compare_digest("sha256=" + made, signature)
Lost the secret? Click Make a new secret on the webhook’s page. The old one stops working right away.
The address in these steps is a made-up one. The copy of this guide inside your helpdesk fills in your real one.
More on your other tools
- Open tickets from Slack
- Open tickets from Microsoft Teams
- Monitoring alerts
- Remote support
- API keys
- AI help
- Network
Still stuck?
Search all the guides or write to us on the Support page.