fix(autocall): не звонить вне разрешённого окна

Владелец: «звонить вне окна разрешённого нельзя». Окно (часы и дни из панели
«Автодозвон») проверялось только для ручной очереди «Позвонить сейчас», а
автоматическая кампания его игнорировала: 28.09 робот позвонил клиенту в 19:58
и 21:03 МСК (в логе тик сам писал «Outside work hours», но тут же «Found 1
groups» → «Pushed call file»), после чего заказ ушёл в ручную работу.

Теперь перед выборкой кандидатов стоит та же проверка is_work_time(): вне окна
авто-обзвон не запускается, повтор, чей интервал истёк вечером, ждёт ближайшего
рабочего утра. Проверка: /tmp-check_window.py — 7 случаев (вне окна 19:58 и
21:03, внутри 09:00/10:00/18:59, воскресенье, суббота), все PASS; в логе новая
строка «Outside work hours (09:00-19:00 МСК (...)), auto calls skipped».
This commit is contained in:
Hermes 2026-09-28 22:31:48 +02:00
parent 16141fe5b4
commit 341ac14607
1 changed files with 20 additions and 0 deletions

View File

@ -204,6 +204,18 @@ def is_work_time(settings, now=None):
return False return False
return start <= hour < end return start <= hour < end
def autocall_window_text(settings):
"""Окно обзвона словами — для лога (владелец читает логи сам)."""
start = settings.get("work_hours_start", 9)
end = settings.get("work_hours_end", 20)
day_names = {1: "пн", 2: "вт", 3: "ср", 4: "чт", 5: "пт", 6: "сб", 7: "вс"}
days = [day_names[d] for d in sorted(
int(x) for x in str(settings.get("work_days", "")).split(",") if x.strip().isdigit()
) if d in day_names]
return f"{int(start):02d}:00-{int(end):02d}:00 МСК ({', '.join(days) or 'дни не заданы'})"
def normalize_phone(phone): def normalize_phone(phone):
"""Нормализует телефон: только цифры, начинается с 7.""" """Нормализует телефон: только цифры, начинается с 7."""
clean = "".join(c for c in str(phone) if c.isdigit()) clean = "".join(c for c in str(phone) if c.isdigit())
@ -865,6 +877,14 @@ def main():
log.info("Autocall campaign disabled (enabled=false), skipping auto") log.info("Autocall campaign disabled (enabled=false), skipping auto")
return return
# Окно обзвона: вне рабочих часов и дней авто-кампания не звонит вообще
# (владелец: «звонить вне окна разрешённого нельзя»). Раньше окно проверялось
# только для ручной очереди, и автоматика дозванивалась в 21:00 и позже: повтор,
# чей интервал истёк вечером, теперь просто ждёт ближайшего рабочего утра.
if not is_work_time(settings):
log.info(f"Outside work hours ({autocall_window_text(settings)}), auto calls skipped")
return
groups = get_groups_to_call(conn, settings) groups = get_groups_to_call(conn, settings)
log.info(f"Found {len(groups)} groups to call") log.info(f"Found {len(groups)} groups to call")