Tutorial: Slack to Jira Escalation
Build a workflow that monitors a Slack channel for messages marked with a specific emoji reaction, uses AI to extract structured bug/issue details, and creates a prioritized Jira ticket, all automatically.
What you'll build
App Event (Slack reaction) → TinyGPT (extract issue details) → Jira (create ticket) → Slack (post confirmation in thread)
Time to build: 15 minutes
Prerequisites
- Slack workspace connected in Build → App Authorizations
- Jira (Cloud) connected in Build → App Authorizations
- A Slack channel where your team posts issues (e.g.,
#bugs,#support-escalation) - A Jira project to receive the tickets
Step 1: Set up the Slack trigger
- Create a new workflow → + Add Trigger → App Event
- Select Slack as the app
- Choose Reaction Added as the event type
- Configure:
| Field | Value |
|---|---|
| Connection | Your Slack workspace |
| Channel | #bugs (or your escalation channel) |
| Reaction filter | ticket (or jira, bug, whatever emoji your team uses) |
- To populate test data, go to Slack, find a message in the channel, and add the reaction emoji. Then click Test in TinyCommand to capture the event.
The trigger outputs:
{{trigger.event.message.text}} → the original message
{{trigger.event.message.user}} → who posted it
{{trigger.event.message.ts}} → message timestamp
{{trigger.event.channel}} → channel ID
Step 2: Add the TinyGPT extractor
- Click + Add Node → AI → TinyGPT
- Select Extract Data template → Continue
- Configure:
System Prompt:
You are a support ticket parser. Extract structured issue information from Slack messages. Determine priority based on language urgency, customer impact, and severity indicators.
Priority rules:
- CRITICAL: production down, data loss, security breach, revenue impact
- HIGH: feature broken for multiple users, workaround exists but painful
- MEDIUM: bug affecting some users, has workaround
- LOW: cosmetic issue, feature request, nice-to-have
Query:
Extract issue details from this Slack message:
{{trigger.event.message.text}}
Output Schema:
{
"title": "Short descriptive title for the Jira ticket",
"description": "Detailed description of the issue including steps to reproduce if mentioned",
"priority": "HIGH",
"component": "backend",
"labels": ["bug", "customer-reported"],
"estimated_impact": "Affects checkout flow for ~20% of users"
}
- Set Temperature to
0.1; we want deterministic extraction - Test and save
Step 3: Create the Jira ticket
- Click + Add Node → Integrations → Jira → Create Issue
- Configure:
| Field | Value |
|---|---|
| Connection | Your Jira account |
| Project | Select your target project |
| Issue Type | Bug |
| Summary | {{tinygpt.result.title}} |
| Description | See below |
| Priority | {{tinygpt.result.priority}} |
| Labels | {{tinygpt.result.labels}} |
Description field:
h3. Issue Description
{{tinygpt.result.description}}
h3. Impact
{{tinygpt.result.estimated_impact}}
h3. Source
* *Reported by:* <@{{trigger.event.message.user}}> in Slack
* *Channel:* #{{trigger.event.channel}}
* *Original message:* {{trigger.event.message.text}}
h3. AI Classification
* *Component:* {{tinygpt.result.component}}
* *Priority:* {{tinygpt.result.priority}}
_This ticket was auto-created by TinyCommand from a Slack escalation._
- Test and save; note the output includes
{{jira.issue.key}}(e.g.,PROJ-1234)
Step 4: Post confirmation back to Slack
- Click + Add Node → Integrations → Slack → Send Message
- Configure:
| Field | Value |
|---|---|
| Connection | Your Slack workspace |
| Channel | {{trigger.event.channel}} |
| Thread TS | {{trigger.event.message.ts}} (this posts in the thread of the original message) |
| Message | See below |
Message:
:white_check_mark: *Jira ticket created:* {{jira.issue.key}}
*Title:* {{tinygpt.result.title}}
*Priority:* {{tinygpt.result.priority}}
*Component:* {{tinygpt.result.component}}
View ticket: {{jira.issue.url}}
- Test and save
Step 5: Test end-to-end
- Go to your Slack channel
- Post a test message:
The checkout page is throwing a 500 error when customers try to apply discount codes.
Started happening after yesterday's deploy. Multiple customers have reported it.
Revenue impact — affected orders are being abandoned.
- Add your trigger emoji reaction (e.g.,
:ticket:) to the message - Watch the workflow execute:
- TinyGPT should classify this as CRITICAL priority
- A Jira ticket should be created with the extracted details
- A threaded reply should appear in Slack with the ticket link
Step 6: Publish
Click Publish to make the workflow live. Now any time someone adds the trigger emoji to a message in the monitored channel, it automatically creates a Jira ticket.
Going further
- Add assignee routing: After TinyGPT, add an If-Else node to assign tickets to different team members based on the
componentfield (backend → Alice, frontend → Bob) - Add duplicate detection: Before creating the Jira ticket, use an HTTP Request to search Jira for similar titles. If a match exists, add a comment to the existing ticket instead of creating a new one
- Multi-channel monitoring: Create copies of this workflow for different channels (
#customer-bugs,#internal-bugs) with different Jira projects - Add SLA tracking: After creating the Jira ticket, add a Delay node (e.g., 4 hours) followed by an HTTP Request to check the ticket status. If it's still "To Do", send a reminder to the assignee
Warning
The AI may occasionally misclassify priority. For critical/production issues, have your team also manually verify the Jira ticket priority after it's created. Consider adding a Human-in-the-Loop node before ticket creation for the CRITICAL tier.