Базовые профили (base_profiles)🔗
Назначение🔗
Приложение base_profiles содержит общую модель BaseProfile, от которой наследуются профили конкретных сервисов (VK, WhatsApp, Widget и т.д.).
Модель выделена в отдельное приложение, чтобы избежать дублирования общих полей и централизовать логику, связанную с подпиской, статусами и параметрами обработки.
Основные модели и сущности🔗
BaseProfile🔗
class BaseProfile(models.Model):
user = models.ForeignKey(CustomUser, ...)
service = models.ForeignKey(ServiceRegistry, ...)
name = models.CharField(...)
open_ai_assistant_key = models.CharField(...)
open_ai_key = models.CharField(...)
wait_time = models.IntegerField(...)
is_active = models.BooleanField(...)
unignore_triggers = ArrayField(models.CharField(...))
started_at = models.DateField(...)
next_billing_date = models.DateField(...)
amount_rub = models.DecimalField(...)
| Поле | Назначение |
|---|---|
user | Пользователь, которому принадлежит профиль |
service | Сервис, к которому относится профиль (см. ServiceRegistry в billing) |
name | Название профиля |
open_ai_key | OpenAI API-ключ, используемый для доступа к API OpenAI |
open_ai_assistant_key | ID ассистента в OpenAI |
wait_time | Время сбора сообщений в секундах |
is_active | Флаг активности профиля. Если False — профиль игнорируется системой и не списывает средства за подписку |
unignore_triggers | Массив фраз, выводящих пользователя из игнора (поиск без учёта регистра) |
started_at | Дата начала подписки |
next_billing_date | Дата следующего списания |
amount_rub | Стоимость ежедневной подписки в рублях (по умолчанию 33.333333) |
Связи и использование🔗
- Модель
BaseProfileне используется напрямую — от неё наследуются модели конкретных профилей сервисов; - Используется микросервисами (через
data_service) для:- получения данных о профиле;
- доступа к OpenAI-ключу и ассистенту;
- получения
wait_time, статуса активности и прочих параметров;
- Так же используется скриптом ежедневного списания средств за подписку, для получения стоимости подписки
Особенности🔗
;amount_rubопределяет ежедневную стоимость подписки. Используется вместоServiceRegistry.subscribe_amount
Bug
Разобратся с этим моментом!!! Вроде как скрипт списаний должен использовать сумму из модели сервисов а не эту.
started_atустанавливается при создании профиля;next_billing_dateобновляется ежедневно скриптом в списания средств за подписку;unignore_triggersиспользуется при анализе входящих сообщений на стороне сервисов интеграции — список сравнивается с текстом сообщения;open_ai_keyиopen_ai_assistant_keyпередаются микросервисами в микросервисgpt_serviceкоторый взаимодействует с API OpenAI.
Админка🔗
BaseProfileне регистрируется напрямую в админке;- Отображается как часть дочерних моделей в соответствующих разделах;
- Настройки, фильтрация и отображение зависят от каждой конкретной реализации профиля.
API🔗
Общая информация🔗
Приложение не предоставляет собственного API.
Все обращения к данным профиля происходят через data_service.
Использование🔗
- Сервисы интеграции через
data_serviceполучают нужные поля (open_ai_key,wait_time,is_activeи др.); - Скрипт списаний средств за подписку используют
is_active,started_at,next_billing_dateдля расчёта оплаты и обновления статуса.