diff --git a/scripts/autocall_scheduler.py b/scripts/autocall_scheduler.py index 68fe725..a387836 100644 --- a/scripts/autocall_scheduler.py +++ b/scripts/autocall_scheduler.py @@ -204,6 +204,18 @@ def is_work_time(settings, now=None): return False 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): """Нормализует телефон: только цифры, начинается с 7.""" 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") 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) log.info(f"Found {len(groups)} groups to call")