AstrBot через RouterAI: self-hosted бот для Telegram, Discord и Feishu
AstrBot — open-source платформа AI-агента для чатов (лицензия AGPL-3.0, около 45 тысяч звёзд на GitHub). Один сервер подключается сразу к нескольким мессенджерам: Telegram, Discord, Feishu (Lark), Slack, QQ, WeCom и другим, а также даёт встроенный веб-чат. К платформе добавляются плагины, база знаний для ответов по вашим документам и MCP-серверы. Через RouterAI бот работает с Claude, GPT, DeepSeek, Gemini и другими моделями из каталога: работа из России без VPN, оплата в рублях, один ключ на все модели. Статья проверена на AstrBot v4.29.4.
Типичный сценарий для команды или сообщества: бот в рабочем чате Telegram отвечает на вопросы по вашей документации, а на другой платформе работает другая, более дешёвая или более сильная модель.
Требования
- Сервер или компьютер с Docker и Docker Compose.
- Ключ RouterAI: создайте его в личном кабинете (раздел «Ключи API») и пополните баланс. Ключ показывается один раз.
- Для Telegram: бот и токен от @BotFather. Если сервер не достаёт до
api.telegram.org, понадобится HTTP-прокси (см. «Решение проблем»).
Установка
По документации AstrBot, рекомендуемый способ — Docker Compose:
git clone https://github.com/AstrBotDevs/AstrBot
cd AstrBot
sudo docker compose up -d
Вместо Compose можно запустить один контейнер (образ soulter/astrbot). Данные лежат в каталоге data, поэтому том подключать обязательно:
mkdir astrbot && cd astrbot
sudo docker run -itd -p 6185:6185 -p 6199:6199 -e TZ=Europe/Moscow \
-v $PWD/data:/AstrBot/data --name astrbot soulter/astrbot:latest
Порт 6185 — веб-панель. На облачном сервере откройте порты 6180–6200 и 11451 в панели провайдера. Начальный пароль печатается в логах:
sudo docker logs astrbot | grep -i -A3 "initial"
Откройте http://<адрес-сервера>:6185, войдите под пользователем astrbot с этим паролем. При первом входе панель попросит создать свои имя и пароль (минимум 8 символов, заглавная и строчная буква, цифра). Забытый пароль сбрасывается командой sudo docker exec -it astrbot astrbot password, после неё контейнер нужно перезапустить.

Язык панели переключается значком перевода на экране входа: доступны китайский, английский, русский и японский. Дальше названия даны по русскому интерфейсу с английскими пояснениями из документации.
Подключение к RouterAI
Провайдер
В русской локализации v4.29.4 подписи двух полей перепутаны: поле ключа названо «Ключ Coze API для доступа к сервисам Coze», а поле адреса — «Bot ID». Ориентируйтесь на подсказки под названиями: «Ваш секретный API-ключ» и «Адрес API точки входа (Endpoint URL)». В английском интерфейсе подписи корректные.
- Откройте «Провайдеры моделей» → вкладка «Диалоги» → «Добавить» и выберите OpenAI Compatible.
- В поле «ID провайдера» впишите
routerai. - В поле ключа вставьте ключ RouterAI вида
sk-xxxxxxxxxxxxxxxx. - В поле адреса API замените значение по умолчанию
https://api.openai.com/v1наhttps://routerai.ru/api/v1. - Нажмите «Сохранить И Загрузить Модели» (после сохранения кнопка называется «Загрузить Список Моделей»). RouterAI вернул в списке 584 модели.
- В поле поиска по моделям введите
claude-sonnet-5.5и нажмите «+» справа отanthropic/claude-sonnet-5.5. - В окне «Добавить routerai/anthropic/claude-sonnet-5.5» оставьте включённый переключатель «Включить», проверьте «Размер окна контекста модели» (подставилось 1000000, как в каталоге) и нажмите «Сохранить».
- В строке добавленной модели нажмите значок «Тестировать модель». Должно появиться сообщение «Тест модели ... пройден успешно» с задержкой (на проверке 1407 мс).


Если список моделей не загрузился, нажмите «Добавить Вручную» и впишите id из каталога. Ключ можно не хранить в панели: по документации (с v4.13.0) в поле ключа допускается значение вида $ROUTERAI_API_KEY, тогда AstrBot прочитает переменную окружения.
Модель по умолчанию
Добавленная модель сама не становится основной. Откройте «Конфигурация» (профиль «Конфигурация по умолчанию») → AI → вкладка «Модель», в списке «Модель чата» выберите routerai/anthropic/claude-sonnet-5.5 и нажмите круглую кнопку «Сохранить» справа внизу.

Быстрая проверка без мессенджеров: кнопка «Чат» вверху справа открывает встроенный веб-чат ChatUI.

Бот в Telegram
- В Telegram откройте @BotFather, отправьте
/newbotи задайте имя и username. BotFather выдаст токен: храните его как пароль. - Для работы в группах отправьте BotFather
/setprivacy, выберите своего бота и значение Disable (по документации, для групповых чатов Privacy mode нужно отключить). - В панели откройте «Боты» → «Создать Бота» (в документации: Platforms → Add Adapter), в списке «Платформа» выберите Telegram.
- Заполните «Имя бота» (любое), оставьте включённым «Включить» и вставьте токен в поле «Токен бота». Остальные поля (адреса Telegram API, «Ответ на команду /start») обычно менять не нужно. Нажмите «Сохранить».

Статус подключения виден в списке ботов, подробности в «Данные и логи» → «Логи». Если сервер не достаёт до Telegram, задайте HTTP-прокси в «Системные настройки» → «Сеть» (в документации: Settings → Network → Proxy & Dependency Sources → HTTP Proxy).

Кто может писать боту и когда он отвечает
-
Белый список. «Конфигурация» → «Управление доступом» → «Белый список»: включите «Включить белый список» и добавьте идентификаторы в «Список разрешенных ID». Идентификатор чата или пользователя бот присылает по команде
/sid. По подсказке в панели, пока список пуст, белый список отключён. Как только вы добавили первый ID, остальные чаты бот игнорирует. -
Администраторы. Свой ID из
/sidдобавьте в «Администраторы» → «ID администраторов»: админ-команды (/model,/provider,/personaи другие) доступны только им. -
Группы. По FAQ, в группе бот отвечает не на каждое сообщение, а на упоминание (@) или сообщение с префиксом пробуждения (по умолчанию
/). Список префиксов и требование префикса в личных сообщениях настраиваются в «Конфигурация» → «Платформы и сообщения» («Префикс пробуждения», «Личные сообщения требуют префикс пробуждения»).
Потоковый вывод и лимит длины в Telegram
Telegram ограничивает одно сообщение 4096 символами (Bot API). Включите «Потоковый вывод (Streaming)» в «Конфигурация» → AI → «Дополнительные настройки» → «Обработка сообщений» и сохраните профиль. По документации, в личных чатах AstrBot показывает ответ черновиком через sendMessageDraft (нужен python-telegram-bot>=22.6), в группах правит отправленное сообщение. Для длинных ответов попросите модель отвечать короче в системном промпте персонажа (вкладка «Персона» в том же разделе AI): это надёжнее, чем рассчитывать на разбиение.
Discord и Feishu
Те же «Боты» → «Создать Бота», другая платформа:
- Discord. В Discord Developer Portal создайте приложение, возьмите токен на вкладке Bot и включите Presence Intent, Server Members Intent и Message Content Intent. Токен вставьте в «Bot Token», приглашение на сервер сгенерируйте на вкладке OAuth2 (инструкция). Серверу нужен прямой доступ к Discord либо прокси в поле «Discord Proxy Address».
- Feishu (Lark). В инструкции описаны два способа: быстрое создание по QR-коду (AstrBot от 4.25.0) и ручное создание корпоративного приложения в консоли разработчика, после чего нужно настроить подписку на события, права и опубликовать версию.
База знаний: ответы по документации
База знаний AstrBot работает по схеме RAG: документы режутся на фрагменты, индексируются, а нужные фрагменты передаются модели при ответе. Нужны две модели: чат (уже подключена) и эмбеддинги. Эмбеддинги RouterAI подходят: запрос к /api/v1/embeddings с qwen/qwen3-embedding-8b вернул вектор размерностью 4096.
- «Провайдеры моделей» → вкладка «Эмбеддинги» → «Добавить» → OpenAI Embedding.
- «API Base URL» —
https://routerai.ru/api/v1; ключ —sk-xxxxxxxxxxxxxxxx; «Модель эмбеддингов» —qwen/qwen3-embedding-8b; «Размерность эмбеддингов» —4096(по умолчанию в поле стоит 1024, впишите значение вручную). Размерность должна совпадать с моделью, иначе векторная база не заработает. Нажмите «Сохранить». - «База знаний» → «Создать Базу»: укажите «Название» и «Описание», в списке «Embedding модель» выберите
qwen/qwen3-embedding-8b(в списке видны провайдер и размерность 4096) и нажмите «Создать». После создания модель эмбеддингов сменить нельзя: для другой модели создаётся новая база и документы загружаются заново. - Откройте базу → вкладка «Документы» → «Загрузить» и добавьте файлы (
.txt,.md,.pdf,.docxи другие, до 128 МБ на файл). Размер фрагмента (512 символов) и перекрытие (50) подставляются по умолчанию. Сканы без текстового слоя не распознаются. Тестовый файл на 695 байт разбился на 4 фрагмента. - Во вкладке «Поиск» (Retrieval) задайте вопрос, ответ на который есть в документе, и убедитесь, что найден нужный фрагмент.
- «Конфигурация» → AI → «Возможности» → «База знаний»: выберите базу для профиля бота и сохраните. Без этого шага база в чате не используется.

Подробности — в документации по базе знаний. Фрагменты документов уходят в RouterAI вместе с вопросом, поэтому не загружайте то, что нельзя передавать внешней модели.
Несколько моделей для разных платформ
Модель задаётся в профиле конфигурации, а профиль привязывается к боту: в настройках бота блок конфигурации диалогов (в документации: Conversation configuration) позволяет выбрать профиль по умолчанию и привязать другие профили к отдельным чатам. Схема: профиль cheap с anthropic/claude-haiku-5.5 для Telegram-группы и профиль docs с anthropic/claude-sonnet-5.5 и базой знаний для разбора документов. В «Модель чата» можно также добавить «Резервные модели чата»: они используются, если основная вернула ошибку.
Выбор модели
| Модель | Контекст (каталог) | Для чего |
|---|---|---|
anthropic/claude-sonnet-5.5 |
1 000 000 | Основная: ответы по документам, инструменты |
anthropic/claude-haiku-5.5 |
1 000 000 | Быстрый и дешёвый бот для живого чата |
deepseek/deepseek-v4-flash |
1 048 576 | Массовые простые вопросы в больших группах |
openai/gpt-5.4-mini |
400 000 | Универсальные задачи, компактная модель |
google/gemini-3.1-pro-preview |
1 048 576 | Длинные документы и сложные вопросы |
Цены в рублях — в каталоге моделей.
Проверка подключения
- Во вкладке «Диалоги» у модели нажмите «Тестировать модель»: ожидается сообщение об успехе с задержкой.
- Откройте веб-чат («Чат» вверху панели) и напишите короткий вопрос. На проверке
anthropic/claude-sonnet-5.5ответила на вопрос в веб-чате. - Напишите боту в Telegram. В «Данные и логи» → «Логи» должна появиться строка с сообщением и ответом.
- Проверка ключа без интерфейса:
curl https://routerai.ru/api/v1/chat/completions \
-H "Authorization: Bearer sk-xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"model":"anthropic/claude-sonnet-5.5","messages":[{"role":"user","content":"Привет"}]}'
Решение проблем
- Модель добавлена, но бот отвечает «не выбрано» или использует не ту модель. Провайдер и модель надо ещё выбрать в «Конфигурация» → AI → «Модель чата» и сохранить профиль кнопкой справа внизу. Профиль должен быть тем, к которому привязан бот.
-
Список моделей пуст или ошибка 404. Проверьте адрес:
https://routerai.ru/api/v1(с/v1, без/chat/completions). Ключ вводите без пробелов. Можно добавить модель вручную по id из каталога. -
Бот в Telegram молчит. Проверьте по порядку: включён ли переключатель «Включить» у бота; не включён ли белый список без вашего чата (ID берётся из
/sid); в группе — отключён ли Privacy mode и обращаетесь ли вы через @ или префикс/; доступен лиapi.telegram.orgс сервера (причину покажут «Логи»). -
Ответ приходит пустым (
<empty content>). Документация перечисляет причины: недействительный ключ, исчерпанный баланс или лимит, проблемы сети. Проверьте баланс в личном кабинете RouterAI и попробуйте другую модель. -
Забыт пароль панели.
sudo docker exec -it astrbot astrbot password, затемsudo docker restart astrbot. -
Поиск по базе знаний ничего не находит или падает с ошибкой размерности. Размерность в провайдере эмбеддингов должна совпадать с моделью (для
qwen/qwen3-embedding-8b— 4096), а после смены модели нужна новая база знаний.
Что дальше
- Каталог моделей RouterAI — id, контекст и цены.
- Hermes Agent через RouterAI и OpenClaw с Telegram через RouterAI — другие агенты с Telegram-ботом.
- AnythingLLM через RouterAI — RAG по своим документам с веб-интерфейсом.
- AionUi через RouterAI — десктопный интерфейс для нескольких агентов.
- Репозиторий AstrBot и документация.