Webhooks
FluenzR इवेंट पर रियल-टाइम अधिसूचनाएं प्राप्त करें।
Webhooks
Webhooks आपको FluenzR में इवेंट होने पर रियल-टाइम अधिसूचनाएं प्राप्त करने देते हैं।
जानकारी Webhooks केवल Pro प्लान पर उपलब्ध हैं।
यह कैसे काम करता है
- आप FluenzR में एक webhook URL कॉन्फ़िगर करते हैं
- जब कोई इवेंट होता है, FluenzR आपके URL पर एक HTTP POST अनुरोध भेजता है
- आपका सर्वर इवेंट को प्रोसेस करता है और 2xx कोड के साथ प्रतिक्रिया देता है
उपलब्ध इवेंट
संपर्क
| इवेंट | विवरण |
|---|---|
contact.created | नया संपर्क बनाया गया |
contact.updated | संपर्क अपडेट किया गया |
contact.deleted | संपर्क हटाया गया |
अभियान
| इवेंट | विवरण |
|---|---|
campaign.started | अभियान प्रारंभ हुआ |
campaign.paused | अभियान रोका गया |
campaign.completed | अभियान पूर्ण हुआ |
ईमेल
| इवेंट | विवरण |
|---|---|
email.sent | ईमेल भेजा गया |
email.delivered | ईमेल डिलीवर हुआ |
email.opened | ईमेल खोला गया |
email.clicked | लिंक क्लिक किया गया |
email.replied | उत्तर प्राप्त हुआ |
email.bounced | बाउंस पाया गया |
email.unsubscribed | अनसब्सक्राइब |
Webhook बनाएं
इंटरफ़ेस के माध्यम से
- सेटिंग्स > Webhooks पर जाएं
- + नया webhook पर क्लिक करें
- URL और इवेंट कॉन्फ़िगर करें
- सहेजें
API के माध्यम से
POST /webhooks
{
"url": "https://your-server.com/webhooks/fluenzr",
"events": [
"email.sent",
"email.opened",
"email.replied"
],
"secret": "your_webhook_secret"
}
उदाहरण
curl -X POST "https://api.fluenzr.co/v1/webhooks" \
-H "Authorization: Bearer flz_sk_xxx" \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-server.com/webhooks/fluenzr",
"events": ["email.opened", "email.replied"],
"secret": "whsec_abc123"
}'
प्रतिक्रिया
{
"success": true,
"data": {
"id": "whk_abc123",
"url": "https://your-server.com/webhooks/fluenzr",
"events": ["email.opened", "email.replied"],
"status": "active",
"createdAt": "2025-01-15T10:30:00Z"
}
}
Payload प्रारूप
सामान्य संरचना
{
"id": "evt_abc123",
"type": "email.opened",
"timestamp": "2025-01-15T14:32:00Z",
"data": {
// इवेंट-विशिष्ट डेटा
}
}
email.sent
{
"id": "evt_abc123",
"type": "email.sent",
"timestamp": "2025-01-15T10:00:00Z",
"data": {
"campaignId": "cmp_xyz789",
"campaignName": "Q1 प्रॉस्पेक्टिंग",
"contactId": "con_def456",
"contactEmail": "rahul@example.com",
"emailNodeId": "node_2",
"emailSubject": "राहुल, त्वरित प्रश्न"
}
}
email.opened
{
"id": "evt_abc124",
"type": "email.opened",
"timestamp": "2025-01-15T14:32:00Z",
"data": {
"campaignId": "cmp_xyz789",
"contactId": "con_def456",
"contactEmail": "rahul@example.com",
"emailNodeId": "node_2",
"openCount": 1,
"firstOpen": true,
"userAgent": "Mozilla/5.0...",
"ip": "192.168.1.1"
}
}
email.clicked
{
"id": "evt_abc125",
"type": "email.clicked",
"timestamp": "2025-01-15T14:35:00Z",
"data": {
"campaignId": "cmp_xyz789",
"contactId": "con_def456",
"contactEmail": "rahul@example.com",
"emailNodeId": "node_2",
"linkUrl": "https://fluenzr.co/demo",
"clickCount": 1
}
}
email.replied
{
"id": "evt_abc126",
"type": "email.replied",
"timestamp": "2025-01-15T15:10:00Z",
"data": {
"campaignId": "cmp_xyz789",
"contactId": "con_def456",
"contactEmail": "rahul@example.com",
"emailNodeId": "node_2",
"replySubject": "Re: राहुल, त्वरित प्रश्न",
"replyPreview": "नमस्ते, मुझे इसमें रुचि होगी..."
}
}
email.bounced
{
"id": "evt_abc127",
"type": "email.bounced",
"timestamp": "2025-01-15T10:05:00Z",
"data": {
"campaignId": "cmp_xyz789",
"contactId": "con_def456",
"contactEmail": "rahul@example.com",
"bounceType": "hard",
"bounceReason": "User unknown"
}
}
contact.created
{
"id": "evt_abc128",
"type": "contact.created",
"timestamp": "2025-01-15T09:00:00Z",
"data": {
"contact": {
"id": "con_def456",
"email": "rahul@example.com",
"firstName": "राहुल",
"lastName": "शर्मा",
"company": "Acme Corp"
}
}
}
सिग्नेचर सत्यापन
प्रत्येक webhook में इसकी प्रामाणिकता सत्यापित करने के लिए एक सिग्नेचर शामिल होता है।
हेडर
X-FluenzR-Signature: sha256=abc123...
X-FluenzR-Timestamp: 1640000000
सत्यापन (Node.js)
const crypto = require('crypto');
function verifyWebhookSignature(payload, signature, timestamp, secret) {
const expectedSignature = crypto
.createHmac('sha256', secret)
.update(`${timestamp}.${payload}`)
.digest('hex');
return `sha256=${expectedSignature}` === signature;
}
// आपके एंडपॉइंट में
app.post('/webhooks/fluenzr', (req, res) => {
const signature = req.headers['x-fluenzr-signature'];
const timestamp = req.headers['x-fluenzr-timestamp'];
const payload = JSON.stringify(req.body);
if (!verifyWebhookSignature(payload, signature, timestamp, WEBHOOK_SECRET)) {
return res.status(401).send('अमान्य सिग्नेचर');
}
// इवेंट प्रोसेस करें
const event = req.body;
console.log(`इवेंट प्राप्त: ${event.type}`);
res.status(200).send('OK');
});
सत्यापन (Python)
import hmac
import hashlib
def verify_webhook_signature(payload, signature, timestamp, secret):
expected = hmac.new(
secret.encode(),
f"{timestamp}.{payload}".encode(),
hashlib.sha256
).hexdigest()
return f"sha256={expected}" == signature
# आपके Flask एंडपॉइंट में
@app.route('/webhooks/fluenzr', methods=['POST'])
def handle_webhook():
signature = request.headers.get('X-FluenzR-Signature')
timestamp = request.headers.get('X-FluenzR-Timestamp')
payload = request.get_data(as_text=True)
if not verify_webhook_signature(payload, signature, timestamp, WEBHOOK_SECRET):
return 'अमान्य सिग्नेचर', 401
event = request.get_json()
print(f"इवेंट प्राप्त: {event['type']}")
return 'OK', 200
पुनः प्रयास हैंडलिंग
FluenzR विफल webhooks को स्वचालित रूप से पुनः प्रयास करता है:
| प्रयास | विलंब |
|---|---|
| 1 | तुरंत |
| 2 | 1 मिनट |
| 3 | 5 मिनट |
| 4 | 30 मिनट |
| 5 | 2 घंटे |
5 विफलताओं के बाद, webhook को "failed" के रूप में चिह्नित किया जाता है।
सफलता कोड
आपके सर्वर को 30 सेकंड के भीतर HTTP 2xx कोड के साथ प्रतिक्रिया देनी चाहिए।
| कोड | परिणाम |
|---|---|
| 200-299 | सफलता |
| 3xx | पुनः प्रयास |
| 4xx | स्थायी विफलता |
| 5xx | पुनः प्रयास |
| टाइमआउट | पुनः प्रयास |
Webhooks प्रबंधित करें
Webhooks सूचीबद्ध करें
GET /webhooks
Webhook अपडेट करें
PUT /webhooks/:id
{
"events": ["email.opened", "email.replied", "email.clicked"]
}
Webhook हटाएं
DELETE /webhooks/:id
Webhook का परीक्षण करें
POST /webhooks/:id/test
आपके URL पर एक टेस्ट इवेंट भेजता है।
लॉग देखें
GET /webhooks/:id/logs
डिलीवरी प्रयास इतिहास प्राप्त करता है।
{
"success": true,
"data": [
{
"id": "log_abc123",
"eventId": "evt_xyz789",
"eventType": "email.opened",
"status": "delivered",
"statusCode": 200,
"responseTime": 145,
"timestamp": "2025-01-15T14:32:00Z"
}
]
}
सर्वोत्तम अभ्यास
जल्दी प्रतिक्रिया दें
आपके एंडपॉइंट को 30 सेकंड से कम में प्रतिक्रिया देनी चाहिए। यदि आवश्यक हो तो बैकग्राउंड में प्रोसेस करें।
इडम्पोटेंस
आपके कोड को डुप्लिकेट इवेंट को संभालना चाहिए। डीडुप्लिकेट करने के लिए इवेंट ID का उपयोग करें।
मॉनिटरिंग
अपने webhooks की निगरानी करें:
- सफलता दर
- प्रतिक्रिया समय
- बार-बार होने वाली त्रुटियां
सुरक्षा
- हमेशा सिग्नेचर सत्यापित करें
- केवल HTTPS का उपयोग करें
- टाइमस्टैम्प को मान्य करें (>5 मिनट होने पर अस्वीकार करें)
