Troubleshooting: Slack “Automated Alert” double-posting

When an automated notification, such as a monitoring ping, GitHub deployment alert, Jira issue update, or webhook bot message, posts twice in identical succession to a Slack channel, the problem is almost always caused by HTTP webhook retry loops or duplicate trigger configurations. Slack webhooks require an immediate acknowledgment; if network lag delays that response, the sending service assumes the message was lost and immediately dispatches a duplicate copy.

Fast Fix

Check the sending service’s webhook log (e.g., Datadog, GitHub, PagerDuty, or Zapier). If Slack’s response took longer than the third-party service’s timeout window, the provider automatically resends the alert. Next, open Channel Settings > Integrations to confirm that two identical apps or incoming webhooks are not running on the same channel.


Diagnostic Snapshot

  • Symptom: Two identical automated messages appear back-to-back within milliseconds or seconds of each other.
  • Component: Inbound Webhook endpoint / Third-party integration dispatch engine.
  • Primary Causes: Webhook HTTP timeout retry loops, duplicate apps or incoming webhooks listening to the same event, or race conditions in third-party automation tools.
  • Access Needed: Admin access to the sending tool (to inspect outbound HTTP logs) and Slack channel management rights.

Diagnostic Path: Timing Reveals the Cause

Examine the timestamps of the duplicate posts to determine where the duplication originates:

                   Duplicate Alerts in Channel
                               │
            What is the time gap between the two posts?
                   /                       \
        Less than 1 second             2 to 60 seconds apart
               │                                 │
     Dual Integration Block              Webhook Timeout Retry
  • Two webhooks in same channel       • Originating server timed out
  • Overlapping Zapier/Make triggers   • Slack took > 3s to return 200 OK
  • GitHub org + repo webhooks active  • Sender assumed network drop & retried

Common Causes & Step-by-Step Fixes

1. Webhook HTTP Timeout Retry Storms (2 to 30-Second Gap)

Most webhook providers (such as GitHub, Stripe, Datadog, or custom servers) operate on a strict timeout rule:

  • When the external service sends an HTTP POST to Slack’s webhook URL, it expects an HTTP 200 OK response within a few seconds.
  • If a temporary network hiccup delays Slack’s response beyond that window, the originating server treats the request as dropped.
  • The Result: The external service automatically retries. Meanwhile, Slack’s server actually processed the first request and processes the second one moments later, creating two identical messages.
  • The Fix: If you are using a custom internal server, ensure your script handles Slack dispatches asynchronously. Return an immediate HTTP 200 OK to your upstream event source before processing downstream logic. This timeout behavior operates identically to the rules detailed in Fix: Slack “Slash Command” returning “Dispatch Failed”.

2. Duplicate Incoming Webhooks or Integrations (< 1-Second Gap)

A common mistake during workspace migrations or troubleshooting is creating a new webhook without removing the old one:

  1. Open the channel where the double-posting occurs.
  2. Click the channel name in the conversation header to open Channel Details.
  3. Select the Integrations tab.
  4. Click Apps.
  5. Check if the same application (e.g., GitHub, Jira, or Incoming Webhooks) is listed twice.
  6. If two integrations point to the same external repository or project, both will receive the event from the external service and both will post into the channel at the exact same moment. Remove or revoke the redundant integration.

3. Overlapping Repository and Organization Hooks (GitHub / GitLab)

When using code repository integrations:

  • If an administrator installs the GitHub Slack app at the Organization level, and a developer also configures an incoming webhook at the Repository level, every commit or pull request triggers two separate notifications.
  • Audit your third-party service’s webhook settings to ensure you are not subscribed to the same repository events at both the individual project level and the parent account level.

4. Polling Overlap in Automation Platforms (Zapier / Make)

If the alert originates from an automation platform like Zapier or Make:

  • Multiple Active Workflows: Check if an older test workflow was left enabled alongside the new production workflow.
  • Trigger Duplication: If the trigger is set to “New or Updated Record,” any minor system update on the record (such as an automated timestamp refresh) re-fires the trigger immediately after creation.
  • The Fix: Change the trigger from “New or Updated” to strictly “New Record,” or add an explicit filter step checking that the record’s status or ID has not already been processed.

5. Bot Token Regeneration and Orphaned Instances

If the alerts are posted by a custom internal bot, an old instance of your bot application may still be running in a forgotten staging container, local developer environment, or secondary cloud instance.

  • Check your application hosting provider (AWS, Heroku, Docker) to confirm only one container instance is actively listening to outbound dispatch queues.
  • If a custom bot fails to respond properly to other incoming commands, verify its runtime state using Fix: Slack “Bot” not responding to Direct Messages.

Summary Checklist to Prevent Duplicate Alerts

  1. Audit Channel Apps: Ensure only one webhook or app is assigned per external service in channel settings.
  2. Review External Webhook Logs: Verify that the originating service is receiving a fast HTTP 200 OK and not logging Connection timed out - Retrying.
  3. Check Global vs. Local Scopes: Avoid subscribing to alerts at both the organization-wide and project-specific levels.