Загрузка...

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, после неё контейнер нужно перезапустить.

Экран «Настройка аккаунта» при первом входе в панель AstrBot

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

Подключение к RouterAI

Провайдер

В русской локализации 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 моделей загружен

Поиск модели claude-sonnet-5.5 в списке доступных моделей провайдера

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

Модель по умолчанию

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

Профиль конфигурации: в поле «Модель чата» выбрана routerai/anthropic/claude-sonnet-5.5, показано сообщение об успешном сохранении

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

Встроенный веб-чат AstrBot: ответ модели claude-sonnet-5.5 через RouterAI

Бот в 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

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

Чат Telegram с ботом AstrBot: вопрос пользователя и ответ модели claude-sonnet-5.5 через RouterAI

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

  • Белый список. «Конфигурация» → «Управление доступом» → «Белый список»: включите «Включить белый список» и добавьте идентификаторы в «Список разрешенных 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.

  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 фрагмента

Подробности — в документации по базе знаний. Фрагменты документов уходят в 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 Длинные документы и сложные вопросы

Цены в рублях — в каталоге моделей.

Проверка подключения

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

Что дальше