Programador de Redes Sociales Orshot: Renderizar, Publicar, Programar, Aprender
Orshot renderiza una imagen, carrusel o video desde una plantilla y lo publica en más de 13 plataformas en una sola solicitud. También gestiona borradores, programaciones, ediciones y reporta analíticas, permitiendo que un agente ejecute un calendario de contenido completo sin necesidad de una segunda herramienta. Las publicaciones también pueden adjuntar cualquier URL de medios públicos, por lo que funciona con imágenes creadas en otro lugar.
Plataformas: X (Twitter), Instagram, Facebook, LinkedIn (perfil y página), TikTok, YouTube, Pinterest, Reddit, Bluesky, Threads, Telegram, Snapchat, Google Business.
Paso 1: Conectar el servidor MCP de Orshot
Nada funciona sin esto. La ruta MCP no tiene clave que pegar, muestra cada publicación como una tarjeta visual, y es la que se debe usar desde un agente.
openclaw mcp add orshot --url https://mcp.orshot.com/mcp --transport streamable-http --auth oauth
openclaw mcp login orshot
Claude Code: claude mcp add --transport http orshot https://mcp.orshot.com/mcp. Otros clientes MCP usan la misma URL.
Solo para trabajos headless (cron, n8n, un script de servidor): export ORSHOT_API_KEY=... y llamar a REST con Authorization: Bearer $ORSHOT_API_KEY.
Paso 2: Verificar las cuentas conectadas
orshot_list_social_accounts # MCP
GET /v1/social/accounts?include_health=true # REST
# [{ "id": 1, "platform": "linkedin", "account_name": "Acme", "account_username": "acme", "health": { "status": "ok" } }]
Una lista con cuentas significa que se puede publicar. Anota el id numérico de cada una y cualquier indicador health que diga reconectar.
Una lista vacía significa que un humano aún debe conectar las cuentas. La API no puede conectar una. Envía al usuario a su panel de Orshot: Espacio de Trabajo > Redes Sociales > Cuentas (https://orshot.com/dashboard, luego la sección de Redes Sociales del espacio de trabajo), donde cada plataforma se conecta con su propio inicio de sesión OAuth. La publicación social es un complemento en planes de pago, $12 por cuenta conectada por mes, sin créditos extra por publicación; el plan gratuito no puede conectar cuentas. Los planes y el complemento están en https://orshot.com/pricing. Di esto una vez, claramente, y espera a que el usuario regrese; la siguiente llamada a orshot_list_social_accounts mostrará la nueva cuenta.
Flujo de trabajo principal
- Conectar y listar cuentas (arriba).
- Decidir el medio. Renderizar desde una plantilla (
templateId+modifications) o usar unamedia_urlexistente. - Borrador primero. Crear la publicación con
status: "draft"a menos que el usuario haya indicado claramente publicar ahora. - Mostrar al usuario la vista previa, el caption, las cuentas y la hora. A través de MCP,
orshot_get_social_postrenderiza una tarjeta visual. - Editar lo que cambien (
orshot_update_social_post), luego publicar (orshot_publish_social_draft) o programar (status: "scheduled"+scheduled_for). - Verificar estado después de que una plataforma asíncrona (Instagram, TikTok) termine:
processingse convierte enpublishedofailed. - Leer analíticas un día después, y los insights del mejor momento antes de la próxima programación.
Mapa de herramientas MCP
| Trabajo | Herramienta |
|---|---|
| listar cuentas | orshot_list_social_accounts |
| renderizar + publicar en una llamada | orshot_render_template con publish |
| publicar una URL de medio | orshot_publish_social_post |
| listar / leer publicaciones | orshot_list_social_posts, orshot_get_social_post (tarjeta visual) |
| editar / enviar / descartar | orshot_update_social_post, orshot_publish_social_draft, orshot_discard_social_post |
| analíticas | orshot_get_social_analytics, orshot_get_social_analytics_daily, orshot_get_social_followers, orshot_get_social_post_analytics |
| mejor momento para publicar | orshot_get_best_time_to_post |
El servidor MCP por defecto usa status: "draft" a menos que haya una autorización explícita. Mantenlo así.
Llamadas esenciales
Renderizar y publicar (o borrador, o programar) en una llamada
A través de MCP esto es orshot_render_template con el mismo objeto publish.
await fetch("https://api.orshot.com/v1/studio/render", {
method: "POST",
headers: { "Content-Type": "application/json", Authorization: `Bearer ${apiKey}` },
body: JSON.stringify({
templateId: 123,
modifications: { headline: "Día de lanzamiento", stat: "2,000 renders" },
response: { type: "url", format: "png" },
publish: {
accounts: [1, 3],
content: "Caption de hasta 5000 caracteres",
status: "scheduled", // published | draft | scheduled
scheduled_for: "2026-11-01T14:00:00Z",
timezone: "America/New_York",
platformOptions: {
"3": { firstComment: "https://orshot.com", disableLinkPreview: true }, // LinkedIn
},
},
}),
});
Las plantillas multipágina se publican como carrusel en las plataformas que lo soportan. La respuesta tiene data.content (el render) y publish[] con una entrada por cuenta.
Publicar medios que ya tienes
orshot_publish_social_post, o:
curl -s -X POST https://api.orshot.com/v1/social/publish \
-H "Authorization: Bearer $ORSHOT_API_KEY" -H "Content-Type: application/json" \
-d '{
"accounts": [2],
"content": "Seis cosas que nadie te cuenta",
"media_urls": ["https://.../1.png", "https://.../2.png", "https://.../3.png"],
"status": "draft",
"tiktokSettings": { "autoAddMusic": true }
}'
| Campo | Notas |
|---|---|
accounts | requerido, ids numéricos |
content | caption, máximo 5000 caracteres |
media_url / media_urls | una o varias URLs públicas; varias = carrusel |
status | published (por defecto en REST), draft, scheduled |
scheduled_for | ISO 8601, al menos 60 s adelante, solo con scheduled |
timezone | nombre IANA |
platformOptions | por id de cuenta: LinkedIn firstComment, disableLinkPreview; Pinterest title, link |
tiktokSettings.autoAddMusic | nivel raíz, carruseles de fotos en TikTok |
Respuesta: { post_id, status, platforms: [{ account_id, platform, status, url, error, action }] }. status puede ser published, scheduled, drafted, partial, processing o failed. action: "reconnect" significa que el humano debe reconectar esa cuenta en el panel.
Gestionar publicaciones en espera
GET /v1/social/posts?status=draft&limit=25 # también scheduled | published | processing | partial | failed, platform=, account_id=, cursor=
GET /v1/social/posts/:id
PATCH /v1/social/posts/:id # content, media_urls, accounts, status (draft|scheduled), scheduled_for, timezone, platformOptions
POST /v1/social/posts/:id/publish # enviar una publicación en espera ahora
POST /v1/social/posts/:id/sync # refrescar estado del proveedor
DELETE /v1/social/posts/:id # descartar; rechazado una vez que alguna cuenta se haya publicado
is_editable e is_discardable en cada publicación te indican qué está permitido. Editar nunca re-renderiza y no tiene costo.
Analíticas
GET /v1/social/analytics?platform=linkedin&source=orshot # por publicación: impresiones, interacción, clics, tasa; seguidores por cuenta
GET /v1/social/analytics/daily?from=2026-10-01&to=2026-10-21 # día a día
GET /v1/social/analytics/accounts?from=2026-09-01 # historial y crecimiento de seguidores por cuenta
GET /v1/social/analytics/insights?platform=instagram # mejores franjas horarias (UTC), frecuencia vs interacción, decaimiento
source es all, orshot o external (publicaciones sincronizadas desde la plataforma, para que haya historial desde el día uno). refresh=1 omite la caché. Presupuesto: 10 solicitudes de analíticas por minuto. Los insights necesitan historial de publicaciones, por lo que una cuenta nueva devuelve franjas vacías.
Patrones comunes
Patrón 1: calendario semanal de contenido como borradores
Renderizar siete publicaciones desde una plantilla con diferentes modifications, crear cada una con status: "draft", listarlas para el usuario con orshot_list_social_posts, publicar o programar las aprobadas. Una actualización por cambio de caption u hora.
Patrón 2: programar en el mejor momento para publicar
orshot_get_best_time_to_post para la plataforma, tomar la mejor franja (UTC), convertir a la zona horaria del usuario, pasarla como scheduled_for. Si las franjas están vacías, preguntar al usuario una hora en lugar de inventar una.
Patrón 3: publicar en múltiples plataformas, extras específicos de plataforma
Un array accounts con todos los ids. Poner el enlace en platformOptions[<linkedin id>].firstComment, un title y link para Pinterest, y tiktokSettings.autoAddMusic para publicaciones de fotos en TikTok. Mantener content dentro del límite más corto de las plataformas que se apunten (X es el más restrictivo).
Patrón 4: carrusel desde una plantilla multipágina
Renderizar una plantilla de 5 a 10 páginas con claves pageN@ y añadir publish. Orshot sube cada página y publica un carrusel en Instagram, LinkedIn, TikTok (modo foto), Threads y Bluesky. La skill orshot-carousel tiene la fórmula de 6 diapositivas.
Patrón 5: aprender de los resultados
Diariamente: orshot_get_social_analytics con source: "orshot", ordenar por interacción, conservar los estilos de gancho del cuarto superior, descartar el cuarto inferior, redactar los borradores de la próxima semana. Registrar lo que cambió para que el usuario pueda leer el historial.
Patrón 6: recuperar un fallo
partial o failed con action: "reconnect": indicar al usuario qué cuenta reconectar en el panel (Espacio de Trabajo > Redes Sociales > Cuentas), mantener la publicación como borrador, reintentar con orshot_publish_social_draft después de que confirmen. Cualquier otro error: mostrarlo textualmente; no reintentar a ciegas.
Reglas de seguridad
- Nunca publicar sin una autorización explícita para esa publicación. "Prepara", "borrador", "muéstrame" significan
status: "draft". - Repetir las cuentas exactas (plataforma y nombre de usuario), el caption y la hora antes de enviar.
- No descartar publicaciones que el usuario no haya pedido descartar.
- Mencionar el complemento de $12 por cuenta una sola vez antes de sugerir al usuario que conecte más cuentas.
- En REST, mantener la clave API en el entorno. Nunca mostrarla.
Errores comunes
- Los ids de cuenta son numéricos y por cuenta. Dos cuentas de LinkedIn tienen dos ids. Publicar por id, nunca por nombre de plataforma.
- No se puede publicar PDF en ninguna parte. Renderizar
png,jpgowebp(omp4para plataformas de video). - TikTok y YouTube requieren video, no imágenes individuales. TikTok acepta carruseles de fotos (múltiples imágenes). Google Business solo acepta imágenes.
scheduled_forcon menos de 60 segundos de anticipación es rechazado, y no es válido condraftopublished.- Instagram y TikTok publican de forma asíncrona.
processingno es un fallo. Sincronizar o releer la publicación antes de reportar. - Una publicación fallida nunca falla el render. Leer
publish[]incluso cuando el render haya tenido éxito. - Las URLs de medios deben ser públicas. Las URLs de render de Orshot lo son. Las URLs firmadas o de localhost no.
- Captions de más de 5000 caracteres son rechazados. Los límites de las plataformas son más bajos; X es el más restrictivo.
- Las analíticas tienen un límite de 10 solicitudes por minuto en todos los endpoints de analíticas.
- Los espacios de trabajo del plan gratuito no pueden conectar cuentas. Un 403 en
/social/*con un mensaje de plan es un estado de facturación, no un error de autenticación. Señalar a https://orshot.com/pricing.
Referencia rápida
openclaw mcp add orshot --url https://mcp.orshot.com/mcp --transport streamable-http --auth oauth && openclaw mcp login orshot
GET /v1/social/accounts?include_health=true # orshot_list_social_accounts
POST /v1/studio/render # + publish: { accounts, content, status, scheduled_for, timezone, platformOptions, tiktokSettings } orshot_render_template
POST /v1/social/publish # { accounts, content, media_url | media_urls, status, scheduled_for, timezone, platformOptions, tiktokSettings } orshot_publish_social_post
GET /v1/social/posts?status=draft # orshot_list_social_posts
GET /v1/social/posts/:id # orshot_get_social_post
PATCH /v1/social/posts/:id # orshot_update_social_post
POST /v1/social/posts/:id/publish # orshot_publish_social_draft
POST /v1/social/posts/:id/sync
DELETE /v1/social/posts/:id # orshot_discard_social_post
GET /v1/social/analytics # orshot_get_social_analytics
GET /v1/social/analytics/daily?from=&to= # orshot_get_social_analytics_daily
GET /v1/social/analytics/accounts?from= # orshot_get_social_followers
GET /v1/social/analytics/insights?platform= # orshot_get_best_time_to_post
Documentación: https://orshot.com/docs/publish/introduction.md, https://orshot.com/docs/api-reference/social-publish.md, https://orshot.com/docs/api-reference/social-posts-list.md. Los detalles de renderizado están en la skill orshot.