An AI-powered chatbot for Slack powered by the AI SDK by Vercel.
- Integrates with Slack's API for easy Slack communication
- Use any LLM with the AI SDK (easily switch between providers)
- Works both with app mentions and as an assistant in direct messages
- Maintains conversation context within both threads and direct messages
- Built-in tools for enhanced capabilities:
- Real-time weather lookup
- Web search (powered by Exa)
- Easily extensible architecture to add custom tools (e.g., knowledge search)
- Node.js 18+ installed
- Slack workspace with admin privileges
- OpenAI API key
- Exa API key (for web search functionality)
- A server or hosting platform (e.g., Vercel) to deploy the bot
npm install
# or
pnpm install
- Go to https://api.slack.com/apps and click "Create New App"
- Choose "From scratch" and give your app a name
- Select your workspace
- Under "App Credentials", note down your "Signing Secret"
-
Add the following Bot Token Scopes:
app_mentions:read
assistant:write
chat:write
im:history
im:read
im:write
-
Install the app to your workspace and note down the "Bot User OAuth Token"
Create a .env
file in the root of your project with the following:
# Slack Credentials
SLACK_BOT_TOKEN=xoxb-your-bot-token
SLACK_SIGNING_SECRET=your-signing-secret
# OpenAI Credentials
OPENAI_API_KEY=your-openai-api-key
# Exa API Key (for web search functionality)
EXA_API_KEY=your-exa-api-key
Replace the placeholder values with your actual tokens.
- If building locally, follow steps in the Local Development section to tunnel your local environment and then copy the tunnel URL.
- If deploying to Vercel, follow the instructions in the Production Deployment section and copy your deployment URL.
Go to your Slack App settings
- Select your app
- Go to "Event Subscriptions"
- Enable Events
- Set the Request URL to either your local URL or your deployment URL: (e.g.
https://your-app.vercel.app/api/events
) - Save Changes
- Under "Subscribe to bot events", add:
app_mention
assistant_thread_started
message:im
Remember to include
/api/events
in the Request URL.
Use the Vercel CLI and untun to test out this project locally:
pnpm i -g vercel
pnpm vercel dev --listen 3000 --yes
npx untun@latest tunnel http://localhost:3000
Make sure to modify the subscription URL to the untun
URL.
Note: you may encounter issues locally with
waitUntil
. This is being investigated.
-
Push your code to a GitHub repository
-
Deploy to Vercel:
- Go to vercel.com
- Create New Project
- Import your GitHub repository
-
Add your environment variables in the Vercel project settings:
SLACK_BOT_TOKEN
SLACK_SIGNING_SECRET
OPENAI_API_KEY
EXA_API_KEY
-
After deployment, Vercel will provide you with a production URL
-
Update your Slack App configuration:
- Go to your Slack App settings
- Select your app
- Go to "Event Subscriptions"
- Enable Events
- Set the Request URL to:
https://your-app.vercel.app/api/events
- Save Changes
- Under "Subscribe to bot events", add:
app_mention
assistant_thread_started
message:im
The bot will respond to:
- Direct messages - Send a DM to your bot
- Mentions - Mention your bot in a channel using
@YourBotName
The bot maintains context within both threads and direct messages, so it can follow along with the conversation.
-
Weather Tool: The bot can fetch real-time weather information for any location.
- Example: "What's the weather like in London right now?"
-
Web Search: The bot can search the web for up-to-date information using Exa.
- Example: "Search for the latest news about AI technology"
- You can also specify a domain: "Search for the latest sports news on bbc.com"
The chatbot is built with an extensible architecture using the AI SDK's tool system. You can easily add new tools such as:
- Knowledge base search
- Database queries
- Custom API integrations
- Company documentation search
To add a new tool, extend the tools object in the lib/ai.ts
file following the existing pattern.
You can also disable any of the existing tools by removing the tool in the lib/ai.ts
file.
MIT