🔗 Webhooks & Integrations

Connect Aether to your favorite tools with webhooks and native integrations.

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

  1. Go to SettingsWebhooks
  2. Click Add Webhook
  3. Enter your endpoint URL
  4. Select the events you want to receive
  5. Copy the signing secret for verification
  6. Click Save

Event Types

Subscribe to specific events to receive only the notifications you need.

EventDescription
ticket.createdNew ticket submitted
ticket.updatedTicket status, priority, or assignment changed
ticket.resolvedTicket marked as resolved
comment.createdNew comment added to ticket
conversation.startedNew chat conversation initiated
conversation.escalatedAI escalated to human agent
sla.warningSLA approaching breach
sla.breachedSLA target missed

Slack Integration

Get ticket notifications directly in your Slack channels.

Setup Instructions

  1. Go to SettingsIntegrationsSlack
  2. Click Connect Slack
  3. Authorize the Aether app in your Slack workspace
  4. Select the channel for notifications
  5. 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

  1. In Discord, go to your server's Server SettingsIntegrations
  2. Click Create Webhook
  3. Name your webhook and select the channel
  4. Copy the webhook URL
  5. In Aether, go to SettingsWebhooksAdd Webhook
  6. 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

New critical ticketAssigned team + supervisors
SLA warning (15 min before)Assigned agent
SLA breachTeam lead + supervisor
Customer replyAssigned agent
Daily summaryAll team members

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.