From podium-pack
Builds Podium two-way messaging workflow: Express webhook for inbound messages, API registration, reply sending. For SaaS integrations handling conversations.
npx claudepluginhub jeremylongshore/claude-code-plugins-plus-skills --plugin podium-packThis skill is limited to using the following tools:
Build a complete messaging workflow with Podium: send messages, receive inbound messages via webhooks, and manage conversation threads.
Lists Podium locations and contacts, sends test messages via REST API. Use after auth setup for business messaging, reviews, or payments integrations.
Implements WhatsApp Business Cloud API integrations: sending/receiving messages, templates, HMAC-SHA256 webhooks, customer service automation. Node.js and Python boilerplates.
Guides Next.js Cache Components and Partial Prerendering (PPR): 'use cache' directives, cacheLife(), cacheTag(), revalidateTag() for caching, invalidation, static/dynamic optimization. Auto-activates on cacheComponents: true.
Share bugs, ideas, or general feedback.
Build a complete messaging workflow with Podium: send messages, receive inbound messages via webhooks, and manage conversation threads.
podium-install-auth with OAuth tokensimport express from 'express';
const app = express();
app.post('/webhooks/podium', express.json(), async (req, res) => {
const event = req.body;
if (event.type === 'message.received') {
const msg = event.data;
console.log(`From: ${msg.attributes['contact-phone']}`);
console.log(`Body: ${msg.attributes.body}`);
// Auto-reply or route to agent
await sendReply(msg.attributes['location-uid'], msg.attributes['contact-phone'], 'Thanks for reaching out!');
}
res.status(200).json({ received: true });
});
const { data } = await podium.post('/webhooks', {
data: {
attributes: {
url: 'https://your-app.com/webhooks/podium',
events: ['message.received', 'message.sent', 'message.failed'],
},
},
});
console.log(`Webhook registered: ${data.data.id}`);
async function sendReply(locationId: string, phone: string, body: string) {
const { data } = await podium.post(`/locations/${locationId}/messages`, {
data: { attributes: { body, 'contact-phone': phone } },
});
return data.data.id;
}
| Error | Cause | Solution |
|---|---|---|
| Webhook not firing | URL not HTTPS | Use HTTPS endpoint |
| Message failed | Invalid phone | Verify E.164 format |
| No events received | Wrong event types | Check webhook configuration |
Reviews and payments: podium-core-workflow-b