🚨 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_actionspermanentemente - 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
¿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:
- 📊 Métricas y estadísticas detalladas
- 🤖 Automatización mediante API
- 👥 Administración por múltiples personas
- 🎯 Publicidad y promoción
Crear tu Página paso a paso:
- Abrir creador de páginas:
- Ve a facebook.com/pages/create
- O desde Facebook: Menú (☰) → Páginas → Crear nueva página
- Seleccionar tipo:
- Tipo de Página: "Comunidad o Figura Pública"
- O puedes elegir "Empresa o Marca" (funciona igual)
- 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"
- Crear la página:
- Haz clic en "Crear Página"
- ¡Listo! Ya tienes tu página
- 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
Verificar permisos necesarios:
- Abrir Facebook Developers:
- Ve a developers.facebook.com
- Selecciona tu aplicación
- Agregar producto Facebook Login (si no lo tienes):
- Panel izquierdo → "Add Product"
- Busca "Facebook Login" → "Set Up"
- Plataforma: Web
- Verificar App Mode:
- Arriba a la derecha debe decir: Development
- Si dice "Live", cámbialo a Development
- 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.
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:
email- Obtener correo electrónico del usuariopublic_profile- Nombre, foto, ID del usuariopages_show_list- Listar páginas que el usuario administra ← NECESARIOpages_read_engagement- Leer likes, comentarios, shares de postspages_manage_posts- PUBLICAR en páginas ← CLAVE
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:
- Cierra sesión en tu app
- Vuelve a hacer login con Facebook
- 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):
- Ve a facebook.com/pages/create
- Crea una página de prueba con cualquier nombre
- 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_tokenNO el token del usuario
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:
- 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
- Ve a
- Iniciar sesión con Facebook:
- Ve a:
http://localhost:8000/facebook/login/ - Serás redirigido a Facebook
- Ve a:
- Autorizar permisos:
- Facebook mostrará diálogo solicitando permisos
- Deberías ver: "Administrar tus Páginas de Facebook"
- Haz clic en "Continuar como [Tu Nombre]"
- 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
- Acceder al dashboard:
- Deberías ser redirigido a:
http://localhost:8000/dashboard/ - Verás tu nombre y foto de Facebook
- Deberías ser redirigido a:
- Ir a publicar:
- Clic en botón "Publicar en Facebook"
- O ve directo a:
http://localhost:8000/facebook/publicar/
- Escribir mensaje de prueba:
- Escribe: "¡Hola desde mi aplicación Django! 🚀 #ProyectoUTH #FacebookAPI"
- Haz clic en "Publicar"
- Verificar éxito:
- Deberías ver mensaje: "¡Publicación realizada exitosamente en la Página: [nombre]!"
- Se mostrará ID del post y enlace directo
- 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:
- Ve a Facebook Developers → Tu App
- Panel izquierdo → "Roles" → "Test Users"
- Haz clic en "Add" o "Create Test Users"
- Cantidad: 1-5 usuarios
- Permisos: Selecciona todos los permisos necesarios
- 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 1: Páginas RECOMENDADO
Publicar en Página de Facebook
Ventajas:
- ✅ Método oficial de Facebook
- ✅ Publicación automática completa
- ✅ Métricas detalladas
- ✅ Funciona en modo Development
- ✅ Gratis e ilimitado
- ✅ Ideal para proyectos UTH
Desventajas:
- ⚠️ Requiere crear una Página (2 min)
- ⚠️ Publica en Página, no en perfil personal
Dificultad: Fácil Tiempo: 10 min
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:
- Ve a facebook.com/pages/create
- Crea una página (toma 2 minutos)
- Vuelve a intentar publicar
Error: "(#200) Provide valid app ID"
Causa: App ID incorrecto en settings.py
Solución:
- Ve a Facebook Developers → Tu App → Settings → Basic
- Copia el App ID exactamente
- Actualiza
FACEBOOK_APP_IDen settings.py - Reinicia servidor Django
Error: "Requires extended permission: pages_manage_posts"
Causa: No autorizaste el permiso al hacer login.
Solución:
- Cierra sesión de tu app Django
- Ve a Facebook → Settings → Apps → Tu App → Remove
- Vuelve a hacer login con Facebook desde tu app
- Autoriza TODOS los permisos solicitados
Error: "Invalid OAuth access token"
Causa: El access token ha expirado.
Solución:
- Los tokens de Facebook expiran después de ~60 días
- Vuelve a hacer login con Facebook para renovar el token
- 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:
- Espera 1-2 minutos (a veces hay retraso)
- Refresca la página de Facebook
- Revisa la sección "Actividad" de la página
- 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