Дмитрий
cc985e07de
feat(телеграм-реклама): экран «реклама отклонена» + закалка робота против глюков МТС
...
Клиентский модуль «Реклама в Телеграме по своей базе» (робот-в-браузере, МТС Маркетолог).
Задача 5.2 — обратная связь по отказу:
- миграция client_tg_campaigns.status_reason (varchar 500, nullable; RLS без изменений — колонка на существующей таблице), запись v8.88 в CHANGELOG_schema
- Campaign: status_reason в fillable
- NotificationService::notifyTelegramCampaignRejected — in-app уведомление всем активным
пользователям тенанта без pref-гейта (важное операционное сообщение доходит всегда)
- RunTelegramCampaignJob: при провале робота сохраняет причину в status_reason и шлёт уведомление
(Tenant грузится внутри tenantTx для RLS, notify — после транзакции)
- фронт: telegram.ts (+status_reason), AdvertisingTelegramView показывает причину отказа/ошибки
- тесты: RejectNotifyTest (4 Pest) + 2 Vitest на экран
Закалка робота против частых глюков кабинета МТС:
- browser.js: gotoStable() — терпеливая загрузка с перезагрузкой (кабинет виснет на пустой крутилке)
- session.js: isLoggedIn через gotoStable — больше нет ложного «вход слетел»
- cabinet.js: знакомство пропускается если его нет (только для новичков); оферта по #isOfferAccepted;
осознан шаг /payment (денежная развилка «оплатить/без оплаты» — Сессия 6)
Живая разведка кабинета зафиксирована в FLOW-FINDINGS.md (селекторы, шаг /payment, поле файла модератору).
Проверки: Pest ClientTg 93/93, Vitest экрана 7/7, node-тесты робота 20/20.
Робот в тестах замокан, тесты на liderra_testing. Реальных ПДн нет (номера фейковые 7999…).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-27 20:10:10 +03:00
..
2026-05-08 17:32:58 +03:00
2026-06-17 05:17:12 +03:00
2026-07-27 18:41:33 +03:00
2026-06-30 04:57:58 +03:00
2026-06-17 05:17:12 +03:00
2026-06-17 05:17:12 +03:00
2026-05-17 07:13:50 +03:00
2026-07-16 19:06:39 +03:00
2026-05-09 05:33:21 +03:00
2026-06-17 05:17:12 +03:00
2026-05-17 07:13:50 +03:00
2026-05-17 07:13:50 +03:00
2026-06-29 11:32:21 +03:00
2026-06-28 08:42:19 +03:00
2026-06-28 10:14:47 +03:00
2026-07-08 15:29:40 +03:00
2026-06-17 05:17:12 +03:00
2026-06-28 12:59:01 +03:00
2026-06-26 04:27:32 +03:00
2026-06-25 18:52:39 +03:00
2026-06-17 05:17:12 +03:00
2026-06-17 05:17:12 +03:00
2026-05-17 08:18:44 +03:00
2026-05-18 03:42:41 +03:00
2026-05-18 03:42:41 +03:00
2026-06-28 12:06:56 +03:00
2026-06-28 12:06:56 +03:00
2026-07-14 05:03:38 +03:00
2026-07-27 20:10:10 +03:00
2026-06-17 05:17:12 +03:00
2026-07-07 17:50:36 +03:00
2026-06-19 11:29:46 +03:00
2026-05-28 09:52:42 +03:00
2026-07-27 17:39:43 +03:00
2026-06-19 11:29:46 +03:00
2026-07-27 17:39:43 +03:00
2026-05-17 03:28:05 +03:00
2026-06-18 23:33:26 +03:00
2026-06-18 23:33:26 +03:00
2026-07-20 16:47:19 +03:00
2026-07-02 12:04:16 +03:00
2026-07-02 12:04:16 +03:00
2026-06-28 15:41:07 +03:00
2026-06-28 15:53:36 +03:00
2026-07-05 09:02:40 +03:00
2026-07-08 07:56:30 +03:00
2026-07-01 18:27:00 +03:00
2026-06-30 04:18:46 +03:00
2026-06-30 04:18:46 +03:00
2026-06-28 15:22:36 +03:00
2026-06-28 15:33:20 +03:00
2026-07-14 13:14:49 +03:00
2026-07-05 06:40:10 +03:00
2026-07-08 07:56:30 +03:00
2026-06-30 04:18:46 +03:00
2026-06-23 03:47:19 +03:00
2026-06-25 12:21:55 +03:00
2026-05-26 20:39:21 +03:00
2026-06-29 11:32:21 +03:00
2026-07-14 13:14:49 +03:00
2026-06-23 09:06:46 +03:00
2026-07-02 12:04:16 +03:00
2026-06-28 12:59:01 +03:00
2026-05-23 18:46:22 +03:00
2026-07-05 06:22:48 +03:00
2026-07-05 06:08:53 +03:00
2026-05-17 03:33:51 +03:00
2026-07-04 18:32:16 +03:00
2026-05-12 10:06:08 +03:00
2026-06-25 12:28:38 +03:00
2026-06-27 12:47:49 +03:00
2026-05-12 20:23:51 +03:00
2026-06-17 13:30:46 +03:00
2026-06-17 05:17:12 +03:00
2026-06-28 12:59:01 +03:00
2026-06-25 12:54:32 +03:00
2026-06-17 05:17:12 +03:00
2026-07-08 07:56:30 +03:00
2026-05-18 03:42:40 +03:00
2026-05-18 03:42:40 +03:00
2026-06-19 11:29:35 +03:00
2026-07-08 18:57:07 +03:00
2026-06-28 12:59:01 +03:00
2026-05-12 09:49:37 +03:00
2026-05-12 20:23:51 +03:00
2026-06-27 12:47:49 +03:00
2026-06-28 12:59:01 +03:00
2026-07-02 12:04:16 +03:00
2026-07-13 14:04:49 +03:00
2026-07-06 10:54:50 +03:00
2026-07-05 15:33:31 +03:00
2026-07-04 19:07:59 +03:00
2026-07-05 13:52:43 +03:00
2026-05-12 20:23:51 +03:00
2026-05-17 02:23:26 +03:00
2026-06-25 13:41:27 +03:00
2026-07-12 13:18:18 +03:00
2026-06-25 12:25:04 +03:00
2026-05-16 10:09:29 +03:00
2026-06-19 17:09:59 +03:00
2026-06-17 05:17:12 +03:00
2026-06-27 10:23:55 +03:00
2026-06-29 11:32:21 +03:00
2026-06-28 12:59:01 +03:00
2026-07-14 08:58:33 +03:00
2026-05-17 07:13:51 +03:00
2026-06-23 03:47:19 +03:00
2026-05-12 09:45:22 +03:00
2026-07-09 09:45:12 +03:00
2026-07-20 16:47:19 +03:00
2026-06-22 20:54:28 +03:00
2026-05-18 03:42:41 +03:00
2026-06-28 12:59:01 +03:00
2026-05-12 15:20:18 +03:00
2026-07-12 13:10:00 +03:00
2026-07-20 16:47:19 +03:00
2026-07-20 16:47:19 +03:00
2026-05-12 20:23:51 +03:00
2026-05-18 03:42:41 +03:00
2026-07-02 12:04:16 +03:00
2026-06-24 16:07:02 +03:00
2026-06-24 16:07:02 +03:00
2026-07-14 13:14:49 +03:00
2026-07-02 12:04:16 +03:00
2026-05-12 22:14:51 +03:00
2026-05-09 11:27:57 +03:00
2026-06-19 11:29:46 +03:00
2026-05-12 09:59:22 +03:00
2026-07-08 15:29:40 +03:00
2026-06-17 05:17:12 +03:00
2026-06-23 11:32:42 +03:00
2026-07-15 21:41:53 +03:00
2026-05-21 08:37:26 +03:00
2026-06-25 19:08:47 +03:00
2026-07-15 21:41:53 +03:00
2026-05-18 14:33:33 +03:00
2026-05-18 03:41:46 +03:00
2026-05-21 08:37:26 +03:00
2026-07-02 12:04:16 +03:00
2026-06-28 12:59:01 +03:00
2026-05-21 08:37:26 +03:00
2026-07-14 13:14:49 +03:00
2026-07-18 12:29:04 +03:00
2026-07-18 10:57:15 +03:00
2026-07-17 08:31:12 +03:00
2026-05-13 13:30:51 +03:00
2026-07-05 06:08:53 +03:00
2026-07-07 16:27:44 +03:00
2026-06-17 07:22:08 +03:00
2026-06-24 16:48:35 +03:00
2026-05-16 12:45:51 +03:00
2026-05-16 12:45:51 +03:00
2026-07-14 09:36:32 +03:00
2026-05-17 08:18:43 +03:00
2026-07-08 18:57:07 +03:00
2026-06-27 13:43:10 +03:00
2026-07-05 04:31:19 +03:00
2026-07-02 18:22:49 +03:00
2026-07-18 15:20:44 +03:00
2026-07-02 19:50:24 +03:00
2026-07-02 19:50:24 +03:00
2026-07-02 20:29:32 +03:00
2026-07-02 20:45:17 +03:00
2026-06-30 13:27:04 +03:00
2026-07-02 21:40:59 +03:00
2026-07-18 14:29:18 +03:00
2026-07-02 20:29:32 +03:00
2026-07-18 15:20:44 +03:00
2026-07-18 14:29:18 +03:00
2026-07-23 13:54:09 +03:00
2026-07-18 12:29:04 +03:00
2026-07-18 14:00:55 +03:00
2026-07-18 15:59:56 +03:00
2026-07-15 16:46:54 +03:00
2026-07-18 10:57:15 +03:00
2026-07-02 18:22:49 +03:00
2026-07-22 18:39:44 +03:00
2026-07-05 19:25:19 +03:00
2026-07-25 13:05:57 +03:00
2026-06-28 12:59:01 +03:00
2026-05-09 05:33:21 +03:00
2026-05-12 20:23:51 +03:00
2026-05-09 05:33:21 +03:00
2026-07-27 17:39:43 +03:00
2026-05-23 20:02:38 +03:00
2026-06-17 03:17:32 +03:00
2026-06-17 03:17:32 +03:00
2026-05-23 18:46:23 +03:00
2026-05-12 09:15:29 +03:00
2026-06-22 21:50:13 +03:00
2026-06-29 11:32:21 +03:00
2026-07-12 12:56:22 +03:00
2026-07-10 08:49:40 +03:00
2026-07-20 16:47:19 +03:00
2026-07-08 18:57:07 +03:00
2026-05-13 01:46:30 +03:00
2026-05-17 02:23:26 +03:00
2026-05-12 20:23:51 +03:00
2026-05-18 03:42:41 +03:00
2026-05-12 20:23:51 +03:00
2026-05-12 09:37:43 +03:00
2026-05-12 11:57:35 +03:00
2026-07-07 17:45:37 +03:00
2026-07-03 17:34:03 +03:00
2026-05-09 10:17:51 +03:00
2026-05-09 03:43:58 +03:00
2026-05-18 03:42:41 +03:00
2026-07-21 16:27:05 +03:00
2026-05-12 20:23:51 +03:00
2026-07-23 13:54:09 +03:00
2026-07-12 13:10:00 +03:00