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
- 
Go to "Basic Information" - Under "App Credentials", note down your "Signing Secret". This will be an environment variable SLACK_SIGNING_SECRET
 
- Under "App Credentials", note down your "Signing Secret". This will be an environment variable 
- 
Go to "App Home" - Under Show Tabs -> Messages Tab, Enable "Allow users to send Slash commands and messages from the messages tab"
 
- 
Go to "OAuth & Permissions" - 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" for the environment variable SLACK_BOT_TOKEN
 
- Add the following Bot Token Scopes:
- 
Go to "Event Subscriptions" - Enable Events
- Set the Request URL to either
- your deployment URL: (e.g. https://your-app.vercel.app/api/events)
- or, for local development, use the tunnel URL from the Local Development section below
 
- your deployment URL: (e.g. 
- Under "Subscribe to bot events", add:
- app_mention
- assistant_thread_started
- message:im
 
- Save Changes
 
Remember to include
/api/eventsin the Request URL.
You may need to refresh Slack with CMD+R or CTRL+R to pick up certain changes, such as enabling the chat tab
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.
Use the Vercel CLI and untun to test out this project locally:
pnpm i -g vercel
pnpm vercel dev --listen 3000 --yesnpx untun@latest tunnel http://localhost:3000Make 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 
 
- 
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