Hey there, fellow Javascript devs! Ready to supercharge your Mailchimp integration with webhooks? Let's dive right in and get those real-time updates flowing!
Webhooks are like the cool kids of the API world - they notify your app instantly when something interesting happens in Mailchimp. No more constant polling or outdated data. We'll be using Mailchimp's API v3.0 to set this up, so buckle up!
Before we start, make sure you've got:
Got all that? Great! Let's code!
First things first, let's create a webhook endpoint using Express.js. This is where Mailchimp will send all those juicy updates.
const express = require('express'); const app = express(); app.use(express.json()); app.post('/webhook', (req, res) => { console.log('Received webhook:', req.body); res.sendStatus(200); }); app.listen(3000, () => console.log('Webhook receiver running on port 3000'));
Simple, right? This sets up a basic receiver that logs the webhook payload and sends a 200 OK response.
Now, let's tell Mailchimp where to send these webhooks. We'll use the Mailchimp API client to set this up.
const Mailchimp = require('@mailchimp/mailchimp_marketing'); Mailchimp.setConfig({ apiKey: 'your-api-key', server: 'us1', }); async function createWebhook() { try { const response = await Mailchimp.lists.createListWebhook('list_id', { url: 'https://your-domain.com/webhook', events: { subscribe: true, unsubscribe: true, profile: true, cleaned: true, upemail: true, campaign: true } }); console.log('Webhook created successfully:', response); } catch (error) { console.error('Error creating webhook:', error); } } createWebhook();
This code creates a webhook for all available events. Feel free to toggle those booleans based on what you need!
When Mailchimp sends a webhook, you'll get a payload that looks something like this:
{ type: 'subscribe', fired_at: '2023-05-15T12:00:00Z', data: { id: '123abc', email: '[email protected]', // ... more fields ... } }
Let's handle these events:
app.post('/webhook', (req, res) => { const { type, data } = req.body; switch(type) { case 'subscribe': console.log(`New subscriber: ${data.email}`); // Add your subscriber logic here break; case 'unsubscribe': console.log(`Unsubscribed: ${data.email}`); // Handle unsubscribe break; // ... handle other event types ... } res.sendStatus(200); });
Don't forget to verify that the webhook is actually coming from Mailchimp! Here's how:
const crypto = require('crypto'); function verifyWebhook(req, res, next) { const signature = req.headers['x-mailchimp-signature']; const body = JSON.stringify(req.body); const hash = crypto .createHmac('sha256', 'your-webhook-secret') .update(body) .digest('hex'); if (hash !== signature) { return res.status(401).send('Invalid signature'); } next(); } app.post('/webhook', verifyWebhook, (req, res) => { // Your webhook handling code });
Mailchimp provides a handy webhook tester in their interface. Use it! It's a lifesaver when you're trying to debug your webhook handling.
If you're not receiving webhooks, double-check your URL and make sure your server is publicly accessible. Localhost won't cut it here!
And there you have it! You're now a Mailchimp webhook wizard. Remember, webhooks are powerful tools that can really enhance your user experience with real-time updates.
Keep exploring the Mailchimp API docs for more cool features, and happy coding!