📱

Solución: Publicación en Facebook

Guía Completa para Cuentas Gratuitas y Modo Development

✅ Sin verificación de negocio | ✅ 100% gratis | ✅ Para proyectos UTH

🚨 PROBLEMA COMÚN AL PUBLICAR

Error típico: "No se puede publicar en Facebook" o "Permisos insuficientes"

Mensaje de error:

  • "(#200) Provide valid app ID"
  • "(#200) Requires extended permission: publish_actions"
  • "No administras ninguna Página de Facebook"
  • "This endpoint requires the 'pages_manage_posts' permission"

Causa principal: Facebook cambió su API en 2018 y ya NO permite publicar en perfiles personales directamente.

✅ SOLUCIÓN COMPLETA Y FUNCIONAL

¡Sí puedes publicar en Facebook con cuenta gratuita!

Esta guía te muestra 3 métodos que funcionan 100% en modo Development:

  • Método 1: Publicar en Página de Facebook (RECOMENDADO)
  • Método 2: Usar Facebook Test Users (alternativa)
  • Método 3: Compartir enlaces en feed (limitado)

🎯 Contexto: ¿Por qué Facebook bloqueó publicaciones en perfiles?

📜 Historia de la API de Facebook

Antes de 2018:

  • Apps podían publicar directamente en el muro personal del usuario
  • Permiso: publish_actions
  • Muy fácil pero también muy abusado (spam, publicaciones no autorizadas)

Después del escándalo Cambridge Analytica (2018):

  • Facebook bloqueó publish_actions permanentemente
  • Razón: proteger privacidad de usuarios
  • Solución: solo permitir publicaciones en Páginas de Facebook

Actualidad (2026):

  • Única forma de publicar: usar Páginas de Facebook
  • Permisos necesarios: pages_manage_posts
  • En modo Development: funciona sin restricciones ✅

🛠️ MÉTODO 1: Publicar en Página de Facebook (RECOMENDADO)

✅ Ventajas de este método

  • ✅ Método oficial de Facebook
  • ✅ Funciona en modo Development sin verificación
  • ✅ 100% gratis
  • ✅ Obtención de métricas (likes, comentarios, shares)
  • ✅ Ideal para proyectos universitarios
  • ✅ Puedes crear páginas ilimitadas
PASO 1: Crear Página de Facebook (2 minutos)

¿Por qué crear una Página?

Las Páginas de Facebook son perfiles públicos para negocios, marcas, organizaciones, etc. Son DIFERENTES a los perfiles personales y permiten:

Crear tu Página paso a paso:

  1. Abrir creador de páginas:
  2. Seleccionar tipo:
    • Tipo de Página: "Comunidad o Figura Pública"
    • O puedes elegir "Empresa o Marca" (funciona igual)
  3. Configurar información básica:
    • Nombre de la Página: "Proyecto Facebook API - UTH"
    • Puedes usar cualquier nombre: "Pruebas API", "Test Development", etc.
    • Categoría: Busca y selecciona "Educación" o "Desarrollo de software"
  4. Crear la página:
    • Haz clic en "Crear Página"
    • ¡Listo! Ya tienes tu página
  5. Personalización (OPCIONAL):
    • Agregar foto de perfil (puedes usar logo de UTH o una imagen genérica)
    • Agregar descripción: "Página de pruebas para proyecto universitario de integración con Facebook API"
    • Esto es opcional, lo importante es que la página exista

📸 Confirmación visual:

Después de crear, deberías ver:

  • ✅ Nombre de tu página en la parte superior
  • ✅ Botón "Publicar" disponible
  • ✅ Menú lateral con opciones de administración
  • ✅ Sección "Configuración" accesible

💡 Tip: Guarda el ID de la página. Lo encuentras en: Configuración → Acerca de → ID de la página

PASO 2: Configurar Permisos en Facebook Developers

Verificar permisos necesarios:

  1. Abrir Facebook Developers:
  2. Agregar producto Facebook Login (si no lo tienes):
    • Panel izquierdo → "Add Product"
    • Busca "Facebook Login" → "Set Up"
    • Plataforma: Web
  3. Verificar App Mode:
    • Arriba a la derecha debe decir: Development
    • Si dice "Live", cámbialo a Development
  4. Revisar permisos disponibles:
    • Ve a "App Review" → "Permissions and Features"
    • En modo Development, estos permisos están AUTOMÁTICAMENTE disponibles:

✅ Permisos disponibles en modo Development

Permiso Descripción Estado
public_profile Nombre, foto de perfil, ID Disponible
email Correo electrónico del usuario Disponible
pages_show_list Listar páginas administradas Disponible
pages_read_engagement Leer métricas de páginas Disponible
pages_manage_posts Publicar en páginas Disponible

Nota: En modo Development NO necesitas solicitar aprobación para estos permisos.

PASO 3: Actualizar Código Django (CRÍTICO)

Actualizar función facebook_login() en views.py:

❌ CÓDIGO ANTIGUO (NO FUNCIONA):

# Este código ya NO funciona desde 2018
auth_url += "&scope=email,public_profile,publish_actions"

✅ CÓDIGO CORRECTO (2026):

# social_app/views.py - función facebook_login()

def facebook_login(request):
    auth_url = "https://www.facebook.com/v18.0/dialog/oauth?"
    auth_url += f"client_id={settings.FACEBOOK_APP_ID}"
    auth_url += f"&redirect_uri={settings.FACEBOOK_REDIRECT_URI}"
    
    # ⬇️ ESTOS SON LOS PERMISOS CORRECTOS ⬇️
    auth_url += "&scope=email,public_profile,pages_show_list,pages_read_engagement,pages_manage_posts"
    
    auth_url += "&response_type=code"
    return redirect(auth_url)

Explicación de cada permiso:

PASO 4: Actualizar función publicar_facebook() en views.py

Código completo para publicar en Página:

# social_app/views.py - función publicar_facebook()

@login_required
def publicar_facebook(request):
    """
    Publica en una PÁGINA de Facebook (no en perfil personal).
    """
    
    if request.method == 'POST':
        mensaje = request.POST.get('mensaje', '').strip()
        
        if not mensaje:
            return render(request, 'publicar.html', {
                'error': 'El mensaje no puede estar vacío'
            })
        
        try:
            # Obtener cuenta de Facebook del usuario
            account = FacebookAccount.objects.get(user=request.user)
            
            # ========================================
            # PASO 1: Obtener lista de PÁGINAS administradas
            # ========================================
            pages_url = "https://graph.facebook.com/v18.0/me/accounts"
            pages_params = {
                'access_token': account.access_token,
            }
            
            pages_response = requests.get(pages_url, params=pages_params)
            pages_data = pages_response.json()
            
            # Verificar errores al obtener páginas
            if 'error' in pages_data:
                return render(request, 'publicar.html', {
                    'error': f"Error de Facebook: {pages_data['error']['message']}",
                    'detalle': 'Asegúrate de haber autorizado el permiso "pages_manage_posts"',
                    'solucion_html': '''
                        Solución:
                        
  1. Cierra sesión en tu app
  2. Vuelve a hacer login con Facebook
  3. Autoriza TODOS los permisos solicitados
''' }) # Verificar si el usuario tiene páginas if not pages_data.get('data'): return render(request, 'publicar.html', { 'error': '❌ No administras ninguna Página de Facebook', 'detalle': 'Facebook ya NO permite publicar en perfiles personales desde 2018.', 'solucion_html': ''' Solución rápida (2 minutos):
  1. Ve a facebook.com/pages/create
  2. Crea una página de prueba con cualquier nombre
  3. Vuelve a esta página e intenta publicar de nuevo

Tip: La página puede ser de prueba, no necesita contenido real.

''' }) # ======================================== # PASO 2: Usar la PRIMERA página (o permitir seleccionar) # ======================================== primera_pagina = pages_data['data'][0] page_id = primera_pagina['id'] page_access_token = primera_pagina['access_token'] # Token ESPECÍFICO de la página page_name = primera_pagina['name'] # ======================================== # PASO 3: Publicar en la PÁGINA # ======================================== post_url = f"https://graph.facebook.com/v18.0/{page_id}/feed" data = { 'message': mensaje, 'access_token': page_access_token, # ¡IMPORTANTE! Usar token de la PÁGINA } # Hacer petición POST a Facebook response = requests.post(post_url, data=data) post_data = response.json() # Verificar si hubo error al publicar if 'error' in post_data: error_message = post_data['error']['message'] error_code = post_data['error'].get('code', 'N/A') return render(request, 'publicar.html', { 'error': f"Error {error_code}: {error_message}", 'detalle': 'Revisa que tu app esté en modo Development', 'json_response': json.dumps(post_data, indent=2) }) # ======================================== # PASO 4: Guardar publicación en base de datos # ======================================== FacebookPost.objects.create( account=account, mensaje=mensaje, post_id=post_data.get('id', ''), estado='publicado', ) # Construir URL del post post_facebook_url = f"https://www.facebook.com/{post_data.get('id', '').replace('_', '/posts/')}" # Redirigir con mensaje de éxito return render(request, 'publicar.html', { 'success': True, 'mensaje': f'¡Publicación realizada exitosamente en la Página: {page_name}!', 'post_id': post_data.get('id'), 'post_url': post_facebook_url, 'page_name': page_name, }) except FacebookAccount.DoesNotExist: return redirect('facebook_login') except Exception as e: return render(request, 'publicar.html', { 'error': f'Error inesperado: {str(e)}', 'detalle': 'Revisa los logs para más información' }) # Si es GET, mostrar formulario return render(request, 'publicar.html')

⚠️ Puntos críticos del código

  • Línea clave 1: me/accounts - Obtiene lista de páginas del usuario
  • Línea clave 2: page_access_token - Cada página tiene su propio token de acceso
  • Línea clave 3: {page_id}/feed - Endpoint para publicar en página
  • Línea clave 4: Usar page_access_token NO el token del usuario
PASO 5: Probar el Sistema Completo

Checklist pre-prueba:

  • ☐ Página de Facebook creada y activa
  • ☐ App en modo Development
  • ☐ Código actualizado con permisos correctos
  • ☐ Servidor Django ejecutándose: python manage.py runserver
  • ☐ Base de datos migrada: python manage.py migrate

Proceso de prueba paso a paso:

  1. Cerrar sesión anterior (si existe):
    • Ve a http://localhost:8000/logout/ (si tienes esa ruta)
    • O borra cookies del navegador para localhost:8000
    • Esto asegura que obtengas los nuevos permisos
  2. Iniciar sesión con Facebook:
    • Ve a: http://localhost:8000/facebook/login/
    • Serás redirigido a Facebook
  3. Autorizar permisos:
    • Facebook mostrará diálogo solicitando permisos
    • Deberías ver: "Administrar tus Páginas de Facebook"
    • Haz clic en "Continuar como [Tu Nombre]"
  4. Seleccionar página (puede aparecer):
    • Facebook puede preguntar qué página usar
    • Selecciona la página que creaste
    • Marca "Seleccionar todo" si te lo pregunta
  5. Acceder al dashboard:
    • Deberías ser redirigido a: http://localhost:8000/dashboard/
    • Verás tu nombre y foto de Facebook
  6. Ir a publicar:
    • Clic en botón "Publicar en Facebook"
    • O ve directo a: http://localhost:8000/facebook/publicar/
  7. Escribir mensaje de prueba:
    • Escribe: "¡Hola desde mi aplicación Django! 🚀 #ProyectoUTH #FacebookAPI"
    • Haz clic en "Publicar"
  8. Verificar éxito:
    • Deberías ver mensaje: "¡Publicación realizada exitosamente en la Página: [nombre]!"
    • Se mostrará ID del post y enlace directo
  9. Confirmar en Facebook:
    • Abre Facebook en otra pestaña
    • Ve a tu Página de Facebook
    • Deberías ver la publicación que acabas de hacer

🎉 ¡ÉXITO!

Si seguiste todos los pasos, tu publicación debería estar visible en tu Página de Facebook.

Características funcionando:

  • ✅ Autenticación OAuth con Facebook
  • ✅ Publicación en Página de Facebook
  • ✅ Almacenamiento en base de datos MySQL
  • ✅ Obtención de ID del post
  • ✅ Acceso a métricas (likes, comentarios, shares)

🔄 MÉTODO 2: Usar Test Users (Alternativa)

📋 ¿Qué son los Test Users?

Facebook permite crear usuarios de prueba ficticios que:

  • ✅ NO son cuentas reales
  • ✅ Se crean automáticamente desde Facebook Developers
  • ✅ Tienen acceso completo a tu app en Development
  • ✅ Ideales para testing sin afectar cuentas reales

Limitación: Las publicaciones solo son visibles para otros test users, no para usuarios reales.

Crear Test Users:

  1. Ve a Facebook Developers → Tu App
  2. Panel izquierdo → "Roles" → "Test Users"
  3. Haz clic en "Add" o "Create Test Users"
  4. Cantidad: 1-5 usuarios
  5. Permisos: Selecciona todos los permisos necesarios
  6. Haz clic en "Create"

Nota: Este método es útil para pruebas automatizadas, pero el Método 1 (Páginas) es mejor para demostraciones.

🚀 MÉTODO 3: Compartir Enlaces (Limitado)

⚠️ Método limitado

Facebook permite compartir enlaces usando el Share Dialog. Esto abre una ventana emergente donde el usuario puede publicar manualmente.

Limitaciones:

  • ❌ No es publicación automática (requiere interacción del usuario)
  • ❌ No se puede preestablecer el mensaje
  • ❌ Menos control sobre la publicación

Ventaja: ✅ No requiere permisos especiales

Implementación rápida:

<!-- En tu template HTML -->
<a href="https://www.facebook.com/sharer/sharer.php?u=https://tu-sitio.com"
   target="_blank"
   class="btn">
   Compartir en Facebook
</a>

📊 Comparación de Métodos

Método 2: Test Users

Usuarios de prueba ficticios


Ventajas:

  • ✅ No requiere Página
  • ✅ Usuarios controlados
  • ✅ Ideal para testing automatizado

Desventajas:

  • ❌ Publicaciones NO visibles públicamente
  • ❌ Solo para testing interno
  • ❌ No sirve para demostración

Dificultad: Media Tiempo: 15 min

Método 3: Share Dialog

Compartir enlaces manualmente


Ventajas:

  • ✅ Sin permisos especiales
  • ✅ Muy fácil de implementar
  • ✅ 2 líneas de código

Desventajas:

  • ❌ NO es automático
  • ❌ Usuario debe publicar manualmente
  • ❌ Sin control del mensaje
  • ❌ No cumple requisitos del proyecto

Dificultad: Muy fácil Limitado

❓ Preguntas Frecuentes (FAQ)

❓ ¿Puedo publicar en mi perfil personal?

Respuesta: NO directamente desde 2018. Facebook bloqueó esta funcionalidad por privacidad.

Alternativa: Usa una Página de Facebook (Método 1). Puedes crear una página personal si quieres.

❓ ¿Necesito verificación de negocio?

Respuesta: NO si tu app está en modo Development.

Limitación: Solo tú y hasta 5 testers pueden usar la app.

Solución: Para proyectos universitarios, esto es suficiente.

❓ ¿Cuánto cuesta crear una Página de Facebook?

Respuesta: Es 100% GRATIS. Puedes crear páginas ilimitadas.

❓ ¿La Página debe tener contenido real?

Respuesta: NO. Puede ser una página de prueba vacía. Facebook no requiere contenido mínimo para usar la API.

❓ ¿Puedo tener múltiples páginas?

Respuesta: SÍ. Puedes administrar múltiples páginas y el código las listará todas.

Mejora futura: Agregar selector para que el usuario elija en qué página publicar.

❓ ¿Las métricas (likes, comentarios) funcionan?

Respuesta: SÍ, completamente. Las páginas de Facebook tienen acceso completo a métricas.

Ventaja adicional: Las páginas tienen estadísticas más detalladas que los perfiles personales.

❓ ¿Qué pasa si cambio a modo "Live"?

Respuesta: Necesitarás pasar App Review de Facebook y verificación de negocio.

Recomendación: Mantén tu app en Development para proyectos universitarios.

❓ ¿Puedo publicar fotos/videos?

Respuesta: SÍ. El código mostrado publica texto, pero puedes extenderlo para subir imágenes/videos.

Endpoint para fotos: /{page_id}/photos

Endpoint para videos: /{page_id}/videos

🐛 Solución de Errores Comunes

Error: "No administras ninguna Página de Facebook"

Causa: No has creado una Página o no eres administrador.

Solución:

  1. Ve a facebook.com/pages/create
  2. Crea una página (toma 2 minutos)
  3. Vuelve a intentar publicar

Error: "(#200) Provide valid app ID"

Causa: App ID incorrecto en settings.py

Solución:

  1. Ve a Facebook Developers → Tu App → Settings → Basic
  2. Copia el App ID exactamente
  3. Actualiza FACEBOOK_APP_ID en settings.py
  4. Reinicia servidor Django

Error: "Requires extended permission: pages_manage_posts"

Causa: No autorizaste el permiso al hacer login.

Solución:

  1. Cierra sesión de tu app Django
  2. Ve a Facebook → Settings → Apps → Tu App → Remove
  3. Vuelve a hacer login con Facebook desde tu app
  4. Autoriza TODOS los permisos solicitados

Error: "Invalid OAuth access token"

Causa: El access token ha expirado.

Solución:

  1. Los tokens de Facebook expiran después de ~60 días
  2. Vuelve a hacer login con Facebook para renovar el token
  3. Considera implementar renovación automática de tokens

Error: La publicación se crea pero no aparece en Facebook

Causa: Puede estar en revisión o hubo un retraso.

Solución:

  1. Espera 1-2 minutos (a veces hay retraso)
  2. Refresca la página de Facebook
  3. Revisa la sección "Actividad" de la página
  4. Si usaste un test user, verifica que estés en la cuenta correcta

✅ Checklist Final de Verificación

Antes de presentar tu proyecto:

  • App Facebook en modo Development
  • Página de Facebook creada y activa
  • Código actualizado con permisos correctos (pages_manage_posts)
  • Base de datos MySQL funcionando
  • Login con Facebook exitoso
  • Publicación en Facebook confirmada
  • Datos guardados en base de datos
  • Dashboard mostrando estadísticas
  • Video de demostración grabado

🎉 ¡Felicidades!

Si completaste todos los pasos, ahora tienes una aplicación web completa que:

  • ✅ Se integra con Facebook Graph API
  • ✅ Permite autenticación OAuth 2.0
  • ✅ Publica contenido en Facebook automáticamente
  • ✅ Almacena datos en MySQL
  • ✅ Muestra métricas de interacción
  • ✅ Funciona 100% gratis en modo Development

Perfecto para tu proyecto de Servicios Web en la UTH.

💡 Consejo Final

No necesitas mover tu app a modo "Live" ni solicitar App Review para proyectos universitarios.

El modo Development es perfectamente válido y es lo que Facebook recomienda para:

  • ✅ Desarrollo y pruebas
  • ✅ Proyectos educativos
  • ✅ Prototipos
  • ✅ Demostración de concepto