sms-second: не ждать вторую СМС при выключенной кампании — снятие очереди в second_sms_skipped

This commit is contained in:
ops 2026-10-04 14:30:35 +00:00
parent d9327f320c
commit 5170c4fc93
1 changed files with 31 additions and 1 deletions

View File

@ -687,6 +687,32 @@ def step_handle_expired(conn, settings):
tg_chat,
)
def skip_pending_reminders(conn):
"""Кампания выключена -> снять ожидающие группы с очереди второй СМС.
Терминальный статус 'second_sms_skipped' = напоминание не отправлено и
отправлено не будет. next_notification_check_at очищается: группа ничего
не ждёт, а при включении кампании накопленная очередь не рассылается.
"""
with conn.cursor() as cur:
cur.execute(
"""
UPDATE order_groups
SET notification_status = 'second_sms_skipped',
next_notification_check_at = NULL
WHERE notification_status = 'first_sms_sent'
AND second_sms_sent_at IS NULL
AND delivery_status = 'pending_confirmation'
RETURNING id
"""
)
ids = [row[0] for row in cur.fetchall()]
conn.commit()
if ids:
log.info(f"Reminders skipped (campaign disabled): {len(ids)} group(s)")
return len(ids)
# ─── Main ────────────────────────────────────────────────────────────────────
def main():
@ -701,7 +727,11 @@ def main():
f"max_attempts={settings.get('max_attempts')}")
if not settings.get("enabled", True):
log.info("Campaign disabled, exiting")
# Напоминания не ждут: если в момент отправки кампания выключена,
# ожидающие группы снимаются с очереди второй СМС в терминальный статус.
# Накопления нет — при включении кампании старые ожидания не рассылаются.
skipped = skip_pending_reminders(conn)
log.info(f"Campaign disabled, exiting (reminders skipped: {skipped})")
return
# State machine — каждый шаг быстрый, без blocking