ТTessora Docs

Уведомления

Три канала — in-app, browser push, Telegram

Модуль: src/lib/notifications/. WebSockets в проекте не используются — осознанное решение.

Каналы

КаналМеханикаКод
In-appЗаписи в таблице Notification, клиент опрашивает раз в 30 секунд (useNotifications)create.ts
Browser PushWeb Push API + Service Worker (public/sw.js), работает при закрытой вкладке. Подписки в PushSubscriptionpush.ts, vapid.ts
TelegramBot API, личные сообщения пользователям с заполненным telegramIdtelegram.ts

Как отправлять

Используй хелперы, а не каналы напрямую:

import { notifyMonsterTeam } from "@/lib/notifications/create";

// Уведомить команду (in-app + push + telegram автоматически)
await notifyMonsterTeam({
  type: "TASK_CREATED",
  message: "Новая задача от клиента",
  entityType: "task",
  entityId: task.id,
});

Также есть notify() (конкретный пользователь) и notifyTaskCompanyClients() (клиенты компании задачи).

Типы событий

NotificationType: TASK_CREATED, TASK_STATUS_CHANGED, REFERENCE_UPLOADED, CONTENT_UPLOADED, REVISION_REQUESTED, CONTENT_RETURNED_TO_REVIEW, CONTENT_APPROVED, SYSTEM.

Push: настройка

  1. Сгенерировать VAPID-ключи: npx tsx scripts/generate-vapid-keys.ts → в env.
  2. Браузер регистрирует Service Worker и подписывается (usePushNotifications, useAutoRequestPush).
  3. Подписка сохраняется через POST /api/push/subscribe.

API

  • GET /api/notifications — список (пагинация, фильтры);
  • POST /api/notifications/[id]/read, POST /api/notifications/read-all;
  • GET /api/push/vapid-key, POST /api/push/subscribe, POST /api/push/unsubscribe.

Страница истории для команды: /team/notifications.

On this page