Saltearse al contenido

Publicar en X

El Centro de contenido planea, aprueba y programa piezas por canal. Esta página cubre el canal de X: cómo se conecta la cuenta, qué publica Merez por ti y qué queda en tus manos. Los dos costes que hay son independientes, y conviene no confundirlos: los créditos de Merez se consumen en los dos caminos; la factura de X, solo con app conectada.

  • Planea la pieza, redacta las versiones y genera las láminas. Ese trabajo es el mismo con app conectada que sin ella.
  • Camino A, tu propia app. Creas la app en developer.x.com, la conectas desde Conversaciones → Tu app de X y desde ese momento Merez publica por API: no tienes que estar delante. Las claves se guardan cifradas por sitio en social_apps, nunca en el .env compartido.
  • Camino B, tarea humana. Sin app, content:publish no publica: abre una tarea en human_tasks (origen content_publish) con el texto, las láminas y el vencimiento. Publicas tú desde la web o el móvil, y en X eso no cuesta nada.
  • Publicación. content:publish corre cada minuto y busca piezas aprobadas, programadas y vencidas. Con cuenta conectada publica el hilo encadenando tuits con in_reply_to_tweet_id y guarda la URL del primero en published_url. Sin cuenta, abre la tarea.
  • Deshacer. POST /content/conversations/{conversation}/channels/{channel}/undo devuelve la pieza a borrador, borra fecha y publicación y cierra la tarea humana abierta.
  • El módulo contenido encendido: es el que da el Centro de contenido.
  • El flujo de conexión: GET /content/x/connect arma la URL de autorización con PKCE y un state que caduca en 15 minutos; X muestra sus permisos; GET /content/x/callback —ruta pública a propósito, porque X no manda token— canjea el código y lee el @handle; el panel vuelve a /contenido?x=@handle.
  • Las credenciales del canal en Ajustes → Integraciones: Client ID y Client Secret, con la vuelta registrada. Si quedan vacías, la pieza no se publica por API y llega como tarea.
  • Opcional: la app global del backend como respaldo para sitios sin app propia. En producción se escribe por workflow, nunca a mano ni en un chat.

Sin app conectada no hay factura de X: la pieza llega como tarea y se publica a mano. Sin el módulo contenido no hay Centro de contenido ni cola de publicación. Y si la API falla, la pieza no se pierde: queda en publish_error, sube publish_attempts y la tarea humana sigue disponible.

  • Los créditos del flujo de contenido todavía no se descuentan. El flujo no pasa por el ledger de Merez: la generación ocurre fuera. Es el hueco pendiente para que el modelo sea real, y conviene decirlo antes de prometer consumo medido.
  • Nunca se hacen las dos cosas por la misma pieza. Con app se llama a la API y no se abre tarea; sin app, no se llama y no hay factura de X.
  • X cobra por publicar, y cobra bastante más si el post lleva un enlace. Esa factura es del comercio, no de Merez. Las tarifas no se anotan aquí: las fija X y cambian.
  • Marcar como borrador no borra nada en X. Un post publicado sigue publicado; borrarlo pide la misma app y otro endpoint, que también se cobra.
  • El state es toda la seguridad del callback: caduca y vive solo en la caché del servidor.