Skill instructions
engagement-inbox2.62 KB
View saved version →
---
name: engagement-inbox
description: Work through social media engagement with Postproxy - find comments, direct messages, and Google Business reviews that are waiting for a reply, read them in context, and send replies the user approves. Use when the user asks what needs a reply, wants to answer comments or DMs, or wants to respond to reviews.
---
# Engagement inbox
Help the user see what is waiting on them and reply, one approved message at a time.
## 1. Find what needs attention
Start with `summary_get` (default 24h window, or the window the user asks for). Its `awaiting_reply` section counts comments, reviews, and chats with no reply from the user over the last 30 days, regardless of the window. Present those counts by network, and flag chats close to the end of their 24-hour messaging window first. Then open the specific items with the tools below (use `history_list` to find recent posts whose comments to check).
## 2. Read in context
- Post comments: `comments_list` with the post ID and profile ID. Not every network supports comments. Comment tools work on Instagram, Facebook, Threads, YouTube, and LinkedIn.
- Google Business reviews: `profile_comments_list` with the Google Business profile ID (and `placement_id` for one location). Reviews sync twice a day, so a very recent review may not appear yet.
- Direct messages: `dm_chats_list` for the profile, then `dm_messages_list` for a chat. DMs work on Facebook, Instagram, Telegram, Bluesky, and WhatsApp.
## 3. Draft and confirm replies
- Draft a reply that matches the brand's tone and answers what was actually asked. Don't promise refunds, discounts, or policies the user hasn't stated.
- Show the draft and send it only after the user approves it. Every reply is posted publicly or delivered to a real person.
- Comment or review reply: `comments_create` with `parent_id` set to the comment, or `profile_comments_create` for a review.
- Direct message: `dm_message_send` with `chat_id` and `body`.
## Messaging window rules
- Facebook and Instagram: free-form replies are allowed within 24 hours of the person's last message. After that, `tag: "HUMAN_AGENT"` is allowed only when a person is replying to that customer's own question. Never use it for promotional or automated messages.
- WhatsApp: outside the 24-hour window, only an approved template (`whatsapp_templates_list`, then `template` in `dm_message_send`) can reopen the conversation. Explain this instead of retrying a free-form message that fails.
## Moderation
`comments_hide` and `comments_delete` affect what the public sees. Confirm before using them and prefer hiding over deleting unless the user asks to delete.
get-started2.44 KB
View saved version →
---
name: get-started
description: Set up Postproxy after installing the plugin. Confirms the account is connected, shows which profile groups and social profiles are available, and helps connect a new social network. Use when the user has just installed Postproxy, asks what accounts are connected, or wants to connect another social account.
---
# Get started with Postproxy
Help the user confirm their Postproxy connection and make sure the social profiles they want to post to are connected.
## Steps
1. Call `auth_status` to confirm the connection works and to learn the workspace name. If it fails, tell the user to reconnect the Postproxy plugin and stop.
2. Call `profile_groups_list`. Profile groups are containers, usually one per brand or client.
3. Call `profiles_list` (once, without a filter) and group the results by `profile_group_id`.
4. Show a short overview: each group's name followed by its profiles (network and account name). Mark any profile whose status is not active, because posts to it will fail.
5. Ask which networks the user plans to post to. If a network is missing from the right group, offer to connect it (see below).
6. End with two or three example requests the user can try now, based on the profiles they actually have, such as "Schedule a LinkedIn post for tomorrow 9am" or "What happened on my accounts this week?".
## Connect a new social profile
1. Ask which profile group the profile belongs to, unless there is only one.
2. Call `profile_groups_initialize_connection` with `profile_group_id` and `platform`.
- Bluesky needs `identifier` (handle) and `app_password`. Ask the user for an app password created at bsky.app/settings/app-passwords, never their main password.
- Telegram needs `bot_token` from @BotFather.
- WhatsApp accepts an optional `onboarding` value. Omit it unless the user has said whether the number stays in the WhatsApp Business app (`business_app`) or moves to the Cloud API (`api`).
3. Give the user the returned URL to open and finish the network's sign-in. Postproxy can't complete that step for them.
4. When the user says they are done, call `profiles_list` again and confirm the new profile appears.
## Notes
- Never invent profile IDs. Use IDs returned by `profiles_list`.
- Facebook pages, LinkedIn organizations, Pinterest boards, Telegram channels, Google Business locations, and WhatsApp numbers are placements under a profile. Call `profiles_placements` with the profile ID when the user needs to pick one.
performance-report2.41 KB
View saved version →
---
name: performance-report
description: Build a social media performance report from Postproxy data - what was published, how posts performed, and how followers and engagement changed over a period. Use when the user asks how their social accounts or posts are doing, wants a weekly or monthly report, or wants to compare networks or posts.
---
# Performance report
Produce a short, accurate report from Postproxy data. Read-only: this skill never changes anything.
## Data to gather
1. `summary_get` for the period (`window`, or `from`/`to` for an explicit range, and `profile_group_id` to report on one brand). It returns posts published and failed, engagement totals, comments, reviews, and DM volume per network, with comparison counts for the previous period.
2. `history_list` for the posts behind those numbers (raise `limit` for longer periods).
3. `post_stats` with up to 50 post IDs to rank posts. Each post has several snapshots over time, so use the latest one per post and network.
4. `profiles_stats` for follower and audience trends per profile. Facebook, LinkedIn, Telegram, and Google Business need a `placement_id` from `profiles_placements`.
## How to read the numbers
- Engagement in `summary_get` is lifetime-to-date for posts published in the window, not engagement earned during the window. Say this when comparing periods.
- In `summary_get`, a post sent to three networks counts once in post totals and three times in `by_platform`.
- Stats fields are each network's own metrics and aren't normalized. Compare like with like (for example, Instagram likes against Instagram likes) and don't add up different metrics across networks.
- `engagement` is null when insights are turned off for the account. Say that instead of reporting zero.
- Google Business stats are impressions, website clicks, calls, direction requests, and conversations. There is no follower count.
## Report shape
1. A headline line: posts published, the overall engagement trend, and the most important change.
2. A per-network table with posts, key engagement metrics, and follower change.
3. The top three posts with links and why they likely did well (format, topic, timing), and any failed posts with the error.
4. Two or three concrete suggestions based on the data, such as what to post more of or when to schedule. Label them as suggestions.
Only report numbers returned by the tools. If data is missing for a network, say so rather than estimating.
publish-posts3.71 KB
View saved version →
---
name: publish-posts
description: Draft, publish, schedule, queue, edit, and track social media posts with Postproxy across Instagram, Facebook, TikTok, LinkedIn, YouTube, X, Threads, Pinterest, Bluesky, Telegram, and Google Business. Use when the user wants to post something, schedule content, save a draft, add a post to a queue, change or reschedule a scheduled post, or check whether a post went out.
---
# Publish posts with Postproxy
Turn the user's request into a correct post on the right profiles, confirm before anything goes live, then report where it landed.
## 1. Pick the profiles
- Call `profiles_list` to resolve the target profiles. Use the returned profile IDs. If the user names only a network and they have several profiles on it (for example, two brands on Instagram), ask which one.
- If the user works with several brands, use `profile_groups_list` to pick the right group first.
- For Facebook, LinkedIn organizations, Pinterest, Telegram, and Google Business, the post may need a placement (page, organization, board, channel, or location). Call `profiles_placements` and pass the chosen ID in `platforms`: Facebook `page_id`, LinkedIn `organization_id`, Pinterest `board_id`, Telegram `chat_id`, Google Business `location_id`.
## 2. Shape the content for each network
- Respect the networks' limits. X allows 280 characters per post, Threads allows 500, and Bluesky allows 300. For longer text on X or Threads, offer a thread using the `thread` parameter, or shorten it.
- Instagram, TikTok, YouTube, and Pinterest need media. Ask for an image or video if none was given.
- Media must be public URLs in `media`. If the user only has a file in the chat, ask them for a public link to it.
- Use `platforms` for network-specific options instead of separate posts: Instagram/Facebook `format` (post, reel, story; stories take no caption), YouTube `title` and `privacy_status`, TikTok `privacy_status`, Instagram `collaborators` and `first_comment`, Google Business `format` (standard, event, offer).
## 3. Decide when it goes out
- Now: no `schedule`, no `queue_id`.
- At a time: pass `schedule` as ISO 8601 with a timezone offset. Resolve relative times ("tomorrow at 9") using the user's timezone; ask if it is unknown. Never schedule in the past.
- Into a queue: call `queues_list`, pass `queue_id` (and optionally `queue_priority`). Don't combine with `schedule`. `queues_next_slot` tells the user when it will go out.
- Not yet: pass `draft: true`. Publish it later with `post_publish_draft`.
## 4. Confirm, then publish
Before calling `post_publish` without `draft: true`, show the user exactly what will happen: the final text per network, attached media, target profiles and placements, and the publish time (or "immediately"). Publish only after they confirm. Saving a draft doesn't need confirmation.
## 5. Report back
- After publishing, call `post_status` with the returned post ID. Report each network's status and the published URL. Publishing is asynchronous, so "pending" or "processing" right after creating the post is normal; offer to check again.
- If a network failed, quote its error and suggest the fix (for example, a missing placement or unsupported media type).
## Edit, reschedule, or remove
- Find the post with `history_list` or the ID the user gives.
- `post_update` works only on drafts and on scheduled posts more than 5 minutes before their publish time. Send only the fields that change. `media`, `profiles`, and `thread` replace the existing values entirely.
- To take a published post down, confirm first, then call `post_delete_on_platform` (keeps the Postproxy record) or `post_delete` with `delete_on_platform: true` (removes both). `post_delete` alone only removes the Postproxy record and leaves the live post up; say so.