python -m uvicorn app.main:app --reload- активен ли оператор (
active) - максимальная нагрузка (
load_limit) - связи: имеет много
contactsи много весов (OperatorSourceWeight)
- идентификатор лида (
external_id) - один лид может иметь несколько
contacts
- источник обращения (бот)
- для каждого источника настраиваются веса операторов
- связь между оператором и источником
- поле
weightопределяет долю распределения трафика
- факт обращения
- содержит
lead_id,source_id,operator_id(может бытьnull, если нет подходящего оператора)
По external_id ищется существующий лид.
Если не найден — создаётся новый.
Это позволяет связать все обращения одного клиента.
Выбираются операторы, у которых:
active = true- текущая нагрузка (число обращений) <
load_limit
Из подходящих операторов выбирается один:
random.choices(operators, weights)