# Build a Slack AI Bot with Gemini

Source: https://langbot.app/docs/en/recipes/gemini/slack

Step-by-step guide to running a Gemini-powered AI bot on Slack with LangBot: model setup, bot credentials, networking, testing and troubleshooting.

This recipe puts a Gemini model behind a Slack bot. LangBot receives messages from Slack, runs them through a pipeline, and sends the answer back, so you do not write any platform code.

Use Google's Gemini models with LangBot's built-in Agent, including image input when the model supports vision.

## What you need

- A running LangBot instance: [LangBot Cloud](https://space.langbot.app/cloud) (no server needed) or a [self-hosted deployment](https://langbot.app/docs/en/deploy/langbot/docker.md) with Docker or `uvx langbot`.
- A Gemini account or server you can call from LangBot.
- A Slack workspace where you can install apps, plus **App Configuration Tokens** from the [Slack apps page](https://api.slack.com/apps) for the quick setup assistant.

## Networking

With Socket Mode, LangBot connects out to Slack and no public event URL is needed. Webhook mode needs a publicly reachable HTTPS endpoint.

## 1. Add the Gemini model

1. Create an API key in the Google Gemini console.
2. In LangBot, open **Models**, add an LLM model with the provider set to Google Gemini, then paste the API key and the model ID.
3. Enable **Tool Use** if the model supports function calling; MCP tools, Skills and the sandbox need it.
4. Create the key in Google AI Studio. Enable **Vision** on the model if you want the bot to read images.

## 2. Create a pipeline

Open **Pipelines** in the LangBot WebUI, create a pipeline (or edit the default one) and set **AI** as follows.

| Field           | Value                                                                  |
| --------------- | ---------------------------------------------------------------------- |
| Runner          | **Local Agent** (built-in Agent)                                       |
| Model           | The model you just added. You can add fallback models.                 |
| Prompt          | Instructions: who the bot is, tone, what it must not do.               |
| Knowledge Bases | Optional. Attach a knowledge base so answers come from your documents. |

## 3. Create the Slack bot

1. Create a bot with the **Slack** adapter and use **Quick Slack setup**: it creates the app, scopes and event subscriptions for you.
2. Choose **Socket Mode** (recommended) and add an App-Level Token (`xapp-...`), or choose **Webhook** if LangBot has a public HTTPS address. Then fill the adapter configuration and enable the bot.

## 4. Bind and test

Open the bot, select the pipeline you created, save and make sure the bot is enabled.

Message the app from its **Messages** tab, or mention it in a channel it has been added to.

## Troubleshooting

- Images are ignored: enable **Vision** on the model and check that the platform adapter forwards images.
- Do not paste the App Configuration Access/Refresh tokens into the App-Level Token field; it needs the `xapp-` token of the same app.
- Leave token rotation disabled for the App-Level Token.
- Check **Monitoring** in the WebUI: every message, pipeline run and error is recorded there.

## FAQ

### Do I need a server with a public IP for Slack?

Not necessarily. With Socket Mode, LangBot connects out to Slack and no public event URL is needed. Webhook mode needs a publicly reachable HTTPS endpoint.

### Does the Slack bot support streaming replies?

Check the [platform feature matrix](https://langbot.app/docs/en/insight/platform-features.md) for what this platform supports. Replies are delivered once the AI back end has finished.

### Can the same Gemini setup serve other platforms too?

Yes. A pipeline can be bound to many bots, so one configuration can answer on several platforms at once.

## Related guides

- [Full Slack setup guide](https://langbot.app/docs/en/usage/platforms/slack.md)
- [Model configuration](https://langbot.app/docs/en/usage/models/readme.md)
- Other AI back ends on Slack: [Dify](https://langbot.app/docs/en/recipes/dify/slack.md) · [n8n](https://langbot.app/docs/en/recipes/n8n/slack.md) · [Coze](https://langbot.app/docs/en/recipes/coze/slack.md) · [Langflow](https://langbot.app/docs/en/recipes/langflow/slack.md) · [DeepSeek](https://langbot.app/docs/en/recipes/deepseek/slack.md)
- Gemini on other platforms: [Telegram](https://langbot.app/docs/en/recipes/gemini/telegram.md) · [Discord](https://langbot.app/docs/en/recipes/gemini/discord.md) · [Lark (Feishu)](https://langbot.app/docs/en/recipes/gemini/lark.md) · [DingTalk](https://langbot.app/docs/en/recipes/gemini/dingtalk.md) · [WeCom (internal app)](https://langbot.app/docs/en/recipes/gemini/wecom.md) · [WeCom Intelligent Bot](https://langbot.app/docs/en/recipes/gemini/wecombot.md)
