con un clic
linkedin-post
Draft, review, and publish LinkedIn posts via HMAC-signed webhook to n8n
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Menú
Draft, review, and publish LinkedIn posts via HMAC-signed webhook to n8n
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
[FUTURE] Update operating configuration via HMAC-signed webhook to n8n
[FUTURE] Discover LinkedIn feed content and engage with community via comments and likes
Check LinkedIn OAuth token health
Query past LinkedIn activity and present formatted summaries
Basado en la clasificación ocupacional SOC
| name | linkedin-post |
| description | Draft, review, and publish LinkedIn posts via HMAC-signed webhook to n8n |
| requires | {"env":["N8N_WEBHOOK_SECRET"],"bins":["curl","jq","openssl"]} |
When the operator asks to draft or publish a LinkedIn post, use this skill.
If the operator requests an unsupported type (e.g., "reshare this post", "post a video"), inform them: "I can create text posts, article shares, and image posts. For that content, I can draft a text post commenting on it instead. Would you like me to do that?"
Generate a draft using SOUL.md voice and AGENTS.md rules:
Show the draft to the operator:
Here's a draft post about [topic]:
---
[draft content]
---
Type "approve" to publish, or tell me what to change.
On draft creation, write to pending-drafts.json:
DRAFT_ID=$(uuidgen | tr '[:upper:]' '[:lower:]')
DRAFTS_FILE="$HOME/.openclaw/sandboxes/linkedin-persona/data/pending-drafts.json"
# Read existing or create empty array
if [ -f "$DRAFTS_FILE" ]; then
DRAFTS=$(cat "$DRAFTS_FILE")
else
DRAFTS="[]"
fi
# Add new draft
echo "$DRAFTS" | jq --arg id "$DRAFT_ID" \
--arg type "$CONTENT_TYPE" \
--arg content "$DRAFT_CONTENT" \
--arg status "presented" \
'. + [{"id": $id, "type": $type, "content": $content, "status": $status, "created_at": (now | todate)}]' \
> "$DRAFTS_FILE"
On approval, compute HMAC and POST to n8n:
WEBHOOK_URL="http://localhost:5678/webhook/linkedin-post"
TIMESTAMP=$(date +%s)
BODY='{"action":"publish_post","draft_id":"'"$DRAFT_ID"'","content_type":"'"$CONTENT_TYPE"'","text":"'"$DRAFT_CONTENT"'"}'
SIGNATURE="sha256=$(echo -n "$BODY" | openssl dgst -sha256 -hmac "$N8N_WEBHOOK_SECRET" | awk '{print $2}')"
RESPONSE=$(curl -s -X POST "$WEBHOOK_URL" \
-H "Content-Type: application/json" \
-H "X-Signature: $SIGNATURE" \
-H "X-Timestamp: $TIMESTAMP" \
-d "$BODY")
STATUS=$(echo "$RESPONSE" | jq -r '.status')
After resolution, update pending-drafts.json:
jq --arg id "$DRAFT_ID" --arg status "$FINAL_STATUS" \
'map(if .id == $id then .status = $status | .resolved_at = (now | todate) else . end)' \
"$DRAFTS_FILE" > "${DRAFTS_FILE}.tmp" && mv "${DRAFTS_FILE}.tmp" "$DRAFTS_FILE"