# 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 и другими моделями из [каталога](/models): работа из России без VPN, оплата в рублях, один ключ на все модели. Статья проверена на AstrBot v4.29.4.

Типичный сценарий для команды или сообщества: бот в рабочем чате Telegram отвечает на вопросы по вашей документации, а на другой платформе работает другая, более дешёвая или более сильная модель.

## Требования {#trebovaniya}

* Сервер или компьютер с Docker и Docker Compose.
* Ключ RouterAI: [создайте его в личном кабинете](https://routerai.ru/settings/keys) (раздел «Ключи API») и пополните баланс. Ключ показывается один раз.
* Для Telegram: бот и токен от @BotFather. Если сервер не достаёт до `api.telegram.org`, понадобится HTTP-прокси (см. «Решение проблем»).

## Установка {#ustanovka}

По [документации AstrBot](https://docs.astrbot.app/en/deploy/astrbot/docker.html), рекомендуемый способ — Docker Compose:

```bash
git clone https://github.com/AstrBotDevs/AstrBot
cd AstrBot
sudo docker compose up -d
```

Вместо Compose можно запустить один контейнер (образ `soulter/astrbot`). Данные лежат в каталоге `data`, поэтому том подключать обязательно:

```bash
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 в панели провайдера. Начальный пароль печатается в логах:

```bash
sudo docker logs astrbot | grep -i -A3 "initial"
```

Откройте `http://<адрес-сервера>:6185`, войдите под пользователем `astrbot` с этим паролем. При первом входе панель попросит создать свои имя и пароль (минимум 8 символов, заглавная и строчная буква, цифра). Забытый пароль сбрасывается командой `sudo docker exec -it astrbot astrbot password`, после неё контейнер нужно перезапустить.

![Экран «Настройка аккаунта» при первом входе в панель AstrBot](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/8c0d78a2b837eadd1bb26a70ded79d71.png)

Язык панели переключается значком перевода на экране входа: доступны китайский, английский, русский и японский. Дальше названия даны по русскому интерфейсу с английскими пояснениями из документации.

## Подключение к RouterAI {#podklyuchenie-k-routerai}

### Провайдер {#provider}

В русской локализации v4.29.4 подписи двух полей перепутаны: поле ключа названо «Ключ Coze API для доступа к сервисам Coze», а поле адреса — «Bot ID». Ориентируйтесь на подсказки под названиями: «Ваш секретный API-ключ» и «Адрес API точки входа (Endpoint URL)». В английском интерфейсе подписи корректные.

1. Откройте «Провайдеры моделей» → вкладка «Диалоги» → «Добавить» и выберите **OpenAI Compatible**.
2. В поле «ID провайдера» впишите `routerai`.
3. В поле ключа вставьте ключ RouterAI вида `sk-xxxxxxxxxxxxxxxx`.
4. В поле адреса API замените значение по умолчанию `https://api.openai.com/v1` на `https://routerai.ru/api/v1`.
5. Нажмите «Сохранить И Загрузить Модели» (после сохранения кнопка называется «Загрузить Список Моделей»). RouterAI вернул в списке 584 модели.
6. В поле поиска по моделям введите `claude-sonnet-5.5` и нажмите «+» справа от `anthropic/claude-sonnet-5.5`.
7. В окне «Добавить routerai/anthropic/claude-sonnet-5.5» оставьте включённый переключатель «Включить», проверьте «Размер окна контекста модели» (подставилось 1000000, как в каталоге) и нажмите «Сохранить».
8. В строке добавленной модели нажмите значок «Тестировать модель». Должно появиться сообщение «Тест модели ... пройден успешно» с задержкой (на проверке 1407 мс).

![Провайдер routerai: адрес https://routerai.ru/api/v1, ключ скрыт, список из 584 моделей загружен](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/3741c53e013a40bdfa9f93f964f59507.png)

![Поиск модели claude-sonnet-5.5 в списке доступных моделей провайдера](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/5cad1d3ffdd23627a3ed287db24087b7.png)

Если список моделей не загрузился, нажмите «Добавить Вручную» и впишите id из каталога. Ключ можно не хранить в панели: по документации (с v4.13.0) в поле ключа допускается значение вида `$ROUTERAI_API_KEY`, тогда AstrBot прочитает переменную окружения.

### Модель по умолчанию {#model}

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

![Профиль конфигурации: в поле «Модель чата» выбрана routerai/anthropic/claude-sonnet-5.5, показано сообщение об успешном сохранении](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/88fb96fb1d0eec798c1486c14242cdb6.png)

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

![Встроенный веб-чат AstrBot: ответ модели claude-sonnet-5.5 через RouterAI](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/5599d8d3b7138f77e3ecbe8d90ce38ea.png)

## Бот в Telegram {#telegram}

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

![Форма Telegram-бота в AstrBot: имя бота, переключатель «Включить», поле «Токен бота» и адреса API](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/09b07e5ceb6fcd482542bdbee415050e.png)

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

![Чат Telegram с ботом AstrBot: вопрос пользователя и ответ модели claude-sonnet-5.5 через RouterAI](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/d49f127cde6f51fd3c0ef3290e13b46d.png)

### Кто может писать боту и когда он отвечает {#dostup}

* **Белый список.** «Конфигурация» → «Управление доступом» → «Белый список»: включите «Включить белый список» и добавьте идентификаторы в «Список разрешенных ID». Идентификатор чата или пользователя бот присылает по команде `/sid`. По подсказке в панели, пока список пуст, белый список отключён. Как только вы добавили первый ID, остальные чаты бот игнорирует.
* **Администраторы.** Свой ID из `/sid` добавьте в «Администраторы» → «ID администраторов»: админ-команды (`/model`, `/provider`, `/persona` и другие) доступны только им.
* **Группы.** По [FAQ](https://docs.astrbot.app/en/faq.html), в группе бот отвечает не на каждое сообщение, а на упоминание (@) или сообщение с префиксом пробуждения (по умолчанию `/`). Список префиксов и требование префикса в личных сообщениях настраиваются в «Конфигурация» → «Платформы и сообщения» («Префикс пробуждения», «Личные сообщения требуют префикс пробуждения»).

## Потоковый вывод и лимит длины в Telegram {#streaming}

Telegram ограничивает одно сообщение 4096 символами ([Bot API](https://core.telegram.org/bots/api#sendmessage)). Включите «Потоковый вывод (Streaming)» в «Конфигурация» → AI → «Дополнительные настройки» → «Обработка сообщений» и сохраните профиль. По [документации](https://docs.astrbot.app/en/platform/telegram.html), в личных чатах AstrBot показывает ответ черновиком через `sendMessageDraft` (нужен `python-telegram-bot>=22.6`), в группах правит отправленное сообщение. Для длинных ответов попросите модель отвечать короче в системном промпте персонажа (вкладка «Персона» в том же разделе AI): это надёжнее, чем рассчитывать на разбиение.

## Discord и Feishu {#discord-feishu}

Те же «Боты» → «Создать Бота», другая платформа:

* **Discord.** В [Discord Developer Portal](https://discord.com/developers/applications) создайте приложение, возьмите токен на вкладке Bot и включите Presence Intent, Server Members Intent и Message Content Intent. Токен вставьте в «Bot Token», приглашение на сервер сгенерируйте на вкладке OAuth2 ([инструкция](https://docs.astrbot.app/en/platform/discord.html)). Серверу нужен прямой доступ к Discord либо прокси в поле «Discord Proxy Address».
* **Feishu (Lark).** В [инструкции](https://docs.astrbot.app/en/platform/lark.html) описаны два способа: быстрое создание по QR-коду (AstrBot от 4.25.0) и ручное создание корпоративного приложения в консоли разработчика, после чего нужно настроить подписку на события, права и опубликовать версию.

## База знаний: ответы по документации {#baza-znanij}

База знаний AstrBot работает по схеме RAG: документы режутся на фрагменты, индексируются, а нужные фрагменты передаются модели при ответе. Нужны две модели: чат (уже подключена) и эмбеддинги. Эмбеддинги RouterAI подходят: запрос к `/api/v1/embeddings` с `qwen/qwen3-embedding-8b` вернул вектор размерностью 4096.

1. «Провайдеры моделей» → вкладка «Эмбеддинги» → «Добавить» → **OpenAI Embedding**.
2. «API Base URL» — `https://routerai.ru/api/v1`; ключ — `sk-xxxxxxxxxxxxxxxx`; «Модель эмбеддингов» — `qwen/qwen3-embedding-8b`; «Размерность эмбеддингов» — `4096` (по умолчанию в поле стоит 1024, впишите значение вручную). Размерность должна совпадать с моделью, иначе векторная база не заработает. Нажмите «Сохранить».
3. «База знаний» → «Создать Базу»: укажите «Название» и «Описание», в списке «Embedding модель» выберите `qwen/qwen3-embedding-8b` (в списке видны провайдер и размерность 4096) и нажмите «Создать». После создания модель эмбеддингов сменить нельзя: для другой модели создаётся новая база и документы загружаются заново.
4. Откройте базу → вкладка «Документы» → «Загрузить» и добавьте файлы (`.txt`, `.md`, `.pdf`, `.docx` и другие, до 128 МБ на файл). Размер фрагмента (512 символов) и перекрытие (50) подставляются по умолчанию. Сканы без текстового слоя не распознаются. Тестовый файл на 695 байт разбился на 4 фрагмента.
5. Во вкладке «Поиск» (Retrieval) задайте вопрос, ответ на который есть в документе, и убедитесь, что найден нужный фрагмент.
6. «Конфигурация» → AI → «Возможности» → «База знаний»: выберите базу для профиля бота и сохраните. Без этого шага база в чате не используется.

![База знаний docs: вкладка «Документы», загруженный файл invoices-faq.md разбит на 4 фрагмента](https://b51bc417-3ee0-451a-a83b-8a681d027a96.selstorage.ru/public/6e2e4a0bf9c6354b8db9d90da685881f.png)

Подробности — в [документации по базе знаний](https://docs.astrbot.app/en/use/knowledge-base.html). Фрагменты документов уходят в RouterAI вместе с вопросом, поэтому не загружайте то, что нельзя передавать внешней модели.

## Несколько моделей для разных платформ {#neskolko-modelej}

Модель задаётся в профиле конфигурации, а профиль привязывается к боту: в настройках бота блок конфигурации диалогов (в документации: Conversation configuration) позволяет выбрать профиль по умолчанию и привязать другие профили к отдельным чатам. Схема: профиль `cheap` с `anthropic/claude-haiku-5.5` для Telegram-группы и профиль `docs` с `anthropic/claude-sonnet-5.5` и базой знаний для разбора документов. В «Модель чата» можно также добавить «Резервные модели чата»: они используются, если основная вернула ошибку.

## Выбор модели {#vybor-modeli}

| Модель                          | Контекст (каталог) | Для чего                                    |
| ------------------------------- | ------------------ | ------------------------------------------- |
| `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          | Длинные документы и сложные вопросы         |

Цены в рублях — в [каталоге моделей](/models).

## Проверка подключения {#proverka}

1. Во вкладке «Диалоги» у модели нажмите «Тестировать модель»: ожидается сообщение об успехе с задержкой.
2. Откройте веб-чат («Чат» вверху панели) и напишите короткий вопрос. На проверке `anthropic/claude-sonnet-5.5` ответила на вопрос в веб-чате.
3. Напишите боту в Telegram. В «Данные и логи» → «Логи» должна появиться строка с сообщением и ответом.
4. Проверка ключа без интерфейса:

```bash
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":"Привет"}]}'
```

## Решение проблем {#problemy}

* **Модель добавлена, но бот отвечает «не выбрано» или использует не ту модель.** Провайдер и модель надо ещё выбрать в «Конфигурация» → 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), а после смены модели нужна новая база знаний.

## Что дальше {#chto-dalshe}

* [Каталог моделей RouterAI](/models) — id, контекст и цены.
* [Hermes Agent через RouterAI](/pages/hermes-agent-routerai) и [OpenClaw с Telegram через RouterAI](/pages/openclaw-web-telegram-routerai-claude-gpt-5-deepseek-mistral) — другие агенты с Telegram-ботом.
* [AnythingLLM через RouterAI](/pages/anythingllm-routerai) — RAG по своим документам с веб-интерфейсом.
* [AionUi через RouterAI](/pages/aionui-routerai) — десктопный интерфейс для нескольких агентов.
* [Репозиторий AstrBot](https://github.com/AstrBotDevs/AstrBot) и [документация](https://docs.astrbot.app/).
