From f9cdaec75a1b7f7b853148ab4a02e9d7fdd5f8a9 Mon Sep 17 00:00:00 2001 From: Kenik Date: Thu, 6 Aug 2026 21:45:23 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81:=20=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=20=D1=81=D0=BB=D0=B0=D0=BB=20=C2=AB=D0=BD=D0=B5=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BD=D1=8F=D0=BB=20=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=C2=BB?= =?UTF-8?q?=20=D0=BD=D0=B0=20=D0=B1=D0=B5=D1=81=D0=B5=D0=B4=D1=8B=20=D0=B8?= =?UTF-8?q?=20=D0=BF=D1=83=D1=81=D1=82=D1=8B=D0=B5=20=D1=81=D0=BE=D0=BE?= =?UTF-8?q?=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Причина случайного фолбэка «Пока не получилось определить запрос»: - бот реагировал на сообщения из бесед/групповых чатов (peer_id != from_id) и слал отправителю в ЛС фолбэк — теперь такие сообщения игнорируются (работаем только в личке); - сообщения без текста (стикер/фото/голосовое/гифка) давали text="" → фолбэк в главном меню — теперь пустые сообщения игнорируются. Тест: test_empty_message_ignored. pytest 44 passed. Co-Authored-By: Claude Opus 4.8 --- bot.py | 11 +++++++++++ tests/test_flow.py | 12 ++++++++++++ 2 files changed, 23 insertions(+) diff --git a/bot.py b/bot.py index 6e8fcee..7a5d7a0 100644 --- a/bot.py +++ b/bot.py @@ -484,6 +484,11 @@ class VKBotApplication: text_lower = text_clean.lower() attachments = attachments or [] + # Сообщения без текста (стикер/фото/голосовое/гифка/сервисное) не распознаются + # и раньше вызывали фолбэк «не понял запрос». Бот текстовый — просто игнорируем. + if not text_clean: + return + # === Экстренный выключатель бота (только супер-админ) === if self._is_super_admin(user_id): if user_id in self._favi_pending: @@ -1835,6 +1840,12 @@ class VKBotApplication: if event.type == VkBotEventType.MESSAGE_NEW: message_obj = event.obj.message user_id = message_obj["from_id"] + peer_id = message_obj.get("peer_id", user_id) + # Работаем только в личке. Сообщения из бесед/групповых чатов + # (peer_id != from_id) игнорируем — иначе бот шлёт людям в ЛС + # «не понял запрос» на каждое их сообщение в беседе. + if peer_id != user_id: + continue text = message_obj["text"] attachments = message_obj.get("attachments", []) try: diff --git a/tests/test_flow.py b/tests/test_flow.py index 1d9b862..dc55b79 100644 --- a/tests/test_flow.py +++ b/tests/test_flow.py @@ -74,6 +74,18 @@ def test_baza_records_lead_once(app): assert any("Групповой" in name for name, _ in s["by_service"]) +def test_empty_message_ignored(app): + """Пустые сообщения (стикер/фото/голосовое) не вызывают фолбэк — бот молчит.""" + u = 70060 + app._sent.clear() + app.handle_message(u, "") + app.handle_message(u, " ") + assert app._sent == [] + # обычный нераспознанный текст фолбэк всё же даёт + app.handle_message(u, "абвгдейка") + assert any("Пока не получилось" in s["msg"] for s in app._sent) + + def test_baza_question_ticket(app): """§9: клиенту и в карточку оператору уходит номер заявки (тикет).""" u = 70040