Possibility to send Slack notifications about approvals actions

Description

Add the ability to send approval workflow notifications via Slack as an alternative to email or native Jira/Confluence notifications.

Supports both Jira and Confluence products with product-specific message templates and rendering contexts. Includes interactive approval actions directly in Slack messages, real-time message updates reflecting decision outcomes, full delegation support, and automatic email fallback when Slack delivery fails.

Workspace connections

  • Connect up to 10 Slack workspaces per instance via OAuth 2.0

  • Settings page to manage connections: rename, set default, delete, send test message

  • Per-definition workspace and channel overrides in the definition settings form

  • Automatic detection of token revocation and app uninstallation with connection invalidation and admin-visible instance errors

Notification delivery

  • Three delivery modes configurable globally: Direct Message, Channel (with @mentions), or Both

  • All notification types supported for both Jira and Confluence

  • Customizable message templates per notification type via the existing template editor, with Slack-specific body field in mrkdwn format

  • Full delegation support: delegates receive their own DMs, channel messages include delegate mentions, and decisions are attributed correctly

  • External (email-based) approver steps dispatch Slack notifications alongside email

  • Async dispatch with automatic email fallback on any Slack failure (token revoked, user not found, channel misconfigured, API error)

Interactive actions in Slack

  • Approve, Reject, Abstain buttons with a confirmation dialog on Reject

  • Optional comment modal when the comment-required setting is enabled

  • Vote button opening a modal with the step's configured voting options (single-choice and multi-choice)

  • Identity resolution maps Slack users back to Atlassian accounts via email matching, with caching (24h for found users, 1h for not-found)

  • Ephemeral feedback messages confirming whether the decision was applied, with specific messages for already-decided and not-authorized cases

  • Supports decisions by delegates, carrying the delegate config through the modal flow

  • "Actions without login" toggle behavior (interactive buttons vs URL links)

  • "Action buttons" disabled = only "View approval" link shown

Message lifecycle

  • When a step completes, all original Slack messages for that step are updated in-place to show the full outcome: individual decisions with comments, vote tallies, and links back to the approval

  • Thread replies posted on channel messages after each individual decision, including progress counters for group steps (e.g. 2/3 approvals)

  • Slack messages are updated to reflect the new state and remove action buttons when an approval step is expired, reassigned, archived, deleted, or marked outdated

  • Duplicate update avoidance for batched group messages sharing same channel:ts

  • Token revocation during batch updates skips remaining records for that connection

  • Delegate attribution shown in decision summaries

Notification history

  • Admin-only activity log with pagination, sorting, and filtering by status, recipient, and date range

  • Tracks SENT, UPDATED, and FAILED statuses per notification record

  • Automatic cleanup of records older than 30 days

Settings UI

  • Slack settings page under app settings with General and Notification History tabs

  • Global delivery mode and default channel configuration with validation

  • Notification mechanism selector in notification settings shows Slack as an option; automatically switches to Slack when the first workspace is connected

  • Per-definition Slack workspace and channel override in the definition settings form

  • Revoked token warnings displayed on the settings page with guidance to re-authorize

Robustness

  • Retry with exponential backoff on Slack API rate limits and server errors (respects Retry-After header)

  • HMAC-SHA256 signature verification on all incoming Slack webhooks with a 5-minute timestamp window

  • Payload size limits (512 KB) on webhook endpoints

  • Advisory locks to prevent concurrent connection writes and message update races

  • Throttled user resolution (max 10 concurrent Slack API lookups) to avoid rate limits during bulk dispatch

  • Caching at multiple layers: connections (5 min), user lookups (24h/1h), definition config (5 min), frontend connections (30s)

  • OAuth state CSRF prevention (10-min TTL, verification token)

  • HTTP client: redirects disabled (SSRF prevention), specific timeouts (5s connect, 10s request)

  • Max 3 retries capped at 5s delay