From hootsuite-pack
Implements Hootsuite event handling via API polling, custom Express webhooks for scheduled posts, and App Directory webhook endpoints.
How this skill is triggered — by the user, by Claude, or both
Slash command
/hootsuite-pack:hootsuite-webhooks-eventsThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Hootsuite provides webhook notifications for social stream events when building Hootsuite App Directory integrations. For API-only integrations, you poll for message state changes or implement your own scheduling system with callbacks.
Hootsuite provides webhook notifications for social stream events when building Hootsuite App Directory integrations. For API-only integrations, you poll for message state changes or implement your own scheduling system with callbacks.
// Since Hootsuite REST API doesn't push webhooks for message status,
// poll for changes to scheduled messages
async function pollMessageStatus(messageId: string, intervalMs = 30000) {
const check = async () => {
const response = await fetch(`https://platform.hootsuite.com/v1/messages/${messageId}`, {
headers: { 'Authorization': `Bearer ${await getStoredToken()}` },
});
const { data } = await response.json();
if (data.state === 'SENT') {
console.log(`Message ${messageId} sent at ${data.sentAt}`);
return data;
} else if (data.state === 'FAILED' || data.state === 'REJECTED') {
console.error(`Message ${messageId} failed: ${data.state}`);
return data;
}
console.log(`Message ${messageId}: ${data.state}, checking again...`);
await new Promise(r => setTimeout(r, intervalMs));
return check();
};
return check();
}
// Your own webhook system to track scheduled post status
import express from 'express';
const app = express();
app.use(express.json());
// Cron job checks scheduled posts and fires webhooks
async function checkScheduledPosts() {
const response = await fetch('https://platform.hootsuite.com/v1/messages?state=SENT&limit=50', {
headers: { 'Authorization': `Bearer ${await getStoredToken()}` },
});
const { data } = await response.json();
for (const msg of data) {
// Notify your systems about sent posts
await fetch(process.env.INTERNAL_WEBHOOK_URL!, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ event: 'post.sent', messageId: msg.id, sentAt: msg.sentAt, text: msg.text }),
});
}
}
For apps listed in the Hootsuite App Directory, you receive stream events:
// Webhook handler for Hootsuite App Directory integration
app.post('/webhooks/hootsuite', async (req, res) => {
const { type, data } = req.body;
switch (type) {
case 'message.sent': console.log('Post sent:', data); break;
case 'message.failed': console.error('Post failed:', data); break;
case 'stream.message': console.log('New social message:', data); break;
}
res.status(200).json({ received: true });
});
For performance, see hootsuite-performance-tuning.
npx claudepluginhub jeremylongshore/claude-code-plugins-plus-skills --plugin hootsuite-packGenerates minimal Hootsuite API examples to list social profiles, schedule posts, and query scheduled messages using TypeScript or curl.
Registers, unregisters, and lists webhook subscriptions for the Ayrshare MCP server to receive push notifications on social post/account events instead of polling.
Implements Klaviyo webhooks with HMAC-SHA256 signature verification, event handling, idempotency, and API subscriptions for profile/list/segment/campaign/flow events.