Built With
- Vercel Functions for cron processes & event subscriptions via webhooks
- Vercel Cron Jobs for triggering cron processes.
- Hacker News API for pulling data
- Slack API for sending and unfurling messages
- Upstash for key-value storage (Redis).
How It Works
- Set up a Vercel cron job that pings our
/api/cron
endpoint once every 60 seconds. - Get the last checked HN post ID (
lastCheckedId
) and the list ofkeywords
to check against from Upstash. - Get the
latestPostId
using HN API'smaxitem
endpoint. Then, perform checks against each post betweenlastCheckedId
andlatestPostId
to see if they contain any of the delineatedkeywords
. - For each positive post, send its link to Slack using the
chat.postMessage
method. - Listen to the
link_shared
event at our/api/event
endpoint. Once an event occurs, send a POST request to Slack to unfurl the link using the chat.unfurl method.
One-Click Install
Here's a 60s video that walks you through the installation process, step-by-step.
You can click the button below to install the bot directly into your desired Slack workspace:
Once it's installed, create a channel to receive notifications in and start configuring the bot with the /configure
command.
Deploy Your Own
You can also deploy your own version of this bot using Vercel and Upstash. Note that while this is in early-access, some of these processes might change.
Prefer a video tutorial instead? Watch this video.
Step 1: Create Slack App + Secure Env Vars
- Navigate to api.slack.com/apps and click on "Create New App".
- Select "From scratch" and input
Hacker News Bot
as the name of your app. - Voilà ! You've just created your Slack app. Here, you'll receive 3 values that will be used for your Vercel deployment in the next step:
- Client ID: This is your App's unique public-facing ID that will be the value for the
NEXT_PUBLIC_SLACK_CLIENT_ID
env var. - Signing Secret: This is the signing secret used to validate that requests are genuinely coming from Slack. It will be the value for the
SLACK_SIGNING_SECRET
env var. - Verification Token: This is the verification token used to validate that requests are genuinely coming from Slack. It will be the value for the
SLACK_VERIFICATION_TOKEN
env var.
- Client ID: This is your App's unique public-facing ID that will be the value for the
Step 2: Create Upstash Account
Go to console.upstash.com and create an account. You'll need it for the next step.
Step 3: Deploy to Vercel
You can deploy your bot to Vercel with one-click:
Be sure to include all 5 of the env vars above in your deployment.
When the project finishes deploying, get your project's domain (e.g. https://slacker-eight.vercel.app/
). You'll need it for the next step.
Step 4: Configuring Slack app
For your Slack app to be able to send/unfurl messages in your Slack workspace, we will need to configure a few things:
Step 4A: Configuring OAuth Scopes
-
From your Slack app home screen, select "OAuth & Permissions" from the sidebar (under "Features").
-
Scroll down to "Scopes", and add the following scopes under "Bot Token Scopes":
chat:write
chat:write.public
links:read
links:write
Step 4B: Configuring Event Subscriptions
- Now, select "Event Subscriptions" from the sidebar (under "Features").
- Toggle "Enable Events" to "ON".
- For the "Request URL" field, input your Vercel project's domain and append
/api/event
to it. The final URL should look something likehttps://slacker-eight.vercel.app/api/event
. - Scroll down to "Subscribe to bot events". Add the
link_shared
bot user event. - Do the same for `Subscribe to events on behalf of users".
- Under "App unfurl domains", add
news.ycombinator.com
. - Click on "Save Changes".
Step 4C: Configure Slash Commands
Select "Slash Commands" from the sidebar (under "Features"). Create the following commmand with its respective Request URLs (based on your Vercel project's domain):
- Command:
/configure
- Request URL:
https://[YOUR_VERCEL_PROJECT_DOMAIN]/api/cmd/configure
- Short Description: Configure your HN Slack Bot
Step 4D: Enable Interactivity
- Now, select "Interactivity & Shortcuts" from the sidebar (under "Features").
- Toggle "Interactivity" to "ON".
- For the "Request URL" field, input your Vercel project's domain and append
/api/response
to it. The final URL should look something likehttps://slacker-eight.vercel.app/api/response
. - Click on "Save Changes".
Step 4E: Install App to Slack Workspace + Get OAuth token
- Go to "Basic Information" (under "Settings").
- Under "Install your app", click on "Install to Workspace".
- You should receive a notification that your app has been installed in your Slack workspace.
- Go back to "OAuth & Permissions". Copy the value of "Bot User OAuth Token".
- Set it as the
SLACK_OAUTH_TOKEN
env var in your Vercel project. Here's a guide on how to do that. - Redeploy your Vercel project for the changes to take effect.
- To verify that this worked, go to any channel on your Slack workspace and send a Hacker News link. The link should now unfurl and show a nice preview (like the one above).
Authors
This project was originally created by Steven Tey at Vercel, with contributions/feedback from:
- Guillermo Rauch (@rauchg) – Vercel
- Justin Ridgewell (@jridgewell) – Vercel
- Andrew Healey (@healeycodes) – Vercel
- Drew Bredvick (@dbredvick) – Vercel
- Lee Robinson (@leeerob) – Vercel
- Andreas Thomas (@chronarkdotdev) – Upstash
License
The MIT License.