# استوری + بازسازی تنظیمات مقصد (v96)

## ساختار جدید منوی مقصد
صفحه‌ی اصلی مقصد: 🏷 پروفایل برند · ⚙️ تنظیمات ساخت اتوماتیک پست · 📥 بازسازی پست اینستاگرام (فقط اینستاگرام) ·
🎬 تنظیمات ساخت اتوماتیک استوری (فقط اینستاگرام) · 👥 ادمین این مقصد · ⏸/▶️ خاموش/روشن کامل مقصد · 🗑 حذف.

### تنظیمات ساخت اتوماتیک پست (`news:pset:ID`)
روشن/خاموش بخش پست · هر N روز یک پست · تعداد محتوای روزانه · 📡 منابع مقصد (از صفحه‌ی اصلی اینجا منتقل شد) ·
قالب و ظاهر / تیتر و کپشن / موضوع و فیلتر / انتشار.
- خاموش بودن بخش پست یا «خارج از نوبتِ هر N روز» → مانیتور برای این مقصد پست نمی‌سازد (`news_destinations_for_source`).

### تنظیمات ساخت اتوماتیک استوری (`news:st:ID`)
روشن/خاموش · هر N روز · تک استوری / رشته (۲ تا ۱۰) · فونت (AI یا فایل کاربر) · نمونه‌ی استوری تأییدشده ·
نکات متن · نکات ساخت · محتوای خام (AI یا ارسال توسط کاربر) · هدف (خودم / پیشنهاد AI) · موضوع و توضیحات (خودم / AI) ·
پروفایل برند فعال/غیرفعال · خروجی (ترکیبی / عکس / ویدیو) · 🚀 ساخت همین حالا.

### جریان ساخت
1. کرون `news_story` (هر ۱۰ دقیقه، در «تنظیم کرون‌ها» ثبت شده) مقصدهای سررسید را پیدا می‌کند.
2. اگر «محتوای خام = ارسال توسط من»: پیام درخواست محتوا (📤 ارسال محتوا / 🤖 انتخاب AI / ⏭ رد) → کاربر عکس/ویدیو/توضیح می‌فرستد → «✅ شروع ساخت».
3. AI طرح را می‌سازد (هدف، موضوع، تیتر+متن هر فریم، پرامپت تصویر، فونت)، هر فریم ۱۰۸۰×۱۹۲۰ رندر می‌شود (عکس؛ یا ویدیو با ffmpeg).
4. پیش‌نمایش برای مالک و ادمین‌های «استوری»: ✅ تأیید (فایل‌های کیفیت کامل) · 🔄 بساز دوباره · ✏️ ویرایش متن (بدون AI) · 💬 دستور تغییر (AI طرح را اصلاح می‌کند) · ❌ رد.

### ادمین مقصد
هر ادمین سطح دسترسی دارد: پست / استوری / هر دو (روی نام ادمین بزنید تا عوض شود). پیش‌نویس پست فقط به ادمین‌های «پست»،
و استوری فقط به ادمین‌های «استوری» می‌رسد. (ذخیره در `news_settings` با کلید `adm_scope_<id>`.)

### پرامپت ادمین ربات
🛠 پنل مدیریت ← ادمین هوشمند ← «📝 پرامپت پست» / «🎬 پرامپت استوری»: ثبت/ویرایش/حذف. به همه‌ی ساخت‌های تیتر/کپشن (پست) و طرح استوری اضافه می‌شود.

## داده
- تنظیمات هر مقصد در جدول موجود `news_settings` (کلیدهای `post_*`, `story_*`) — بدون ستون جدید.
- جدول جدید `news_story_sets` (نسخه‌ی اسکیما ۳۳) → بعد از آپلود، «migrate» را اجرا کنید.
- فایل‌ها: `uploads/news/output/story/<setId>/`.

## نیازها / محدودیت‌ها
- ⚠️ PHP در محیط توسعه نبود؛ کد اجرا نشده (فقط تعادل پرانتز/آکولاد بررسی شد). اول `migrate` و بعد تست دستی با یک مقصد.
- فونت: باید حداقل یک ttf روی سرور باشد (`uploads/news/Ray-ExtraBlack.ttf` یا فونت مقصد یا فایل‌های `uploads/news/fonts/*.ttf`)؛ «انتخاب AI» فقط بین همین فونت‌ها انتخاب می‌کند. رنگ متن سفید است.
- ویدیو: به ffmpeg + proc_open نیاز دارد؛ ندارد → آن فریم عکس ساخته می‌شود و در پیش‌نمایش هشدار می‌آید. ویدیوی از عکس = زوم آرام ۶ ثانیه؛ ویدیوی خام کاربر تا ۱۵ ثانیه.
- ربات انتشار مستقیم در اینستاگرام ندارد؛ بعد از تأیید فایل‌ها فرستاده می‌شوند.
- ساخت دستی/دستور تغییر داخل وب‌هوک اجرا می‌شود (ممکن است چند دقیقه طول بکشد)؛ ساخت خودکار در کرون.
- هزینه‌ی سکه: مصرف متن و هر تصویر AI مثل بقیه‌ی ادمین هوشمند کسر می‌شود.
- ادمینی که قبلاً ثبت شده، پیش‌فرض «هر دو» است.


---

# ارتقاهای v96

## پایداری
- **صف پس‌زمینه**: کرون جدید `news_story_jobs` (هر ۱ دقیقه). تا وقتی زنده باشد، «ساخت همین حالا»، «بساز دوباره»، «دستور تغییر» و «شروع ساخت» به صف می‌روند و نتیجه خودکار می‌رسد؛ اگر کرون کار نکند همان لحظه داخل وب‌هوک انجام می‌شود.
- تست دودی: `php tests/story_smoke_test.php` (JSON، زمان‌بندی، scope، برآورد هزینه، تقویم، لینک امضادار، رندر ۱۰۸۰×۱۹۲۰، ویدیو، چرخه‌ی وضعیت).

## انتشار مستقیم در اینستاگرام (Graph API)
- مالک مقصد: «🔗 انتشار مستقیم اینستاگرام» ← ثبت شناسه‌ی حساب Business + توکن بلندمدت (رمزشده با ENCRYPTION_KEY) ← «🔍 تست اتصال».
- دو کلید جدا: استوری بعد از تأیید، پست بعد از تأیید (پست: فقط تک‌عکس/ورق اول).
- اینستاگرام فایل را از لینک عمومی می‌گیرد: `bot/media_pub.php` با توکن امضادار و موقت (۱ ساعت)، فقط فایل‌های `uploads/news`. نیاز به HTTPS عمومی.
- نیازها: حساب Business/Creator متصل به صفحه‌ی فیسبوک + دسترسی `instagram_content_publish`. اینستاگرام ویدیوی استوری را پردازش می‌کند (تا ~۲.۵ دقیقه انتظار).
- پست‌های «زمان‌بندی‌شده» از مسیر قدیمی منتشر می‌شوند و انتشار مستقیم فقط بعد از تأیید دستی اجرا می‌شود.

## کیفیت خروجی
«🎨 ظاهر استوری»: رنگ متن (۵ رنگ)، جای متن (بالا/وسط/پایین)، کادر پشت متن، هندل صفحه، قالب PNG آپلودی مقصد، و «👁 پیش‌نمایش ظاهر» رایگان (بدون AI).
قالب «ساخته‌شده با AI» عمداً استفاده نمی‌شود (هزینه‌ی ناخواسته).

## یادگیری
- ثبت خودکار نمونه از استوری تأییدشده (گزینه).
- دلیل رد (بعد از ❌ پرسیده می‌شود) و دستورهای تغییر ذخیره و به طرح‌های بعدی داده می‌شود (۱۰ مورد آخر).
- تاریخچه‌ی ۱۵ موضوع/تیتر اخیر برای جلوگیری از تکرار.

## زمان‌بندی
«📆 زمان‌بندی دقیق»: روزهای هفته (پست و استوری)، ساعت شروع (استوری)، و تقویم نوبت‌های بعدی (۷ نوبت). برای پست، زمان دقیق ساعت وجود ندارد چون پست‌ها با منبع/مانیتور می‌آیند.

## هزینه
برآورد سکه قبل از «ساخت همین حالا»، مصرف ماه، و «سقف سکه‌ی ماهانه‌ی استوری» (۰ = بدون سقف؛ رسیدن به سقف ساخت خودکار را متوقف و یک‌بار خبر می‌دهد).

## آمار
«📊 آمار من ← 🎬 استوری»: مجموعه‌ها، تأیید/رد/در انتظار/ناموفق، نرخ تأیید به تفکیک مقصد.

## کارهای بعد از آپلود
1. `admin/migrate.php` (اگر هنوز نسخه‌ی ۳۳ نشده).
2. در «تنظیم کرون‌ها» دو کرون `news_story` (۱۰ دقیقه) و `news_story_jobs` (۱ دقیقه) را فعال و در cPanel/crontab مثل بقیه‌ی کرون‌ها بگذارید.
3. `php tests/story_smoke_test.php` و تست دستی یک مقصد.


---

# v97 — سایز خروجی پست
«تنظیمات پست ← 🎨 قالب و ظاهر ← 📐 سایز خروجی پست» حالا صفحه‌ی انتخاب سایز است (`news:sz:ID`):
- **اینستاگرام:** ۱۰۸۰×۱۳۵۰ (۴:۵، پیشنهادی)، ۱۰۸۰×۱۰۸۰ (۱:۱)، ۱۴۴۰×۱۹۲۰ (۳:۴)، ۱۰۸۰×۵۶۶ (۱.۹۱:۱)، ۱۰۸۰×۱۹۲۰ (۹:۱۶).
- **تلگرام:** ۱۲۸۰×۷۲۰ (۱۶:۹)، ۱۰۸۰×۱۰۸۰، ۱۰۸۰×۱۳۵۰، ۱۴۴۰×۱۹۲۰، ۱۲۰۰×۶۳۰ (پیش‌نمایش لینک)، ۱۲۸۰×۹۶۰ (۴:۳)، ۱۰۸۰×۱۹۲۰.
- **سایز دلخواه:** `عرضxارتفاع` بین ۳۲۰ تا ۴۰۹۶ (علامت `x`، `×` یا `*` پذیرفته می‌شود).
- تیتر و کادر تیره با سایز هماهنگ می‌شوند؛ قالب PNG به‌اندازه‌ی عرض مقیاس و وسط‌چین می‌شود (قالب‌هایی که برای ۱۴۴۰×۱۹۲۰ طراحی شده، روی نسبت‌های دیگر ممکن است بالا/پایین بریده یا خالی بماند).
- پست‌های قبلی تغییر نمی‌کنند؛ فقط پست‌های بعدی با سایز جدید ساخته می‌شوند.


---

# v98 — فرم دکمه‌ای دستیارهای هوشمند
- سوالات دیگر مرحله‌ای نیستند: هر سوال یک دکمه (دو دکمه در هر ردیف)؛ ✅ = پاسخ داده شده، ▫️ = خالی. روی دکمه بزن، جواب را بفرست، همان لحظه ذخیره می‌شود.
- «🔙 بازگشت به فرم» در صفحه‌ی هر سوال بدون تغییر برمی‌گرداند؛ «🗑 پاک‌کردن این پاسخ» فقط همان پاسخ را پاک می‌کند. سوال خالی مشکلی ندارد (در پرامپت «پاسخ داده نشده» می‌شود).
- «🚀 ساخت» پایین لیست: پرامپت نهایی (قالب دستیار + پاسخ‌ها) کامل و به AI فرستاده می‌شود؛ پاسخ همان‌جا می‌آید. حداقل یک سوال باید پر باشد.
- پاسخ‌ها لحظه‌ای در `user_assistant_answers` ذخیره می‌شوند؛ پس بعد از خطا (اتصال، سکه، AI) فرم و پاسخ‌ها سر جایشان است. پیام خطا دکمه‌های «🔁 تلاش دوباره» و «📝 ویرایش اطلاعات» دارد.
- زیر پاسخ هر ساخت «📝 ویرایش اطلاعات (سوالات)» هست تا برای دستور بعدی فرم را باز کنی، یک جواب را عوض کنی یا با «🧹 پاک‌کردن همه‌ی پاسخ‌ها» از نو بچینی.
- «ادامه با اطلاعات قبلی» حالا فرم پر را باز می‌کند (دیگر مستقیم نمی‌سازد)؛ «شروع از اول» پاسخ‌ها را پاک می‌کند؛ «استفاده از اطلاعات دستیار دیگر» پاسخ‌های هم‌نام را در فرم می‌ریزد.
- کاربری که وسط روند قدیمی مرحله‌ای بود، خودکار به فرم منتقل می‌شود.
- تغییر دیتابیس ندارد. عنوان دکمه‌ها از ۲۶ حرف اول متن سوال ساخته می‌شود (جدول سوالات ستون عنوان ندارد).


---

# v99 — فرم هوشمند دستیارها (۱۰ ارتقا)
**بعد از آپلود حتماً `admin/migrate.php` را اجرا کن (نسخه‌ی ۳۴).**

1. **عنوان کوتاه + مثال** هر سوال (پنل وب ← دستیارها ← ویرایش دستیار ← سوالات). حالا هر سوال قابل ویرایش است (قبلاً فقط افزودن/حذف بود).
2. **نوع سوال:** متنی / تک‌گزینه‌ای / چندگزینه‌ای (هر خط یک گزینه، تا ۱۲) + گزینه‌ی «سایر (متن دلخواه)».
3. **اجباری/اختیاری:** ❗ روی دکمه‌ی سوال اجباریِ بی‌پاسخ؛ «ساخت» تا پر شدنشان نمی‌سازد و فهرستشان را نشان می‌دهد.
4. **👁 پرامپت نهایی:** برای ادمین‌های ربات همیشه؛ برای کاربران فقط اگر در تنظیمات دستیار تیک «اجازه‌ی مشاهده‌ی پرامپت» خورده باشد.
5. **پروفایل‌های ذخیره‌ی اطلاعات:** «💾 ذخیره با نام» و «📂 پروفایل‌ها» (تا ۱۰ عدد برای هر دستیار؛ بارگذاری/حذف).
6. **پیش‌پر از پروفایل برند:** هر سوال می‌تواند یک «کلید پیش‌پر» (نام برند، حوزه، مخاطب، لحن، محصول، رقبا) داشته باشد؛ با «شروع از اول/بزن بریم» پر می‌شود. سوال گزینه‌ای فقط اگر مقدار برند یکی از گزینه‌ها باشد پر می‌شود.
7. **تاریخچه‌ی نتایج:** ۱۰ نتیجه‌ی آخر هر دستیار («🕘 نتایج قبلی») + ⭐ علاقه‌مندی (پاک نمی‌شود).
8. **✏️ اصلاح با دستور:** همان خروجی با دستور کاربر اصلاح می‌شود (فقط متنی)؛ هزینه‌ی سکه‌ای نصفِ ساخت (حداقل ۱)؛ بدون سکه، یک پیام از سقف مصرف کسر می‌شود.
9. **آمار (پنل وب ← «آمار فرم دستیارها»):** ورود به فرم، ساخت، موفق، نرخ تکمیل، 👍/👎، و نرخ پرشدن هر سوال (کمترین اول).
10. **نوار پیشرفت** ▰▰▰▱▱ در بالای فرم، و برچسب دکمه‌ی ساخت: «🚀 ساخت (❗ N سوال اجباری مانده)» یا «🚀 ساخت ✅». (تلگرام رنگ دکمه را پشتیبانی نمی‌کند؛ از ایموجی استفاده شد.)

نکات: سوال‌های قبلی همه «متنی و اختیاری» می‌مانند. تاریخچه و آمار از لحظه‌ی آپلود شروع می‌شود. نتیجه‌ی تصویری در تاریخچه فقط به‌صورت یادداشت ذخیره می‌شود (خود تصویر نه).


---

# v100 — بازبینی دکمه‌های بازگشت (به مرحله‌ی قبل)
**دستیارهای هوشمند (فرم):** خطای سکه/سقف مصرف حالا «📝 بازگشت به فرم (اطلاعاتت ذخیره است)» دارد؛ پیام نتیجه‌ی بازشده از «نتایج قبلی» دکمه‌ی «🔙 بازگشت به نتایج قبلی» دارد؛ «اصلاح با دستور» و «پاک‌کردن حافظه» به فرم برمی‌گردند.
**بازسازی پست اینستاگرام:** هر مرحله یک قدم عقب می‌رود (نه مستقیم به مقصد): تأیید ← انتخاب حالت ← انتخاب ورق‌ها ← لینک؛ انتخاب تیتر/فریم ← صفحه‌ی تأیید. «✖️ انصراف» جدا و به مقصد.
**ابزارها:** دکمه‌ی تأیید/ساخت دوباره/رد خروجی ابزارها و پرسش CTA کپشن «🔙 بازگشت» دارند.
**استوری:** از صفحه‌ی «ارسال محتوا» ← پیام درخواست؛ از «دستور تغییر/انتخاب استوری/ویرایش متن» ← پیام کنترل پیش‌نمایش (همان پیام ویرایش می‌شود)؛ خطاهای آپلود فونت/نمونه ← صفحه‌ی همان بخش؛ خطاهای محتوای خام ← کیبورد محتوای خام؛ بقیه‌ی پیام‌های خطا ← «🔙 بازگشت».
پیام‌های گذرای «⏳ …» عمداً دکمه ندارند (بعدشان نتیجه یا خطا با دکمه می‌آید).
