Commit Graph

7 Commits

Author SHA1 Message Date
Alexey Pavlov 5e075ac81d fix(max): migrate to platform-api2.max.ru + Russian Trusted CA bundle
MAX API URL updated to platform-api2.max.ru (mandatory before 2026-07-19).
Added Russian Trusted Root + Sub CA 2024 bundle as repo file — to be loaded
via NODE_EXTRA_CA_CERTS=/app/russian_trusted_bundle.pem (set in Coolify env).
2026-06-24 15:43:22 +03:00
Ник (Claude) ee63172e08 feat: MAX publisher — platform-api.max.ru with image upload
publishToMax():
- API: platform-api.max.ru (новый домен, Authorization header)
- Text: POST /messages?chat_id={id} с {text, attachments}
- Photo: POST /uploads?type=image → presigned URL → multipart upload → {token}
  Attach: {type:'image', payload:{token}} в теле сообщения
- Graceful fallback: при ошибке фото — пост без картинки
- Убрана заглушка 'не реализована'
2026-06-11 20:01:50 +03:00
Ник (Claude) 6e32241fe8 feat: P7 polls + P8 hashtags
P7 — Опросы в Telegram:
- routes/polls.js: POST /api/channels/:id/poll (sendPoll + schedule support)
- DB: scheduled_posts.post_type + meta для отложенных опросов
- scheduledPostsRunner: обработка post_type='poll' через sendPoll
- index.js: роут /api/channels подключён

P8 — Хештеги:
- ai.js: generateHashtags() через Claude Haiku, JSON-массив тегов
- routes/generate.js: POST /api/generate/hashtags
2026-06-11 19:54:31 +03:00
Ник (Claude) 0a9d886435 fix: VK photo upload — 2-step getWallUploadServer + saveWallPhoto
До: wall.post без attachments → картинка игнорировалась
После:
  1. photos.getWallUploadServer → upload_url
  2. POST upload_url с файлом (local path или download) → server/photo/hash
  3. photos.saveWallPhoto → owner_id + photo_id
  4. wall.post с attachments=photo{owner_id}_{id}

При ошибке загрузки фото — публикуем без картинки (graceful degradation)
Поддерживает как локальные /uploads/ файлы так и внешние URL
2026-06-11 19:45:13 +03:00
Ник (Claude) be2735ea5e feat: delay post if SVG cover, retry up to 3×15min
scheduled_posts.cover_regen_attempts: счётчик попыток регенерации.
Если обложка SVG и рег. не удалась:
  - попытки < 3: откладываем scheduled_at на +15 мин, не публикуем
  - попытки >= 3: публикуем с Zero fallback (не держим пост вечно)
Максимальная задержка = 45 минут после плановой публикации.
2026-06-10 13:32:47 +03:00
Ник (Claude) e79693c29a fix: check cover size before Telegram publish, regen SVG stubs
scheduledPostsRunner.js: перед отправкой обложки в TG проверяем
размер файла. Если < 30KB (SVG-заглушка) — пробуем перегенерировать
через covers.generateCover(). Если регенерация успешна — публикуем
реальную обложку. Если нет — fallback на позу Зеро вместо SVG.
2026-06-10 13:07:15 +03:00
Nik (Claude) a370b8f7d8 feat: Зеро-персонаж, auto-publish, auto-series, channel-stats, fallback covers
- Персонаж Зеро: 23 позы (zeroCharacter.js), скрипты генерации
- Auto-publish статей в TG: multipart upload, кнопки, режим alternating Zero/cover
- Fallback цепочка обложек: aiprimetech gpt-5.5 → Pollinations → local SVG (6 палитр)
- Auto-series: Claude haiku определяет серию для каждой статьи автоматически
- Channel stats: подписчики, история, delta 24h/7d
- Photo-search: Yandex API, профили доменов, Redis лимиты
- Scheduled posts runner: backfill, preview, queue, cancel
- promptBuilder: author_persona Зеро, голос от первого лица
- Fixes: dollar-placeholder bugs в PATCH channels/autogen, listArticles фильтры
- AI model: gpt-5.5 для image generation
2026-06-07 14:03:56 +03:00