Hey there, fellow JavaScript dev! Ready to supercharge your YouCanBookMe 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 don't wait around, they come to you with the latest news. In YouCanBookMe, webhooks are your ticket to building responsive, user-facing integrations that react instantly to booking events. We'll be using the YouCanBookMe API to set this up, so buckle up!
Before we start coding, make sure you've got:
Got all that? Great! Let's roll.
First things first, we need somewhere for those webhooks to land. Let's whip up a quick Express server:
const express = require('express'); const app = express(); app.use(express.json()); app.post('/webhook', (req, res) => { console.log('Webhook received:', req.body); res.sendStatus(200); }); app.listen(3000, () => console.log('Webhook server running on port 3000'));
Boom! You've got a basic server ready to catch those webhooks.
Now, head over to your YouCanBookMe dashboard and find the webhook settings. You'll need to:
https://your-server.com/webhook
)If you're feeling fancy, you can even set this up via the API:
const axios = require('axios'); axios.post('https://api.youcanbook.me/v1/account/webhooks', { url: 'https://your-server.com/webhook', events: ['booking.created', 'booking.cancelled'] }, { headers: { 'Authorization': 'Bearer YOUR_API_KEY' } }) .then(response => console.log('Webhook configured!')) .catch(error => console.error('Oops:', error));
When a webhook hits your server, it's packing a JSON payload. Let's handle it like a pro:
app.post('/webhook', (req, res) => { const { event, payload } = req.body; switch(event) { case 'booking.created': handleNewBooking(payload); break; case 'booking.cancelled': handleCancellation(payload); break; // Add more cases as needed } res.sendStatus(200); }); function handleNewBooking(booking) { console.log(`New booking: ${booking.id}`); // Do something awesome with the booking data } function handleCancellation(booking) { console.log(`Booking cancelled: ${booking.id}`); // Update your system accordingly }
Now for the fun part - putting those webhooks to work! Here's a quick example of sending a confirmation email:
const nodemailer = require('nodemailer'); function handleNewBooking(booking) { const transporter = nodemailer.createTransport(/* your email config */); transporter.sendMail({ from: '[email protected]', to: booking.email, subject: 'Booking Confirmation', text: `Thanks for booking! Your appointment is on ${booking.start_time}.` }); }
Don't forget to keep things secure! Verify those webhook signatures:
const crypto = require('crypto'); function verifySignature(req, res, next) { const signature = req.headers['x-ycbm-signature']; const body = JSON.stringify(req.body); const hash = crypto.createHmac('sha256', process.env.WEBHOOK_SECRET) .update(body) .digest('hex'); if (hash === signature) { next(); } else { res.status(401).send('Invalid signature'); } } app.use('/webhook', verifySignature);
Always be prepared for the unexpected:
app.post('/webhook', (req, res) => { try { // Your webhook handling logic here res.sendStatus(200); } catch (error) { console.error('Webhook processing failed:', error); res.status(500).send('Webhook processing failed'); } });
Before going live, give your webhook a test drive:
const axios = require('axios'); function testWebhook() { axios.post('http://localhost:3000/webhook', { event: 'booking.created', payload: { id: 'test-123', start_time: '2023-06-01T10:00:00Z' } }) .then(response => console.log('Test webhook sent successfully')) .catch(error => console.error('Test failed:', error)); } testWebhook();
And there you have it! You're now equipped to handle YouCanBookMe webhooks like a champ. Remember, webhooks are powerful tools, so use them wisely and keep your code clean.
Happy coding, and may your bookings always be on time! 🚀📅