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.

Antes de empezar
Necesitas:
- OpenClaw corriendo con Docker Compose.
- WhatsApp u otro canal ya conectado al agente.
- Acceso al
.env, aldocker-compose.ymly 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.

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

La ubicación puede variar según el método de instalación. En vez de adivinar, búscala dentro del contenedor:
docker compose exec openclaw sh -c \
'find / -name "SKILL.md" -path "*upload*" 2>/dev/null'En mi instalación apareció en:
/home/node/.openclaw/workspace/skills/upload-post/SKILL.mdEl 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:
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:
UPLOAD_POST_API_KEY=tu_api_key_aqui
UPLOAD_POST_PROFILE=tu_profile_aquiEn docker-compose.yml, dentro de environment: del servicio openclaw, referencia ambas:
- 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:
cd ~/openclaw/workspace/skills/upload-post
cp SKILL.md SKILL.md.orig
curl -fsSL \
https://josetejero.com/downloads/upload-post/SKILL.md \
-o SKILL.mdEl 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:
grep -nE 'YOUR_(API_)?KEY|profile_name|myprofile|upload_videos' SKILL.mdSi el comando no imprime nada, esa parte quedó lista.

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:
cd ~/openclaw
docker compose up -dAquí importa la diferencia entre tres comandos:
Comando | Qué hace | ¿Sirve para variables nuevas? |
|---|---|---|
| Reinicia el contenedor existente | No relee el |
| Recrea el servicio cuando cambió la configuración | Sí |
| 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:
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:
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:
docker compose exec openclaw \
openclaw skills list | grep -i uploadHaz 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:
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 tres huecos, en corto
Síntoma | Lo que faltaba |
|---|---|
La petición devuelve |
|
La skill contiene | El documento nunca referencia tu variable |
Después de editar el |
|
Otros errores útiles:
401: la API key no llegó al proceso o ya no es válida. Comprueba la variable antes de regenerar nada.404al 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:
diff -u SKILL.md.orig SKILL.mdTambié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.
Comentarios
Sé la primera persona en comentar.