ワンクリックで
linkedin-post
Draft, review, and publish LinkedIn posts via HMAC-signed webhook to n8n
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Draft, review, and publish LinkedIn posts via HMAC-signed webhook to n8n
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
[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
| 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"