111 lines
14 KiB
Markdown
111 lines
14 KiB
Markdown
# Закрыто 21.07-27.07
|
||
1. MVP frontend: один чат с компанией без истории диалогов; пункт «Чат» открывает текущий активный диалог или создаёт его при отсутствии
|
||
2. При создании пользователя номер телефона копировать в профиль Russian_Phone
|
||
3. Убрать хеширование устройства клиента в devise_json - хочу видеть его параметры.
|
||
4. Добавить параметр, ограничивающих кол-во неуспешных попыток ввода смс.
|
||
5. Поправить чтение сообщений от Битрикса. Сейчас они выглядят так: "[b]Антон Пичугин:[/b] [br]опять ты?" Надо убрать из текста сообщения Отправителя в битриксе
|
||
6. Если неавторизованный пользователь вводит сообщение, после отправки идет на регистрацию, после окончания регистрации его сообщение пропадает. Надо чтобы сохранялось и отправлялось (по аналогии с нажатием на кнопку из раздела "Популярные вопросы")
|
||
7. Изменение в БД по аудитам (заполнение IP, сквозное заполнение UserSession)
|
||
8. Яндекс.капчу добавить
|
||
9. Формы согласий поправить (Согласие на обработку ПД + Политика, Пользовательское соглашение, Реклама)
|
||
10. При повторном запросе OTP кода при авторизации не нужно указывать ошибку "Новый код заказан. Предыдущий код больше не действует."
|
||
11. Интеграция с СМС-провайдером — спецификация и план rollout зафиксированы в `modules/module-11-idgtl-sms.md`; пункт не закрыт до реализации `sms-service`/worker, Keycloak lifecycle, schema `sms`, callback/nginx, env validation, observability и общего DoD. Production prerequisites: согласованные sender/template, Direct `TOKEN_1`, callback credentials/подтверждённый source IP и статический egress IP.
|
||
12. Моделирование уведомлений — постановка v6 синхронизирована с `functional_blocks (business logic)/notification-requirements.md`, arch-00…05 и module-01/03/07. Зафиксированы: instruction только в новой вкладке; TTL только при отсутствии `date_expired`; первое скачивание любого связанного документа скрывает; `producer_test` только для smoke, secret/hash раздельно.
|
||
13. Кнопка "Позвонить оператору" (ссылка tel:+74999591007)
|
||
14. На главном экране две кнопки: чат и звонок оператору. На кнопке с чатом уведомление при наличии непрочитанных сообщений.
|
||
|
||
# Закрыто 28.07-03.08
|
||
19. Подключить OTLP-провайдер
|
||
1. Отправлять на UI информацию разные ошибки при попытках авторизации в зависимости от события: код неверен, истёк или уже использован; превышен лимит попыток авторизации, попробуйте через 24 часа (в случаях превышения otp.phone.max_send_attempts_per_24h); превышен лимит неуспешных авторизаций, начните процедуру заново (в случае превышения otp.phone.max_verify_attempts).
|
||
23. При отрицательном результате проверки сообщения через message-safety, если сообщение отправлялось с главного экрана, то пользователь не переводится в чат, ему под окном главного экрана выпадает сообщение об ошибке. Не на всех устройствах это видно. Воспринимается как UX-дефект. Как надо: вне зависимости от решения message-safety, если пользователь отправил сообщение, то он переводится на экран с чатом. Далее, сейчас отрицательный результат message-safety выводится пользователю как техническая ошибка (красным цветом под полем ввода сообщения) и опять же воспринимается не как бизнес-логика, а как техническая ошибка. Это поведение нужно поменять. Если сообщение пользователя не прошло проверку, нужно ему в окне чата прислать ответ: Для сообщений: К сожалению, ваше сообщение не соответствует правилам данного чата и не может быть отправлено. Попробуйте переформулировать. Для документов: К сожалению, ваш документ не прошел проверку и не может быть доставлен.
|
||
8. UX-дефект: frontend показывает «Не удалось завершить вход» при ошибке отправки отложенного сообщения, хотя вход завершён. Это следует исправить: завершать экран авторизации после bootstrap, а ошибку Bitrix показывать уже в чате (если сообщение отклонено сервисом message-safety, учесть реализацию предыдущего пункта)
|
||
22. Ограничить кол-во символов в сообщении на фронте. Показывать в моменте счетчик: n/max, где n сколько символов уже напечатано, max сколько может быть отправлено. Максимальное кол-во символов - положить в app_settings.
|
||
7. Убрать с экрана ввода номера телефона тексты согласий внизу экрана: Нажимая «Получить код», вы соглашаетесь с условиями использования и политикой конфиденциальности. Согласия пользователь дает ранее на отдельном экране.
|
||
|
||
|
||
|
||
# В разработку:
|
||
|
||
3. Унифицировать сообщения гостевого режима о необходмости
|
||
На экране профиля в гостевом режиме добавить кнопку "Авторизоваться"
|
||
|
||
|
||
2. После интеграции с смс провайдером, реализовать debounce механизм при авторизации - каждая след. смс можно отправить через все большее окно.
|
||
3. аудит безопасности вм
|
||
|
||
5. Store-review вход: точечный bypass в Keycloak OTP SPI по номеру из `.env` (`STORE_REVIEW_ENABLED` / `STORE_REVIEW_PHONE` / `STORE_REVIEW_OTP`) — для этого телефона SMS не шлётся, verify принимает фиксированный OTP; остальные номера идут обычным OTP/SMS. Не путать с глобальным `KEYCLOAK_OTP_MOCK_*`. Учётные данные только в Review Notes стора (не в бинарнике/UI); пользователь с демо-контентом; в production включать только на время ревью.
|
||
6. Хранить историю устройств, с которых пользователь входил в ЛК (Ид юзера, идентификатор устройства, дата последнего входа, способ входа - веб\приложение)
|
||
9. Веб-пуши для PWA
|
||
10. На кнопке Чат отображать значок наличия непрочитанных уведомлений. Требуется синхронизация между устройствами (решение, например через Dialog.client_last_opened_at)
|
||
12. Описание бизнес сущностей: Пользователь
|
||
12. Описание бизнес сущностей: Сообщение
|
||
13. Вынести за пределы ВМ1 сервисы message-safety и sync-service.
|
||
14. Сделать страницу с инстркцией по установке приложения
|
||
15. Написать пользовательское соглашение.
|
||
16. Разработка message-safety
|
||
17. Разработка sync-service
|
||
18. Разработка notification-service
|
||
20. Поднять второй контур для продакшн
|
||
21. Спрятать сеть за балансировщиком нагрузки
|
||
22. Автопродление TLS падает при перезагрузке nginx; сертификат действует до 14.10.2026. (Исправить reload внутри контейнера и проверить systemctl start an-chat-ssl-renew.service до успешного завершения.)
|
||
23. WireGuard-only SSH.
|
||
|
||
24. Добавить логи (Для Python-сервисов добавить OTLP Log Exporter: api-backend; sms-service; sms-worker. Подключить LoggerProvider, BatchLogRecordProcessor и bounded queue. Передавать resource attributes: service.name; service.version; deployment.environment; service.namespace=han-chat.) Экспортировать структурированные поля request_id, trace_id, span_id, severity и event name. Оставить stdout как аварийный локальный журнал. Добавить canary-тесты, запрещающие экспорт токенов, cookie, телефонов, email, текстов сообщений, SQL и object keys.).
|
||
25. Nginx metrics/tracing в signoz
|
||
|
||
|
||
На будущее (после доработки отдельных функциональностей):
|
||
1. Определение итогового перечня мнемоник, перевод фронтенда на мнемоники, seed заливка мнемоник в БД (?)
|
||
2. Моделирование профиля клиента.
|
||
3. Реализация мнемоник.
|
||
4. Реализовать в полноценном `bitrix-sync` обработчик `document.client_uploaded`: claim/retry/DLQ, идемпотентность по `client_document_id`, группировка по `submission_id`; до этого stub задачи не claim-ит.
|
||
|
||
На анализ:
|
||
debounce на отправку СМС (сейчас есть Фиксированный cooldownmin_seconds_between_attempts)
|
||
|
||
# Критично для релиза:
|
||
1. Разработка message-safety
|
||
2. Разработка sync-service
|
||
3. Пользовательское соглашение
|
||
4. Разработка notification-service
|
||
5. Подключить OTLP-провайдер
|
||
6. Починить баги
|
||
7. Второй контур для продакшн
|
||
|
||
# Переезд на тестовый домен
|
||
**Нет — одного `.env` и новых сертификатов недостаточно.**
|
||
|
||
Нужно пройти цепочку:
|
||
|
||
### 1. DNS
|
||
`A`-запись нового домена → IP ВМ (до выпуска сертификата).
|
||
|
||
### 2. `.env` — не одно поле, а все публичные URL
|
||
- `PUBLIC_HOST`, `PUBLIC_WEB_URL`, `PUBLIC_API_URL`, `PUBLIC_AUTH_URL`
|
||
- `KEYCLOAK_PUBLIC_URL`
|
||
- `NGINX_TLS_CERTIFICATE` / `NGINX_TLS_CERTIFICATE_KEY` (путь `/etc/letsencrypt/live/<новый-домен>/...`)
|
||
- `BITRIX_PUBLIC_BASE_URL`
|
||
- `IDGTL_SMS_CALLBACK_PUBLIC_URL` (если SMS уже подключён)
|
||
|
||
### 3. Сертификат
|
||
Certbot на новый `-d` / `--cert-name`, затем nginx с TLS.
|
||
|
||
### 4. Пересборка / перезапуск сервисов
|
||
- **frontend-static** — URL зашиты на build (`EXPO_PUBLIC_*` из `PUBLIC_WEB_URL` / `PUBLIC_AUTH_URL`)
|
||
- **keycloak** — `KC_HOSTNAME` из `KEYCLOAK_PUBLIC_URL`
|
||
- **nginx**, **api-backend** и связанные сервисы — подхватить новый env
|
||
|
||
### 5. Настройки в БД (seed / app-settings)
|
||
В `app-settings.production-like.yaml`:
|
||
- `security.cors.allowed_origins` → `https://новый-домен`
|
||
- `notification.instruction.allowed_hosts` → новый хост
|
||
|
||
После правки — снова `deployment/scripts/seed.sh` (или ручное обновление в БД).
|
||
|
||
### 6. Внешние системы
|
||
- **S3 CORS** (Selectel) — `Allowed origin: https://новый-домен`
|
||
- **Bitrix24** — URL установки/обработчика (`/bitrix/install`, `/bitrix/handler`)
|
||
- **Keycloak client** — redirect URIs / web origins (в realm сейчас зашиты конкретные домены вроде `chat.han0107.ru`)
|
||
- **i-Digital** — callback URL, если провайдер его фиксирует
|
||
|
||
Итого: `.env` + сертификат — ядро, но без DNS, CORS (API + S3), rebuild frontend, Keycloak hostname/redirects, Bitrix URL и seed CORS логин/загрузки/интеграции сломаются. |