INTEGRATION · DISCORD

PostKnock in Discord

Stream postcard deliveries, QR scans and call outcomes into a Discord channel with a channel webhook. No bot, no OAuth scopes.

Included with Pro. The Discord format is part of PostKnock Pro. You can set up webhooks from Admin › Webhooks once you are on a Pro plan.

Connect Discord

No developer required — this is all point and click.

  1. 1

    Open your server settings

    In Discord, select the server name, then Server Settings. You need Manage Webhooks permission — server owners and admins have it by default.

  2. 2

    Go to Integrations › Webhooks

    Choose Integrations in the sidebar, then Webhooks.

  3. 3

    Create the webhook

    Select New Webhook. Give it a name your team will recognise, such as “PostKnock”, and choose the channel it should post to. You can set an avatar here too.

  4. 4

    Copy the webhook URL

    Select Copy Webhook URL. It starts https://discord.com/api/webhooks/. Anyone with this URL can post to the channel, so keep it out of shared documents.

  5. 5

    Add it to PostKnock

    In PostKnock open Admin › Webhooks › New webhook, set the format to Discord, and paste the URL. PostKnock validates that it is a genuine Discord webhook address before saving.

  6. 6

    Choose events and send a test

    Tick the events you want, save, then select Test. A formatted embed should appear in the channel within a few seconds.

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 Discord 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 bot or OAuth scopes? +
No. A channel webhook is enough — there is no bot to invite and no OAuth consent screen. That is also why the URL itself must be treated as a secret.
What does the message look like? +
A native Discord embed with the event, campaign and contact laid out as fields, rather than raw JSON.
Can I use one webhook for several channels? +
No — a Discord webhook is bound to a single channel. Create one webhook per channel and one PostKnock webhook per URL, each with its own event selection.
Messages stopped arriving. +
Check Admin › Webhooks › Deliveries. The most common causes are the webhook being deleted in Discord or the channel being removed; Discord’s error response is recorded there in full.

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 free

Outbound webhooks are included with PostKnock Pro.