Skip to content

Version: Arctyk ITSM v0.6.0+ Last Updated: January 2026

Slack Integration

Real-time Slack notifications for ticket events in Arctyk ITSM.


Overview

Current Status

🔄 Planned for v0.7.0+

The Slack integration is currently in development and will provide:

  • ✅ Real-time ticket notifications in Slack
  • ✅ Interactive Slack commands for ticket management
  • ✅ Slack threads for ticket discussions
  • ✅ Custom notification rules and filters
  • ✅ Ticket updates from Slack

Planned Features

1. Incoming Webhook Notifications

Receive Slack messages when tickets are created or updated:

🎫 New Ticket: Unable to login (TKT-001)
Priority: 🔴 High
Requester: John Doe
Project: Platform

[View in Arctyk] [Assign to Me] [Add Comment]

2. Slash Commands

Manage tickets directly from Slack:

# Create a ticket
/arctyk ticket "Server down" "Production server is offline" --priority=critical

# Update ticket status
/arctyk ticket TKT-001 status in_progress

# Add comment
/arctyk comment TKT-001 "Working on this now"

# List my tickets
/arctyk my-tickets

3. Interactive Messages

Click buttons to perform actions:

[✓ Resolve] [⏸ Hold] [🔄 Reopen] [💬 Comment]

4. Slack Threads

Ticket comments sync with Slack threads:

User replies in Slack
Posted as comment in Arctyk
Synced back to Slack thread

Setup Instructions (v0.7.0+)

1. Create Slack App

  1. Go to api.slack.com/apps
  2. Click "Create New App"
  3. Choose "From scratch"
  4. Name: "Arctyk ITSM"
  5. Choose your workspace

2. Configure OAuth Scopes

Add permissions under "OAuth & Permissions":

chat:write
channels:read
users:read
reactions:read

3. Set Webhook URLs

Under "Event Subscriptions":

  • Request URL: https://arctyk.example.com/integrations/slack/events/
  • Subscribe to events:
  • message.channels
  • reaction_added
  • app_mention

4. Configure in Arctyk

Navigate to Admin > Integrations > Slack:

Slack Workspace: your-workspace
Webhook URL: https://hooks.slack.com/services/YOUR/WEBHOOK/URL
OAuth Token: xoxb-your-bot-token
Channel: #tickets

5. Install to Workspace

Click "Install to Workspace" and authorize.


Configuration

Environment Variables

SLACK_BOT_TOKEN=xoxb-your-bot-token
SLACK_SIGNING_SECRET=your-signing-secret
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/YOUR/WEBHOOK/URL
SLACK_DEFAULT_CHANNEL=tickets

Django Settings

# src/config/settings.py
SLACK_INTEGRATIONS = {
    'enabled': True,
    'bot_token': os.getenv('SLACK_BOT_TOKEN'),
    'signing_secret': os.getenv('SLACK_SIGNING_SECRET'),
    'webhook_url': os.getenv('SLACK_WEBHOOK_URL'),
    'default_channel': os.getenv('SLACK_DEFAULT_CHANNEL', '#tickets'),
}

Event Mapping

Ticket Events

Arctyk Event Slack Notification
Ticket Created Message in #tickets channel
Ticket Assigned DM to assigned user
Status Changed Thread reply or new message
Comment Added Thread reply
Overdue Reminder message
SLA Breach Warning message

Example Notifications

New Ticket

🎫 New Ticket: Website Down
━━━━━━━━━━━━━━━━━━━━━━━━━
Priority: 🔴 CRITICAL
Requester: Sarah Smith
Project: Platform
Description: Homepage not loading

[View] [Assign] [Update Status]

Comment Added

💬 New Comment on TKT-001: Unable to login
@Alice Johnson replied:

"I've identified the issue - it's a database connection problem.
Working on a fix now."

[View in Arctyk] [Reply in Slack]

Status Update

✅ TKT-001: Unable to login → Resolved
Resolver: @Bob Johnson
Time to Resolve: 2h 30m

[Close Ticket] [Reopen]

Slack Bot Commands (v0.7.0+)

Create Ticket

/arctyk create
> Title: Website Down
> Description: Homepage not loading
> Priority: critical

Or:

/arctyk ticket "Website Down" "Homepage not loading" --priority=critical --project=Platform

Manage Ticket

/arctyk TKT-001 status in_progress
/arctyk TKT-001 assign @alice
/arctyk TKT-001 comment "Working on this now"

List Tickets

/arctyk my-tickets          # Show assigned to me
/arctyk team-tickets        # Show team's tickets
/arctyk open-critical       # Show open critical tickets

Integration Flow

┌─────────────────────────┐
│   Arctyk ITSM Event     │
│   (Ticket Created)      │
└────────────┬────────────┘
┌─────────────────────────┐
│   Celery Task           │
│   send_slack_message    │
└────────────┬────────────┘
┌─────────────────────────┐
│   Slack Webhook         │
│   POST to Slack API     │
└────────────┬────────────┘
┌─────────────────────────┐
│   Slack Channel         │
│   Display Notification  │
└─────────────────────────┘

Conversation Tracking

Link Slack messages to Arctyk tickets:

# When message is posted, track the Slack message ID
slack_thread = SlackThread.objects.create(
    ticket=ticket,
    channel_id='C12345',
    thread_ts='1234567890.123456'
)

# When ticket is updated, update Slack thread
update_slack_thread(slack_thread, updated_comment)

Troubleshooting

Message Not Sending

  1. Verify SLACK_BOT_TOKEN is correct
  2. Check bot has chat:write permission
  3. Verify channel name is correct
  4. Check Celery worker is running

Command Not Working

  1. Verify slash command is registered
  2. Check URL is accessible from Slack
  3. Review Slack app logs for errors

Sync Issues

  1. Check timestamp alignment
  2. Verify thread IDs are stored correctly
  3. Monitor message delivery logs

Security Considerations

Token Management

  • ✅ Store tokens in environment variables
  • ✅ Rotate tokens regularly
  • ❌ Don't commit tokens to repository
  • ❌ Don't share tokens in logs

Message Validation

Always validate Slack signatures:

from slack_sdk.signature import SignatureVerifier

verifier = SignatureVerifier(signing_secret)

if not verifier.is_valid_request(body, timestamp, signature):
    raise ValidationError('Invalid Slack signature')

Rate Limiting

Slack API has rate limits:

  • Web API: 1-30 requests per second (per team)
  • Webhook: ~3 messages per second

Solution: Queue messages and batch process.


Testing

Local Testing with Slack

# Install ngrok for local tunneling
ngrok http 8000

# Update Slack Event URL to: https://YOUR-NGROK-URL/integrations/slack/events/

Mock Testing

from unittest.mock import patch

@patch('slacks.slack_sdk.WebClient.chat_postMessage')
def test_ticket_created_notification(mock_post):
    ticket = Ticket.objects.create(...)

    # Assert Slack message was sent
    mock_post.assert_called_once()
    call_args = mock_post.call_args
    assert 'Unable to login' in call_args.kwargs['text']

Future Enhancements

v0.7.0

  • Real-time notifications
  • Slash commands
  • Interactive buttons
  • Thread syncing

v0.8.0

  • Workflow automation from Slack
  • Scheduled reports to Slack
  • Slack AI features integration
  • Advanced filtering rules


Need Help?

For Slack integration questions:

  1. Check Slack API Documentation
  2. Review Arctyk ITSM Integrations Guide
  3. Contact the development team