diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..9dc617d --- /dev/null +++ b/.dockerignore @@ -0,0 +1,16 @@ +.git +.gitignore +.kilo +.vscode +__pycache__/ +*.pyc +*.pyo +*.pyd +.pytest_cache/ +.venv/ +venv/ +.env +logs/ +data/ +tests/ +docs/ diff --git a/.env.example b/.env.example index 51d9377..1a36dfc 100644 --- a/.env.example +++ b/.env.example @@ -1,8 +1,8 @@ -VK_GROUP_ID=233127658 -VK_TOKEN=vk1.a.XTkUvOpbeC9ReN0WxLLynwe19Xdfr5kt4_lWcFpJINpS4O-MsQMeSxc9WWj7IqBTDDOLcpdgjGS4MdBsorXIEosmvV-iYwbExBqZaRTdtl7DcrRsYg0uW1gavDc_SBItLjoCnje7WlO5vz8i5pxXgkSuiki9vMbfYZdjYZYF8q5z7sResjJ-ZdBKS73WMCmrgQx0I22rGY0rRR7HKCeC_g -ADMIN_IDS=25076348 +VK_GROUP_ID=123456789 +VK_TOKEN=your_vk_group_token_here +ADMIN_IDS=12345678 DATA_DIR=data LEADS_FILE=data/leads.xlsx BACKUP_DIR=data/backups LOG_LEVEL=INFO -TIMEZONE=Europe/Moscow \ No newline at end of file +TIMEZONE=Europe/Moscow diff --git a/Dockerfile b/Dockerfile index 9fcc55b..f4f336f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,21 @@ FROM python:3.11-slim + +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 \ + PIP_DISABLE_PIP_VERSION_CHECK=1 \ + PIP_PROGRESS_BAR=off \ + OPENBLAS_NUM_THREADS=1 \ + OMP_NUM_THREADS=1 \ + MKL_NUM_THREADS=1 \ + NUMEXPR_NUM_THREADS=1 + WORKDIR /app -COPY requirements.txt . + +COPY requirements.txt ./ RUN pip install --no-cache-dir -r requirements.txt + COPY . . -CMD ["python", "main.py"] \ No newline at end of file + +RUN mkdir -p /app/data /app/logs + +CMD ["python", "main.py"] diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 0000000..3823661 --- /dev/null +++ b/compose.yaml @@ -0,0 +1,10 @@ +services: + bot: + build: . + container_name: vk-sales-bot + restart: unless-stopped + env_file: + - .env + volumes: + - ./data:/app/data + - ./logs:/app/logs diff --git a/config/__pycache__/phrases.cpython-311.pyc b/config/__pycache__/phrases.cpython-311.pyc index 80fe86a..f478484 100644 Binary files a/config/__pycache__/phrases.cpython-311.pyc and b/config/__pycache__/phrases.cpython-311.pyc differ diff --git a/config/phrases.py b/config/phrases.py index 238093b..aa4e8ed 100644 --- a/config/phrases.py +++ b/config/phrases.py @@ -74,6 +74,15 @@ BUTTON_YES = "✅ Да" BUTTON_NO = "❌ Нет" BUTTON_RESTART = "🔄 Начать заново" BUTTON_CONTINUE = "➡️ Продолжить" +BUTTON_REGISTER = "📝 Зарегистрироваться" + +# Сообщения для группы +MSG_REGISTER_INSTRUCTIONS = ( + "📝 Для регистрации нажмите кнопку ниже.\n\n" + "Если кнопка не работает, напишите мне в личные сообщения — " + "откройте мой профиль и отправьте любое сообщение.\n\n" + "👉 [Написать в ЛС](vk.com/im-redirect?target=st%3D{user_id})" +) # Команды CMD_START = "/start" diff --git a/data/leads.xlsx b/data/leads.xlsx index 989e6a5..090f61c 100644 Binary files a/data/leads.xlsx and b/data/leads.xlsx differ diff --git a/logs/bot.2026-05-04_13-22-21_446965.log b/logs/bot.2026-05-04_13-22-21_446965.log new file mode 100644 index 0000000..8568474 --- /dev/null +++ b/logs/bot.2026-05-04_13-22-21_446965.log @@ -0,0 +1,590 @@ +2026-05-04T13:22:21.443454+0300 | INFO | Initializing bot... +2026-05-04T13:22:21.685842+0300 | INFO | Bot started +2026-05-04T13:22:21.686877+0300 | INFO | Backup scheduler started +2026-05-04T13:23:07.722613+0300 | DEBUG | Message from 25076348 in peer 2000000002: [club233127658|@ikpro] 🔄 Начать заново +2026-05-04T13:23:07.724180+0300 | INFO | Processed message from 25076348: [club233127658|@ikpro] 🔄 Начать заново +2026-05-04T13:23:07.724696+0300 | INFO | === HANDLE: user 25076348, text='[club233127658|@ikpro] 🔄 Начать заново', current state=None === +2026-05-04T13:23:07.727877+0300 | INFO | Response to user 25076348: Пожалуйста, подтвердите согласие на обработку персональных данных (Да / Нет): +2026-05-04T13:23:11.904304+0300 | DEBUG | Message from 25076348 in peer 2000000002: да +2026-05-04T13:23:11.904304+0300 | INFO | Processed message from 25076348: да +2026-05-04T13:23:11.904840+0300 | INFO | === HANDLE: user 25076348, text='да', current state=ask_consent === +2026-05-04T13:23:11.904840+0300 | INFO | Response to user 25076348: ✅ Спасибо за согласие! Продолжим оформление заявки. +Пожалуйста, укажите вашу фамилию и имя (два слов +2026-05-04T13:23:34.586781+0300 | DEBUG | Message from 25076348 in peer 2000000002: ффф ыавпва +2026-05-04T13:23:34.586781+0300 | INFO | Processed message from 25076348: ффф ыавпва +2026-05-04T13:23:34.587312+0300 | INFO | === HANDLE: user 25076348, text='ффф ыавпва', current state=collect_fi === +2026-05-04T13:23:34.588357+0300 | INFO | Response to user 25076348: Укажите ваш возраст (целое число лет): +2026-05-04T13:23:37.967348+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12 +2026-05-04T13:23:37.967876+0300 | INFO | Processed message from 25076348: 12 +2026-05-04T13:23:37.967876+0300 | INFO | === HANDLE: user 25076348, text='12', current state=collect_age === +2026-05-04T13:23:37.967876+0300 | DEBUG | validate_age input: ''12'' +2026-05-04T13:23:37.968411+0300 | DEBUG | cleaned: '12' +2026-05-04T13:23:37.968411+0300 | DEBUG | age valid: 12 +2026-05-04T13:23:37.969451+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). +Укажите ваш возраст (целое число лет): +2026-05-04T13:36:16.863923+0300 | INFO | Initializing bot... +2026-05-04T13:36:17.084594+0300 | INFO | Bot started +2026-05-04T13:36:17.085630+0300 | INFO | Backup scheduler started +2026-05-04T13:37:06.672828+0300 | DEBUG | Message from 25076348 in peer 2000000002: Привет +2026-05-04T13:37:06.673343+0300 | INFO | Processed message from 25076348: Привет +2026-05-04T13:37:06.673343+0300 | INFO | === HANDLE: user 25076348, text='Привет', current state=None === +2026-05-04T13:37:06.673883+0300 | INFO | Response to user 25076348: Пожалуйста, подтвердите согласие на обработку персональных данных (Да / Нет): +2026-05-04T13:37:09.159946+0300 | DEBUG | Message from 25076348 in peer 2000000002: да +2026-05-04T13:37:09.159946+0300 | INFO | Processed message from 25076348: да +2026-05-04T13:37:09.160473+0300 | INFO | === HANDLE: user 25076348, text='да', current state=ask_consent === +2026-05-04T13:37:09.160473+0300 | INFO | Response to user 25076348: ✅ Спасибо за согласие! Продолжим оформление заявки. +Пожалуйста, укажите вашу фамилию и имя (два слов +2026-05-04T13:37:15.495991+0300 | DEBUG | Message from 25076348 in peer 2000000002: ааа ррр +2026-05-04T13:37:15.496513+0300 | INFO | Processed message from 25076348: ааа ррр +2026-05-04T13:37:15.497027+0300 | INFO | === HANDLE: user 25076348, text='ааа ррр', current state=collect_fi === +2026-05-04T13:37:15.497027+0300 | INFO | Response to user 25076348: Укажите ваш возраст (целое число лет): +2026-05-04T13:37:18.753724+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12 +2026-05-04T13:37:18.753724+0300 | INFO | Processed message from 25076348: 12 +2026-05-04T13:37:18.754244+0300 | INFO | === HANDLE: user 25076348, text='12', current state=collect_age === +2026-05-04T13:37:18.754244+0300 | DEBUG | validate_age input: ''12'' +2026-05-04T13:37:18.754244+0300 | DEBUG | cleaned: '12' +2026-05-04T13:37:18.754244+0300 | DEBUG | age valid: 12 +2026-05-04T13:37:18.754756+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). +Укажите ваш возраст (целое число лет): +2026-05-04T13:37:22.075536+0300 | DEBUG | Message from 25076348 in peer 2000000002: 23 +2026-05-04T13:37:22.076047+0300 | INFO | Processed message from 25076348: 23 +2026-05-04T13:37:22.076047+0300 | INFO | === HANDLE: user 25076348, text='23', current state=collect_age === +2026-05-04T13:37:22.076047+0300 | DEBUG | validate_age input: ''23'' +2026-05-04T13:37:22.076566+0300 | DEBUG | cleaned: '23' +2026-05-04T13:37:22.076566+0300 | DEBUG | age valid: 23 +2026-05-04T13:37:22.076566+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). +Укажите ваш возраст (целое число лет): +2026-05-04T14:09:25.567877+0300 | INFO | Initializing bot... +2026-05-04T14:09:25.744659+0300 | INFO | Bot started +2026-05-04T14:09:25.745178+0300 | INFO | Backup scheduler started +2026-05-04T14:09:34.624213+0300 | DEBUG | Message from 25076348 in peer 2000000002: Привет +2026-05-04T14:09:34.624213+0300 | INFO | Processed message from 25076348: Привет +2026-05-04T14:09:34.624213+0300 | INFO | === HANDLE: user 25076348, text='Привет', current state=None === +2026-05-04T14:09:34.624740+0300 | INFO | Response to user 25076348: Пожалуйста, подтвердите согласие на обработку персональных данных (Да / Нет): +2026-05-04T14:09:36.950764+0300 | DEBUG | Message from 25076348 in peer 2000000002: да +2026-05-04T14:09:36.950764+0300 | INFO | Processed message from 25076348: да +2026-05-04T14:09:36.951300+0300 | INFO | === HANDLE: user 25076348, text='да', current state=ask_consent === +2026-05-04T14:09:36.951300+0300 | INFO | Response to user 25076348: ✅ Спасибо за согласие! Продолжим оформление заявки. +Пожалуйста, укажите вашу фамилию и имя (два слов +2026-05-04T14:09:45.685252+0300 | DEBUG | Message from 25076348 in peer 2000000002: вав авп +2026-05-04T14:09:45.685252+0300 | INFO | Processed message from 25076348: вав авп +2026-05-04T14:09:45.685252+0300 | INFO | === HANDLE: user 25076348, text='вав авп', current state=collect_fi === +2026-05-04T14:09:45.685773+0300 | INFO | Response to user 25076348: Укажите ваш возраст (целое число лет): +2026-05-04T14:09:49.196572+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12 +2026-05-04T14:09:49.197077+0300 | INFO | Processed message from 25076348: 12 +2026-05-04T14:09:49.197077+0300 | INFO | === HANDLE: user 25076348, text='12', current state=collect_age === +2026-05-04T14:09:49.197077+0300 | DEBUG | validate_age input: ''12'' +2026-05-04T14:09:49.197077+0300 | DEBUG | cleaned: '12' +2026-05-04T14:09:49.197077+0300 | DEBUG | age valid: 12 +2026-05-04T14:09:49.197077+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). +Укажите ваш возраст (целое число лет): +2026-05-04T14:09:53.320692+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12лет +2026-05-04T14:09:53.320692+0300 | INFO | Processed message from 25076348: 12лет +2026-05-04T14:09:53.320692+0300 | INFO | === HANDLE: user 25076348, text='12лет', current state=collect_age === +2026-05-04T14:09:53.321204+0300 | DEBUG | validate_age input: ''12лет'' +2026-05-04T14:09:53.321204+0300 | DEBUG | cleaned: '12' +2026-05-04T14:09:53.321204+0300 | DEBUG | age valid: 12 +2026-05-04T14:09:53.321724+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). +Укажите ваш возраст (целое число лет): +2026-05-04T14:10:19.043522+0300 | DEBUG | Message from 25076348 in peer 2000000002: 13 +2026-05-04T14:10:19.043522+0300 | INFO | Processed message from 25076348: 13 +2026-05-04T14:10:19.043522+0300 | INFO | === HANDLE: user 25076348, text='13', current state=collect_age === +2026-05-04T14:10:19.044052+0300 | DEBUG | validate_age input: ''13'' +2026-05-04T14:10:19.044052+0300 | DEBUG | cleaned: '13' +2026-05-04T14:10:19.044052+0300 | DEBUG | age valid: 13 +2026-05-04T14:10:19.044052+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). +Укажите ваш возраст (целое число лет): +2026-05-04T14:10:22.029805+0300 | DEBUG | Message from 25076348 in peer 2000000002: 18 +2026-05-04T14:10:22.029805+0300 | INFO | Processed message from 25076348: 18 +2026-05-04T14:10:22.029805+0300 | INFO | === HANDLE: user 25076348, text='18', current state=collect_age === +2026-05-04T14:10:22.030324+0300 | DEBUG | validate_age input: ''18'' +2026-05-04T14:10:22.030324+0300 | DEBUG | cleaned: '18' +2026-05-04T14:10:22.030324+0300 | DEBUG | age valid: 18 +2026-05-04T14:10:22.030324+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). +Укажите ваш возраст (целое число лет): +2026-05-04T14:52:44.897174+0300 | INFO | Initializing bot... +2026-05-04T14:52:45.151496+0300 | INFO | Bot started +2026-05-04T14:52:45.152530+0300 | INFO | Backup scheduler started +2026-05-04T14:53:41.300176+0300 | DEBUG | Message from 25076348 in peer 2000000002: привет +2026-05-04T14:53:41.302249+0300 | INFO | Processed message from 25076348: привет +2026-05-04T14:53:41.302249+0300 | INFO | === HANDLE: user 25076348, text='привет', current state=None === +2026-05-04T14:53:41.306431+0300 | INFO | Response to user 25076348: Пожалуйста, подтвердите согласие на обработку персональных данных (Да / Нет): +2026-05-04T14:53:43.736066+0300 | DEBUG | Message from 25076348 in peer 2000000002: да +2026-05-04T14:53:43.736066+0300 | INFO | Processed message from 25076348: да +2026-05-04T14:53:43.736066+0300 | INFO | === HANDLE: user 25076348, text='да', current state=ask_consent === +2026-05-04T14:53:43.736606+0300 | INFO | Response to user 25076348: ✅ Спасибо за согласие! Продолжим оформление заявки. +Пожалуйста, укажите вашу фамилию и имя (два слов +2026-05-04T14:53:49.142783+0300 | DEBUG | Message from 25076348 in peer 2000000002: ппп ррр +2026-05-04T14:53:49.142783+0300 | INFO | Processed message from 25076348: ппп ррр +2026-05-04T14:53:49.143321+0300 | INFO | === HANDLE: user 25076348, text='ппп ррр', current state=collect_fi === +2026-05-04T14:53:49.152638+0300 | INFO | Response to user 25076348: Укажите ваш возраст (целое число лет): +2026-05-04T14:53:51.561650+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12 +2026-05-04T14:53:51.561650+0300 | INFO | Processed message from 25076348: 12 +2026-05-04T14:53:51.562169+0300 | INFO | === HANDLE: user 25076348, text='12', current state=collect_age === +2026-05-04T14:53:51.562169+0300 | DEBUG | validate_age input: ''12'' +2026-05-04T14:53:51.562169+0300 | DEBUG | cleaned: '12' +2026-05-04T14:53:51.562710+0300 | DEBUG | age valid: 12 +2026-05-04T14:53:51.563228+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). +Укажите ваш возраст (целое число лет): +2026-05-04T14:53:57.436097+0300 | DEBUG | Message from 25076348 in peer 2000000002: 13 +2026-05-04T14:53:57.436097+0300 | INFO | Processed message from 25076348: 13 +2026-05-04T14:53:57.436624+0300 | INFO | === HANDLE: user 25076348, text='13', current state=collect_age === +2026-05-04T14:53:57.436624+0300 | DEBUG | validate_age input: ''13'' +2026-05-04T14:53:57.436624+0300 | DEBUG | cleaned: '13' +2026-05-04T14:53:57.436624+0300 | DEBUG | age valid: 13 +2026-05-04T14:53:57.437143+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). +Укажите ваш возраст (целое число лет): +2026-05-04T14:54:17.932582+0300 | ERROR | Fatal error: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')) +Traceback (most recent call last): + + File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen + response = self._make_request( + │ └ + └ + File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connectionpool.py", line 534, in _make_request + response = conn.getresponse() + │ └ + └ + File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connection.py", line 571, in getresponse + httplib_response = super().getresponse() + File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 1374, in getresponse + response.begin() + │ └ + └ + File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 318, in begin + version, status, reason = self._read_status() + │ └ + └ + File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 287, in _read_status + raise RemoteDisconnected("Remote end closed connection without" + └ + +http.client.RemoteDisconnected: Remote end closed connection without response + + +During handling of the above exception, another exception occurred: + + +Traceback (most recent call last): + + File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\adapters.py", line 645, in send + resp = conn.urlopen( + │ └ + └ + File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connectionpool.py", line 841, in urlopen + retries = retries.increment( + │ └ + └ Retry(total=0, connect=None, read=False, redirect=None, status=None) + File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\util\retry.py", line 490, in increment + raise reraise(type(error), error, _stacktrace) + │ │ │ └ + │ │ └ ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')) + │ └ ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')) + └ + File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\util\util.py", line 38, in reraise + raise value.with_traceback(tb) + │ └ None + └ None + File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen + response = self._make_request( + │ └ + └ + File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connectionpool.py", line 534, in _make_request + response = conn.getresponse() + │ └ + └ + File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connection.py", line 571, in getresponse + httplib_response = super().getresponse() + File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 1374, in getresponse + response.begin() + │ └ + └ + File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 318, in begin + version, status, reason = self._read_status() + │ └ + └ + File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 287, in _read_status + raise RemoteDisconnected("Remote end closed connection without" + └ + +urllib3.exceptions.ProtocolError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')) + + +During handling of the above exception, another exception occurred: + + +Traceback (most recent call last): + + File "m:\bot_vk_ikp\vk-sales-bot\main.py", line 28, in + main() + └ + +> File "m:\bot_vk_ikp\vk-sales-bot\main.py", line 20, in main + bot.run() + │ └ + └ + + File "m:\bot_vk_ikp\vk-sales-bot\services\vk_bot.py", line 90, in run + for event in self.longpoll.listen(): + │ │ │ └ + │ │ └ + │ └ + └ <({'group_id': 233127658, 'type': 'message_new', 'event_id': 'a8c630d5264c1fc3... + + File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\vk_api\bot_longpoll.py", line 286, in listen + for event in self.check(): + │ │ └ + │ └ + └ <({'group_id': 233127658, 'type': 'message_new', 'event_id': 'a8c630d5264c1fc3... + File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\vk_api\bot_longpoll.py", line 255, in check + response = self.session.get( + │ └ + └ + File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\sessions.py", line 605, in get + return self.request("GET", url, **kwargs) + │ │ │ └ {'params': {'act': 'a_check', 'key': 'eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJxdWV1ZV9pZCI6IjIzMzEyNzY1OCIsInVudGlsIjoxNzc3OD... + │ │ └ 'https://lp.vk.com/whp/233127658' + │ └ + └ + File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\sessions.py", line 592, in request + resp = self.send(prep, **send_kwargs) + │ │ │ └ {'timeout': 35, 'allow_redirects': True, 'proxies': OrderedDict(), 'stream': False, 'verify': True, 'cert': None} + │ │ └ + │ └ + └ + File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\sessions.py", line 706, in send + r = adapter.send(request, **kwargs) + │ │ │ └ {'timeout': 35, 'proxies': OrderedDict(), 'stream': False, 'verify': True, 'cert': None} + │ │ └ + │ └ + └ + File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\adapters.py", line 660, in send + raise ConnectionError(err, request=request) + │ └ + └ + +requests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')) +2026-05-04T15:32:36.840163+0300 | INFO | Initializing bot... +2026-05-04T15:32:37.085881+0300 | INFO | Bot started +2026-05-04T15:32:37.086882+0300 | INFO | Backup scheduler started +2026-05-04T15:32:43.889888+0300 | DEBUG | Message from 25076348 in peer 2000000002: привет +2026-05-04T15:32:43.891134+0300 | INFO | Processed message from 25076348: привет +2026-05-04T15:32:43.891134+0300 | INFO | === HANDLE: user 25076348, text='привет', current state=None === +2026-05-04T15:32:43.894134+0300 | INFO | Response to user 25076348: Пожалуйста, подтвердите согласие на обработку персональных данных (Да / Нет): +2026-05-04T15:32:47.508547+0300 | DEBUG | Message from 25076348 in peer 2000000002: да +2026-05-04T15:32:47.508547+0300 | INFO | Processed message from 25076348: да +2026-05-04T15:32:47.508547+0300 | INFO | === HANDLE: user 25076348, text='да', current state=ask_consent === +2026-05-04T15:32:47.508547+0300 | INFO | Response to user 25076348: ✅ Спасибо за согласие! Продолжим оформление заявки. +Пожалуйста, укажите вашу фамилию и имя (два слов +2026-05-04T15:32:55.451299+0300 | DEBUG | Message from 25076348 in peer 2000000002: ааа ппп +2026-05-04T15:32:55.451299+0300 | INFO | Processed message from 25076348: ааа ппп +2026-05-04T15:32:55.451299+0300 | INFO | === HANDLE: user 25076348, text='ааа ппп', current state=collect_fi === +2026-05-04T15:32:55.453302+0300 | INFO | Response to user 25076348: Укажите ваш возраст (целое число лет): +2026-05-04T15:32:59.095014+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12 +2026-05-04T15:32:59.095014+0300 | INFO | Processed message from 25076348: 12 +2026-05-04T15:32:59.095014+0300 | INFO | === HANDLE: user 25076348, text='12', current state=collect_age === +2026-05-04T15:32:59.095014+0300 | DEBUG | validate_age input: ''12'' +2026-05-04T15:32:59.096013+0300 | DEBUG | cleaned: '12' +2026-05-04T15:32:59.096013+0300 | DEBUG | age valid: 12 +2026-05-04T15:32:59.098012+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). +Укажите ваш возраст (целое число лет): +2026-05-04T15:33:02.913004+0300 | DEBUG | Message from 25076348 in peer 2000000002: 23 +2026-05-04T15:33:02.914007+0300 | INFO | Processed message from 25076348: 23 +2026-05-04T15:33:02.914007+0300 | INFO | === HANDLE: user 25076348, text='23', current state=collect_age === +2026-05-04T15:33:02.914007+0300 | DEBUG | validate_age input: ''23'' +2026-05-04T15:33:02.914007+0300 | DEBUG | cleaned: '23' +2026-05-04T15:33:02.914007+0300 | DEBUG | age valid: 23 +2026-05-04T15:33:02.915005+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). +Укажите ваш возраст (целое число лет): +2026-05-04T18:09:52.845335+0300 | INFO | Initializing bot... +2026-05-04T18:09:53.046373+0300 | INFO | Bot started +2026-05-04T18:09:53.047373+0300 | INFO | Backup scheduler started +2026-05-04T18:10:10.241270+0300 | DEBUG | Message from 25076348 in peer 2000000002: привет +2026-05-04T18:10:10.242269+0300 | INFO | Processed message from 25076348: привет +2026-05-04T18:10:10.242269+0300 | INFO | === HANDLE: user 25076348, text='привет', current state=None === +2026-05-04T18:10:10.245270+0300 | INFO | Response to user 25076348: Пожалуйста, подтвердите согласие на обработку персональных данных (Да / Нет): +2026-05-04T18:10:13.272789+0300 | DEBUG | Message from 25076348 in peer 2000000002: да +2026-05-04T18:10:13.273787+0300 | INFO | Processed message from 25076348: да +2026-05-04T18:10:13.273787+0300 | INFO | === HANDLE: user 25076348, text='да', current state=ask_consent === +2026-05-04T18:10:13.273787+0300 | INFO | Response to user 25076348: ✅ Спасибо за согласие! Продолжим оформление заявки. +Пожалуйста, укажите вашу фамилию и имя (два слов +2026-05-04T18:10:18.694847+0300 | DEBUG | Message from 25076348 in peer 2000000002: аа рп +2026-05-04T18:10:18.694847+0300 | INFO | Processed message from 25076348: аа рп +2026-05-04T18:10:18.694847+0300 | INFO | === HANDLE: user 25076348, text='аа рп', current state=collect_fi === +2026-05-04T18:10:18.696350+0300 | INFO | Response to user 25076348: Укажите ваш возраст (целое число лет): +2026-05-04T18:10:21.671256+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12 +2026-05-04T18:10:21.671256+0300 | INFO | Processed message from 25076348: 12 +2026-05-04T18:10:21.672255+0300 | INFO | === HANDLE: user 25076348, text='12', current state=collect_age === +2026-05-04T18:10:21.672255+0300 | DEBUG | validate_age input: ''12'' +2026-05-04T18:10:21.672255+0300 | DEBUG | cleaned: '12' +2026-05-04T18:10:21.672255+0300 | DEBUG | age valid: 12 +2026-05-04T18:10:21.672255+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). +Укажите ваш возраст (целое число лет): +2026-05-04T18:12:55.999161+0300 | INFO | Initializing bot... +2026-05-04T18:12:56.620865+0300 | INFO | Bot started +2026-05-04T18:12:56.620865+0300 | INFO | Backup scheduler started +2026-05-04T18:13:16.401304+0300 | DEBUG | Message from 25076348 in peer 2000000002: 5 +2026-05-04T18:13:16.402310+0300 | INFO | Processed message from 25076348: 5 +2026-05-04T18:13:16.402310+0300 | INFO | === HANDLE: user 25076348, text='5', current state=None === +2026-05-04T18:13:16.402310+0300 | INFO | Response to user 25076348: Пожалуйста, подтвердите согласие на обработку персональных данных (Да / Нет): +2026-05-04T18:13:19.498303+0300 | DEBUG | Message from 25076348 in peer 2000000002: всыв +2026-05-04T18:13:19.498303+0300 | INFO | Processed message from 25076348: всыв +2026-05-04T18:13:19.498303+0300 | INFO | === HANDLE: user 25076348, text='всыв', current state=ask_consent === +2026-05-04T18:13:19.498303+0300 | INFO | Response to user 25076348: Пожалуйста, ответьте 'Да' (согласен) или 'Нет' (не согласен). +2026-05-04T18:13:22.869492+0300 | DEBUG | Message from 25076348 in peer 2000000002: да +2026-05-04T18:13:22.869492+0300 | INFO | Processed message from 25076348: да +2026-05-04T18:13:22.870492+0300 | INFO | === HANDLE: user 25076348, text='да', current state=ask_consent === +2026-05-04T18:13:22.870492+0300 | INFO | Response to user 25076348: ✅ Спасибо за согласие! Продолжим оформление заявки. +Пожалуйста, укажите вашу фамилию и имя (два слов +2026-05-04T18:13:30.113454+0300 | DEBUG | Message from 25076348 in peer 2000000002: пав пав +2026-05-04T18:13:30.113454+0300 | INFO | Processed message from 25076348: пав пав +2026-05-04T18:13:30.113454+0300 | INFO | === HANDLE: user 25076348, text='пав пав', current state=collect_fi === +2026-05-04T18:13:30.114454+0300 | INFO | Response to user 25076348: Укажите ваш возраст (целое число лет): +2026-05-04T18:13:32.914351+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12 +2026-05-04T18:13:32.915351+0300 | INFO | Processed message from 25076348: 12 +2026-05-04T18:13:32.915351+0300 | INFO | === HANDLE: user 25076348, text='12', current state=collect_age === +2026-05-04T18:13:32.915351+0300 | DEBUG | validate_age input: ''12'' +2026-05-04T18:13:32.915351+0300 | DEBUG | cleaned: '12' +2026-05-04T18:13:32.915351+0300 | DEBUG | age valid: 12 +2026-05-04T18:13:32.915351+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). +Укажите ваш возраст (целое число лет): +2026-05-04T18:13:36.111171+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12 +2026-05-04T18:13:36.111171+0300 | INFO | Processed message from 25076348: 12 +2026-05-04T18:13:36.111171+0300 | INFO | === HANDLE: user 25076348, text='12', current state=collect_age === +2026-05-04T18:13:36.112171+0300 | DEBUG | validate_age input: ''12'' +2026-05-04T18:13:36.112171+0300 | DEBUG | cleaned: '12' +2026-05-04T18:13:36.112171+0300 | DEBUG | age valid: 12 +2026-05-04T18:13:36.112171+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). +Укажите ваш возраст (целое число лет): +2026-05-04T18:13:43.488167+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12лет +2026-05-04T18:13:43.488167+0300 | INFO | Processed message from 25076348: 12лет +2026-05-04T18:13:43.488167+0300 | INFO | === HANDLE: user 25076348, text='12лет', current state=collect_age === +2026-05-04T18:13:43.489166+0300 | DEBUG | validate_age input: ''12лет'' +2026-05-04T18:13:43.489166+0300 | DEBUG | cleaned: '12' +2026-05-04T18:13:43.489166+0300 | DEBUG | age valid: 12 +2026-05-04T18:13:43.489166+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). +Укажите ваш возраст (целое число лет): +2026-05-04T18:13:48.007000+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12 лет +2026-05-04T18:13:48.007000+0300 | INFO | Processed message from 25076348: 12 лет +2026-05-04T18:13:48.007000+0300 | INFO | === HANDLE: user 25076348, text='12 лет', current state=collect_age === +2026-05-04T18:13:48.008153+0300 | DEBUG | validate_age input: ''12 лет'' +2026-05-04T18:13:48.008153+0300 | DEBUG | cleaned: '12' +2026-05-04T18:13:48.008153+0300 | DEBUG | age valid: 12 +2026-05-04T18:13:48.008153+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). +Укажите ваш возраст (целое число лет): +2026-05-04T18:13:51.898194+0300 | DEBUG | Message from 25076348 in peer 2000000002: 1 +2026-05-04T18:13:51.898194+0300 | INFO | Processed message from 25076348: 1 +2026-05-04T18:13:51.899194+0300 | INFO | === HANDLE: user 25076348, text='1', current state=collect_age === +2026-05-04T18:13:51.899194+0300 | DEBUG | validate_age input: ''1'' +2026-05-04T18:13:51.899194+0300 | DEBUG | cleaned: '1' +2026-05-04T18:13:51.899194+0300 | DEBUG | age valid: 1 +2026-05-04T18:13:51.899194+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). +Укажите ваш возраст (целое число лет): +2026-05-04T18:13:55.621492+0300 | DEBUG | Message from 25076348 in peer 2000000002: 120 +2026-05-04T18:13:55.622492+0300 | INFO | Processed message from 25076348: 120 +2026-05-04T18:13:55.622492+0300 | INFO | === HANDLE: user 25076348, text='120', current state=collect_age === +2026-05-04T18:13:55.622492+0300 | DEBUG | validate_age input: ''120'' +2026-05-04T18:13:55.622492+0300 | DEBUG | cleaned: '120' +2026-05-04T18:13:55.622492+0300 | DEBUG | age valid: 120 +2026-05-04T18:13:55.622492+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). +Укажите ваш возраст (целое число лет): +2026-05-04T18:14:00.545873+0300 | DEBUG | Message from 25076348 in peer 2000000002: 158 +2026-05-04T18:14:00.545873+0300 | INFO | Processed message from 25076348: 158 +2026-05-04T18:14:00.545873+0300 | INFO | === HANDLE: user 25076348, text='158', current state=collect_age === +2026-05-04T18:14:00.545873+0300 | DEBUG | validate_age input: ''158'' +2026-05-04T18:14:00.545873+0300 | DEBUG | cleaned: '158' +2026-05-04T18:14:00.546870+0300 | INFO | Response to user 25076348: Возраст должен быть от 1 до 120 лет. +Укажите ваш возраст (целое число лет): +2026-05-04T18:14:29.195477+0300 | DEBUG | Message from 25076348 in peer 2000000002: 11 +2026-05-04T18:14:29.195477+0300 | INFO | Processed message from 25076348: 11 +2026-05-04T18:14:29.196478+0300 | INFO | === HANDLE: user 25076348, text='11', current state=collect_age === +2026-05-04T18:14:29.196478+0300 | DEBUG | validate_age input: ''11'' +2026-05-04T18:14:29.196478+0300 | DEBUG | cleaned: '11' +2026-05-04T18:14:29.196478+0300 | DEBUG | age valid: 11 +2026-05-04T18:14:29.196478+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). +Укажите ваш возраст (целое число лет): +2026-05-04T21:42:30.942354+0300 | INFO | Initializing bot... +2026-05-04T21:42:31.199461+0300 | INFO | Bot started +2026-05-04T21:42:31.200460+0300 | INFO | Backup scheduler started +2026-05-04T21:43:03.630075+0300 | INFO | Initializing bot... +2026-05-04T21:43:04.103937+0300 | INFO | Bot started +2026-05-04T21:43:04.104937+0300 | INFO | Backup scheduler started +2026-05-04T21:43:32.010181+0300 | DEBUG | Message from 25076348 in peer 2000000002: привет +2026-05-04T21:43:32.012181+0300 | INFO | Processed message from 25076348: привет +2026-05-04T21:43:32.012181+0300 | INFO | === HANDLE: user 25076348, text='привет', current state=None === +2026-05-04T21:43:32.015181+0300 | INFO | Response to user 25076348: Пожалуйста, подтвердите согласие на обработку персональных данных (Да / Нет): +2026-05-04T21:43:34.178176+0300 | DEBUG | Message from 25076348 in peer 2000000002: да +2026-05-04T21:43:34.178176+0300 | INFO | Processed message from 25076348: да +2026-05-04T21:43:34.178176+0300 | INFO | === HANDLE: user 25076348, text='да', current state=ask_consent === +2026-05-04T21:43:34.178176+0300 | INFO | Response to user 25076348: ✅ Спасибо за согласие! Продолжим оформление заявки. +Пожалуйста, укажите вашу фамилию и имя (два слов +2026-05-04T21:43:40.704112+0300 | DEBUG | Message from 25076348 in peer 2000000002: ааа ппп +2026-05-04T21:43:40.704112+0300 | INFO | Processed message from 25076348: ааа ппп +2026-05-04T21:43:40.704112+0300 | INFO | === HANDLE: user 25076348, text='ааа ппп', current state=collect_fi === +2026-05-04T21:43:40.706111+0300 | INFO | Response to user 25076348: Укажите ваш возраст (целое число лет): +2026-05-04T21:43:43.405452+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12 +2026-05-04T21:43:43.405452+0300 | INFO | Processed message from 25076348: 12 +2026-05-04T21:43:43.406451+0300 | INFO | === HANDLE: user 25076348, text='12', current state=collect_age === +2026-05-04T21:43:43.406451+0300 | DEBUG | validate_age input: ''12'' +2026-05-04T21:43:43.406451+0300 | DEBUG | cleaned: '12' +2026-05-04T21:43:43.406451+0300 | DEBUG | age valid: 12 +2026-05-04T21:43:43.407452+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). +Укажите ваш возраст (целое число лет): +2026-05-04T21:43:53.242075+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12 +2026-05-04T21:43:53.243076+0300 | INFO | Processed message from 25076348: 12 +2026-05-04T21:43:53.243076+0300 | INFO | === HANDLE: user 25076348, text='12', current state=collect_age === +2026-05-04T21:43:53.243076+0300 | DEBUG | validate_age input: ''12'' +2026-05-04T21:43:53.243076+0300 | DEBUG | cleaned: '12' +2026-05-04T21:43:53.243076+0300 | DEBUG | age valid: 12 +2026-05-04T21:43:53.243076+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). +Укажите ваш возраст (целое число лет): +2026-05-04T21:44:00.659922+0300 | DEBUG | Message from 25076348 in peer 2000000002: "12" +2026-05-04T21:44:00.659922+0300 | INFO | Processed message from 25076348: "12" +2026-05-04T21:44:00.659922+0300 | INFO | === HANDLE: user 25076348, text='"12"', current state=collect_age === +2026-05-04T21:44:00.659922+0300 | DEBUG | validate_age input: ''"12"'' +2026-05-04T21:44:00.659922+0300 | DEBUG | cleaned: '12' +2026-05-04T21:44:00.660921+0300 | DEBUG | age valid: 12 +2026-05-04T21:44:00.660921+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). +Укажите ваш возраст (целое число лет): +2026-05-05T07:00:09.347195+0300 | INFO | Initializing bot... +2026-05-05T07:00:09.569224+0300 | INFO | Bot started +2026-05-05T07:00:09.570223+0300 | INFO | Backup scheduler started +2026-05-05T07:00:20.263695+0300 | INFO | Initializing bot... +2026-05-05T07:00:20.447752+0300 | INFO | Bot started +2026-05-05T07:00:20.447752+0300 | INFO | Backup scheduler started +2026-05-05T07:00:51.798725+0300 | DEBUG | Message from 25076348 in peer 2000000002: привет +2026-05-05T07:00:51.798725+0300 | INFO | Processed message from 25076348: привет +2026-05-05T07:00:51.798725+0300 | INFO | === HANDLE: user 25076348, text='привет', current state=None === +2026-05-05T07:00:51.799725+0300 | INFO | Response to user 25076348: Пожалуйста, подтвердите согласие на обработку персональных данных (Да / Нет): +2026-05-05T07:00:55.300865+0300 | DEBUG | Message from 25076348 in peer 2000000002: да +2026-05-05T07:00:55.300865+0300 | INFO | Processed message from 25076348: да +2026-05-05T07:00:55.301864+0300 | INFO | === HANDLE: user 25076348, text='да', current state=ask_consent === +2026-05-05T07:00:55.301864+0300 | INFO | Response to user 25076348: ✅ Спасибо за согласие! Продолжим оформление заявки. +Пожалуйста, укажите вашу фамилию и имя (два слов +2026-05-05T07:01:00.589119+0300 | DEBUG | Message from 25076348 in peer 2000000002: ааа ппп +2026-05-05T07:01:00.589119+0300 | INFO | Processed message from 25076348: ааа ппп +2026-05-05T07:01:00.590119+0300 | INFO | === HANDLE: user 25076348, text='ааа ппп', current state=collect_fi === +2026-05-05T07:01:00.590119+0300 | INFO | Response to user 25076348: Укажите ваш возраст (целое число лет): +2026-05-05T07:01:03.015859+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12 +2026-05-05T07:01:03.015859+0300 | INFO | Processed message from 25076348: 12 +2026-05-05T07:01:03.015859+0300 | INFO | === HANDLE: user 25076348, text='12', current state=collect_age === +2026-05-05T07:01:03.016362+0300 | DEBUG | validate_age input: ''12'' +2026-05-05T07:01:03.016362+0300 | DEBUG | cleaned: '12' +2026-05-05T07:01:03.016362+0300 | DEBUG | age valid: 12 +2026-05-05T07:01:03.016362+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). +Укажите ваш возраст (целое число лет): +2026-05-05T07:01:04.461068+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12 +2026-05-05T07:01:04.461068+0300 | INFO | Processed message from 25076348: 12 +2026-05-05T07:01:04.461068+0300 | INFO | === HANDLE: user 25076348, text='12', current state=collect_age === +2026-05-05T07:01:04.461068+0300 | DEBUG | validate_age input: ''12'' +2026-05-05T07:01:04.462069+0300 | DEBUG | cleaned: '12' +2026-05-05T07:01:04.462069+0300 | DEBUG | age valid: 12 +2026-05-05T07:01:04.462069+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). +Укажите ваш возраст (целое число лет): +2026-05-05T07:01:06.186293+0300 | DEBUG | Message from 25076348 in peer 2000000002: 31 +2026-05-05T07:01:06.186798+0300 | INFO | Processed message from 25076348: 31 +2026-05-05T07:01:06.186798+0300 | INFO | === HANDLE: user 25076348, text='31', current state=collect_age === +2026-05-05T07:01:06.186798+0300 | DEBUG | validate_age input: ''31'' +2026-05-05T07:01:06.186798+0300 | DEBUG | cleaned: '31' +2026-05-05T07:01:06.186798+0300 | DEBUG | age valid: 31 +2026-05-05T07:01:06.187799+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). +Укажите ваш возраст (целое число лет): +2026-05-05T07:01:08.344400+0300 | DEBUG | Message from 25076348 in peer 2000000002: 41 +2026-05-05T07:01:08.344400+0300 | INFO | Processed message from 25076348: 41 +2026-05-05T07:01:08.344400+0300 | INFO | === HANDLE: user 25076348, text='41', current state=collect_age === +2026-05-05T07:01:08.344400+0300 | DEBUG | validate_age input: ''41'' +2026-05-05T07:01:08.344400+0300 | DEBUG | cleaned: '41' +2026-05-05T07:01:08.344400+0300 | DEBUG | age valid: 41 +2026-05-05T07:01:08.345902+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). +Укажите ваш возраст (целое число лет): +2026-05-05T08:33:06.946148+0300 | INFO | Initializing bot... +2026-05-05T08:33:07.210217+0300 | INFO | Bot started +2026-05-05T08:33:07.211222+0300 | INFO | Backup scheduler started +2026-05-05T08:33:29.318049+0300 | DEBUG | Message from 25076348 in peer 2000000002: авсыв +2026-05-05T08:33:29.319049+0300 | INFO | Processed message from 25076348: авсыв +2026-05-05T08:33:29.319049+0300 | INFO | === HANDLE: user 25076348, text='авсыв', current state=None === +2026-05-05T08:33:29.321050+0300 | INFO | Response to user 25076348: Пожалуйста, подтвердите согласие на обработку персональных данных (Да / Нет): +2026-05-05T08:33:34.372307+0300 | DEBUG | Message from 25076348 in peer 2000000002: да +2026-05-05T08:33:34.372307+0300 | INFO | Processed message from 25076348: да +2026-05-05T08:33:34.372307+0300 | INFO | === HANDLE: user 25076348, text='да', current state=ask_consent === +2026-05-05T08:33:34.372307+0300 | INFO | Response to user 25076348: ✅ Спасибо за согласие! Продолжим оформление заявки. +Пожалуйста, укажите вашу фамилию и имя (два слов +2026-05-05T08:33:39.200486+0300 | DEBUG | Message from 25076348 in peer 2000000002: аваыв павпва +2026-05-05T08:33:39.200486+0300 | INFO | Processed message from 25076348: аваыв павпва +2026-05-05T08:33:39.200486+0300 | INFO | === HANDLE: user 25076348, text='аваыв павпва', current state=collect_fi === +2026-05-05T08:33:39.201486+0300 | INFO | Response to user 25076348: 👪 Укажите, пожалуйста, контактные данные родителя или опекуна. Вы можете предоставить их сейчас или +2026-05-05T08:34:08.120612+0300 | DEBUG | Message from 25076348 in peer 2000000002: пропустить +2026-05-05T08:34:08.121613+0300 | INFO | Processed message from 25076348: пропустить +2026-05-05T08:34:08.121613+0300 | INFO | === HANDLE: user 25076348, text='пропустить', current state=ask_parent_data === +2026-05-05T08:34:08.121613+0300 | INFO | Parent data skipped for user 25076348 +2026-05-05T08:34:08.121613+0300 | INFO | Response to user 25076348: ✅ Данные родителя пропущены. Продолжаем оформление. +Отлично! Теперь укажите ваш номер телефона в фор +2026-05-05T08:34:34.619625+0300 | DEBUG | Message from 25076348 in peer 2000000002: +7(900)000-00-00 +2026-05-05T08:34:34.619625+0300 | INFO | Processed message from 25076348: +7(900)000-00-00 +2026-05-05T08:34:34.619625+0300 | INFO | === HANDLE: user 25076348, text='+7(900)000-00-00', current state=collect_phone === +2026-05-05T08:34:34.619625+0300 | INFO | Response to user 25076348: Укажите удобное время по МСК для звонка (например: 'завтра после 18', 'в среду утром', 'сегодня в 15 +2026-05-05T08:34:52.867495+0300 | DEBUG | Message from 25076348 in peer 2000000002: сегодня в 15:00 +2026-05-05T08:34:52.867495+0300 | INFO | Processed message from 25076348: сегодня в 15:00 +2026-05-05T08:34:52.867495+0300 | INFO | === HANDLE: user 25076348, text='сегодня в 15:00', current state=collect_time === +2026-05-05T08:34:54.349050+0300 | INFO | Response to user 25076348: Проверьте данные: +ФИ: аваыв павпва +Телефон: +7 (900) 000-00-00 +Время звонка по МСК: 05.05.2026 в 15: +2026-05-05T08:34:58.958675+0300 | DEBUG | Message from 25076348 in peer 2000000002: да +2026-05-05T08:34:58.958675+0300 | INFO | Processed message from 25076348: да +2026-05-05T08:34:58.958675+0300 | INFO | === HANDLE: user 25076348, text='да', current state=collect_time === +2026-05-05T08:34:59.533476+0300 | INFO | Response to user 25076348: Не удалось распознать время. Укажите, например: 'завтра после 18', 'в среду утром' или 'любое время' +2026-05-05T08:35:39.028252+0300 | DEBUG | Message from 25076348 in peer 2000000002: сегодня в 15:00 +2026-05-05T08:35:39.028252+0300 | INFO | Processed message from 25076348: сегодня в 15:00 +2026-05-05T08:35:39.028252+0300 | INFO | === HANDLE: user 25076348, text='сегодня в 15:00', current state=collect_time === +2026-05-05T08:35:39.030760+0300 | INFO | Response to user 25076348: Проверьте данные: +ФИ: аваыв павпва +Телефон: +7 (900) 000-00-00 +Время звонка по МСК: 05.05.2026 в 15: +2026-05-05T08:35:46.969686+0300 | DEBUG | Message from 25076348 in peer 2000000002: Да +2026-05-05T08:35:46.969686+0300 | INFO | Processed message from 25076348: Да +2026-05-05T08:35:46.970686+0300 | INFO | === HANDLE: user 25076348, text='Да', current state=collect_time === +2026-05-05T08:35:46.974190+0300 | INFO | Response to user 25076348: Не удалось распознать время. Укажите, например: 'завтра после 18', 'в среду утром' или 'любое время' +2026-05-05T09:07:22.565746+0300 | INFO | Initializing bot... +2026-05-05T09:07:22.797990+0300 | INFO | Bot started +2026-05-05T09:07:22.798991+0300 | INFO | Backup scheduler started +2026-05-05T09:07:25.017845+0300 | DEBUG | Message from 25076348 in peer 2000000002: авп +2026-05-05T09:07:25.017845+0300 | INFO | Processed message from 25076348: авп +2026-05-05T09:07:25.018845+0300 | INFO | === HANDLE: user 25076348, text='авп', current state=None === +2026-05-05T09:07:25.018845+0300 | INFO | Response to user 25076348: Пожалуйста, подтвердите согласие на обработку персональных данных (Да / Нет): +2026-05-05T09:07:29.353564+0300 | DEBUG | Message from 25076348 in peer 2000000002: да +2026-05-05T09:07:29.354564+0300 | INFO | Processed message from 25076348: да +2026-05-05T09:07:29.354564+0300 | INFO | === HANDLE: user 25076348, text='да', current state=ask_consent === +2026-05-05T09:07:29.354564+0300 | INFO | Response to user 25076348: ✅ Спасибо за согласие! Продолжим оформление заявки. +Пожалуйста, укажите вашу фамилию и имя (два слов +2026-05-05T09:07:36.689785+0300 | DEBUG | Message from 25076348 in peer 2000000002: ваыва авп +2026-05-05T09:07:36.689785+0300 | INFO | Processed message from 25076348: ваыва авп +2026-05-05T09:07:36.689785+0300 | INFO | === HANDLE: user 25076348, text='ваыва авп', current state=collect_fi === +2026-05-05T09:07:36.689785+0300 | INFO | Response to user 25076348: 👪 Укажите, пожалуйста, контактные данные родителя или опекуна. Вы можете предоставить их сейчас или +2026-05-05T09:07:47.065944+0300 | DEBUG | Message from 25076348 in peer 2000000002: пропустить +2026-05-05T09:07:47.065944+0300 | INFO | Processed message from 25076348: пропустить +2026-05-05T09:07:47.065944+0300 | INFO | === HANDLE: user 25076348, text='пропустить', current state=ask_parent_data === +2026-05-05T09:07:47.066947+0300 | INFO | Parent data skipped for user 25076348 +2026-05-05T09:07:47.066947+0300 | INFO | Response to user 25076348: ✅ Данные родителя пропущены. Продолжаем оформление. +Отлично! Теперь укажите ваш номер телефона в фор +2026-05-05T09:08:13.305154+0300 | DEBUG | Message from 25076348 in peer 2000000002: +7(999)000-00-00 +2026-05-05T09:08:13.306155+0300 | INFO | Processed message from 25076348: +7(999)000-00-00 +2026-05-05T09:08:13.306155+0300 | INFO | === HANDLE: user 25076348, text='+7(999)000-00-00', current state=collect_phone === +2026-05-05T09:08:13.306155+0300 | INFO | Response to user 25076348: Укажите удобное время по МСК для звонка (например: 'завтра после 18', 'в среду утром', 'сегодня в 15 +2026-05-05T09:08:26.129071+0300 | DEBUG | Message from 25076348 in peer 2000000002: сегодня в 15:00 +2026-05-05T09:08:26.130574+0300 | INFO | Processed message from 25076348: сегодня в 15:00 +2026-05-05T09:08:26.130574+0300 | INFO | === HANDLE: user 25076348, text='сегодня в 15:00', current state=collect_time === +2026-05-05T09:08:27.594462+0300 | INFO | Response to user 25076348: Проверьте данные: +ФИ: ваыва авп +Телефон: +7 (999) 000-00-00 +Время звонка по МСК: 05.05.2026 в 15:00 + +2026-05-05T09:08:31.676242+0300 | DEBUG | Message from 25076348 in peer 2000000002: [club233127658|@ikpro] ✅ Да +2026-05-05T09:08:31.677239+0300 | INFO | Processed message from 25076348: [club233127658|@ikpro] ✅ Да +2026-05-05T09:08:31.677239+0300 | INFO | === HANDLE: user 25076348, text='[club233127658|@ikpro] ✅ Да', current state=confirm === +2026-05-05T09:08:31.677239+0300 | INFO | Response to user 25076348: Пожалуйста, ответьте 'Да' или 'Нет'. +2026-05-05T09:08:38.235869+0300 | DEBUG | Message from 25076348 in peer 2000000002: да +2026-05-05T09:08:38.235869+0300 | INFO | Processed message from 25076348: да +2026-05-05T09:08:38.236871+0300 | INFO | === HANDLE: user 25076348, text='да', current state=confirm === +2026-05-05T09:08:38.653742+0300 | INFO | Lead saved for user 25076348 +2026-05-05T09:08:38.653742+0300 | INFO | Response to user 25076348: Спасибо! Ваши данные сохранены. Менеджер свяжется с вами в указанное время. Хорошего дня! 🌟 diff --git a/logs/bot.log b/logs/bot.log index 8568474..3edbc7a 100644 --- a/logs/bot.log +++ b/logs/bot.log @@ -1,590 +1,145 @@ -2026-05-04T13:22:21.443454+0300 | INFO | Initializing bot... -2026-05-04T13:22:21.685842+0300 | INFO | Bot started -2026-05-04T13:22:21.686877+0300 | INFO | Backup scheduler started -2026-05-04T13:23:07.722613+0300 | DEBUG | Message from 25076348 in peer 2000000002: [club233127658|@ikpro] 🔄 Начать заново -2026-05-04T13:23:07.724180+0300 | INFO | Processed message from 25076348: [club233127658|@ikpro] 🔄 Начать заново -2026-05-04T13:23:07.724696+0300 | INFO | === HANDLE: user 25076348, text='[club233127658|@ikpro] 🔄 Начать заново', current state=None === -2026-05-04T13:23:07.727877+0300 | INFO | Response to user 25076348: Пожалуйста, подтвердите согласие на обработку персональных данных (Да / Нет): -2026-05-04T13:23:11.904304+0300 | DEBUG | Message from 25076348 in peer 2000000002: да -2026-05-04T13:23:11.904304+0300 | INFO | Processed message from 25076348: да -2026-05-04T13:23:11.904840+0300 | INFO | === HANDLE: user 25076348, text='да', current state=ask_consent === -2026-05-04T13:23:11.904840+0300 | INFO | Response to user 25076348: ✅ Спасибо за согласие! Продолжим оформление заявки. +2026-05-06T09:30:39.349431+0300 | INFO | Initializing bot... +2026-05-06T09:30:39.662434+0300 | INFO | Bot started +2026-05-06T09:30:39.663944+0300 | INFO | Backup scheduler started +2026-05-06T09:30:49.350771+0300 | DEBUG | Message from 9782434 in peer 2000000002: [club233127658|@ikpro] 🔄 Начать заново +2026-05-06T09:30:49.350771+0300 | INFO | Processed message from 9782434: [club233127658|@ikpro] 🔄 Начать заново +2026-05-06T09:30:49.350771+0300 | INFO | === HANDLE: user 9782434, text='[club233127658|@ikpro] 🔄 Начать заново', current state=None === +2026-05-06T09:30:49.350771+0300 | INFO | Response to user 9782434: Пожалуйста, подтвердите согласие на обработку персональных данных (Да / Нет): +2026-05-06T09:30:58.295421+0300 | DEBUG | Message from 9782434 in peer 2000000002: да +2026-05-06T09:30:58.295927+0300 | INFO | Processed message from 9782434: да +2026-05-06T09:30:58.295927+0300 | INFO | === HANDLE: user 9782434, text='да', current state=ask_consent === +2026-05-06T09:30:58.295927+0300 | INFO | Response to user 9782434: ✅ Спасибо за согласие! Продолжим оформление заявки. Пожалуйста, укажите вашу фамилию и имя (два слов -2026-05-04T13:23:34.586781+0300 | DEBUG | Message from 25076348 in peer 2000000002: ффф ыавпва -2026-05-04T13:23:34.586781+0300 | INFO | Processed message from 25076348: ффф ыавпва -2026-05-04T13:23:34.587312+0300 | INFO | === HANDLE: user 25076348, text='ффф ыавпва', current state=collect_fi === -2026-05-04T13:23:34.588357+0300 | INFO | Response to user 25076348: Укажите ваш возраст (целое число лет): -2026-05-04T13:23:37.967348+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12 -2026-05-04T13:23:37.967876+0300 | INFO | Processed message from 25076348: 12 -2026-05-04T13:23:37.967876+0300 | INFO | === HANDLE: user 25076348, text='12', current state=collect_age === -2026-05-04T13:23:37.967876+0300 | DEBUG | validate_age input: ''12'' -2026-05-04T13:23:37.968411+0300 | DEBUG | cleaned: '12' -2026-05-04T13:23:37.968411+0300 | DEBUG | age valid: 12 -2026-05-04T13:23:37.969451+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). -Укажите ваш возраст (целое число лет): -2026-05-04T13:36:16.863923+0300 | INFO | Initializing bot... -2026-05-04T13:36:17.084594+0300 | INFO | Bot started -2026-05-04T13:36:17.085630+0300 | INFO | Backup scheduler started -2026-05-04T13:37:06.672828+0300 | DEBUG | Message from 25076348 in peer 2000000002: Привет -2026-05-04T13:37:06.673343+0300 | INFO | Processed message from 25076348: Привет -2026-05-04T13:37:06.673343+0300 | INFO | === HANDLE: user 25076348, text='Привет', current state=None === -2026-05-04T13:37:06.673883+0300 | INFO | Response to user 25076348: Пожалуйста, подтвердите согласие на обработку персональных данных (Да / Нет): -2026-05-04T13:37:09.159946+0300 | DEBUG | Message from 25076348 in peer 2000000002: да -2026-05-04T13:37:09.159946+0300 | INFO | Processed message from 25076348: да -2026-05-04T13:37:09.160473+0300 | INFO | === HANDLE: user 25076348, text='да', current state=ask_consent === -2026-05-04T13:37:09.160473+0300 | INFO | Response to user 25076348: ✅ Спасибо за согласие! Продолжим оформление заявки. +2026-05-06T09:31:09.423555+0300 | DEBUG | Message from 9782434 in peer 2000000002: Румянцев Сергей +2026-05-06T09:31:09.424556+0300 | INFO | Processed message from 9782434: Румянцев Сергей +2026-05-06T09:31:09.424556+0300 | INFO | === HANDLE: user 9782434, text='Румянцев Сергей', current state=collect_fi === +2026-05-06T09:31:09.424556+0300 | INFO | Response to user 9782434: 👪 Укажите, пожалуйста, контактные данные родителя или опекуна. Вы можете предоставить их сейчас или +2026-05-06T09:31:25.402120+0300 | DEBUG | Message from 9782434 in peer 2000000002: Румянцев Сергей +2026-05-06T09:31:25.402120+0300 | INFO | Processed message from 9782434: Румянцев Сергей +2026-05-06T09:31:25.403120+0300 | INFO | === HANDLE: user 9782434, text='Румянцев Сергей', current state=ask_parent_data === +2026-05-06T09:31:25.403120+0300 | INFO | Parent FIO saved for user 9782434, state changed to COLLECT_PARENT_PHONE +2026-05-06T09:31:25.403120+0300 | INFO | Response to user 9782434: Укажите телефон родителя в формате +7 (XXX) XXX-XX-XX: +2026-05-06T09:31:33.891452+0300 | DEBUG | Message from 9782434 in peer 2000000002: +79632995828 +2026-05-06T09:31:33.891452+0300 | INFO | Processed message from 9782434: +79632995828 +2026-05-06T09:31:33.891452+0300 | INFO | === HANDLE: user 9782434, text='+79632995828', current state=collect_parent_phone === +2026-05-06T09:31:33.891452+0300 | INFO | Response to user 9782434: ✅ Данные родителя сохранены. +Отлично! Теперь укажите ваш номер телефона в формате +7 (XXX) XXX-XX-XX +2026-05-06T09:31:53.604023+0300 | DEBUG | Message from 9782434 in peer 2000000002: +7(963)2995828 +2026-05-06T09:31:53.604023+0300 | INFO | Processed message from 9782434: +7(963)2995828 +2026-05-06T09:31:53.604023+0300 | INFO | === HANDLE: user 9782434, text='+7(963)2995828', current state=collect_phone === +2026-05-06T09:31:53.604023+0300 | INFO | Response to user 9782434: Укажите удобное время по МСК для звонка (например: 'завтра после 18', 'в среду утром', 'сегодня в 15 +2026-05-06T09:32:12.655460+0300 | DEBUG | Message from 9782434 in peer 2000000002: Сегодня в 12:00 +2026-05-06T09:32:12.656461+0300 | INFO | Processed message from 9782434: Сегодня в 12:00 +2026-05-06T09:32:12.656461+0300 | INFO | === HANDLE: user 9782434, text='Сегодня в 12:00', current state=collect_time === +2026-05-06T09:32:14.317368+0300 | INFO | Response to user 9782434: Проверьте данные: +ФИ: Румянцев Сергей +Телефон: +7 (963) 299-58-28 +Время звонка по МСК: 06.05.2026 в +2026-05-06T09:32:24.728976+0300 | DEBUG | Message from 9782434 in peer 2000000002: [club233127658|@ikpro] ✅ Да +2026-05-06T09:32:24.728976+0300 | INFO | Processed message from 9782434: [club233127658|@ikpro] ✅ Да +2026-05-06T09:32:24.728976+0300 | INFO | === HANDLE: user 9782434, text='[club233127658|@ikpro] ✅ Да', current state=confirm === +2026-05-06T09:32:24.729979+0300 | INFO | Response to user 9782434: Пожалуйста, ответьте 'Да' или 'Нет'. +2026-05-06T09:32:32.793560+0300 | DEBUG | Message from 9782434 in peer 2000000002: Да +2026-05-06T09:32:32.793560+0300 | INFO | Processed message from 9782434: Да +2026-05-06T09:32:32.794564+0300 | INFO | === HANDLE: user 9782434, text='Да', current state=confirm === +2026-05-06T09:32:33.178997+0300 | INFO | Lead saved for user 9782434 +2026-05-06T09:32:33.178997+0300 | INFO | Response to user 9782434: Спасибо! Ваши данные сохранены. Менеджер свяжется с вами в указанное время. Хорошего дня! 🌟 +2026-05-06T12:29:19.338807+0300 | INFO | Initializing bot... +2026-05-06T12:29:19.586887+0300 | INFO | Bot started +2026-05-06T12:29:19.587887+0300 | INFO | Backup scheduler started +2026-05-06T12:29:35.677886+0300 | DEBUG | Message from 25076348 in peer 2000000002: Привет +2026-05-06T12:29:35.678889+0300 | INFO | Processed message from 25076348: Привет +2026-05-06T12:29:35.678889+0300 | INFO | === HANDLE: user 25076348, text='Привет', current state=None === +2026-05-06T12:29:35.682396+0300 | INFO | Response to user 25076348: Пожалуйста, подтвердите согласие на обработку персональных данных (Да / Нет): +2026-05-06T12:29:42.776497+0300 | DEBUG | Message from 25076348 in peer 2000000002: да +2026-05-06T12:29:42.776497+0300 | INFO | Processed message from 25076348: да +2026-05-06T12:29:42.776497+0300 | INFO | === HANDLE: user 25076348, text='да', current state=ask_consent === +2026-05-06T12:29:42.777497+0300 | INFO | Response to user 25076348: ✅ Спасибо за согласие! Продолжим оформление заявки. Пожалуйста, укажите вашу фамилию и имя (два слов -2026-05-04T13:37:15.495991+0300 | DEBUG | Message from 25076348 in peer 2000000002: ааа ррр -2026-05-04T13:37:15.496513+0300 | INFO | Processed message from 25076348: ааа ррр -2026-05-04T13:37:15.497027+0300 | INFO | === HANDLE: user 25076348, text='ааа ррр', current state=collect_fi === -2026-05-04T13:37:15.497027+0300 | INFO | Response to user 25076348: Укажите ваш возраст (целое число лет): -2026-05-04T13:37:18.753724+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12 -2026-05-04T13:37:18.753724+0300 | INFO | Processed message from 25076348: 12 -2026-05-04T13:37:18.754244+0300 | INFO | === HANDLE: user 25076348, text='12', current state=collect_age === -2026-05-04T13:37:18.754244+0300 | DEBUG | validate_age input: ''12'' -2026-05-04T13:37:18.754244+0300 | DEBUG | cleaned: '12' -2026-05-04T13:37:18.754244+0300 | DEBUG | age valid: 12 -2026-05-04T13:37:18.754756+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). -Укажите ваш возраст (целое число лет): -2026-05-04T13:37:22.075536+0300 | DEBUG | Message from 25076348 in peer 2000000002: 23 -2026-05-04T13:37:22.076047+0300 | INFO | Processed message from 25076348: 23 -2026-05-04T13:37:22.076047+0300 | INFO | === HANDLE: user 25076348, text='23', current state=collect_age === -2026-05-04T13:37:22.076047+0300 | DEBUG | validate_age input: ''23'' -2026-05-04T13:37:22.076566+0300 | DEBUG | cleaned: '23' -2026-05-04T13:37:22.076566+0300 | DEBUG | age valid: 23 -2026-05-04T13:37:22.076566+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). -Укажите ваш возраст (целое число лет): -2026-05-04T14:09:25.567877+0300 | INFO | Initializing bot... -2026-05-04T14:09:25.744659+0300 | INFO | Bot started -2026-05-04T14:09:25.745178+0300 | INFO | Backup scheduler started -2026-05-04T14:09:34.624213+0300 | DEBUG | Message from 25076348 in peer 2000000002: Привет -2026-05-04T14:09:34.624213+0300 | INFO | Processed message from 25076348: Привет -2026-05-04T14:09:34.624213+0300 | INFO | === HANDLE: user 25076348, text='Привет', current state=None === -2026-05-04T14:09:34.624740+0300 | INFO | Response to user 25076348: Пожалуйста, подтвердите согласие на обработку персональных данных (Да / Нет): -2026-05-04T14:09:36.950764+0300 | DEBUG | Message from 25076348 in peer 2000000002: да -2026-05-04T14:09:36.950764+0300 | INFO | Processed message from 25076348: да -2026-05-04T14:09:36.951300+0300 | INFO | === HANDLE: user 25076348, text='да', current state=ask_consent === -2026-05-04T14:09:36.951300+0300 | INFO | Response to user 25076348: ✅ Спасибо за согласие! Продолжим оформление заявки. -Пожалуйста, укажите вашу фамилию и имя (два слов -2026-05-04T14:09:45.685252+0300 | DEBUG | Message from 25076348 in peer 2000000002: вав авп -2026-05-04T14:09:45.685252+0300 | INFO | Processed message from 25076348: вав авп -2026-05-04T14:09:45.685252+0300 | INFO | === HANDLE: user 25076348, text='вав авп', current state=collect_fi === -2026-05-04T14:09:45.685773+0300 | INFO | Response to user 25076348: Укажите ваш возраст (целое число лет): -2026-05-04T14:09:49.196572+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12 -2026-05-04T14:09:49.197077+0300 | INFO | Processed message from 25076348: 12 -2026-05-04T14:09:49.197077+0300 | INFO | === HANDLE: user 25076348, text='12', current state=collect_age === -2026-05-04T14:09:49.197077+0300 | DEBUG | validate_age input: ''12'' -2026-05-04T14:09:49.197077+0300 | DEBUG | cleaned: '12' -2026-05-04T14:09:49.197077+0300 | DEBUG | age valid: 12 -2026-05-04T14:09:49.197077+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). -Укажите ваш возраст (целое число лет): -2026-05-04T14:09:53.320692+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12лет -2026-05-04T14:09:53.320692+0300 | INFO | Processed message from 25076348: 12лет -2026-05-04T14:09:53.320692+0300 | INFO | === HANDLE: user 25076348, text='12лет', current state=collect_age === -2026-05-04T14:09:53.321204+0300 | DEBUG | validate_age input: ''12лет'' -2026-05-04T14:09:53.321204+0300 | DEBUG | cleaned: '12' -2026-05-04T14:09:53.321204+0300 | DEBUG | age valid: 12 -2026-05-04T14:09:53.321724+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). -Укажите ваш возраст (целое число лет): -2026-05-04T14:10:19.043522+0300 | DEBUG | Message from 25076348 in peer 2000000002: 13 -2026-05-04T14:10:19.043522+0300 | INFO | Processed message from 25076348: 13 -2026-05-04T14:10:19.043522+0300 | INFO | === HANDLE: user 25076348, text='13', current state=collect_age === -2026-05-04T14:10:19.044052+0300 | DEBUG | validate_age input: ''13'' -2026-05-04T14:10:19.044052+0300 | DEBUG | cleaned: '13' -2026-05-04T14:10:19.044052+0300 | DEBUG | age valid: 13 -2026-05-04T14:10:19.044052+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). -Укажите ваш возраст (целое число лет): -2026-05-04T14:10:22.029805+0300 | DEBUG | Message from 25076348 in peer 2000000002: 18 -2026-05-04T14:10:22.029805+0300 | INFO | Processed message from 25076348: 18 -2026-05-04T14:10:22.029805+0300 | INFO | === HANDLE: user 25076348, text='18', current state=collect_age === -2026-05-04T14:10:22.030324+0300 | DEBUG | validate_age input: ''18'' -2026-05-04T14:10:22.030324+0300 | DEBUG | cleaned: '18' -2026-05-04T14:10:22.030324+0300 | DEBUG | age valid: 18 -2026-05-04T14:10:22.030324+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). -Укажите ваш возраст (целое число лет): -2026-05-04T14:52:44.897174+0300 | INFO | Initializing bot... -2026-05-04T14:52:45.151496+0300 | INFO | Bot started -2026-05-04T14:52:45.152530+0300 | INFO | Backup scheduler started -2026-05-04T14:53:41.300176+0300 | DEBUG | Message from 25076348 in peer 2000000002: привет -2026-05-04T14:53:41.302249+0300 | INFO | Processed message from 25076348: привет -2026-05-04T14:53:41.302249+0300 | INFO | === HANDLE: user 25076348, text='привет', current state=None === -2026-05-04T14:53:41.306431+0300 | INFO | Response to user 25076348: Пожалуйста, подтвердите согласие на обработку персональных данных (Да / Нет): -2026-05-04T14:53:43.736066+0300 | DEBUG | Message from 25076348 in peer 2000000002: да -2026-05-04T14:53:43.736066+0300 | INFO | Processed message from 25076348: да -2026-05-04T14:53:43.736066+0300 | INFO | === HANDLE: user 25076348, text='да', current state=ask_consent === -2026-05-04T14:53:43.736606+0300 | INFO | Response to user 25076348: ✅ Спасибо за согласие! Продолжим оформление заявки. -Пожалуйста, укажите вашу фамилию и имя (два слов -2026-05-04T14:53:49.142783+0300 | DEBUG | Message from 25076348 in peer 2000000002: ппп ррр -2026-05-04T14:53:49.142783+0300 | INFO | Processed message from 25076348: ппп ррр -2026-05-04T14:53:49.143321+0300 | INFO | === HANDLE: user 25076348, text='ппп ррр', current state=collect_fi === -2026-05-04T14:53:49.152638+0300 | INFO | Response to user 25076348: Укажите ваш возраст (целое число лет): -2026-05-04T14:53:51.561650+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12 -2026-05-04T14:53:51.561650+0300 | INFO | Processed message from 25076348: 12 -2026-05-04T14:53:51.562169+0300 | INFO | === HANDLE: user 25076348, text='12', current state=collect_age === -2026-05-04T14:53:51.562169+0300 | DEBUG | validate_age input: ''12'' -2026-05-04T14:53:51.562169+0300 | DEBUG | cleaned: '12' -2026-05-04T14:53:51.562710+0300 | DEBUG | age valid: 12 -2026-05-04T14:53:51.563228+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). -Укажите ваш возраст (целое число лет): -2026-05-04T14:53:57.436097+0300 | DEBUG | Message from 25076348 in peer 2000000002: 13 -2026-05-04T14:53:57.436097+0300 | INFO | Processed message from 25076348: 13 -2026-05-04T14:53:57.436624+0300 | INFO | === HANDLE: user 25076348, text='13', current state=collect_age === -2026-05-04T14:53:57.436624+0300 | DEBUG | validate_age input: ''13'' -2026-05-04T14:53:57.436624+0300 | DEBUG | cleaned: '13' -2026-05-04T14:53:57.436624+0300 | DEBUG | age valid: 13 -2026-05-04T14:53:57.437143+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). -Укажите ваш возраст (целое число лет): -2026-05-04T14:54:17.932582+0300 | ERROR | Fatal error: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')) -Traceback (most recent call last): - - File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen - response = self._make_request( - │ └ - └ - File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connectionpool.py", line 534, in _make_request - response = conn.getresponse() - │ └ - └ - File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connection.py", line 571, in getresponse - httplib_response = super().getresponse() - File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 1374, in getresponse - response.begin() - │ └ - └ - File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 318, in begin - version, status, reason = self._read_status() - │ └ - └ - File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 287, in _read_status - raise RemoteDisconnected("Remote end closed connection without" - └ - -http.client.RemoteDisconnected: Remote end closed connection without response - - -During handling of the above exception, another exception occurred: - - -Traceback (most recent call last): - - File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\adapters.py", line 645, in send - resp = conn.urlopen( - │ └ - └ - File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connectionpool.py", line 841, in urlopen - retries = retries.increment( - │ └ - └ Retry(total=0, connect=None, read=False, redirect=None, status=None) - File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\util\retry.py", line 490, in increment - raise reraise(type(error), error, _stacktrace) - │ │ │ └ - │ │ └ ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')) - │ └ ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')) - └ - File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\util\util.py", line 38, in reraise - raise value.with_traceback(tb) - │ └ None - └ None - File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen - response = self._make_request( - │ └ - └ - File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connectionpool.py", line 534, in _make_request - response = conn.getresponse() - │ └ - └ - File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connection.py", line 571, in getresponse - httplib_response = super().getresponse() - File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 1374, in getresponse - response.begin() - │ └ - └ - File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 318, in begin - version, status, reason = self._read_status() - │ └ - └ - File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\http\client.py", line 287, in _read_status - raise RemoteDisconnected("Remote end closed connection without" - └ - -urllib3.exceptions.ProtocolError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')) - - -During handling of the above exception, another exception occurred: - - -Traceback (most recent call last): - - File "m:\bot_vk_ikp\vk-sales-bot\main.py", line 28, in - main() - └ - -> File "m:\bot_vk_ikp\vk-sales-bot\main.py", line 20, in main - bot.run() - │ └ - └ - - File "m:\bot_vk_ikp\vk-sales-bot\services\vk_bot.py", line 90, in run - for event in self.longpoll.listen(): - │ │ │ └ - │ │ └ - │ └ - └ <({'group_id': 233127658, 'type': 'message_new', 'event_id': 'a8c630d5264c1fc3... - - File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\vk_api\bot_longpoll.py", line 286, in listen - for event in self.check(): - │ │ └ - │ └ - └ <({'group_id': 233127658, 'type': 'message_new', 'event_id': 'a8c630d5264c1fc3... - File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\vk_api\bot_longpoll.py", line 255, in check - response = self.session.get( - │ └ - └ - File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\sessions.py", line 605, in get - return self.request("GET", url, **kwargs) - │ │ │ └ {'params': {'act': 'a_check', 'key': 'eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJxdWV1ZV9pZCI6IjIzMzEyNzY1OCIsInVudGlsIjoxNzc3OD... - │ │ └ 'https://lp.vk.com/whp/233127658' - │ └ - └ - File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\sessions.py", line 592, in request - resp = self.send(prep, **send_kwargs) - │ │ │ └ {'timeout': 35, 'allow_redirects': True, 'proxies': OrderedDict(), 'stream': False, 'verify': True, 'cert': None} - │ │ └ - │ └ - └ - File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\sessions.py", line 706, in send - r = adapter.send(request, **kwargs) - │ │ │ └ {'timeout': 35, 'proxies': OrderedDict(), 'stream': False, 'verify': True, 'cert': None} - │ │ └ - │ └ - └ - File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\adapters.py", line 660, in send - raise ConnectionError(err, request=request) - │ └ - └ - -requests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')) -2026-05-04T15:32:36.840163+0300 | INFO | Initializing bot... -2026-05-04T15:32:37.085881+0300 | INFO | Bot started -2026-05-04T15:32:37.086882+0300 | INFO | Backup scheduler started -2026-05-04T15:32:43.889888+0300 | DEBUG | Message from 25076348 in peer 2000000002: привет -2026-05-04T15:32:43.891134+0300 | INFO | Processed message from 25076348: привет -2026-05-04T15:32:43.891134+0300 | INFO | === HANDLE: user 25076348, text='привет', current state=None === -2026-05-04T15:32:43.894134+0300 | INFO | Response to user 25076348: Пожалуйста, подтвердите согласие на обработку персональных данных (Да / Нет): -2026-05-04T15:32:47.508547+0300 | DEBUG | Message from 25076348 in peer 2000000002: да -2026-05-04T15:32:47.508547+0300 | INFO | Processed message from 25076348: да -2026-05-04T15:32:47.508547+0300 | INFO | === HANDLE: user 25076348, text='да', current state=ask_consent === -2026-05-04T15:32:47.508547+0300 | INFO | Response to user 25076348: ✅ Спасибо за согласие! Продолжим оформление заявки. -Пожалуйста, укажите вашу фамилию и имя (два слов -2026-05-04T15:32:55.451299+0300 | DEBUG | Message from 25076348 in peer 2000000002: ааа ппп -2026-05-04T15:32:55.451299+0300 | INFO | Processed message from 25076348: ааа ппп -2026-05-04T15:32:55.451299+0300 | INFO | === HANDLE: user 25076348, text='ааа ппп', current state=collect_fi === -2026-05-04T15:32:55.453302+0300 | INFO | Response to user 25076348: Укажите ваш возраст (целое число лет): -2026-05-04T15:32:59.095014+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12 -2026-05-04T15:32:59.095014+0300 | INFO | Processed message from 25076348: 12 -2026-05-04T15:32:59.095014+0300 | INFO | === HANDLE: user 25076348, text='12', current state=collect_age === -2026-05-04T15:32:59.095014+0300 | DEBUG | validate_age input: ''12'' -2026-05-04T15:32:59.096013+0300 | DEBUG | cleaned: '12' -2026-05-04T15:32:59.096013+0300 | DEBUG | age valid: 12 -2026-05-04T15:32:59.098012+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). -Укажите ваш возраст (целое число лет): -2026-05-04T15:33:02.913004+0300 | DEBUG | Message from 25076348 in peer 2000000002: 23 -2026-05-04T15:33:02.914007+0300 | INFO | Processed message from 25076348: 23 -2026-05-04T15:33:02.914007+0300 | INFO | === HANDLE: user 25076348, text='23', current state=collect_age === -2026-05-04T15:33:02.914007+0300 | DEBUG | validate_age input: ''23'' -2026-05-04T15:33:02.914007+0300 | DEBUG | cleaned: '23' -2026-05-04T15:33:02.914007+0300 | DEBUG | age valid: 23 -2026-05-04T15:33:02.915005+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). -Укажите ваш возраст (целое число лет): -2026-05-04T18:09:52.845335+0300 | INFO | Initializing bot... -2026-05-04T18:09:53.046373+0300 | INFO | Bot started -2026-05-04T18:09:53.047373+0300 | INFO | Backup scheduler started -2026-05-04T18:10:10.241270+0300 | DEBUG | Message from 25076348 in peer 2000000002: привет -2026-05-04T18:10:10.242269+0300 | INFO | Processed message from 25076348: привет -2026-05-04T18:10:10.242269+0300 | INFO | === HANDLE: user 25076348, text='привет', current state=None === -2026-05-04T18:10:10.245270+0300 | INFO | Response to user 25076348: Пожалуйста, подтвердите согласие на обработку персональных данных (Да / Нет): -2026-05-04T18:10:13.272789+0300 | DEBUG | Message from 25076348 in peer 2000000002: да -2026-05-04T18:10:13.273787+0300 | INFO | Processed message from 25076348: да -2026-05-04T18:10:13.273787+0300 | INFO | === HANDLE: user 25076348, text='да', current state=ask_consent === -2026-05-04T18:10:13.273787+0300 | INFO | Response to user 25076348: ✅ Спасибо за согласие! Продолжим оформление заявки. -Пожалуйста, укажите вашу фамилию и имя (два слов -2026-05-04T18:10:18.694847+0300 | DEBUG | Message from 25076348 in peer 2000000002: аа рп -2026-05-04T18:10:18.694847+0300 | INFO | Processed message from 25076348: аа рп -2026-05-04T18:10:18.694847+0300 | INFO | === HANDLE: user 25076348, text='аа рп', current state=collect_fi === -2026-05-04T18:10:18.696350+0300 | INFO | Response to user 25076348: Укажите ваш возраст (целое число лет): -2026-05-04T18:10:21.671256+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12 -2026-05-04T18:10:21.671256+0300 | INFO | Processed message from 25076348: 12 -2026-05-04T18:10:21.672255+0300 | INFO | === HANDLE: user 25076348, text='12', current state=collect_age === -2026-05-04T18:10:21.672255+0300 | DEBUG | validate_age input: ''12'' -2026-05-04T18:10:21.672255+0300 | DEBUG | cleaned: '12' -2026-05-04T18:10:21.672255+0300 | DEBUG | age valid: 12 -2026-05-04T18:10:21.672255+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). -Укажите ваш возраст (целое число лет): -2026-05-04T18:12:55.999161+0300 | INFO | Initializing bot... -2026-05-04T18:12:56.620865+0300 | INFO | Bot started -2026-05-04T18:12:56.620865+0300 | INFO | Backup scheduler started -2026-05-04T18:13:16.401304+0300 | DEBUG | Message from 25076348 in peer 2000000002: 5 -2026-05-04T18:13:16.402310+0300 | INFO | Processed message from 25076348: 5 -2026-05-04T18:13:16.402310+0300 | INFO | === HANDLE: user 25076348, text='5', current state=None === -2026-05-04T18:13:16.402310+0300 | INFO | Response to user 25076348: Пожалуйста, подтвердите согласие на обработку персональных данных (Да / Нет): -2026-05-04T18:13:19.498303+0300 | DEBUG | Message from 25076348 in peer 2000000002: всыв -2026-05-04T18:13:19.498303+0300 | INFO | Processed message from 25076348: всыв -2026-05-04T18:13:19.498303+0300 | INFO | === HANDLE: user 25076348, text='всыв', current state=ask_consent === -2026-05-04T18:13:19.498303+0300 | INFO | Response to user 25076348: Пожалуйста, ответьте 'Да' (согласен) или 'Нет' (не согласен). -2026-05-04T18:13:22.869492+0300 | DEBUG | Message from 25076348 in peer 2000000002: да -2026-05-04T18:13:22.869492+0300 | INFO | Processed message from 25076348: да -2026-05-04T18:13:22.870492+0300 | INFO | === HANDLE: user 25076348, text='да', current state=ask_consent === -2026-05-04T18:13:22.870492+0300 | INFO | Response to user 25076348: ✅ Спасибо за согласие! Продолжим оформление заявки. -Пожалуйста, укажите вашу фамилию и имя (два слов -2026-05-04T18:13:30.113454+0300 | DEBUG | Message from 25076348 in peer 2000000002: пав пав -2026-05-04T18:13:30.113454+0300 | INFO | Processed message from 25076348: пав пав -2026-05-04T18:13:30.113454+0300 | INFO | === HANDLE: user 25076348, text='пав пав', current state=collect_fi === -2026-05-04T18:13:30.114454+0300 | INFO | Response to user 25076348: Укажите ваш возраст (целое число лет): -2026-05-04T18:13:32.914351+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12 -2026-05-04T18:13:32.915351+0300 | INFO | Processed message from 25076348: 12 -2026-05-04T18:13:32.915351+0300 | INFO | === HANDLE: user 25076348, text='12', current state=collect_age === -2026-05-04T18:13:32.915351+0300 | DEBUG | validate_age input: ''12'' -2026-05-04T18:13:32.915351+0300 | DEBUG | cleaned: '12' -2026-05-04T18:13:32.915351+0300 | DEBUG | age valid: 12 -2026-05-04T18:13:32.915351+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). -Укажите ваш возраст (целое число лет): -2026-05-04T18:13:36.111171+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12 -2026-05-04T18:13:36.111171+0300 | INFO | Processed message from 25076348: 12 -2026-05-04T18:13:36.111171+0300 | INFO | === HANDLE: user 25076348, text='12', current state=collect_age === -2026-05-04T18:13:36.112171+0300 | DEBUG | validate_age input: ''12'' -2026-05-04T18:13:36.112171+0300 | DEBUG | cleaned: '12' -2026-05-04T18:13:36.112171+0300 | DEBUG | age valid: 12 -2026-05-04T18:13:36.112171+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). -Укажите ваш возраст (целое число лет): -2026-05-04T18:13:43.488167+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12лет -2026-05-04T18:13:43.488167+0300 | INFO | Processed message from 25076348: 12лет -2026-05-04T18:13:43.488167+0300 | INFO | === HANDLE: user 25076348, text='12лет', current state=collect_age === -2026-05-04T18:13:43.489166+0300 | DEBUG | validate_age input: ''12лет'' -2026-05-04T18:13:43.489166+0300 | DEBUG | cleaned: '12' -2026-05-04T18:13:43.489166+0300 | DEBUG | age valid: 12 -2026-05-04T18:13:43.489166+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). -Укажите ваш возраст (целое число лет): -2026-05-04T18:13:48.007000+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12 лет -2026-05-04T18:13:48.007000+0300 | INFO | Processed message from 25076348: 12 лет -2026-05-04T18:13:48.007000+0300 | INFO | === HANDLE: user 25076348, text='12 лет', current state=collect_age === -2026-05-04T18:13:48.008153+0300 | DEBUG | validate_age input: ''12 лет'' -2026-05-04T18:13:48.008153+0300 | DEBUG | cleaned: '12' -2026-05-04T18:13:48.008153+0300 | DEBUG | age valid: 12 -2026-05-04T18:13:48.008153+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). -Укажите ваш возраст (целое число лет): -2026-05-04T18:13:51.898194+0300 | DEBUG | Message from 25076348 in peer 2000000002: 1 -2026-05-04T18:13:51.898194+0300 | INFO | Processed message from 25076348: 1 -2026-05-04T18:13:51.899194+0300 | INFO | === HANDLE: user 25076348, text='1', current state=collect_age === -2026-05-04T18:13:51.899194+0300 | DEBUG | validate_age input: ''1'' -2026-05-04T18:13:51.899194+0300 | DEBUG | cleaned: '1' -2026-05-04T18:13:51.899194+0300 | DEBUG | age valid: 1 -2026-05-04T18:13:51.899194+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). -Укажите ваш возраст (целое число лет): -2026-05-04T18:13:55.621492+0300 | DEBUG | Message from 25076348 in peer 2000000002: 120 -2026-05-04T18:13:55.622492+0300 | INFO | Processed message from 25076348: 120 -2026-05-04T18:13:55.622492+0300 | INFO | === HANDLE: user 25076348, text='120', current state=collect_age === -2026-05-04T18:13:55.622492+0300 | DEBUG | validate_age input: ''120'' -2026-05-04T18:13:55.622492+0300 | DEBUG | cleaned: '120' -2026-05-04T18:13:55.622492+0300 | DEBUG | age valid: 120 -2026-05-04T18:13:55.622492+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). -Укажите ваш возраст (целое число лет): -2026-05-04T18:14:00.545873+0300 | DEBUG | Message from 25076348 in peer 2000000002: 158 -2026-05-04T18:14:00.545873+0300 | INFO | Processed message from 25076348: 158 -2026-05-04T18:14:00.545873+0300 | INFO | === HANDLE: user 25076348, text='158', current state=collect_age === -2026-05-04T18:14:00.545873+0300 | DEBUG | validate_age input: ''158'' -2026-05-04T18:14:00.545873+0300 | DEBUG | cleaned: '158' -2026-05-04T18:14:00.546870+0300 | INFO | Response to user 25076348: Возраст должен быть от 1 до 120 лет. -Укажите ваш возраст (целое число лет): -2026-05-04T18:14:29.195477+0300 | DEBUG | Message from 25076348 in peer 2000000002: 11 -2026-05-04T18:14:29.195477+0300 | INFO | Processed message from 25076348: 11 -2026-05-04T18:14:29.196478+0300 | INFO | === HANDLE: user 25076348, text='11', current state=collect_age === -2026-05-04T18:14:29.196478+0300 | DEBUG | validate_age input: ''11'' -2026-05-04T18:14:29.196478+0300 | DEBUG | cleaned: '11' -2026-05-04T18:14:29.196478+0300 | DEBUG | age valid: 11 -2026-05-04T18:14:29.196478+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). -Укажите ваш возраст (целое число лет): -2026-05-04T21:42:30.942354+0300 | INFO | Initializing bot... -2026-05-04T21:42:31.199461+0300 | INFO | Bot started -2026-05-04T21:42:31.200460+0300 | INFO | Backup scheduler started -2026-05-04T21:43:03.630075+0300 | INFO | Initializing bot... -2026-05-04T21:43:04.103937+0300 | INFO | Bot started -2026-05-04T21:43:04.104937+0300 | INFO | Backup scheduler started -2026-05-04T21:43:32.010181+0300 | DEBUG | Message from 25076348 in peer 2000000002: привет -2026-05-04T21:43:32.012181+0300 | INFO | Processed message from 25076348: привет -2026-05-04T21:43:32.012181+0300 | INFO | === HANDLE: user 25076348, text='привет', current state=None === -2026-05-04T21:43:32.015181+0300 | INFO | Response to user 25076348: Пожалуйста, подтвердите согласие на обработку персональных данных (Да / Нет): -2026-05-04T21:43:34.178176+0300 | DEBUG | Message from 25076348 in peer 2000000002: да -2026-05-04T21:43:34.178176+0300 | INFO | Processed message from 25076348: да -2026-05-04T21:43:34.178176+0300 | INFO | === HANDLE: user 25076348, text='да', current state=ask_consent === -2026-05-04T21:43:34.178176+0300 | INFO | Response to user 25076348: ✅ Спасибо за согласие! Продолжим оформление заявки. -Пожалуйста, укажите вашу фамилию и имя (два слов -2026-05-04T21:43:40.704112+0300 | DEBUG | Message from 25076348 in peer 2000000002: ааа ппп -2026-05-04T21:43:40.704112+0300 | INFO | Processed message from 25076348: ааа ппп -2026-05-04T21:43:40.704112+0300 | INFO | === HANDLE: user 25076348, text='ааа ппп', current state=collect_fi === -2026-05-04T21:43:40.706111+0300 | INFO | Response to user 25076348: Укажите ваш возраст (целое число лет): -2026-05-04T21:43:43.405452+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12 -2026-05-04T21:43:43.405452+0300 | INFO | Processed message from 25076348: 12 -2026-05-04T21:43:43.406451+0300 | INFO | === HANDLE: user 25076348, text='12', current state=collect_age === -2026-05-04T21:43:43.406451+0300 | DEBUG | validate_age input: ''12'' -2026-05-04T21:43:43.406451+0300 | DEBUG | cleaned: '12' -2026-05-04T21:43:43.406451+0300 | DEBUG | age valid: 12 -2026-05-04T21:43:43.407452+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). -Укажите ваш возраст (целое число лет): -2026-05-04T21:43:53.242075+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12 -2026-05-04T21:43:53.243076+0300 | INFO | Processed message from 25076348: 12 -2026-05-04T21:43:53.243076+0300 | INFO | === HANDLE: user 25076348, text='12', current state=collect_age === -2026-05-04T21:43:53.243076+0300 | DEBUG | validate_age input: ''12'' -2026-05-04T21:43:53.243076+0300 | DEBUG | cleaned: '12' -2026-05-04T21:43:53.243076+0300 | DEBUG | age valid: 12 -2026-05-04T21:43:53.243076+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). -Укажите ваш возраст (целое число лет): -2026-05-04T21:44:00.659922+0300 | DEBUG | Message from 25076348 in peer 2000000002: "12" -2026-05-04T21:44:00.659922+0300 | INFO | Processed message from 25076348: "12" -2026-05-04T21:44:00.659922+0300 | INFO | === HANDLE: user 25076348, text='"12"', current state=collect_age === -2026-05-04T21:44:00.659922+0300 | DEBUG | validate_age input: ''"12"'' -2026-05-04T21:44:00.659922+0300 | DEBUG | cleaned: '12' -2026-05-04T21:44:00.660921+0300 | DEBUG | age valid: 12 -2026-05-04T21:44:00.660921+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). -Укажите ваш возраст (целое число лет): -2026-05-05T07:00:09.347195+0300 | INFO | Initializing bot... -2026-05-05T07:00:09.569224+0300 | INFO | Bot started -2026-05-05T07:00:09.570223+0300 | INFO | Backup scheduler started -2026-05-05T07:00:20.263695+0300 | INFO | Initializing bot... -2026-05-05T07:00:20.447752+0300 | INFO | Bot started -2026-05-05T07:00:20.447752+0300 | INFO | Backup scheduler started -2026-05-05T07:00:51.798725+0300 | DEBUG | Message from 25076348 in peer 2000000002: привет -2026-05-05T07:00:51.798725+0300 | INFO | Processed message from 25076348: привет -2026-05-05T07:00:51.798725+0300 | INFO | === HANDLE: user 25076348, text='привет', current state=None === -2026-05-05T07:00:51.799725+0300 | INFO | Response to user 25076348: Пожалуйста, подтвердите согласие на обработку персональных данных (Да / Нет): -2026-05-05T07:00:55.300865+0300 | DEBUG | Message from 25076348 in peer 2000000002: да -2026-05-05T07:00:55.300865+0300 | INFO | Processed message from 25076348: да -2026-05-05T07:00:55.301864+0300 | INFO | === HANDLE: user 25076348, text='да', current state=ask_consent === -2026-05-05T07:00:55.301864+0300 | INFO | Response to user 25076348: ✅ Спасибо за согласие! Продолжим оформление заявки. -Пожалуйста, укажите вашу фамилию и имя (два слов -2026-05-05T07:01:00.589119+0300 | DEBUG | Message from 25076348 in peer 2000000002: ааа ппп -2026-05-05T07:01:00.589119+0300 | INFO | Processed message from 25076348: ааа ппп -2026-05-05T07:01:00.590119+0300 | INFO | === HANDLE: user 25076348, text='ааа ппп', current state=collect_fi === -2026-05-05T07:01:00.590119+0300 | INFO | Response to user 25076348: Укажите ваш возраст (целое число лет): -2026-05-05T07:01:03.015859+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12 -2026-05-05T07:01:03.015859+0300 | INFO | Processed message from 25076348: 12 -2026-05-05T07:01:03.015859+0300 | INFO | === HANDLE: user 25076348, text='12', current state=collect_age === -2026-05-05T07:01:03.016362+0300 | DEBUG | validate_age input: ''12'' -2026-05-05T07:01:03.016362+0300 | DEBUG | cleaned: '12' -2026-05-05T07:01:03.016362+0300 | DEBUG | age valid: 12 -2026-05-05T07:01:03.016362+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). -Укажите ваш возраст (целое число лет): -2026-05-05T07:01:04.461068+0300 | DEBUG | Message from 25076348 in peer 2000000002: 12 -2026-05-05T07:01:04.461068+0300 | INFO | Processed message from 25076348: 12 -2026-05-05T07:01:04.461068+0300 | INFO | === HANDLE: user 25076348, text='12', current state=collect_age === -2026-05-05T07:01:04.461068+0300 | DEBUG | validate_age input: ''12'' -2026-05-05T07:01:04.462069+0300 | DEBUG | cleaned: '12' -2026-05-05T07:01:04.462069+0300 | DEBUG | age valid: 12 -2026-05-05T07:01:04.462069+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). -Укажите ваш возраст (целое число лет): -2026-05-05T07:01:06.186293+0300 | DEBUG | Message from 25076348 in peer 2000000002: 31 -2026-05-05T07:01:06.186798+0300 | INFO | Processed message from 25076348: 31 -2026-05-05T07:01:06.186798+0300 | INFO | === HANDLE: user 25076348, text='31', current state=collect_age === -2026-05-05T07:01:06.186798+0300 | DEBUG | validate_age input: ''31'' -2026-05-05T07:01:06.186798+0300 | DEBUG | cleaned: '31' -2026-05-05T07:01:06.186798+0300 | DEBUG | age valid: 31 -2026-05-05T07:01:06.187799+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). -Укажите ваш возраст (целое число лет): -2026-05-05T07:01:08.344400+0300 | DEBUG | Message from 25076348 in peer 2000000002: 41 -2026-05-05T07:01:08.344400+0300 | INFO | Processed message from 25076348: 41 -2026-05-05T07:01:08.344400+0300 | INFO | === HANDLE: user 25076348, text='41', current state=collect_age === -2026-05-05T07:01:08.344400+0300 | DEBUG | validate_age input: ''41'' -2026-05-05T07:01:08.344400+0300 | DEBUG | cleaned: '41' -2026-05-05T07:01:08.344400+0300 | DEBUG | age valid: 41 -2026-05-05T07:01:08.345902+0300 | INFO | Response to user 25076348: Пожалуйста, введите число (ваш возраст). -Укажите ваш возраст (целое число лет): -2026-05-05T08:33:06.946148+0300 | INFO | Initializing bot... -2026-05-05T08:33:07.210217+0300 | INFO | Bot started -2026-05-05T08:33:07.211222+0300 | INFO | Backup scheduler started -2026-05-05T08:33:29.318049+0300 | DEBUG | Message from 25076348 in peer 2000000002: авсыв -2026-05-05T08:33:29.319049+0300 | INFO | Processed message from 25076348: авсыв -2026-05-05T08:33:29.319049+0300 | INFO | === HANDLE: user 25076348, text='авсыв', current state=None === -2026-05-05T08:33:29.321050+0300 | INFO | Response to user 25076348: Пожалуйста, подтвердите согласие на обработку персональных данных (Да / Нет): -2026-05-05T08:33:34.372307+0300 | DEBUG | Message from 25076348 in peer 2000000002: да -2026-05-05T08:33:34.372307+0300 | INFO | Processed message from 25076348: да -2026-05-05T08:33:34.372307+0300 | INFO | === HANDLE: user 25076348, text='да', current state=ask_consent === -2026-05-05T08:33:34.372307+0300 | INFO | Response to user 25076348: ✅ Спасибо за согласие! Продолжим оформление заявки. -Пожалуйста, укажите вашу фамилию и имя (два слов -2026-05-05T08:33:39.200486+0300 | DEBUG | Message from 25076348 in peer 2000000002: аваыв павпва -2026-05-05T08:33:39.200486+0300 | INFO | Processed message from 25076348: аваыв павпва -2026-05-05T08:33:39.200486+0300 | INFO | === HANDLE: user 25076348, text='аваыв павпва', current state=collect_fi === -2026-05-05T08:33:39.201486+0300 | INFO | Response to user 25076348: 👪 Укажите, пожалуйста, контактные данные родителя или опекуна. Вы можете предоставить их сейчас или -2026-05-05T08:34:08.120612+0300 | DEBUG | Message from 25076348 in peer 2000000002: пропустить -2026-05-05T08:34:08.121613+0300 | INFO | Processed message from 25076348: пропустить -2026-05-05T08:34:08.121613+0300 | INFO | === HANDLE: user 25076348, text='пропустить', current state=ask_parent_data === -2026-05-05T08:34:08.121613+0300 | INFO | Parent data skipped for user 25076348 -2026-05-05T08:34:08.121613+0300 | INFO | Response to user 25076348: ✅ Данные родителя пропущены. Продолжаем оформление. +2026-05-06T12:30:04.514287+0300 | DEBUG | Message from 25076348 in peer 2000000002: авпавп орпо +2026-05-06T12:30:04.514287+0300 | INFO | Processed message from 25076348: авпавп орпо +2026-05-06T12:30:04.514287+0300 | INFO | === HANDLE: user 25076348, text='авпавп орпо', current state=collect_fi === +2026-05-06T12:30:04.516287+0300 | INFO | Response to user 25076348: 👪 Укажите, пожалуйста, контактные данные родителя или опекуна. Вы можете предоставить их сейчас или +2026-05-06T12:30:18.772508+0300 | DEBUG | Message from 25076348 in peer 2000000002: ghjgecnbnm +2026-05-06T12:30:18.772508+0300 | INFO | Processed message from 25076348: ghjgecnbnm +2026-05-06T12:30:18.772508+0300 | INFO | === HANDLE: user 25076348, text='ghjgecnbnm', current state=ask_parent_data === +2026-05-06T12:30:18.772508+0300 | INFO | Response to user 25076348: ❌ ФИО родителя должно состоять из двух слов (Фамилия Имя) кириллицей. +👪 Укажите, пожалуйста, контакт +2026-05-06T12:30:28.898283+0300 | DEBUG | Message from 25076348 in peer 2000000002: пропустить +2026-05-06T12:30:28.898283+0300 | INFO | Processed message from 25076348: пропустить +2026-05-06T12:30:28.898283+0300 | INFO | === HANDLE: user 25076348, text='пропустить', current state=ask_parent_data === +2026-05-06T12:30:28.898283+0300 | INFO | Parent data skipped for user 25076348 +2026-05-06T12:30:28.898283+0300 | INFO | Response to user 25076348: ✅ Данные родителя пропущены. Продолжаем оформление. Отлично! Теперь укажите ваш номер телефона в фор -2026-05-05T08:34:34.619625+0300 | DEBUG | Message from 25076348 in peer 2000000002: +7(900)000-00-00 -2026-05-05T08:34:34.619625+0300 | INFO | Processed message from 25076348: +7(900)000-00-00 -2026-05-05T08:34:34.619625+0300 | INFO | === HANDLE: user 25076348, text='+7(900)000-00-00', current state=collect_phone === -2026-05-05T08:34:34.619625+0300 | INFO | Response to user 25076348: Укажите удобное время по МСК для звонка (например: 'завтра после 18', 'в среду утром', 'сегодня в 15 -2026-05-05T08:34:52.867495+0300 | DEBUG | Message from 25076348 in peer 2000000002: сегодня в 15:00 -2026-05-05T08:34:52.867495+0300 | INFO | Processed message from 25076348: сегодня в 15:00 -2026-05-05T08:34:52.867495+0300 | INFO | === HANDLE: user 25076348, text='сегодня в 15:00', current state=collect_time === -2026-05-05T08:34:54.349050+0300 | INFO | Response to user 25076348: Проверьте данные: -ФИ: аваыв павпва -Телефон: +7 (900) 000-00-00 -Время звонка по МСК: 05.05.2026 в 15: -2026-05-05T08:34:58.958675+0300 | DEBUG | Message from 25076348 in peer 2000000002: да -2026-05-05T08:34:58.958675+0300 | INFO | Processed message from 25076348: да -2026-05-05T08:34:58.958675+0300 | INFO | === HANDLE: user 25076348, text='да', current state=collect_time === -2026-05-05T08:34:59.533476+0300 | INFO | Response to user 25076348: Не удалось распознать время. Укажите, например: 'завтра после 18', 'в среду утром' или 'любое время' -2026-05-05T08:35:39.028252+0300 | DEBUG | Message from 25076348 in peer 2000000002: сегодня в 15:00 -2026-05-05T08:35:39.028252+0300 | INFO | Processed message from 25076348: сегодня в 15:00 -2026-05-05T08:35:39.028252+0300 | INFO | === HANDLE: user 25076348, text='сегодня в 15:00', current state=collect_time === -2026-05-05T08:35:39.030760+0300 | INFO | Response to user 25076348: Проверьте данные: -ФИ: аваыв павпва -Телефон: +7 (900) 000-00-00 -Время звонка по МСК: 05.05.2026 в 15: -2026-05-05T08:35:46.969686+0300 | DEBUG | Message from 25076348 in peer 2000000002: Да -2026-05-05T08:35:46.969686+0300 | INFO | Processed message from 25076348: Да -2026-05-05T08:35:46.970686+0300 | INFO | === HANDLE: user 25076348, text='Да', current state=collect_time === -2026-05-05T08:35:46.974190+0300 | INFO | Response to user 25076348: Не удалось распознать время. Укажите, например: 'завтра после 18', 'в среду утром' или 'любое время' -2026-05-05T09:07:22.565746+0300 | INFO | Initializing bot... -2026-05-05T09:07:22.797990+0300 | INFO | Bot started -2026-05-05T09:07:22.798991+0300 | INFO | Backup scheduler started -2026-05-05T09:07:25.017845+0300 | DEBUG | Message from 25076348 in peer 2000000002: авп -2026-05-05T09:07:25.017845+0300 | INFO | Processed message from 25076348: авп -2026-05-05T09:07:25.018845+0300 | INFO | === HANDLE: user 25076348, text='авп', current state=None === -2026-05-05T09:07:25.018845+0300 | INFO | Response to user 25076348: Пожалуйста, подтвердите согласие на обработку персональных данных (Да / Нет): -2026-05-05T09:07:29.353564+0300 | DEBUG | Message from 25076348 in peer 2000000002: да -2026-05-05T09:07:29.354564+0300 | INFO | Processed message from 25076348: да -2026-05-05T09:07:29.354564+0300 | INFO | === HANDLE: user 25076348, text='да', current state=ask_consent === -2026-05-05T09:07:29.354564+0300 | INFO | Response to user 25076348: ✅ Спасибо за согласие! Продолжим оформление заявки. +2026-05-06T12:31:02.767721+0300 | DEBUG | Message from 25076348 in peer 2000000002: +7(999)9999999 +2026-05-06T12:31:02.767721+0300 | INFO | Processed message from 25076348: +7(999)9999999 +2026-05-06T12:31:02.767721+0300 | INFO | === HANDLE: user 25076348, text='+7(999)9999999', current state=collect_phone === +2026-05-06T12:31:02.767721+0300 | INFO | Response to user 25076348: Укажите удобное время по МСК для звонка (например: 'завтра после 18', 'в среду утром', 'сегодня в 15 +2026-05-06T12:31:21.617275+0300 | DEBUG | Message from 25076348 in peer 2000000002: Сегодня в 15:00 +2026-05-06T12:31:21.617275+0300 | INFO | Processed message from 25076348: Сегодня в 15:00 +2026-05-06T12:31:21.617275+0300 | INFO | === HANDLE: user 25076348, text='Сегодня в 15:00', current state=collect_time === +2026-05-06T12:31:23.043719+0300 | INFO | Response to user 25076348: Проверьте данные: +ФИ: авпавп орпо +Телефон: +7 (999) 999-99-99 +Время звонка по МСК: 06.05.2026 в 15:0 +2026-05-06T12:31:26.359950+0300 | DEBUG | Message from 25076348 in peer 2000000002: [club233127658|@ikpro] ✅ Да +2026-05-06T12:31:26.359950+0300 | INFO | Processed message from 25076348: [club233127658|@ikpro] ✅ Да +2026-05-06T12:31:26.359950+0300 | INFO | === HANDLE: user 25076348, text='[club233127658|@ikpro] ✅ Да', current state=confirm === +2026-05-06T12:31:26.360951+0300 | INFO | Response to user 25076348: Пожалуйста, ответьте 'Да' или 'Нет'. +2026-05-06T12:31:50.179861+0300 | DEBUG | Message from 25076348 in peer 2000000002: да +2026-05-06T12:31:50.179861+0300 | INFO | Processed message from 25076348: да +2026-05-06T12:31:50.179861+0300 | INFO | === HANDLE: user 25076348, text='да', current state=confirm === +2026-05-06T12:31:50.636099+0300 | INFO | Lead saved for user 25076348 +2026-05-06T12:31:50.637100+0300 | INFO | Response to user 25076348: Спасибо! Ваши данные сохранены. Менеджер свяжется с вами в указанное время. Хорошего дня! 🌟 +2026-05-06T13:44:36.269117+0300 | INFO | Initializing bot... +2026-05-06T13:44:36.426137+0300 | INFO | Bot started +2026-05-06T13:44:36.427140+0300 | INFO | Backup scheduler started +2026-05-06T13:45:04.769179+0300 | DEBUG | Message from 25076348 in peer 2000000002: Ghbdtn +2026-05-06T13:45:04.770179+0300 | INFO | Processed message from 25076348: Ghbdtn +2026-05-06T13:45:04.770179+0300 | INFO | === HANDLE: user 25076348, text='Ghbdtn', current state=None === +2026-05-06T13:45:04.770179+0300 | INFO | Response to user 25076348: Пожалуйста, подтвердите согласие на обработку персональных данных (Да / Нет): +2026-05-06T13:45:09.542168+0300 | DEBUG | Message from 25076348 in peer 2000000002: да +2026-05-06T13:45:09.542168+0300 | INFO | Processed message from 25076348: да +2026-05-06T13:45:09.542168+0300 | INFO | === HANDLE: user 25076348, text='да', current state=ask_consent === +2026-05-06T13:45:09.542168+0300 | INFO | Response to user 25076348: ✅ Спасибо за согласие! Продолжим оформление заявки. Пожалуйста, укажите вашу фамилию и имя (два слов -2026-05-05T09:07:36.689785+0300 | DEBUG | Message from 25076348 in peer 2000000002: ваыва авп -2026-05-05T09:07:36.689785+0300 | INFO | Processed message from 25076348: ваыва авп -2026-05-05T09:07:36.689785+0300 | INFO | === HANDLE: user 25076348, text='ваыва авп', current state=collect_fi === -2026-05-05T09:07:36.689785+0300 | INFO | Response to user 25076348: 👪 Укажите, пожалуйста, контактные данные родителя или опекуна. Вы можете предоставить их сейчас или -2026-05-05T09:07:47.065944+0300 | DEBUG | Message from 25076348 in peer 2000000002: пропустить -2026-05-05T09:07:47.065944+0300 | INFO | Processed message from 25076348: пропустить -2026-05-05T09:07:47.065944+0300 | INFO | === HANDLE: user 25076348, text='пропустить', current state=ask_parent_data === -2026-05-05T09:07:47.066947+0300 | INFO | Parent data skipped for user 25076348 -2026-05-05T09:07:47.066947+0300 | INFO | Response to user 25076348: ✅ Данные родителя пропущены. Продолжаем оформление. +2026-05-06T13:45:15.179857+0300 | DEBUG | Message from 25076348 in peer 2000000002: вава павп +2026-05-06T13:45:15.179857+0300 | INFO | Processed message from 25076348: вава павп +2026-05-06T13:45:15.179857+0300 | INFO | === HANDLE: user 25076348, text='вава павп', current state=collect_fi === +2026-05-06T13:45:15.180856+0300 | INFO | Response to user 25076348: 👪 Укажите, пожалуйста, контактные данные родителя или опекуна. Вы можете предоставить их сейчас или +2026-05-06T13:45:25.643077+0300 | DEBUG | Message from 25076348 in peer 2000000002: пропустить +2026-05-06T13:45:25.643077+0300 | INFO | Processed message from 25076348: пропустить +2026-05-06T13:45:25.643077+0300 | INFO | === HANDLE: user 25076348, text='пропустить', current state=ask_parent_data === +2026-05-06T13:45:25.643077+0300 | INFO | Parent data skipped for user 25076348 +2026-05-06T13:45:25.644078+0300 | INFO | Response to user 25076348: ✅ Данные родителя пропущены. Продолжаем оформление. Отлично! Теперь укажите ваш номер телефона в фор -2026-05-05T09:08:13.305154+0300 | DEBUG | Message from 25076348 in peer 2000000002: +7(999)000-00-00 -2026-05-05T09:08:13.306155+0300 | INFO | Processed message from 25076348: +7(999)000-00-00 -2026-05-05T09:08:13.306155+0300 | INFO | === HANDLE: user 25076348, text='+7(999)000-00-00', current state=collect_phone === -2026-05-05T09:08:13.306155+0300 | INFO | Response to user 25076348: Укажите удобное время по МСК для звонка (например: 'завтра после 18', 'в среду утром', 'сегодня в 15 -2026-05-05T09:08:26.129071+0300 | DEBUG | Message from 25076348 in peer 2000000002: сегодня в 15:00 -2026-05-05T09:08:26.130574+0300 | INFO | Processed message from 25076348: сегодня в 15:00 -2026-05-05T09:08:26.130574+0300 | INFO | === HANDLE: user 25076348, text='сегодня в 15:00', current state=collect_time === -2026-05-05T09:08:27.594462+0300 | INFO | Response to user 25076348: Проверьте данные: -ФИ: ваыва авп -Телефон: +7 (999) 000-00-00 -Время звонка по МСК: 05.05.2026 в 15:00 +2026-05-06T13:45:44.375651+0300 | DEBUG | Message from 25076348 in peer 2000000002: 8(909)999 999 99 +2026-05-06T13:45:44.375651+0300 | INFO | Processed message from 25076348: 8(909)999 999 99 +2026-05-06T13:45:44.376650+0300 | INFO | === HANDLE: user 25076348, text='8(909)999 999 99', current state=collect_phone === +2026-05-06T13:45:44.376650+0300 | INFO | Response to user 25076348: Некорректный номер +Отлично! Теперь укажите ваш номер телефона в формате +7 (XXX) XXX-XX-XX: +2026-05-06T13:46:05.489919+0300 | DEBUG | Message from 25076348 in peer 2000000002: +7(900)9999999 +2026-05-06T13:46:05.489919+0300 | INFO | Processed message from 25076348: +7(900)9999999 +2026-05-06T13:46:05.489919+0300 | INFO | === HANDLE: user 25076348, text='+7(900)9999999', current state=collect_phone === +2026-05-06T13:46:05.489919+0300 | INFO | Response to user 25076348: Укажите удобное время по МСК для звонка (например: 'завтра после 18', 'в среду утром', 'сегодня в 15 +2026-05-06T13:46:19.326097+0300 | DEBUG | Message from 25076348 in peer 2000000002: сегодня 18:00 +2026-05-06T13:46:19.326097+0300 | INFO | Processed message from 25076348: сегодня 18:00 +2026-05-06T13:46:19.326097+0300 | INFO | === HANDLE: user 25076348, text='сегодня 18:00', current state=collect_time === +2026-05-06T13:46:19.412130+0300 | INFO | Response to user 25076348: Проверьте данные: +ФИ: вава павп +Телефон: +7 (900) 999-99-99 +Время звонка по МСК: 06.05.2026 в 18:00 -2026-05-05T09:08:31.676242+0300 | DEBUG | Message from 25076348 in peer 2000000002: [club233127658|@ikpro] ✅ Да -2026-05-05T09:08:31.677239+0300 | INFO | Processed message from 25076348: [club233127658|@ikpro] ✅ Да -2026-05-05T09:08:31.677239+0300 | INFO | === HANDLE: user 25076348, text='[club233127658|@ikpro] ✅ Да', current state=confirm === -2026-05-05T09:08:31.677239+0300 | INFO | Response to user 25076348: Пожалуйста, ответьте 'Да' или 'Нет'. -2026-05-05T09:08:38.235869+0300 | DEBUG | Message from 25076348 in peer 2000000002: да -2026-05-05T09:08:38.235869+0300 | INFO | Processed message from 25076348: да -2026-05-05T09:08:38.236871+0300 | INFO | === HANDLE: user 25076348, text='да', current state=confirm === -2026-05-05T09:08:38.653742+0300 | INFO | Lead saved for user 25076348 -2026-05-05T09:08:38.653742+0300 | INFO | Response to user 25076348: Спасибо! Ваши данные сохранены. Менеджер свяжется с вами в указанное время. Хорошего дня! 🌟 +2026-05-06T13:46:22.253402+0300 | DEBUG | Message from 25076348 in peer 2000000002: @ikpro ✅ Да +2026-05-06T13:46:22.253402+0300 | INFO | Processed message from 25076348: @ikpro ✅ Да +2026-05-06T13:46:22.253402+0300 | INFO | === HANDLE: user 25076348, text='@ikpro ✅ Да', current state=confirm === +2026-05-06T13:46:22.254401+0300 | INFO | Response to user 25076348: Пожалуйста, ответьте 'Да' или 'Нет'. +2026-05-06T13:46:39.920206+0300 | DEBUG | Message from 25076348 in peer 2000000002: @ikpro ❌ Нет +2026-05-06T13:46:39.920206+0300 | INFO | Processed message from 25076348: @ikpro ❌ Нет +2026-05-06T13:46:39.921208+0300 | INFO | === HANDLE: user 25076348, text='@ikpro ❌ Нет', current state=confirm === +2026-05-06T13:46:39.921208+0300 | INFO | Response to user 25076348: Пожалуйста, ответьте 'Да' или 'Нет'. +2026-05-06T13:47:25.493706+0300 | DEBUG | Message from 25076348 in peer 2000000002: да +2026-05-06T13:47:25.493706+0300 | INFO | Processed message from 25076348: да +2026-05-06T13:47:25.493706+0300 | INFO | === HANDLE: user 25076348, text='да', current state=confirm === +2026-05-06T13:47:25.792877+0300 | INFO | Lead saved for user 25076348 +2026-05-06T13:47:25.793878+0300 | INFO | Response to user 25076348: Спасибо! Ваши данные сохранены. Менеджер свяжется с вами в указанное время. Хорошего дня! 🌟 diff --git a/services/__pycache__/vk_bot.cpython-311.pyc b/services/__pycache__/vk_bot.cpython-311.pyc index 06b1cb7..ad18492 100644 Binary files a/services/__pycache__/vk_bot.cpython-311.pyc and b/services/__pycache__/vk_bot.cpython-311.pyc differ diff --git a/services/vk_bot.py b/services/vk_bot.py index 189b047..4479d56 100644 --- a/services/vk_bot.py +++ b/services/vk_bot.py @@ -9,6 +9,7 @@ from utils.backup import schedule_daily_backup from utils.middleware import MiddlewareChain from vk_api.exceptions import ApiError import requests.exceptions +import re class VKBot: def __init__(self, fsm: DialogManager, exporter: ExcelExporter): @@ -19,6 +20,9 @@ class VKBot: self.vk = self.vk_session.get_api() self.middlewares = MiddlewareChain() + def _is_direct_message(self, user_id: int, peer_id: int) -> bool: + return user_id == peer_id + def _send_message(self, peer_id: int, text: str, keyboard=None): """Отправка сообщения с возможной клавиатурой""" try: @@ -44,12 +48,15 @@ class VKBot: def _get_keyboard_for_state(self, state): """Генерирует клавиатуру в зависимости от состояния""" keyboard = VkKeyboard(one_time=False) - if state == "ASK_CONSENT": # <-- новый блок + if state == "ASK_CONSENT": keyboard.add_button(phrases.BUTTON_CONSENT_YES, color=VkKeyboardColor.POSITIVE) keyboard.add_button(phrases.BUTTON_CONSENT_NO, color=VkKeyboardColor.NEGATIVE) elif state in ("CONFIRM", "confirm"): keyboard.add_button(phrases.BUTTON_YES, color=VkKeyboardColor.POSITIVE) keyboard.add_button(phrases.BUTTON_NO, color=VkKeyboardColor.NEGATIVE) + elif state == "START" or state is None: + # Начальное состояние — кнопка "Зарегистрироваться" + keyboard.add_button(phrases.BUTTON_REGISTER, color=VkKeyboardColor.POSITIVE, payload='register_btn') else: keyboard.add_button(phrases.BUTTON_RESTART, color=VkKeyboardColor.SECONDARY) return keyboard @@ -97,6 +104,16 @@ class VKBot: user_id = event.message.from_id peer_id = event.message.peer_id text = event.message.text + + if not self._is_direct_message(user_id, peer_id): + logger.debug(f"Ignoring chat message from {user_id} in peer {peer_id}") + continue + + # Очистка текста от VK-ссылок вида [club123456|текст] и [user123|текст] + text = re.sub(r'\[club\d+\|([^]]*)\]', r'\1', text) + text = re.sub(r'\[user\d+\|([^]]*)\]', r'\1', text) + text = re.sub(r'\[id\d+\|([^]]*)\]', r'\1', text) + logger.debug(f"Message from {user_id} in peer {peer_id}: {text}") if not self.middlewares.process(user_id, text): @@ -111,6 +128,31 @@ class VKBot: keyboard = self._get_keyboard_for_state(state) self._send_message(peer_id, response, keyboard) + # Обработка нажатия callback-кнопки "Зарегистрироваться" + elif event.type == VkBotEventType.MESSAGE_NEW_CALLBACK and event.message: + user_id = event.message.from_id + peer_id = event.message.peer_id + callback_text = event.message.get_text() if event.message.get_text() else "" + + if not self._is_direct_message(user_id, peer_id): + logger.debug(f"Ignoring chat callback from {user_id} in peer {peer_id}") + continue + logger.debug(f"Callback from {user_id} in peer {peer_id}: {callback_text}") + + if not self.middlewares.process(user_id, callback_text): + continue + + # Проверяем, что нажата кнопка "Зарегистрироваться" + if event.message.get_payload() and 'register_btn' in str(event.message.get_payload()): + # Начинаем диалог заново + response = self.fsm._reset_dialog(user_id) + # Если сессии нет, значит диалог ещё не начат + if user_id not in self.fsm.sessions: + response = self.fsm._start_dialog(user_id) + state = self.fsm.sessions.get(user_id, {}).get("state", "START") + keyboard = self._get_keyboard_for_state(state) + self._send_message(peer_id, response, keyboard) + except ApiError as e: logger.error(f"VK API error while processing event: {e}") except Exception as e: