Implementación inicial del sistema de automatización de redes sociales

- Estructura completa del proyecto con FastAPI
- Modelos de base de datos (productos, servicios, posts, calendario, interacciones)
- Publishers para X, Threads, Instagram, Facebook
- Generador de contenido con DeepSeek API
- Worker de Celery con tareas programadas
- Dashboard básico con templates HTML
- Docker Compose para despliegue
- Documentación completa

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-28 01:11:44 +00:00
commit 049d2133f9
53 changed files with 5876 additions and 0 deletions

180
scripts/seed_database.py Normal file
View File

@@ -0,0 +1,180 @@
"""
Script para poblar la base de datos con datos iniciales.
"""
import json
import sys
from pathlib import Path
from datetime import time
# Agregar el directorio raíz al path
sys.path.insert(0, str(Path(__file__).parent.parent))
from app.core.database import SessionLocal, engine
from app.models import Base, TipTemplate, ContentCalendar, Service
def seed_tips():
"""Cargar tips iniciales."""
db = SessionLocal()
try:
# Cargar JSON de tips
tips_file = Path(__file__).parent.parent / "data" / "tips_iniciales.json"
with open(tips_file, "r", encoding="utf-8") as f:
tips_data = json.load(f)
for tip in tips_data:
existing = db.query(TipTemplate).filter(
TipTemplate.title == tip["title"]
).first()
if not existing:
new_tip = TipTemplate(
category=tip["category"],
title=tip["title"],
template=tip["template"],
difficulty=tip.get("difficulty", "basico"),
is_active=True,
is_evergreen=True
)
db.add(new_tip)
db.commit()
print(f"{len(tips_data)} tips cargados")
finally:
db.close()
def seed_calendar():
"""Crear calendario inicial."""
db = SessionLocal()
try:
# Calendario de ejemplo
calendar_entries = [
# Tips diarios - mañana
{"day": 0, "time": "09:00", "type": "tip_tech", "platforms": ["x", "threads", "instagram"]},
{"day": 1, "time": "09:00", "type": "tip_tech", "platforms": ["x", "threads", "instagram"]},
{"day": 2, "time": "09:00", "type": "tip_tech", "platforms": ["x", "threads", "instagram"]},
{"day": 3, "time": "09:00", "type": "tip_tech", "platforms": ["x", "threads", "instagram"]},
{"day": 4, "time": "09:00", "type": "tip_tech", "platforms": ["x", "threads", "instagram"]},
# Tips diarios - tarde
{"day": 0, "time": "15:00", "type": "dato_curioso", "platforms": ["x", "threads"]},
{"day": 1, "time": "15:00", "type": "dato_curioso", "platforms": ["x", "threads"]},
{"day": 2, "time": "15:00", "type": "dato_curioso", "platforms": ["x", "threads"]},
{"day": 3, "time": "15:00", "type": "dato_curioso", "platforms": ["x", "threads"]},
{"day": 4, "time": "15:00", "type": "dato_curioso", "platforms": ["x", "threads"]},
# Productos - Lunes, Miércoles, Viernes
{"day": 0, "time": "12:00", "type": "producto", "platforms": ["facebook", "instagram"], "approval": True},
{"day": 2, "time": "12:00", "type": "producto", "platforms": ["facebook", "instagram"], "approval": True},
{"day": 4, "time": "12:00", "type": "producto", "platforms": ["facebook", "instagram"], "approval": True},
# Servicios - Martes, Jueves
{"day": 1, "time": "11:00", "type": "servicio", "platforms": ["x", "facebook", "instagram"], "approval": True},
{"day": 3, "time": "11:00", "type": "servicio", "platforms": ["x", "facebook", "instagram"], "approval": True},
# Frases motivacionales - Lunes, Miércoles, Viernes
{"day": 0, "time": "07:00", "type": "frase_motivacional", "platforms": ["instagram", "facebook"]},
{"day": 2, "time": "07:00", "type": "frase_motivacional", "platforms": ["instagram", "facebook"]},
{"day": 4, "time": "07:00", "type": "frase_motivacional", "platforms": ["instagram", "facebook"]},
]
for entry in calendar_entries:
hour, minute = map(int, entry["time"].split(":"))
new_entry = ContentCalendar(
day_of_week=entry["day"],
time=time(hour=hour, minute=minute),
content_type=entry["type"],
platforms=entry["platforms"],
requires_approval=entry.get("approval", False),
is_active=True
)
db.add(new_entry)
db.commit()
print(f"{len(calendar_entries)} entradas de calendario creadas")
finally:
db.close()
def seed_services():
"""Crear servicios iniciales."""
db = SessionLocal()
try:
services = [
{
"name": "Chatbots Inteligentes",
"description": "Implementamos chatbots con IA para WhatsApp e Instagram que atienden a tus clientes 24/7.",
"short_description": "Chatbots IA para WhatsApp e Instagram",
"category": "automatizacion",
"target_sectors": ["retail", "servicios", "hoteles"],
"benefits": ["Atención 24/7", "Respuestas instantáneas", "Integración con CRM", "Escalamiento a humanos"],
"call_to_action": "Agenda una demo gratuita"
},
{
"name": "Sistemas para Hoteles",
"description": "Software completo para gestión hotelera: reservas, nómina, inventario y dashboards financieros.",
"short_description": "Gestión hotelera integral",
"category": "desarrollo",
"target_sectors": ["hoteles", "turismo"],
"benefits": ["Control de reservas", "Gestión de nómina", "Inventario automatizado", "Reportes en tiempo real"],
"call_to_action": "Solicita una cotización"
},
{
"name": "Automatización de Procesos",
"description": "Automatizamos tareas repetitivas con bots y flujos de trabajo inteligentes.",
"short_description": "Automatiza tareas repetitivas",
"category": "automatizacion",
"target_sectors": ["empresas", "pymes", "corporativos"],
"benefits": ["Ahorro de tiempo", "Reducción de errores", "Mayor productividad", "ROI medible"],
"call_to_action": "Cuéntanos tu proceso"
},
{
"name": "Integración de IA",
"description": "Integramos inteligencia artificial en tus procesos de negocio para tomar mejores decisiones.",
"short_description": "IA para tu negocio",
"category": "ia",
"target_sectors": ["empresas", "pymes", "corporativos"],
"benefits": ["Análisis predictivo", "Automatización inteligente", "Insights de datos", "Ventaja competitiva"],
"call_to_action": "Descubre cómo la IA puede ayudarte"
}
]
for service in services:
existing = db.query(Service).filter(Service.name == service["name"]).first()
if not existing:
new_service = Service(**service, is_active=True)
db.add(new_service)
db.commit()
print(f"{len(services)} servicios creados")
finally:
db.close()
def main():
"""Ejecutar todos los seeds."""
print("🌱 Iniciando seed de base de datos...\n")
# Crear tablas
Base.metadata.create_all(bind=engine)
print("✅ Tablas creadas\n")
seed_tips()
seed_calendar()
seed_services()
print("\n✅ Seed completado!")
if __name__ == "__main__":
main()