https://github.com/inkeep/vercel-ai-sdk-slackbot
https://github.com/inkeep/vercel-ai-sdk-slackbot
Last synced: 5 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/inkeep/vercel-ai-sdk-slackbot
- Owner: inkeep
- Created: 2025-04-08T15:30:41.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-11-07T18:06:36.000Z (7 months ago)
- Last Synced: 2025-12-03T08:28:12.109Z (6 months ago)
- Language: TypeScript
- Size: 22.5 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# AI SDK Slackbot
[](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fnicoalbanese%2Fai-sdk-slackbot&env=SLACK_BOT_TOKEN,SLACK_SIGNING_SECRET,OPENAI_API_KEY,EXA_API_KEY&envDescription=API%20keys%20needed%20for%20application&envLink=https%3A%2F%2Fgithub.com%2Fnicoalbanese%2Fai-sdk-slackbot%3Ftab%3Dreadme-ov-file%234-set-environment-variables&project-name=ai-sdk-slackbot)
An AI-powered chatbot for Slack powered by the [AI SDK by Vercel](https://sdk.vercel.ai/docs).
## Features
- Integrates with [Slack's API](https://api.slack.com) for easy Slack communication
- Use any LLM with the AI SDK ([easily switch between providers](https://sdk.vercel.ai/providers/ai-sdk-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](https://exa.ai))
- Easily extensible architecture to add custom tools (e.g., knowledge search)
## Prerequisites
- [Node.js](https://nodejs.org/) 18+ installed
- Slack workspace with admin privileges
- [OpenAI API key](https://platform.openai.com/api-keys)
- [Exa API key](https://exa.ai) (for web search functionality)
- A server or hosting platform (e.g., [Vercel](https://vercel.com)) to deploy the bot
## Setup
### 1. Install Dependencies
```bash
npm install
# or
pnpm install
```
### 2. Create a Slack App
1. Go to [https://api.slack.com/apps](https://api.slack.com/apps) and click "Create New App"
2. Choose "From scratch" and give your app a name
3. Select your workspace
### 3. Configure Slack App Settings
#### Basic Information
- Under "App Credentials", note down your "Signing Secret"
#### OAuth & Permissions
- Add the following [Bot Token Scopes](https://api.slack.com/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"
### 4. Set Environment Variables
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.
### 5. Deploy your app
- 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.
### 6. Update your Slack App configuration:
Go to your [Slack App settings](https://api.slack.com/apps)
- 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.
## Local Development
Use the [Vercel CLI](https://vercel.com/docs/cli) and [untun](https://github.com/unjs/untun) to test out this project locally:
```sh
pnpm i -g vercel
pnpm vercel dev --listen 3000 --yes
```
```sh
npx untun@latest tunnel http://localhost:3000
```
Make sure to modify the [subscription URL](./README.md/#enable-slack-events) to the `untun` URL.
> Note: you may encounter issues locally with `waitUntil`. This is being investigated.
## Production Deployment
### Deploying to Vercel
1. Push your code to a GitHub repository
2. Deploy to [Vercel](https://vercel.com):
- Go to vercel.com
- Create New Project
- Import your GitHub repository
3. Add your environment variables in the Vercel project settings:
- `SLACK_BOT_TOKEN`
- `SLACK_SIGNING_SECRET`
- `OPENAI_API_KEY`
- `EXA_API_KEY`
4. After deployment, Vercel will provide you with a production URL
5. Update your Slack App configuration:
- Go to your [Slack App settings](https://api.slack.com/apps)
- 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`
## Usage
The bot will respond to:
1. Direct messages - Send a DM to your bot
2. 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.
### Available Tools
1. **Weather Tool**: The bot can fetch real-time weather information for any location.
- Example: "What's the weather like in London right now?"
2. **Web Search**: The bot can search the web for up-to-date information using [Exa](https://exa.ai).
- Example: "Search for the latest news about AI technology"
- You can also specify a domain: "Search for the latest sports news on bbc.com"
### Extending with New Tools
The chatbot is built with an extensible architecture using the [AI SDK's tool system](https://sdk.vercel.ai/docs/ai-sdk-core/tools-and-tool-calling). 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.
## License
MIT