Slack
Delivering results where people already are
A team chat tool. Its API lets a program post messages, upload files and read channels, which makes it a place to deliver work rather than only to talk.
Slack is where the output of a job goes. A daily summary, a file that is ready, an interesting reply that needs a human. A result that lands in a channel gets read. The same result sitting in a folder waits for someone to remember it exists, which is a slower kind of never.
How I use it
A message is the last step of a job, not a separate task. If a script produces something a person has to act on, posting it is part of the script. Anything that needs a person to check a dashboard first has already lost most of its value.
One message carries the decision, not the process. What happened, what it means, what needs a person. Not how it was gathered. A channel post is read on a phone, between other things, and a wall of detail there is the same as no post.
Files go up through the bot. Uploading a file uses a three step flow: ask for an upload location, send the bytes, then complete the upload against the channel with a comment. The comment is what people read, so the file is the attachment to a sentence, not the other way round.
Formatting is Slack’s own, not markdown. Single asterisks for bold, no headings, no tables. Pasting real markdown produces a message full of visible punctuation, which reads as broken and undermines whatever it says.
What I have learned the hard way
A 200 response does not mean the message posted. Channel not found, not in channel and invalid blocks all come back as success at the transport level, with the real failure inside the body. So a script that checks the status code reports a clean run while nothing has been delivered. Read the field in the body that says whether it worked.
A bot can post to a channel and be unable to read it. The permission to post in public channels without joining does not come with the ability to read history. So the bot cannot confirm its own message by looking for it, and the write response is the only evidence available. That is worth labelling honestly rather than calling it a verified post.
Two tokens, different powers. The bot token can upload files. The user token cannot, and the error does not say so in those words. When an upload fails for no apparent reason, the token is the first thing to check.
Never let a bot join a channel on its own. Adding a bot to a channel is visible to everyone in it and reads as a decision somebody made. I list the exact channels and wait for a yes.
Resources
This is one part of a stack. The rest is on the tools page, and what I build with it is on work.