Conectar Meta para publicar en Instagram y Facebook desde tu CMS personalizado

¿Estás desarrollando una plataforma que permite a los usuarios publicar directamente en sus redes sociales? En este post te explicamos cómo configurar correctamente una app de Meta para que puedas publicar en Instagram y Facebook a través de su API, basándonos en una experiencia real de integración en el CMS musescript.com.

Antes de empezar, asegúrate de tener:

  • Una cuenta de desarrollador en Meta for Developers.

  • Una App de Meta creada en el panel de developers.

  • Una página de Facebook creada y verificada.

  • Una cuenta de Instagram profesional o de empresa vinculada a esa página de Facebook.

  • Un CMS o aplicación web preparada para manejar OAuth 2.0 y hacer peticiones HTTP.

 

 

1. Crear la App en Meta

  1. Accede a Meta Developers.

  2. Crea una nueva App → Tipo: «Para empresa».

  3. Configura el nombre, correo y finalidad.

  4. En «Productos», añade Facebook Login y configura la URL de redirección OAuth (por ejemplo: https://tuweb.com/oauth/callback/instagram).

 

 

2. Permisos necesarios

Para poder publicar contenido en nombre de un usuario, necesitarás los siguientes permisos:

  • instagram_basic

  • instagram_content_publish

  • pages_show_list

  • pages_read_engagement

  • business_management

⚠️ Recuerda: muchos de estos permisos requieren acceso avanzado mediante revisión, pero funcionan en modo de desarrollo para las cuentas de administradores y testers.

3. Problemas comunes y soluciones

 

❌ Problema:
Los botones de activación de permisos no están habilitados.

✅ Solución:
Debes realizar una llamada correcta a la API usando el token obtenido con los permisos. Luego de eso, el botón se activa (puede tardar hasta 24h).

❌ Problema:
Error OAuthException al hacer la petición access_token.

✅ Solución:
La URL https://www.facebook.com/vXX.X/oauth/access_token es incorrecta. Usa mejor:

https://graph.facebook.com/v18.0/oauth/access_token

❌ Problema:
Error: dialog no existe al construir la URL.

✅ Solución:
La URL del dialog/oauth no pertenece a graph.facebook.com, sino a www.facebook.com.
Tu método getAPIUrl() debería distinguir esto:

public static function getAPIUrl(string $endpoint, array $params = [], bool $isBaseUrl = false)
{
if ($endpoint === 'dialog/oauth') {
$apiUrl = 'https://www.facebook.com';
} else {
$apiUrl = self::API_URL;
}
$v = self::API_VERSION;
$urlEndpoint = $apiUrl . ‘/’ . ($v ? ($v . ‘/’) : ») . ltrim($endpoint, ‘/’);

if (count($params)) {
$urlEndpoint .= ‘?’ . http_build_query($params);
}

return $urlEndpoint;
}

 

 

4. Flujo de autenticación (OAuth)

  1. Redirige al usuario a https://www.facebook.com/v18.0/dialog/oauth?...

  2. Tras aceptar, Meta devuelve un code.

  3. Intercambia ese code por un token con:

POST https://graph.facebook.com/v18.0/oauth/access_token
  1. Usa ese token para realizar peticiones a la API de Facebook e Instagram.

 

 

5. Publicar en Instagram

A través del token y el ID de Instagram Business (que se obtiene de la página de Facebook con instagram_business_account), puedes publicar:

curl -X POST "https://graph.facebook.com/v18.0/{instagram_id}/media" \
-F "image_url=TU_IMAGEN" \
-F "caption=Tu texto" \
-F "access_token=TU_TOKEN"

Luego, publica el contenedor con:

curl -X POST "https://graph.facebook.com/v18.0/{instagram_id}/media_publish" \
-F "creation_id=ID_DEL_CONTENEDOR" \
-F "access_token=TU_TOKEN"

Conclusión

Ha sido un proceso largo y con muchos puntos poco documentados por parte de Meta. Desde Screen Art hemos tenido que corregir el código del plugin oficial del cms para que todo funcione como es debido.

Este post servirá para que otros desarrolladores no tengan que pasar horas solucionando los mismos problemas.