Hey there, fellow JavaScript dev! Ready to supercharge your PagerDuty integration with webhooks? Let's dive right in and get those real-time notifications flowing.
Webhooks are like the cool kids of the API world – they don't wait around, they come to you with the latest updates. In PagerDuty, they're your ticket to building responsive, user-facing integrations that keep everyone in the loop.
Before we start, make sure you've got:
Got all that? Great! Let's code.
First things first, we need somewhere for PagerDuty to send those juicy webhook payloads. 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 webhook receiver. Simple, right?
Now, let's tell PagerDuty about our shiny new endpoint. We'll use the PagerDuty API to set this up:
const axios = require('axios'); const createWebhook = async () => { try { const response = await axios.post('https://api.pagerduty.com/webhooks', { webhook: { endpoint_url: 'https://your-server.com/webhook', description: 'My awesome webhook', events: ['incident.trigger', 'incident.resolve'] } }, { headers: { 'Authorization': 'Token token=YOUR_API_TOKEN', 'Content-Type': 'application/json' } }); console.log('Webhook created:', response.data); } catch (error) { console.error('Error creating webhook:', error.response.data); } }; createWebhook();
Replace 'https://your-server.com/webhook'
with your actual endpoint URL and YOUR_API_TOKEN
with your PagerDuty API token. Run this, and you're in business!
PagerDuty's got a bunch of event types you can listen for. Some popular ones:
incident.trigger
incident.acknowledge
incident.resolve
incident.assign
You can specify these in the events
array when creating your webhook. Mix and match to your heart's content!
When PagerDuty sends a webhook, you'll get a JSON payload. Let's parse it and do something cool:
app.post('/webhook', (req, res) => { const { event } = req.body; switch(event.type) { case 'incident.trigger': console.log(`Alert! Incident ${event.data.id} triggered!`); // Maybe send a Slack message? break; case 'incident.resolve': console.log(`Phew! Incident ${event.data.id} resolved.`); // Update your dashboard? break; // Handle other event types... } res.sendStatus(200); });
PagerDuty's got your back with webhook signatures. Always verify them:
const crypto = require('crypto'); app.post('/webhook', (req, res) => { const signature = req.headers['x-pagerduty-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(400).send('Invalid signature'); } // Process the webhook... });
Replace 'YOUR_WEBHOOK_SECRET'
with the secret PagerDuty provides when you create the webhook.
PagerDuty's got a nifty webhook tester in their UI. Use it! It's like a sandbox for your webhooks.
If things aren't working:
And there you have it! You're now a PagerDuty webhook wizard. 🧙♂️ Remember, this is just the beginning. Play around, experiment, and build something awesome!
Got questions? Hit up the PagerDuty docs or community forums. Now go forth and webhook all the things!