🔗 Webhooks & Integrations
Connect Aether to your favorite tools with webhooks and native integrations.
On This Page
Webhook Basics
Webhooks allow you to receive real-time notifications when events happen in Aether. When an event occurs, we send an HTTP POST request to your configured URL.
// Example webhook payload
{
"id": "evt_1234567890",
"type": "ticket.created",
"timestamp": "2024-01-15T10:30:00Z",
"data": {
"ticket": {
"id": "TKT-123",
"subject": "Need help with billing",
"priority": "high",
"status": "open",
"customer": {
"email": "user@example.com",
"name": "John Doe"
}
}
}
}Creating a Webhook
- Go to Settings → Webhooks
- Click Add Webhook
- Enter your endpoint URL
- Select the events you want to receive
- Copy the signing secret for verification
- Click Save
Event Types
Subscribe to specific events to receive only the notifications you need.
| Event | Description |
|---|---|
| ticket.created | New ticket submitted |
| ticket.updated | Ticket status, priority, or assignment changed |
| ticket.resolved | Ticket marked as resolved |
| comment.created | New comment added to ticket |
| conversation.started | New chat conversation initiated |
| conversation.escalated | AI escalated to human agent |
| sla.warning | SLA approaching breach |
| sla.breached | SLA target missed |
Slack Integration
Get ticket notifications directly in your Slack channels.
Setup Instructions
- Go to Settings → Integrations → Slack
- Click Connect Slack
- Authorize the Aether app in your Slack workspace
- Select the channel for notifications
- Configure which events trigger notifications
// Custom Slack webhook (alternative)
const response = await fetch('https://api.aetherai.support/api/integrations/slack', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
webhookUrl: 'https://hooks.slack.com/services/...',
channel: '#support',
events: ['ticket.created', 'ticket.escalated'],
mentionOnCritical: '@oncall'
})
});Slack Message Format
🎫 New Ticket: Need help with billing
Priority: High • Customer: john@example.com
View in Aether →
Discord Integration
Send support notifications to your Discord server.
Setup Instructions
- In Discord, go to your server's Server Settings → Integrations
- Click Create Webhook
- Name your webhook and select the channel
- Copy the webhook URL
- In Aether, go to Settings → Webhooks → Add Webhook
- Paste the Discord webhook URL
// Discord webhook payload format
{
"embeds": [{
"title": "🎫 New Ticket: Need help with billing",
"color": 16744448, // Orange for high priority
"fields": [
{ "name": "Priority", "value": "High", "inline": true },
{ "name": "Customer", "value": "john@example.com", "inline": true },
{ "name": "Status", "value": "Open", "inline": true }
],
"timestamp": "2024-01-15T10:30:00Z",
"footer": { "text": "Aether Support" }
}]
}Email Notifications
Configure email alerts for your team when important events occur.
Email Triggers
Custom Webhooks
Build custom integrations with any service using HTTP webhooks.
// Verifying webhook signatures (Node.js)
import crypto from 'crypto';
function verifyWebhookSignature(payload, signature, secret) {
const expectedSignature = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(`sha256=${expectedSignature}`)
);
}
// Express.js example
app.post('/webhooks/aether', (req, res) => {
const signature = req.headers['x-aether-signature'];
const payload = JSON.stringify(req.body);
if (!verifyWebhookSignature(payload, signature, WEBHOOK_SECRET)) {
return res.status(401).send('Invalid signature');
}
const { type, data } = req.body;
switch (type) {
case 'ticket.created':
handleNewTicket(data.ticket);
break;
case 'ticket.escalated':
alertOnCall(data.ticket);
break;
}
res.status(200).send('OK');
});Security: Always verify webhook signatures to ensure requests are genuinely from Aether. Never expose your webhook signing secret.