IA y Agentes

Cómo conecté Upload-Post a OpenClaw 🦞

Instalar la skill fue solo el principio: faltaban el Profile, las variables y un SKILL.md que realmente las usara. Esta es la ruta que probé en Docker hasta publicar desde WhatsApp.

En esta página
Ilustración de Upload Post conectado con OpenClaw para automatizar la publicación de contenidos.

Instalar la skill fue solo el principio

Cuando instalé Upload-Post desde ClawHub pensé que ya estaba a un mensaje de publicar en Instagram. La skill aparecía en el dashboard, mi cuenta de Upload-Post tenía una API key y OpenClaw funcionaba bien desde WhatsApp.

Pero faltaba una pregunta bastante obvia: ¿en qué momento le había dicho a la skill cuál era mi llave?

La respuesta era “en ninguno”. La skill que instalé era un documento con ejemplos de API, no un programa que configurara las credenciales por sí solo. Después aparecieron otros dos detalles: cada petición necesita el nombre de un Profile y las variables nuevas no entran a un contenedor con un simple restart.

Esta guía cuenta el camino que sí probé en mi OpenClaw con Docker. El resultado fue poder enviar una foto por WhatsApp, publicarla en Facebook y recibir el enlace del post. En esta primera prueba pedí una publicación directa; para el uso cotidiano, más adelante propongo revisar una vista previa y confirmar antes de publicar.

Conversación de WhatsApp con OpenClaw: se envía una imagen y una solicitud para publicarla en Facebook, y el agente responde con la confirmación y el enlace del post.
Prueba real con Upload-Post: OpenClaw publicó la imagen en Facebook y devolvió el enlace. En esta primera ejecución la publicación fue directa, sin vista previa.

Antes de empezar

Necesitas:

  • OpenClaw corriendo con Docker Compose.
  • WhatsApp u otro canal ya conectado al agente.
  • Acceso al .env, al docker-compose.yml y al workspace de OpenClaw.
  • Una cuenta en Upload-Post. El plan Free no pide tarjeta.

Este tutorial modifica una skill instalada. Haz el respaldo que aparece más adelante: una actualización de ClawHub podría reemplazar tu archivo.


1. Conecta las redes y crea un Profile

Regístrate en Upload-Post y conecta Instagram, Facebook o las redes que vayas a usar. El servicio gestiona el OAuth, así que para este camino no necesitas crear tus propias aplicaciones en Meta.

Después crea un Profile. Yo podría llamarlo josetejero; tú usa un nombre que identifique el grupo de cuentas conectadas.

Este paso es fácil de pasar por alto. El parámetro user de la API no espera tu correo ni el username de Instagram: espera exactamente el nombre de ese Profile. Una petición bien formada con el Profile incorrecto puede terminar en un error 400.

Por último, genera una API key desde el dashboard y guárdala. No la pegues en WhatsApp ni en un mensaje al agente.

Panel de Upload-Post para administrar claves de API, con una clave activa mostrada parcialmente y el uso mensual de la cuenta.
Desde API Keys puedes crear la credencial que OpenClaw utilizará para autenticar las publicaciones; evita mostrarla completa o compartirla por WhatsApp.

2. Instala y localiza la skill

En el dashboard de OpenClaw abre ClawHub e instala victorcavero14/upload-post, que fue la variante que utilicé.

Dos pantallas de OpenClaw: búsqueda de Upload-Post en ClawHub y tarjeta de la skill con el botón de instalación.
Busca Upload-Post desde la sección Skills de OpenClaw, revisa su descripción y abre la tarjeta antes de instalarla.

La ubicación puede variar según el método de instalación. En vez de adivinar, búscala dentro del contenedor:

shell
docker compose exec openclaw sh -c \
  'find / -name "SKILL.md" -path "*upload*" 2>/dev/null'

En mi instalación apareció en:

plaintext
/home/node/.openclaw/workspace/skills/upload-post/SKILL.md

El workspace tiene la precedencia más alta en OpenClaw. Si existe otra skill con el mismo nombre en una ubicación inferior, gana la copia de workspace/skills.


3. Por qué todavía no funciona

Una skill puede ser simplemente un archivo Markdown. Le explica al modelo cuándo actuar, qué endpoint llamar y qué parámetros enviar. No tiene que incluir un cliente ni un ejecutable.

El SKILL.md original de Upload-Post trae ejemplos parecidos a este:

shell
curl -X POST "https://api.upload-post.com/api/upload_photos" \
  -H "Authorization: Apikey YOUR_KEY" \
  -F "user=profile_name"

YOUR_KEY y profile_name son texto de ejemplo. Crear una variable en el servidor no los sustituye por arte de magia; el documento debe referirse a esa variable.

Además, el frontmatter original solo declara name y description. OpenClaw permite usar metadata.openclaw.requires.env para indicar que una skill necesita ciertas variables. Si faltan, la skill deja de ser elegible en vez de intentar publicar sin credenciales.

El archivo descargable de esta guía cambia los placeholders por $UPLOAD_POST_API_KEY y $UPLOAD_POST_PROFILE, declara ambos requisitos y actualiza el endpoint de video vigente de /upload_videos a /upload.


4. Pasa las variables al contenedor

Esta es la ruta que usé porque mi instalación ya gestiona las credenciales principales desde Compose.

En el .env del proyecto agrega:

shell
UPLOAD_POST_API_KEY=tu_api_key_aqui
UPLOAD_POST_PROFILE=tu_profile_aqui

En docker-compose.yml, dentro de environment: del servicio openclaw, referencia ambas:

yaml
- UPLOAD_POST_API_KEY=${UPLOAD_POST_API_KEY}
- UPLOAD_POST_PROFILE=${UPLOAD_POST_PROFILE}

No subas el .env a Git y no imprimas la llave para “comprobarla”. Más adelante verificaremos únicamente que exista.

OpenClaw también permite configurar variables mediante skills.entries, con alcance limitado a la ejecución de una skill. Es una alternativa válida y más acotada, pero no es la ruta que seguí en esta instalación; aquí mantengo un solo camino principal para que el tutorial sea reproducible.


5. Respalda y reemplaza el SKILL.md

Entra a la carpeta que encontraste en el paso 2. Ajusta la primera línea si tu ruta es diferente:

Puedes abrir o descargar aquí el SKILL.md corregido. Para guardarlo directamente en el servidor, usa curl:

shell
cd ~/openclaw/workspace/skills/upload-post
cp SKILL.md SKILL.md.orig
curl -fsSL \
  https://josetejero.com/downloads/upload-post/SKILL.md \
  -o SKILL.md

El archivo está basado en la skill oficial de Upload-Post, adaptado para las variables de OpenClaw y revisado contra el upstream el 30 de agosto de 2026. Conserva la carpeta references/ que instaló ClawHub; la descarga reemplaza únicamente SKILL.md.

Comprueba que no quedaron placeholders ni el endpoint anterior:

shell
grep -nE 'YOUR_(API_)?KEY|profile_name|myprofile|upload_videos' SKILL.md

Si el comando no imprime nada, esa parte quedó lista.

Detalle de la skill Upload-Post personalizada en OpenClaw, marcada como elegible y con un campo para su API key.
Tras reemplazar SKILL.md, OpenClaw reconoce la copia del workspace y muestra la credencial principal; el Profile sigue configurándose como variable de entorno.

El campo que ves en la tarjeta corresponde a primaryEnv, es decir, a la credencial principal: UPLOAD_POST_API_KEY. No es una lista automática de todas las variables declaradas. UPLOAD_POST_PROFILE también es obligatorio porque la API lo envía como user, pero en esta instalación debe seguir llegando desde el .env y Docker Compose, como hicimos en el paso anterior.


6. Recrea el contenedor

Vuelve a la carpeta donde vive tu archivo de Compose y ejecuta:

shell
cd ~/openclaw
docker compose up -d

Aquí importa la diferencia entre tres comandos:

Comando

Qué hace

¿Sirve para variables nuevas?

docker compose restart

Reinicia el contenedor existente

No relee el .env para recrear su entorno

docker compose up -d

Recrea el servicio cuando cambió la configuración

docker compose up -d --build

También reconstruye la imagen

No hace falta si no cambiaste el Dockerfile


7. Verifica de abajo hacia arriba

Primero confirma que las dos variables existen sin mostrar sus valores:

shell
docker compose exec openclaw sh -c '
  [ -n "$UPLOAD_POST_API_KEY" ] && echo "api_key=set" || echo "api_key=missing"
  [ -n "$UPLOAD_POST_PROFILE" ] && echo "profile=set" || echo "profile=missing"
'

Después valida la API key con el endpoint /me:

shell
docker compose exec openclaw sh -c '
  curl -s https://api.upload-post.com/api/uploadposts/me \
    -H "Authorization: Apikey $UPLOAD_POST_API_KEY"
'

La respuesta correcta incluye "success": true y un mensaje que confirma el token.

Por último, comprueba que OpenClaw ve la skill:

shell
docker compose exec openclaw \
  openclaw skills list | grep -i upload

Haz las verificaciones en ese orden. Si la variable no existe, probar la API o revisar la skill solo añade ruido.


8. Publica desde WhatsApp

Envía la foto al agente y escribe algo explícito:

plaintext
Prepara esta foto para Instagram y Facebook con el texto:
“Atardecer en Mérida 🌅”.

Antes de publicar, muéstrame la vista previa, las redes de destino
y espera mi confirmación.

Después de revisar la vista previa, responde con la confirmación. El agente debería usar el Profile configurado y devolver los resultados o enlaces de cada plataforma.

Si OpenClaw necesita trabajar con un archivo que ya existe en el servidor, déjalo dentro de un volumen montado, por ejemplo ~/openclaw/workspace/. El contenedor no puede leer una carpeta de descargas del host que nunca fue montada.

Los cinco pasos que sigue una imagen desde OpenClaw hasta la red social
El intermediario sube la imagen y obtiene su URL por ti

Los tres huecos, en corto

Síntoma

Lo que faltaba

La petición devuelve 400

user debe ser el nombre de un Profile real

La skill contiene YOUR_KEY

El documento nunca referencia tu variable

Después de editar el .env nada cambia

restart no recrea el entorno; usa up -d

Otros errores útiles:

  • 401: la API key no llegó al proceso o ya no es válida. Comprueba la variable antes de regenerar nada.
  • 404 al subir video: revisa que la skill use /upload, no el endpoint viejo /upload_videos.
  • 429: alcanzaste un límite o cuota del plan. Revisa el dashboard antes de cambiar la configuración.
  • La skill no aparece: confirma la ruta y los nombres de las variables declaradas en requires.env.

OpenClaw mantiene una lista de skills elegibles por sesión, pero su watcher puede refrescar cambios de SKILL.md en el siguiente turno. En este tutorial docker compose up -d ya reinicia el servicio, así que no hace falta inventar un paso adicional para “abrir una sesión nueva”.


¿Y el servidor MCP?

Upload-Post también ofrece un servidor MCP. En lugar de enseñarle al agente a construir peticiones curl, presenta operaciones estructuradas para publicar, programar y consultar información.

Puede ser el camino más corto y elimina varios errores de shell. A cambio, dependes de otro servicio remoto y cedes parte del control que tienes al leer y modificar una skill local. Yo no lo usé para esta primera publicación, así que lo dejo como alternativa y no como un segundo tutorial disfrazado.

Si quieres evaluarlo, empieza en la integración oficial de Upload-Post con OpenClaw y pruébalo con un Profile que no sea crítico.


Mantener el parche sin sorpresas

La copia local es tu responsabilidad desde el momento en que la modificas. Una actualización de ClawHub puede sobrescribirla y Upload-Post puede cambiar endpoints o parámetros.

Conserva SKILL.md.orig y, después de actualizar, compara:

shell
diff -u SKILL.md.orig SKILL.md

También puedes volver a descargar la versión revisada de este blog. Yo indicaré la fecha de sincronización para que no tengas que confiar en un archivo sin contexto.

Lo que parecía una instalación de dos clics terminó siendo una buena lección: una skill puede explicar perfectamente una API y aun así no conocer tus credenciales ni tu despliegue. Cuando separas esas dos cosas, el problema deja de sentirse misterioso.

Recursos

SerieEste post forma parte de OpenClaw: Contenido y Multimedia
1
Publicar en redes sociales desde OpenClaw 🦞📱
Completado
2
Cómo conecté Upload-Post a OpenClaw 🦞
En progreso
100% completado
Jose Tejero

Comentarios

Deja un comentario

Los comentarios se publican tras moderación. Tu email no se publica.

Sé la primera persona en comentar.