INTEGRATION · SLACK
PostKnock in Slack
Put every delivery confirmation, QR scan and call outcome in the channel your team already has open. No app to install from a directory — a Slack incoming webhook and about two minutes.
Connect Slack
No developer required — this is all point and click.
-
1
Create a Slack app for the workspace
Go to api.slack.com/apps and select Create New App › From scratch. Name it something your team will recognise in the channel, such as “PostKnock”, and pick the workspace.
-
2
Turn on Incoming Webhooks
In the app’s left sidebar choose Incoming Webhooks and switch Activate Incoming Webhooks to On.
-
3
Add a webhook and pick the channel
Select Add New Webhook to Workspace, choose the channel that should receive PostKnock updates, and select Allow. A private channel works too, as long as you have access to it.
-
4
Copy the webhook URL
Slack shows a URL beginning
https://hooks.slack.com/services/. Treat it as a credential — anyone holding it can post to that channel. -
5
Add it to PostKnock
In PostKnock open Admin › Webhooks › New webhook, set the format to Slack, and paste the URL. PostKnock checks it is a real
hooks.slack.comaddress, so a URL pasted into the wrong field is caught immediately. -
6
Choose events and send a test
Tick the events you want in the channel —
postcard.deliveredandcontact.respondedare the usual pair — save, then select Test and watch the message appear in Slack.
Every event you can subscribe to
Pick the ones you want per webhook, or subscribe to all of them with *. Each event carries the fields listed here inside data.
| Event | Fires when | data fields |
|---|---|---|
| postcard.sent | A postcard was handed to the print partner and mailed. | campaign_id, contact_id, wave_number, lob_id |
| postcard.in_transit | The postal service scanned the piece in transit. | campaign_id, contact_id, wave_number, lob_id |
| postcard.delivered | Delivery confirmed. Never presumed — only a real carrier confirmation fires this. | campaign_id, contact_id, wave_number, lob_id, delivered_date |
| postcard.failed | The piece failed or came back as return-to-sender. | campaign_id, contact_id, wave_number, lob_id, reason |
| call.scheduled | A follow-up call was queued for a contact. | campaign_id, contact_id, wave_number, scheduled_for |
| call.completed | A call was completed and its outcome recorded. | campaign_id, contact_id, wave_number, call_result, contact_type, duration_seconds |
| call.no_answer | A call rang out or the line was unavailable. | campaign_id, contact_id, wave_number |
| contact.responded | A contact scanned the QR code on their postcard. | contact_id, campaign_id, method, tracked_url_id |
| contact.unsubscribed | A contact was marked do-not-contact. | contact_id, reason |
| campaign.activated | A campaign started sending. | campaign_id, name, total_contacts |
| campaign.completed | Every wave finished, or someone marked the campaign complete. | campaign_id, name |
| campaign.paused | A campaign paused — by request, or automatically on a low wallet balance. | campaign_id, name, reason |
| touchpoint.failed | An individual postcard or email touchpoint failed. | campaign_id, contact_id, touchpoint_type, reason |
IDs in data are the same per-account IDs you see in the PostKnock URL bar, so campaign_id: 7 is the campaign at /campaigns/7.
Want the raw JSON instead?
The Slack format posts a message written for humans reading a channel. If you would rather receive the signed JSON envelope and handle it in your own code, use a Generic webhook — same events, full payload, HMAC signature included.
Questions
Do I need a signing secret for Slack? +
Can I send different events to different channels? +
What does the message look like? +
It stopped posting. What should I check? +
Direct mail your other tools can see
Send postcards and follow-up calls from PostKnock, and stream every delivery, scan and call outcome straight into the tools your team already watches.
Start freeOutbound webhooks are included with PostKnock Pro.