At Reaktiv Studios, we do our daily standup in Slack, rather than a meeting due to the remote nature of our team. There’s a separate channel #standup where we use a Slack post to outline what we accomplished yesterday, what we plan to accomplish on today and any blockers we’ve encountered.
I was already keeping a daily work log in Day One, a fantastic journaling app for OS X, and wanted to sync up my workflow so I didn’t have to spend more time formatting a post in Slack, or deal with copying and pasting between the two apps to share my standup.
Enter the Slack API and OS X Services…
I figured there had to be a way to integrate the two and after a few fits and starts with attempting to pull data out of Day One with a script I settled on an OS X service that operates on selected text with a keyboard shortcut. My workflow now is to write my daily standup in Day One like I always have, select it, and hit ⌘⌥S to immediately share in Slack. Easy peasy. The details, if you’d like to implement a similar workflow, are below:
First, Get a Slack Token
It seems Slack has changed to use Oauth for all apps, but I have heard that creating a “test token” on this page still works.
Get the channel ID from the Slack API using your new token. You can do this with curl or Slack’s API tester:
Pull the list of channels in the tester and search until you find your channel name, above it will be the channel ID.
Create a file in your home directory:
~/.slack which contains your slack credentials:
SLACK_TOKEN_RS=<Your Slack Token>
SLACK_CHANNEL_STANDUP=<Slack channel ID>
You can name these however you want, just be sure to change them in the script below as well.
Open Automator, and create a new “Service”.
Choose the “Run shell script” action.
The action should be configured as: “The service receives selected text in Day One.app.” Choose your shell (mine is /bin/zsh) and pass input to stdin. Then paste the script below into the script field:
curl -F file=@- -F token=$SLACK_TOKEN_RS -F filetype=post -F channels=$SLACK_CHANNEL_STANDUP -F title="Daily Standup `date '+%Y-%m-%d'`" https://slack.com/api/files.upload
Let’s break down what this is doing.
- First, we source our Slack credentials file. This makes the
SLACK_CHANNEL_STANDUP variables available to our script.
- We then make a curl request to Slack’s
files.upload endpoint. We are submitting this as a multipart/form using the
-F file=@- Instead of providing a file to upload, we are passing stdin as the “file” with
-F token=$SLACK_TOKEN_RS sets our API token from the credentials file.
-F filetype=post this is what creates a Slack “post” rather than a media file upload.
-F channels=$SLACK_CHANNEL_STANDUP sets the Slack channel to share the post to.
-F title="Daily Standup `date '+%Y-%m-%d'`" sets a dynamic title based on today’s date.
Save the service, and then open Preferences > Keyboard > Shortcuts to assign a keyboard shortcut. I have assigned ⌘⌥S as the shortcut.
That’s it! Now you can test your Slack integration by selecting some text and hitting your keyboard shortcut.
Your post should appear in Slack.
You could use this from any app, not just Day One. Let me know if you’ve found this helpful or what other interesting Slack integrations you’ve made!