Mirror ticket comments to Slack
Stream every comment posted on a ticket into a Slack channel so the team sees discussion without watching the Tickets page. For ops teams who triage and discuss in Slack but file the audit trail on the ticket itself.
What this workflow does
- A Ticket Comment Added trigger fires every time someone (or a workflow) posts a comment on any ticket in your org.
- A Send Direct Message (or Post To Channel) action delivers the comment body + a link back to the ticket.
The comment body comes through in two flavors on the payload: comment.body (markdown source) and comment.bodyPlain (plain text). Use whichever your sink renders.

Prerequisites
- Workflows enabled for your org. See Enable workflows for your org.
- Tickets enabled for your org. See Tickets.
- Slack integration connected so the action can post a message.
Build it
1. Create the workflow
Workflows → New workflow → name Mirror ticket comments to #ops → Create.
2. Add the Ticket Comment Added trigger
- Add node → Triggers → Ticket Comment Added.
- No settings — the trigger fires on every comment in your org.
3. Add the Post To Channel action
- Add node → Actions → Post To Channel.
- Settings:
- Channel — your ops channel (e.g.
#ops). - Content type — Markdown if your channel renders mrkdwn cleanly; Plain text if you'd rather pre-render and skip Slack's formatting.
- Content — a template using the comment + ticket envelope. A good starter (markdown):
-
💬 **{{ .trigger.ticket.subjectName }}** — comment by `{{ .trigger.comment.by }}`
{{ .trigger.comment.body }}
Ticket: {{ .trigger.ticket.url }}Plain-text version:
💬 {{ .trigger.ticket.subjectName }} — comment by {{ .trigger.comment.by }}
{{ .trigger.comment.bodyPlain }}
Ticket: {{ .trigger.ticket.url }}
- Channel — your ops channel (e.g.
- Connect the trigger to the action.
4. Save and enable
Click Save, leave Enabled on, write a commit message.
Variations
- Route by subject kind. Add an If condition checking
trigger.ticket.subjectKindso device-comments and integration-comments land in different channels. Same shape as the Alert when a device goes offline recipe. - DM the assignee instead of posting to a channel. Switch to Send Direct Message and look the recipient up from
trigger.comment.byif you keep a user-id-to-email map; or hard-code the on-call rota's email. - Suppress workflow-driven comments. If you've also wired an Add Comment action (e.g. for hourly status posts), add an If condition checking
trigger.comment.bydoes not start withworkflow:so you don't mirror automated noise into the human chat. - Dedupe across retries. Trigger delivery is at-least-once. If your channel can't tolerate the occasional duplicate, use a Cooldown keyed on
trigger.comment.eventIdto drop replays — the eventId is stable per comment.
When it doesn't fire
- No message arrived. Open the workflow's Executions. If the trigger never fired, confirm the comment actually saved on the ticket's detail page. Comments that fail sanitization (e.g. body was empty) don't fire the trigger because they don't write an event.
- Markdown renders as raw asterisks. Switch the Content type to Markdown. Or use
trigger.comment.bodyPlainand Plain text for sinks that don't render markdown. - Workflow fired twice for the same comment. At-least-once delivery — see Dedupe across retries above.