Synthra provides an event-driven webhook system for real-time notifications about session events, messages, and system activities.
Setup
const webhook = await agent.createWebhook({
url: 'https://your-server.com/webhook',
events: [
'session.created',
'message.sent',
'context.compressed'
],
secret: 'your_webhook_secret'
});
Event Types
// session.created
{
"event": "session.created",
"timestamp": "2024-03-08T14:30:00Z",
"data": {
"sessionId": "session_abc123def456",
"userId": "user_9f8e7d6c5b4a"
}
}
// message.sent
{
"event": "message.sent",
"timestamp": "2024-03-08T14:30:15Z",
"data": {
"sessionId": "session_abc123def456",
"messageId": "msg_abc123def456",
"content": "Hello, Synthra!",
"tokens": 4
}
}
Signature Verification
import crypto from 'crypto';
function verifyWebhookSignature(
payload: string,
signature: string,
secret: string
): boolean {
const expected = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}
Express.js Example
app.post('/webhook', (req, res) => {
const signature = req.headers['x-synthra-signature'];
const payload = JSON.stringify(req.body);
if (!verifyWebhookSignature(payload, signature, webhookSecret)) {
return res.status(401).send('Invalid signature');
}
const event = req.body;
console.log(`Received event: ${event.event}`);
res.status(200).send('OK');
});
Retry Logic
Synthra automatically retries failed webhook deliveries:
- Retry 1: After 1 minute
- Retry 2: After 5 minutes
- Retry 3: After 15 minutes
- Retry 4: After 1 hour
- Retry 5: After 6 hours
Managing Webhooks
// List webhooks
const webhooks = await agent.listWebhooks();
// Update webhook
await agent.updateWebhook('webhook_abc123def456', {
events: ['message.sent', 'message.received']
});
// Delete webhook
await agent.deleteWebhook('webhook_abc123def456');
Webhook endpoints must respond with 2xx status code within 5 seconds.
Always verify webhook signatures before processing events.