const fs = require('fs'); const path = require('path'); const axios = require('axios'); const FormData = require('form-data'); process.chdir('/var/www/zeropost-engine'); require('dotenv').config({ path: '/var/www/zeropost-engine/.env' }); const settings = require('/var/www/zeropost-engine/src/services/settings'); const { query } = require('/var/www/zeropost-engine/src/config/db'); (async () => { const { rows: chs } = await query(`SELECT * FROM channels WHERE id=1`); const channel = chs[0]; const tgBase = await settings.get('TELEGRAM_API_BASE', 'https://api.telegram.org'); const files = [ '/var/www/zeropost-uploads/zero-avatar-1780332236389.webp', '/var/www/zeropost-uploads/zero-laptop-1780332301106.webp', ]; const form = new FormData(); form.append('chat_id', String(channel.tg_channel_id)); const media = files.map((_, i) => ({ type: 'photo', media: `attach://photo${i}`, caption: i === 0 ? `🧪 Тест Зеро — 2 ракурса:\n1. аватар (анфас)\n2. за ноутбуком\n\n(третий не пошёл, шлюз поломался)\n\nКак тебе персонаж? Стоит дорабатывать или искать другой образ?` : undefined, })); form.append('media', JSON.stringify(media)); files.forEach((f, i) => form.append(`photo${i}`, fs.createReadStream(f))); const res = await axios.post(`${tgBase}/bot${channel.bot_token}/sendMediaGroup`, form, { headers: form.getHeaders(), timeout: 60000, maxContentLength: Infinity, maxBodyLength: Infinity, }); const ids = (res.data?.result || []).map(m => m.message_id); console.log('sent ids:', ids.join(',')); })().catch(e => console.error('FAIL:', e.response?.data || e.message));