bot-on-anything: one config file, twelve chat channels, five model backends
A large model-based chatbot builder that can quickly integrate AI models (including ChatGPT, Claude, Gemini) into various software applications (such as Telegram, Gmail, Slack, and websites).
At a glance
- What is it?
- bot-on-anything is a lightweight Python framework that pairs a language model with a chat channel through a single config.json. It is a good fit for fast deployments on Telegram, Slack, Discord and Gmail, and a poor fit if you need planning, memory or MCP tooling.
- Who is it for?
- Adopt bot-on-anything if you want a Telegram, Slack, Discord or Gmail bot running from a config file today, and you are willing to pin the legacy openai SDK (>=0.27.0,<1.0.0) and Python 3.7.1 to 3.10. Skip it if you need task planning, long-term memory, skills or MCP; the README points those users to CowAgent instead.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 72 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What bot-on-anything actually solves
Most chatbot demos are written for one model and one channel. Swapping either means rewriting the glue. bot-on-anything separates the two into a model block and a channel block inside one file, so the same project can run an OpenAI-compatible endpoint on Telegram today and on Slack tomorrow by editing two type fields. The README puts it plainly: "Models and channels are independent: adding a channel reuses existing models, and adding a model works across all channels."
The audience is narrow and specific. If you need a bot on Telegram, Slack, Discord or Gmail, and you want it deployed in an afternoon rather than designed over a sprint, this is the intended use case. The README itself says it is "a great fit for quickly spinning up bots on overseas channels." If you are building an agent that plans tasks, keeps long-term memory or calls MCP tools, the README redirects you to the author's other project, CowAgent. That redirection is the clearest statement of scope in the whole document.
The model and channel split, and how the config drives it
The architecture is a dispatch problem, not a pipeline. At the top level, config.json has exactly two keys: model and channel. The model block carries a type field that selects an adapter, plus a sub-object named after that adapter holding its credentials and sampling parameters. The channel block works the same way, except its type can also be an array, which starts several channels at once as separate processes.
That array behavior is worth noting because it is the only concurrency story the README tells. Multiple channels are not multiplexed into one event loop; they run as parallel processes without interference. For a small deployment that is simpler than a broker, and it also means a crash in one channel process does not take down the others.
The repository layout confirms the separation: there are model/ and channel/ directories at the top level, alongside bridge/, common/ and plugins/. The model adapters listed in the README are OpenAI, LinkAI, ERNIE Bot, New Bing and Bard. Channels number twelve: Terminal, Web, WeChat Subscription and Service Account, Enterprise WeChat, QQ, Telegram, Gmail, Slack, DingTalk, Feishu and Discord. Plugin support is described as compatible with the plugin model of chatgpt-on-wechat, which is the mechanism the README names for extending behavior with image generation and model selectors.
Installing bot-on-anything and running a first bot
The README recommends Python 3.7.1 through 3.10 and says the project runs on Linux, MacOS and Windows. Clone the repository and install dependencies from the project root.
git clone https://github.com/zhayujie/bot-on-anything
cd bot-on-anything/
pip3 install -r requirements.txtConfiguration starts from the shipped template. The README instructs you to copy config-template.json to config.json, which gives you the file the application reads at startup.
cp config-template.json config.jsonThe default channel is the terminal, so the first run needs no channel credentials at all. Run this in the project root and the bot starts in your shell.
python3 app.pyTo point it at a real model, edit the two type fields. The README's structure example uses slack as the channel and openai as the model; the OpenAI block expects api_key, an optional api_base for compatible gateways, a model name, a proxy address, and sampling parameters including conversation_max_tokens, temperature, top_p, frequency_penalty and presence_penalty.
{
"model": {
"type": "chatgpt",
"openai": {
"api_key": "YOUR API KEY",
"api_base": "",
"model": "gpt-5.5",
"conversation_max_tokens": 1000,
"temperature": 0.75,
"top_p": 0.7
}
},
"channel": {
"type": "slack"
}
}One dependency note matters before you start. The README states the OpenAI adapter uses the legacy openai SDK, version 0.27.x and above but below 1.0.0, and that requirements.txt already pins a compatible version. If installation fails, the README suggests running pip3 install --upgrade pip first. A Dockerfile is also present in the repository: it builds from python:3.10-alpine, installs requirements.txt, copies the tree, and runs python app.py as the container command.
Where bot-on-anything breaks down
The most concrete limitation is the SDK pin. The OpenAI adapter is built against openai >=0.27.0,<1.0.0, which is the pre-1.0 client. That constrains you to the older client surface and means anything you write against the modern OpenAI Python SDK will not drop in cleanly. It also means the model name in the config is a free-text string, so a typo or a deprecated model id surfaces at request time rather than at startup.
The second limitation is the model list itself. Of the five adapters, three (ERNIE Bot, New Bing, Bard) are described as based on the web versions of those products. Web-version integrations are the most fragile kind: they depend on session handling and page behavior the project does not control. The README's own guidance for Claude, Gemini, DeepSeek and similar models is to route them through LinkAI or move to CowAgent, which tells you the direct-provider path is not the supported one.
Third, the release history is old. The most recent release listed is 1.1.0 from 2023-04-11, with 1.0.0 and 0.0.7 before it. The repository is not archived, and the last push was on 2026-07-05, so work has continued, but it has not been cut into a tagged release for a long time. If your adoption process requires a recent version tag, that is a real friction point. The README also does not document rollback, migration between versions, or a deprecation policy.
bot-on-anything compared with a full agent framework
The honest alternative is the author's own CowAgent, which the README recommends for anyone who needs "task planning, long-term memory, skills, MCP, self-evolution and more." The difference is architectural, not cosmetic. bot-on-anything is a router: it takes an inbound message from a channel, hands it to a model adapter, and returns the reply. There is no planner, no tool registry beyond the plugin model inherited from chatgpt-on-wechat, and no memory beyond the conversation history controlled by max_history_num.
CowAgent is the opposite trade. You get planning and memory, and you take on a heavier runtime and more moving parts to configure. If your requirement is a support bot that answers questions on Slack and Gmail with a fixed persona, the router is enough and the agent framework is overhead. If your requirement is a bot that books things, remembers users across sessions and calls external tools, the router will not get you there and you should not try to bend it into doing so.
Maintenance cost, upgrade risk and the MIT licence
Ongoing cost here is mostly dependency drift, not code churn. The pinned openai range is the item that will need attention first, because it holds the OpenAI path to a client generation the vendor has moved past. Python support is stated as 3.7.1 to 3.10, so environments on 3.11 or later are outside the documented range and the README does not say what happens there.
Upgrades are also weakly supported by the project's own artifacts. With the newest listed release at 1.1.0 from 2023-04-11, there is no recent tag to diff against, and the README does not describe a migration path between versions or a way to roll back a config change. The practical approach is to keep config.json under version control yourself, since the file is the entire deployment surface.
The licence is MIT, which permits commercial use, modification and redistribution provided the copyright notice and permission notice are preserved. That is a permissive baseline and it is compatible with the way most teams would embed this. It is not legal advice, and if you redistribute the project inside a product you should have someone confirm the notice requirements and check the licences of the bundled dependencies, several of which (itchat-uos, EdgeGPT, wechatpy) are separate projects with their own terms.
Editorial conclusion
Adopt bot-on-anything if you want a Telegram, Slack, Discord or Gmail bot running from a config file today, and you are willing to pin the legacy openai SDK (>=0.27.0,<1.0.0) and Python 3.7.1 to 3.10. Skip it if you need task planning, long-term memory, skills or MCP; the README points those users to CowAgent instead. Before committing, verify that your model provider is reachable through the OpenAI-compatible api_base field or through LinkAI, because the other model adapters (ERNIE Bot, New Bing, Bard) are tied to web versions that can change without notice.
Frequently asked questions
What Python version does bot-on-anything need?
The README recommends Python 3.7.1 through 3.10 and says the project works on Linux, MacOS and Windows. The Dockerfile builds from python:3.10-alpine.
Which chat channels can bot-on-anything connect to?
The README lists twelve: Terminal, Web, WeChat Subscription and Service Account, Enterprise WeChat, QQ, Telegram, Gmail, Slack, DingTalk, Feishu and Discord. The default channel is the terminal, so a first run needs no channel credentials.
How do I switch models in bot-on-anything without rewriting code?
You change the type field in the model block of config.json. The README states that models and channels are independent, so adding a model makes it available across all channels and adding a channel reuses existing models.
Can bot-on-anything use Claude or Gemini directly?
The README directs users to LinkAI, described as one key for 100+ models including DeepSeek, Claude, Gemini, Qwen and GLM, or to the author's CowAgent project. The direct model adapters listed are OpenAI, LinkAI, ERNIE Bot, New Bing and Bard.
Can bot-on-anything run several channels at the same time?
Yes. The README says the channel type field can be an array, and lists multiple channels in one config to start them together as separate processes without interference.
What OpenAI SDK version does bot-on-anything require?
The README states the project uses the legacy openai SDK, version 0.27.x and above but below 1.0.0, and that requirements.txt already pins a compatible version. If installation fails, the README suggests upgrading pip first.
Community notes