Разработка White-Label AI-платформы аналитики для реселлеров
White-label AI-аналитика — это готовый продукт, который реселлер (агентство, консалтинговая компания, SaaS-вендор) продаёт своим клиентам под собственным брендом. Реселлер не разрабатывает AI-функциональность самостоятельно, а встраивает готовое решение в свой продукт.
Архитектура для реселлерской модели
Технологический провайдер (мы)
↓ [White-Label SDK + API]
Реселлер (агентство, ISV)
↓ [Branded platform]
Конечные клиенты реселлера
Три уровня кастомизации:
- Branding only: Реселлер меняет лого, цвета, домен. Минимальные усилия.
- Embedded widgets: Реселлер встраивает отдельные компоненты (дашборды, чат-боты) в свой продукт через iframe или JavaScript SDK.
- Full API integration: Реселлер строит собственный UI поверх нашего API. Максимальная гибкость.
JavaScript SDK для embedded аналитики
// Клиентский SDK для реселлера
class AIAnalyticsWidget {
constructor(config: WidgetConfig) {
this.apiKey = config.apiKey;
this.tenantId = config.tenantId;
this.theme = config.theme;
this.container = config.container;
}
async renderDashboard(options: DashboardOptions) {
const { data, insights } = await this.fetchAnalytics(options);
const widget = document.createElement('div');
widget.innerHTML = await this.renderTemplate('analytics-dashboard', {
data, insights, theme: this.theme
});
this.container.appendChild(widget);
this.applyCustomTheme(this.theme);
}
private applyCustomTheme(theme: Theme) {
// Инъекция CSS переменных для брендинга
const style = document.createElement('style');
style.textContent = `
.ai-analytics-widget {
--primary-color: ${theme.primaryColor};
--font-family: ${theme.fontFamily};
--logo-url: url('${theme.logoUrl}');
}
`;
document.head.appendChild(style);
}
}
// Использование реселлером
const analytics = new AIAnalyticsWidget({
apiKey: 'reseller_key_...',
tenantId: 'client_123',
container: document.getElementById('analytics-container'),
theme: {
primaryColor: '#E67E22', // Цвета бренда клиента
fontFamily: 'Roboto, sans-serif',
logoUrl: 'https://client.com/logo.png'
}
});
analytics.renderDashboard({ period: '30d', metrics: ['revenue', 'churn'] });
Реселлерский портал управления
# Реселлер управляет своими клиентами (sub-tenants)
class ResellerPortal:
async def create_client(self, reseller_id: str,
client_data: ClientCreateRequest) -> Client:
# Проверка квот реселлера
reseller = await self.db.get_reseller(reseller_id)
if reseller.active_clients >= reseller.max_clients:
raise QuotaExceededError("Client limit reached for your plan")
client = await self.db.create_client({
'reseller_id': reseller_id,
'name': client_data.name,
'plan': client_data.plan,
# Наценка реселлера поверх базового тарифа
'pricing_multiplier': reseller.markup_multiplier,
'allowed_features': self.get_plan_features(client_data.plan)
})
# Выдача API ключей клиенту
api_key = await self.generate_scoped_api_key(
client.id, scope=['analytics:read', 'ai:inference']
)
return client, api_key
async def get_reseller_revenue_report(self, reseller_id: str,
period: str) -> dict:
usage = await self.billing.get_usage(reseller_id, period)
return {
'total_client_revenue': usage.total_billed,
'platform_cost': usage.total_cost, # Наш тариф для реселлера
'reseller_margin': usage.total_billed - usage.total_cost,
'top_clients': usage.top_clients_by_usage[:10]
}
Управление SLA для реселлеров
Реселлер несёт SLA перед своими клиентами, а провайдер — перед реселлером. Разграничение ответственности:
- Провайдер гарантирует uptime API 99.95%
- Реселлер самостоятельно выстраивает SLA с клиентами (обычно 99.5-99.9%)
- Мониторинг-дашборд реселлера показывает текущий статус, incidents, rolling uptime
Бизнес-модель: реселлер платит нам по wholesale тарифу (например, $5 за 1M токенов), продаёт клиентам по $15 — маржа 67%. Срок разработки полной платформы для реселлеров: 4-5 месяцев.







