Skip to content

Documentation

Slack

Everything Kicklace tells the people who run a workspace — a reply arriving, an email bouncing, a broadcast finishing, a draft waiting to be sent — can be posted to one Slack channel as well. One address, pasted once. Kicklace only writes to Slack: it reads nothing there and takes no instruction from it.

Written for the person who runs a workspace (#177). Everything Kicklace tells the people who run it — a reply arriving, an email bouncing, a broadcast finishing, somebody joining, a draft waiting to be sent — is posted to one Slack channel as well. One incoming webhook URL, pasted once, and nothing to deploy.

The screen is Settings → Integrations → Slack, and only an owner or an admin can change it.

Kicklace only writes to Slack. It reads nothing there, takes no instruction from anything anybody types in the channel, and never emails anybody because of it.


Setting it up

1. Make an incoming webhook in Slack. From Slack's own page, api.slack.com/messaging/webhooks:

  1. Open api.slack.com/apps, create an app from scratch, name it Kicklace, and pick your Slack workspace.
  2. In the app's settings, open Incoming Webhooks and turn Activate Incoming Webhooks on.
  3. Press Add New Webhook to Workspace, choose the channel this should post to, and allow it.
  4. Copy the URL that appears under Webhook URLs for Your Workspace. It looks like https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX.

Slack decides which channel that address posts to, and it is fixed when you make it. To post somewhere else, add a second webhook in Slack for that channel and paste the new URL here.

2. Paste it into Kicklace. Settings → Integrations → Slack. The Channel name beside it is optional and is only ever printed on that screen — Kicklace never asks Slack where a webhook goes.

3. Send a test. It posts Kicklace is connected to this channel. with the workspace's name and a link back. From then on, the notices below arrive as they happen.

The address is the secret

An incoming webhook URL is a secret in the shape of a link: there is no signature and no key beside it, so anybody holding it can write into your channel. So:

  • it is encrypted at rest, like a signing secret, and never shown back — the screen says "set on the 8th" and offers Replace;
  • Kicklace refuses anything but Slack's own address. https://hooks.slack.com/services/… and nothing else, checked the moment you paste it, so a typed address can never make Kicklace post your workspace's news somewhere a stranger owns;
  • if it leaks, delete that webhook in Slack — the old address stops working at once — make a new one, and press Replace.

What lands in the channel

One message per notice, in Slack's own formatting: the title in bold, the notice's body under it, and a link reading Open in Kicklace where the notice has one.

*New email from Hank Ruiz: Re: your quote*
Could you do the same in oak?
<https://kicklace.com/app/woodwright/directory/people/rec_1|Open in Kicklace>

Everything told to the people who run a workspace goes there. Today that is:

What happened Where it comes from
Somebody replied to one of your emails the reply lands on their record first
An email bounced, or was marked as spam the person is taken off every list
A broadcast finished, or failed the send itself
Your sending domain, or your reply address, started or stopped verifying the daily check
Somebody joined the workspace the invitation they accepted
Somebody joined a waitlist, or sent feedback the site's own forms
An automation drafted an email for a person to send the automation engine
An automation was told to notify the managers the automation's own notify action
A record was deleted, or a batch of them was a privacy request
A Kicklace administrator opened the workspace support

Beside those, an automation can post a line of its own (#214): Post to Slack is one of the actions, and it lands in this same channel as the message it was written as, with {{first_name}} and the rest filled in — no title, no link, because there is no notice behind it. With no Slack connected the step says so in the run's log and the automation carries on.

What never lands there

  • A member's own notifications. A mention in a note, and a task coming due, belong to one person; a channel is a room. Those stay in the bell.
  • Anything a notice does not say. The message is the notice, word for word. A privacy notice names the member who deleted a record and never the person deleted, so it names nobody in Slack either.
  • The body of an email, past what the bell shows. A reply is trimmed the same way it is trimmed in the app; the whole thing is on the record.
  • A key, an address, or a token. Nothing on the settings screen leaves through this door.

A notice that skips the bell of the person who caused it — an invitation they accepted themselves — still lands in the channel, because everybody in the room can see who did what.

When a post does not land

Kicklace posts after the response, never inside it, so nothing a customer does is ever kept waiting on Slack. A post that fails on the way there — a network wobble, a 500, a rate limit — is tried once more; a webhook Slack has refused outright is not, because it will be refused again.

What Slack said is then on the screen, under the frame:

The last post failed: Slack answered 404 — the webhook was removed.

Every sentence starts Slack answered <status> — , and the four errors Slack documents end it:

Slack says and the screen ends the sentence
no_service the webhook was removed.
invalid_token it does not know that address any more.
channel_not_found the channel it posts to is gone.
invalid_payload it would not read the message.

Anything else is Slack answered <status>., and a 429 says it is rate limiting the webhook. The line clears itself the next time something lands, so pressing Send a test after fixing the address is how you know it is fixed. Nothing is queued and nothing is replayed: what the channel missed while it was broken is in the bell, and on the records themselves.

Disconnect stops the posting. What is already in the channel stays there — it is Slack's now — and every notice goes on being written in Kicklace exactly as before.