feat: P6 Inbox UI — InboxTab + API routes

ChannelView: вкладка 'Inbox' рядом с 'Аналитика'
InboxTab.js:
  - Webhook setup кнопка (если не настроен)
  - Табы: Новые / Все / Отвечено / Игнорировано
  - Карточки сообщений с иконкой типа (question/praise/complaint/spam)
  - AI-предложенный ответ с кнопкой 'Использовать →'
  - Форма ответа прямо в карточке
  - Кнопки: Ответить / Игнорировать / Спам
API routes: /api/inbox/[channelId], /reply, /status, /setup-webhook
This commit is contained in:
Ник (Claude)
2026-06-11 20:13:08 +03:00
parent d0fd328011
commit d262c2af7d
6 changed files with 344 additions and 1 deletions
+6 -1
View File
@@ -13,6 +13,7 @@ import ChannelAnalytics from './ChannelAnalytics';
import FromUrlModal from './FromUrlModal';
import PollModal from './PollModal';
import HashtagSuggest from './HashtagSuggest';
import InboxTab from './InboxTab';
const GOAL_LABELS = {
educational: 'Обучение', news: 'Новости',
@@ -356,7 +357,7 @@ export default function ChannelView({ channel }) {
{/* Вкладки */}
<div className="flex items-center gap-0.5 rounded-lg p-0.5 bg-surface2 border border-border self-start mb-2">
{[['generate','Создать пост'],['analytics','Аналитика']].map(([id,label]) => (
{[['generate','Создать пост'],['analytics','Аналитика'],['inbox','Inbox']].map(([id,label]) => (
<button key={id} onClick={() => setActiveTab(id)}
className={`px-4 py-1.5 rounded-md text-sm font-medium transition-colors
${activeTab===id ? 'bg-surface text-text shadow-sm' : 'text-text-soft hover:text-text'}`}>
@@ -369,6 +370,10 @@ export default function ChannelView({ channel }) {
<ChannelAnalytics channelId={channel.id} channelName={channel.tg_username} />
)}
{activeTab === 'inbox' && (
<InboxTab channel={channel} />
)}
{activeTab === 'generate' && <>
{/* Generator */}
<div className="card p-5 mb-6">