feat(schedule): дни SMS в ЛК реально управляют рассылками — скрипты читают sms_days из графика
This commit is contained in:
parent
1a310e5f5a
commit
1660cced66
|
|
@ -84,6 +84,22 @@ def get_db_conn():
|
|||
user=DB_USER, password=DB_PASS,
|
||||
)
|
||||
|
||||
def apply_schedule_work_days(conn, settings):
|
||||
"""Дни отправки — из «Графика работы» в ЛК (единый источник правды).
|
||||
|
||||
Если график прочитать не удалось, остаются прежние дни кампании.
|
||||
"""
|
||||
try:
|
||||
with conn.cursor(cursor_factory=RealDictCursor) as cur:
|
||||
cur.execute("SELECT sms_days FROM business_schedule_settings WHERE id = 1")
|
||||
row = cur.fetchone() or {}
|
||||
days = row.get("sms_days") or []
|
||||
if days:
|
||||
settings["work_days"] = ",".join(str(int(d)) for d in days)
|
||||
except Exception as exc: # noqa: BLE001 — не роняем рассылку из-за графика
|
||||
print(f"График работы не прочитан, дни SMS из настроек кампании: {exc}")
|
||||
return settings
|
||||
|
||||
def load_settings(conn):
|
||||
with conn.cursor(cursor_factory=RealDictCursor) as cur:
|
||||
cur.execute("SELECT * FROM sms_campaign_settings WHERE campaign_type = 'first_sms'")
|
||||
|
|
@ -99,7 +115,8 @@ def load_settings(conn):
|
|||
"test_mode": True,
|
||||
"test_phone": "79788382260",
|
||||
}
|
||||
return dict(row)
|
||||
settings = dict(row)
|
||||
return apply_schedule_work_days(conn, settings)
|
||||
|
||||
# ─── SMS API ─────────────────────────────────────────────────────────────────
|
||||
|
||||
|
|
|
|||
|
|
@ -61,13 +61,30 @@ def get_db_conn():
|
|||
user=DB_USER, password=DB_PASS,
|
||||
)
|
||||
|
||||
def apply_schedule_work_days(conn, settings):
|
||||
"""Дни отправки — из «Графика работы» в ЛК (единый источник правды).
|
||||
|
||||
Если график прочитать не удалось, остаются прежние дни кампании.
|
||||
"""
|
||||
try:
|
||||
with conn.cursor(cursor_factory=RealDictCursor) as cur:
|
||||
cur.execute("SELECT sms_days FROM business_schedule_settings WHERE id = 1")
|
||||
row = cur.fetchone() or {}
|
||||
days = row.get("sms_days") or []
|
||||
if days:
|
||||
settings["work_days"] = ",".join(str(int(d)) for d in days)
|
||||
except Exception as exc: # noqa: BLE001 — не роняем рассылку из-за графика
|
||||
print(f"График работы не прочитан, дни SMS из настроек кампании: {exc}")
|
||||
return settings
|
||||
|
||||
def load_settings(conn):
|
||||
with conn.cursor(cursor_factory=RealDictCursor) as cur:
|
||||
cur.execute("SELECT * FROM sms_campaign_settings WHERE campaign_type = %s", (CAMPAIGN_TYPE,))
|
||||
row = cur.fetchone()
|
||||
if not row:
|
||||
return {"enabled": True, "auto_manual_after_hours": 3, "telegram_chat_id": TELEGRAM_CHAT_ID}
|
||||
return dict(row)
|
||||
settings = dict(row)
|
||||
return apply_schedule_work_days(conn, settings)
|
||||
|
||||
# ─── Telegram ────────────────────────────────────────────────────────────────
|
||||
|
||||
|
|
|
|||
|
|
@ -71,6 +71,22 @@ def get_db_conn():
|
|||
user=DB_USER, password=DB_PASS,
|
||||
)
|
||||
|
||||
def apply_schedule_work_days(conn, settings):
|
||||
"""Дни отправки — из «Графика работы» в ЛК (единый источник правды).
|
||||
|
||||
Если график прочитать не удалось, остаются прежние дни кампании.
|
||||
"""
|
||||
try:
|
||||
with conn.cursor(cursor_factory=RealDictCursor) as cur:
|
||||
cur.execute("SELECT sms_days FROM business_schedule_settings WHERE id = 1")
|
||||
row = cur.fetchone() or {}
|
||||
days = row.get("sms_days") or []
|
||||
if days:
|
||||
settings["work_days"] = ",".join(str(int(d)) for d in days)
|
||||
except Exception as exc: # noqa: BLE001 — не роняем рассылку из-за графика
|
||||
print(f"График работы не прочитан, дни SMS из настроек кампании: {exc}")
|
||||
return settings
|
||||
|
||||
def load_settings(conn):
|
||||
with conn.cursor(cursor_factory=RealDictCursor) as cur:
|
||||
cur.execute("SELECT * FROM sms_campaign_settings WHERE campaign_type = %s", (CAMPAIGN_TYPE,))
|
||||
|
|
@ -82,7 +98,8 @@ def load_settings(conn):
|
|||
"telegram_chat_id": TELEGRAM_CHAT_ID, "sms_api_id": SMS_API_ID,
|
||||
"work_hours_start": 8, "work_hours_end": 21, "work_days": "1,2,3,4,5",
|
||||
}
|
||||
return dict(row)
|
||||
settings = dict(row)
|
||||
return apply_schedule_work_days(conn, settings)
|
||||
|
||||
# ─── SMS API ─────────────────────────────────────────────────────────────────
|
||||
|
||||
|
|
|
|||
|
|
@ -83,6 +83,22 @@ def get_db_conn():
|
|||
user=DB_USER, password=DB_PASS,
|
||||
)
|
||||
|
||||
def apply_schedule_work_days(conn, settings):
|
||||
"""Дни отправки — из «Графика работы» в ЛК (единый источник правды).
|
||||
|
||||
Если график прочитать не удалось, остаются прежние дни кампании.
|
||||
"""
|
||||
try:
|
||||
with conn.cursor(cursor_factory=RealDictCursor) as cur:
|
||||
cur.execute("SELECT sms_days FROM business_schedule_settings WHERE id = 1")
|
||||
row = cur.fetchone() or {}
|
||||
days = row.get("sms_days") or []
|
||||
if days:
|
||||
settings["work_days"] = ",".join(str(int(d)) for d in days)
|
||||
except Exception as exc: # noqa: BLE001 — не роняем рассылку из-за графика
|
||||
print(f"График работы не прочитан, дни SMS из настроек кампании: {exc}")
|
||||
return settings
|
||||
|
||||
def load_settings(conn):
|
||||
with conn.cursor(cursor_factory=RealDictCursor) as cur:
|
||||
cur.execute("SELECT * FROM sms_campaign_settings WHERE campaign_type = %s", (CAMPAIGN_TYPE,))
|
||||
|
|
@ -104,7 +120,8 @@ def load_settings(conn):
|
|||
"second_sms_delay_hours": 3,
|
||||
"auto_manual_after_hours": 3,
|
||||
}
|
||||
return dict(row)
|
||||
settings = dict(row)
|
||||
return apply_schedule_work_days(conn, settings)
|
||||
|
||||
# ─── SMS API ─────────────────────────────────────────────────────────────────
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue