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:
parent
16141fe5b4
commit
341ac14607
|
|
@ -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")
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue