From 5170c4fc933a7f648bd5df436e9033afce90a327 Mon Sep 17 00:00:00 2001 From: ops Date: Sun, 4 Oct 2026 14:30:35 +0000 Subject: [PATCH] =?UTF-8?q?sms-second:=20=D0=BD=D0=B5=20=D0=B6=D0=B4=D0=B0?= =?UTF-8?q?=D1=82=D1=8C=20=D0=B2=D1=82=D0=BE=D1=80=D1=83=D1=8E=20=D0=A1?= =?UTF-8?q?=D0=9C=D0=A1=20=D0=BF=D1=80=D0=B8=20=D0=B2=D1=8B=D0=BA=D0=BB?= =?UTF-8?q?=D1=8E=D1=87=D0=B5=D0=BD=D0=BD=D0=BE=D0=B9=20=D0=BA=D0=B0=D0=BC?= =?UTF-8?q?=D0=BF=D0=B0=D0=BD=D0=B8=D0=B8=20=E2=80=94=20=D1=81=D0=BD=D1=8F?= =?UTF-8?q?=D1=82=D0=B8=D0=B5=20=D0=BE=D1=87=D0=B5=D1=80=D0=B5=D0=B4=D0=B8?= =?UTF-8?q?=20=D0=B2=20second=5Fsms=5Fskipped?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/sms_second_campaign.py | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) 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