| name | programeaza-postare |
| description | Creează, programează, modifică, aprobă și publică postări pe social media (Facebook, Instagram, TikTok etc.). La „fă o postare", „programează pe Facebook mâine la 7", „postează oferta de azi pe Instagram", „modifică postarea", „aprobă postarea", „postează acum". |
Programează o postare social media
Pentru postări cu link către orice pagină, citește knowledge/marketing-impact.md. Configurează UTM pe draft prin configure_social_post_tracking, verifică preview_social_post_tracking și limitele textului/primului comentariu, apoi urmează publicarea autorizată obișnuită. Pentru bio sau publicare manuală creează un link final cu create_marketing_tracking_link; nu distribui tokenul de preview. Rezultatele se citesc prin get_marketing_impact_report, separat de reach/engagement.
Pentru TikTok citește knowledge/tiktok-publicare.md: conectare OAuth, video/foto, opțiuni reale ale contului și verificarea rezultatului. Creează întâi ciorna; configure_tiktok_post pregătește opțiunile, iar utilizatorul verifică materialul și confirmă TikTok în editor înainte de publicare/programare. Confirmarea aceasta nu este înlocuită de aprobarea editorială sau de un acord transmis în chat. pending:true înseamnă procesare: urmărește get_tiktok_post_status, fără retrimitere.
- Vezi ce conturi sunt conectate:
list_social_accounts (opțional pe brandId). Dacă nu există niciun cont activ pe platforma cerută, conectează-l rapid prin MCP:
genereaza_link_conectare(platforma) — platforma ∈ facebook/tiktok/youtube/linkedin/google_business (opțional brandId). Întoarce un link de conectare (OAuth) pe care utilizatorul îl deschide în browserul LUI, logat în contul care administrează pagina; linkul expiră în ~10 minute, deci să-l deschidă imediat — conectarea se finalizează automat și în siguranță. După ce confirmă, verifică cu verifica_integrare.
- Pentru TikTok linkul conduce la Integrări: utilizatorul apasă conectarea din pagina autentificată, apoi continuă OAuth în același browser. Nu îi cere chei de aplicație sau tokenuri. După conectare verifică și
get_tiktok_creator_info.
- Instagram NU are link separat: după ce Facebook e conectat, leagă-l cu
conecteaza_instagram_din_facebook (opțional brandId). Cere pagina Facebook cu permisiuni Instagram + un cont IG Business/Creator asociat; la eroare transmite mesajul exact.
- Alternativ, dă link la pagina de conturi cu
gaseste_in_aplicatie("conturi social media").
- Compune textul postării împreună cu utilizatorul (sau propune 2-3 variante dacă ți-o cere). Ține cont de brand și de ce vrea să promoveze.
schedule_social_post:
brandId, content (textul), platforms (ex. ["facebook","instagram"]),
scheduledAt în viitor, format ISO cu fus (ex. 2026-06-15T19:00:00+03:00) → postarea e PROGRAMATĂ pentru acea oră;
- fără
scheduledAt → rămâne ciornă (draft);
- opțional
mediaUrls (imagini/video publice), postType (post/story/reel/carousel), firstComment, altText.
- IMPORTANT — fluxul de aprobare: orice postare creată prin această conexiune intră în „În așteptare aprobare" și NU se publică automat. Se publică la ora programată doar după ce e aprobată. Spune-i clar utilizatorului:
„Am programat postarea pe Facebook+Instagram pentru 15 iunie, ora 19:00. Apare cu «În așteptare aprobare» — se publică la oră doar după ce o aprobi (din pagina Social Media → Aprobă, sau îmi spui mie să o aprob)." + link (gaseste_in_aplicatie("social media")).
Aprobare și publicare
- Aprobă / respinge:
approve_social_post(postId, approvalStatus: "approved" | "rejected", approvalNote?). approved → postarea devine eligibilă și se publică la ora programată. rejected → nu se va publica. Este necesar acordul utilizatorului pentru aprobarea în numele lui; folosește acordul deja dat în sesiune dacă acoperă postarea concretă.
- Ce așteaptă aprobare:
list_social_posts(approvalStatus: "pending") — dacă o postare programată „nu s-a publicat", de cele mai multe ori e pentru că așteaptă aprobare aici.
- Postează ACUM (fără să aștepte ora):
publish_social_post(postId, confirm: true). Postarea trebuie să fie aprobată întâi. Trimite confirm:true numai dacă utilizatorul a autorizat publicarea materialului pe conturile selectate; nu cere din nou același acord deja acordat în sesiune. Util și înainte de a promova o postare (boost-ul cere o postare deja publicată — vezi skill-ul gestioneaza-reclame).
Reguli
- Verifică data/ora și platformele din cerere; clarifică doar ce lipsește. Nu aproba/publica fără acordul utilizatorului.
- Dacă utilizatorul dă o oră fără fus, presupune Europe/Bucharest și spune ce ai presupus.
- Modifică o postare existentă:
update_social_post(postId, ...) cu DOAR câmpurile de schimbat (content/scheduledAt/platforms/postType/firstComment/mediaUrls/altText). scheduledAt: null o face ciornă. NU șterge și recrea (recrearea îi schimbă ID-ul). Doar postări nepublicate.
- Duplică o postare:
duplicate_social_post(postId, platforms?, scheduledAt?) — „fă aceeași postare și pe Instagram" / „repostează săptămâna viitoare". Copia e tot în așteptare aprobare.
- Mai multe postări odată:
bulk_schedule_social_posts(posts) — posts = listă (max 100), fiecare cu content + platforms și opțional scheduledAt/mediaUrls/postType/firstComment/altText. Toate intră în așteptare aprobare. Import parțial: rândurile valide se creează chiar dacă unele dau eroare.
- Diversitatea conținutului (avertisment la programare): la programare (și una câte una, și în masă), sistemul compară postarea cu cele deja programate/publicate în zilele apropiate. Dacă tema se repetă prea des sau frazele sunt aproape identice cu postări recente, răspunsul vine cu un AVERTISMENT — postarea se creează totuși (nu blochează). Spune-i utilizatorului ce a semnalat și propune o variație de temă/formulare; poate continua așa, dar în cunoștință de cauză.
- Îngroșarea textului: Facebook și Instagram nu au text formatat — îngroșarea se obține doar cu caractere speciale. Scrie cifrele NORMAL (10:00, 0722 123 456) și marchează cu
**text** ce vrei îngroșat; conversia o face sistemul, determinist. Diacriticele (ă â î ș ț) se îngroașă și ele — scrie-le normal în cuvânt și marchează cuvântul întreg, restul e treaba sistemului. Nu compune tu literele îngroșate caracter cu caracter: acolo se corup orele și numerele de telefon, de aceea cifrele rămân mereu normale. Dacă utilizatorul vrea un accent și mai puternic, propune-i scriere cu MAJUSCULE, un rând separat cu emoji, sau textul pus într-o imagine.
- Anulare / ștergere:
cancel_social_post(postId) o marchează anulată (rămâne în listă); o scoate definitiv din calendar. Doar postări nepublicate.