Voidly / Slack
In the loop.
In your channel.
Incident alerts where your team works.
Choose a country. Set a threshold.
01 / Start in Slack
Choose the channel.
Create an incoming webhook in your own Slack app. Slack asks you to authorize its destination channel.
Open Slack app settings ↗Visit api.slack.com/apps and click Create New App. Pick From scratch, name it “Voidly Alerts”, and choose your workspace.
In your new app’s sidebar, open Incoming Webhooks and toggle Activate Incoming Webhooks on.
Click Add New Webhook to Workspace, pick the channel where you want incidents posted, and approve.
Copy the Webhook URL (it starts with
https://hooks.slack.com/services/) and paste it below.Click Send test message to verify, then Connect Slack to start receiving real alerts.
02 / Connect your channel
Set the signal.
Incoming webhook · no Voidly account.
Each action below contacts the real service.
Keep this URL private. It lets its holder post to the channel and manage these subscriptions. Get a webhook URL →
Significant censorship incidents
Test sends a message without saving a subscription. Connect sends a message, then saves the selected filters. Neither action runs until you click.
Subscriptions for this webhook
Lookup sends the webhook URL to Voidly’s existing management endpoint. Nothing is looked up when you paste or leave the field.
Enter your webhook, then load its subscriptions.
What an alert looks like
Published illustrative example. These values are not a current incident or a performance measurement.
Example message
Iran — CRITICAL
DNS blocking of twitter.com detected across 3 ISPs
- Country
- Iran (IR)
- Type
- blocking
- Severity
- CRITICAL
- Confidence
- 95% (example)
In a delivered message, View incident opens its report and Country page opens the country page. This sample has no incident destination. A confidence score is not proof of intentional censorship.
Explore the actual incident archive →Privacy, permissions & delivery
- The Slack webhook URL is the credential. Its holder can post to that channel. Voidly stores the URL to deliver alerts; a hash-derived subscriber identifier does not replace the stored credential.
- Subscriptions use a SHA-256-derived identifier from the webhook URL. This form does not request a Voidly account, your name or your email address.
- Voidly’s current flow uses incoming webhooks, with no hosted OAuth install or bot user. Slack’s own app setup still asks you to authorize the destination channel. Private-channel setup requires membership in that channel.
- Ordinary Slack
hooks.slack.comURLs are supported. This backend does not accept the separate GovSlack domain. - Incident delivery uses
X-Voidly-Signatureonly when a valid signing secret is configured; otherwise it declaresX-Voidly-Signature-Status: unsigned-no-secret. Slack ignores these custom headers. Do not rely on them to verify a forwarded Slack message: the delivery code signs the original incident envelope before the Slack formatting step. The initial connection/test message does not include that signature. - Disconnect removes the subscription. You can also revoke the webhook in Slack. A queued message is marked failed after five failed delivery attempts, with backoff between attempts; this does not automatically disable the subscription. Disconnect does not remove messages already posted in Slack.
Planned Slack app features
The published v2 roadmap describes a full Slack app. These features are not available in the incoming-webhook flow:
/voidlyslash command for ad-hoc country status and domain checks- OAuth install flow with a bot user, replacing manual webhook setup
- Daily digest and weekly summary messages
- Interactive buttons for incident triage and acknowledgement
More ways in