vk
GitHub通过VK API发布帖子至个人主页或社区墙,并读取近期动态。支持使用社区令牌以群组身份发帖,处理附件、定时发布及错误码,适用于向俄语受众分享内容或查看互动数据。
Trigger Scenarios
Install
npx skills add NeverSight/learn-skills.dev --skill vk -g -y
SKILL.md
Frontmatter
{
"name": "vk",
"license": "Apache-2.0",
"metadata": {
"author": "acedatacloud",
"version": "1.0"
},
"connections": [
"vk"
],
"description": "Publish posts to your VK (ВКонтакте) profile or community wall and read your own recent posts, via the official VK API (wall.post \/ wall.get). Use when the user wants to post to VK, cross-post an article for a Russian-speaking audience, or list their own recent VK wall posts with engagement. Auth uses a VK access token (community access key recommended).",
"when_to_use": "Trigger when the user wants to publish content to their VK wall or community,\nor review their own recent VK posts. VK's user-token OAuth flows were disabled\nin June 2024, so the connector stores a long-lived **community access key**\n(VK community → Manage → Settings → API usage, with the `wall` right). Posting\nto a community wall uses a negative owner_id + from_group=1. Confirm the post\ntext with the user before publishing.\n",
"allowed_tools": [
"Bash"
]
}
Call the VK API with curl + jq. The token is injected as $VK_ACCESS_TOKEN
and is passed in the Authorization: Bearer header. Every VK API call also
requires the v (API version) query parameter — use v=5.199. Base URL:
https://api.vk.com/method/<method>.
VK always returns HTTP 200; success is {"response": ...} and failure is
{"error":{"error_code":<n>,"error_msg":"<detail>"}} — always check for .error
and show error_msg verbatim. Common codes: 5 = auth failed (token wrong or
revoked → user must re-connect the VK connector), 214 = access to adding post
denied (the token lacks the wall right — a community access key with wall is
required), 15/203 = access denied to that owner.
Step 1 — identify who you can post as
A community access key posts on the community wall: owner_id must be the
negative community id and you pass from_group=1. Resolve the community id
from the token:
curl -sS "https://api.vk.com/method/groups.getById?v=5.199" \
-H "Authorization: Bearer $VK_ACCESS_TOKEN" \
| jq '.response, .error'
Take the group id (e.g. 123456) → owner_id is -123456. (For a personal
user token, owner_id is your positive user id from users.get, and you omit
from_group.)
Post to the wall
Confirm the message text with the user before posting. The post must have text and/or attachments.
OWNER_ID="-123456" # negative = community; from_group=1 posts as the community
MSG="Пример поста через VK API. #ai"
curl -sS -G "https://api.vk.com/method/wall.post" \
-H "Authorization: Bearer $VK_ACCESS_TOKEN" \
--data-urlencode "v=5.199" \
--data-urlencode "owner_id=$OWNER_ID" \
--data-urlencode "from_group=1" \
--data-urlencode "message=$MSG" \
| jq '.response, .error'
Success returns {"response":{"post_id":<id>}}. The public URL is
https://vk.com/wall<OWNER_ID>_<post_id> (e.g. https://vk.com/wall-123456_17).
- Hashtags (
#tag) and plain URLs inmessageare rendered/clickable natively — no facet/offset handling needed (unlike Bluesky). - Attach media/links with
attachments(comma-separated), format{type}{owner_id}_{media_id}(e.g.photo-123456_789) or a single external URL. Only one link may be attached; more than one link → error 222. publish_date(Unix timestamp) schedules a deferred post.- Always send Cyrillic
messagevia--data-urlencodeso it isn't mangled.
List my recent wall posts + engagement
OWNER_ID="-123456"
curl -sS -G "https://api.vk.com/method/wall.get" \
-H "Authorization: Bearer $VK_ACCESS_TOKEN" \
--data-urlencode "v=5.199" \
--data-urlencode "owner_id=$OWNER_ID" \
--data-urlencode "count=20" \
| jq '.error, (.response.items[]? | {id,
text,
likes: .likes.count,
reposts: .reposts.count,
comments: .comments.count,
views: .views.count,
date})'
count max 100. Combine owner_id + a post id to build the URL
https://vk.com/wall<owner_id>_<id>.
Delete a post
OWNER_ID="-123456"; POST_ID="17"
curl -sS -G "https://api.vk.com/method/wall.delete" \
-H "Authorization: Bearer $VK_ACCESS_TOKEN" \
--data-urlencode "v=5.199" \
--data-urlencode "owner_id=$OWNER_ID" \
--data-urlencode "post_id=$POST_ID" \
| jq '.response, .error'
Gotchas
vis mandatory on every call — omitting it returns an error.- User tokens can't be freshly minted via OAuth (Implicit / Authorization
Code flows for user tokens were disabled 2024-06); use a community access
key (unlimited lifetime, created in the community's API settings) with the
wallright. - Posting as the community requires both
owner_idnegative andfrom_group=1. - Rate/anti-spam: repeated identical posts or too-frequent posting can hit codes
like
214/219— space posts out.
Version History
- e0220ca Current 2026-07-05 22:56


