Руководство по конфигурации тенантов
ℹ️ Назначение: Настройка тенантов (клиентов) и их Telegram ботов для работы с системой.
📁 Структура конфигурации
Все тенанты находятся в одной папке config/tenant/.
Структура папки тенанта
config/tenant/
├── tenant_101/ # Публичный тенант (ID = 101)
│ ├── tg_bot.yaml # Конфигурация бота
│ ├── config.yaml # Конфигурация тенанта (опционально)
│ ├── storage/ # Хранилище атрибутов тенанта (опционально)
│ │ └── ... # См. STORAGE_CONFIG_GUIDE.md
│ └── scenarios/ # Сценарии (опционально)
│ └── ...
├── tenant_137/ # Публичный тенант (ID = 137)
│ └── ...
└── ...Типы тенантов
Системные тенанты (ID < 100):
- Ограничены в изменениях
- Управляются системой
Публичные тенанты (ID ≥ 100):
- Синхронизируются с внешним репозиторием
Repository-Tenant - Полностью управляемые через конфигурацию
- Используются для клиентских ботов и публичных сервисов
- Синхронизируются с внешним репозиторием
⚠️ ВАЖНО:
- Название папки должно строго соответствовать формату
tenant_<ID>, где<ID>— уникальный числовой идентификатор тенанта - Структура папок одинакова для всех тенантов независимо от типа
🔄 Синхронизация тенантов
Публичные тенанты (ID ≥ 100) синхронизируются с внешним репозиторием Repository-Tenant через GitHub.
- Обновление: Автоматическая синхронизация с GitHub
- Управление: Через системные действия (
sync_all_tenants,sync_tenant) - Назначение: Клиентские боты, публичные сервисы
- Ручная синхронизация: Через системные действия при необходимости
🤖 tg_bot.yaml
Назначение: Конфигурация Telegram бота для тенанта.
Пример конфигурации:
# Конфигурация Telegram бота для тенанта
bot_name: "Мой бот"
bot_token: "1234567890:ABCdefGHIjklMNOpqrsTUVwxyz"
is_active: true
# Команды бота (опционально)
commands:
- command: "start"
description: "Основное меню"
scope: "all_private_chats"
- command: "help"
description: "Справка"
scope: "all_private_chats"
# Команды для очистки (опционально)
command_clear:
- scope: "all_private_chats" # Очистить команды в личных чатах
- scope: "all_group_chats" # Очистить команды в групповых чатах
- scope: "chat" # Очистить команды в конкретном чате
chat_id: 123456789
- scope: "chat_member" # Очистить команды у конкретного пользователя в чате
chat_id: 123456789
user_id: 987654321Параметры:
bot_name— имя бота (отображается в системе)bot_token— токен бота от BotFather (опционально)is_active— активен ли бот (true/false)
💡 Хранение токена бота:
Токен бота может быть установлен двумя способами:
- Через конфигурацию (
tg_bot.yaml) — при синхронизации конфигурации токен из файла сохраняется в базу данных - Через мастер-бота — токен можно установить через интерфейс мастер-бота (бот должен быть создан через синхронизацию конфигурации)
Приоритет: При синхронизации конфигурации токен из tg_bot.yaml имеет приоритет и обновляет токен в базе данных.
💡 Лайфхак: Можно установить токен один раз через конфигурацию (tg_bot.yaml), затем удалить его из файла — токен останется в базе данных и будет использоваться дальше. Это позволяет не хранить токен в репозитории после первоначальной настройки.
commands— список команд бота (опционально):command— название команды (без /)description— описание командыscope— область действия команды:"default"— по умолчанию (личные чаты + группы)"all_private_chats"— все личные чаты"all_group_chats"— все групповые чаты"chat"— конкретный чат (требуетchat_id)"chat_member"— конкретный пользователь в чате (требуетchat_idиuser_id)
command_clear— список областей для очистки команд (опционально):scope— область для очистки команд (те же варианты, что и выше)chat_id— ID чата (для scope:chat,chat_member)user_id— ID пользователя (для scope:chat_member)
Важные особенности:
- Активация ботов: Только боты с
is_active: trueбудут запущены. Команды автоматически регистрируются в Telegram при запуске. Неактивные боты игнорируются системой - Области команд: Описаны в параметрах выше (
default,all_private_chats,all_group_chats,chat,chat_member)
⚙️ config.yaml
Назначение: Конфигурация тенанта с атрибутами (API ключи, настройки и другие параметры).
Пример конфигурации:
# Конфигурация тенанта
ai_token: "sk-or-v1-..." # AI API ключ для тенанта (опционально)Параметры:
ai_token— AI API ключ для тенанта (опционально)- Используется для действий, требующих API ключ AI (например,
completion,embedding,save_embedding) - Если не указан, действия могут использовать дефолтный ключ (если разрешено в настройках сервиса)
- Используется для действий, требующих API ключ AI (например,
💡 Хранение конфигурации тенанта:
Конфигурация тенанта может быть установлена двумя способами:
- Через конфигурацию (
config.yaml) — при синхронизации конфигурации атрибуты из файла сохраняются в базу данных - Через мастер-бота — атрибуты можно обновить через интерфейс мастер-бота (аналогично токену бота)
Приоритет: При синхронизации конфигурации атрибуты из config.yaml имеют приоритет и обновляют значения в базе данных.
💡 Лайфхак: Можно установить токен один раз через конфигурацию (config.yaml), затем удалить его из файла — токен останется в базе данных и будет использоваться дальше. Это позволяет не хранить токен в репозитории после первоначальной настройки.
Использование в сценариях:
Все атрибуты из конфигурации тенанта автоматически доступны в сценариях через специальный словарь _config:
step:
- action: "completion"
params:
prompt: "Привет!"
# ai_token автоматически берется из _config.ai_tokenДоступ через плейсхолдеры:
params:
text: "Токен: {_config.ai_token|fallback:Не установлен}"📂 scenarios/
Назначение: Организация сценариев тенанта. Все YAML-файлы из папки scenarios/ (включая подпапки) автоматически загружаются. Можно использовать подпапки для логической организации файлов.
📖 Подробное руководство: См. SCENARIO_CONFIG_GUIDE.md
💾 storage/
Назначение: Хранилище атрибутов тенанта (key-value структура для гибкого хранения настроек, лимитов, функций и других данных). Позволяет гибко управлять конфигурацией тенанта без изменения схемы БД.
📖 Подробное руководство: См. STORAGE_CONFIG_GUIDE.md