diff --git a/scripts/sms_second_campaign.py b/scripts/sms_second_campaign.py index 8180af7..043b930 100644 --- a/scripts/sms_second_campaign.py +++ b/scripts/sms_second_campaign.py @@ -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