الويب هوكس

تسمح الويب هوكس لتطبيقك باستقبال إشعارات فورية عند حدوث أحداث مختلفة في Omdaa API، مثل استقبال رسالة جديدة، إرسال رسالة، أو اتصال جلسة.

إعداد عنوان Webhook

"function">curl "keyword">-X POST https://omdaa.com/api/v1/webhooks/set \
  "keyword">-H "Authorization: Bearer YOUR_JWT_TOKEN" \
  "keyword">-H "Content"keyword">-Type: application/json" \
  "keyword">-d '{
  "webhookUrl": "https://your class="keyword">-server.com/webhook",
  "events": ["message.incoming", "message.sent", "session.connected"]
}'

أمثلة للأحداث

رسالة واردة message.incoming
{
  "event": "message.incoming",
  "data": {
    "messageId": "msg_123",
    "from": "966501234567",
    "message": "مرحبا",
    "timestamp": "2025-01-15T12:00:00Z"
  }
}
رسالة مرسلة message.sent
{
  "event": "message.sent",
  "data": {
    "messageId": "msg_123",
    "to": "966501234567",
    "status": "sent",
    "timestamp": "2025-01-15T12:00:00Z"
  }
}
اتصال جلسة session.connected
{
  "event": "session.connected",
  "data": {
    "sessionId": "sess_123",
    "phoneNumber": "966501234567",
    "connectedAt": "2025-01-15T12:00:00Z"
  }
}

التحقق من التوقيع

عند ضبط secret عبر POST /webhooks/set، يُرسل Omdaa مع كل تسليم:

  • X-Webhook-Signature: sha256=<hmac_hex>
  • X-Webhook-Timestamp (Unix seconds) لمنع إعادة التشغيل

الصيغة: HMAC_SHA256(secret, raw_request_body) حيث raw_request_body هو جسم JSON كما وصل حرفياً (UTF-8). السر يُخزَّن plaintext داخلياً لتوقيع الصادر ولا يُعاد في GET /webhooks (hasSecret: true فقط). حدث test يعمل بدون جلسة واتساب.

Node.js
const crypto = require('crypto');
function verify(rawBody, signatureHeader, secret) {
  const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(rawBody, 'utf8').digest('hex');
  const a = Buffer.from(signatureHeader || '');
  const b = Buffer.from(expected);
  return a.length === b.length && crypto.timingSafeEqual(a, b);
}
// Express: app.use(express.json({ verify: (req,res,buf) => { req.rawBody = buf; } }));
// verify(req.rawBody, req.get('X-Webhook-Signature'), process.env.WEBHOOK_SECRET);
Python
import hmac, hashlib
def verify(raw_body: bytes, signature_header: str, secret: str) -> bool:
    digest = hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()
    expected = f"sha256={digest}"
    return hmac.compare_digest(signature_header or "", expected)
PHP
$raw = file_get_contents('php://input');
$sig = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? '';
$expected = 'sha256=' . hash_hmac('sha256', $raw, $secret);
$ok = hash_equals($expected, $sig);

الحصول على إعدادات Webhook

للحصول على إعدادات Webhook الحالية:

"function">curl "keyword">-X GET "https://omdaa.com/api/v1/webhooks" \
  "keyword">-H "Authorization: Bearer YOUR_JWT_TOKEN"

اختبار Webhook

لاختبار اتصال Webhook:

"function">curl "keyword">-X GET "https://omdaa.com/api/v1/webhooks/test" \
  "keyword">-H "Authorization: Bearer YOUR_JWT_TOKEN"

إحصائيات Webhook

للحصول على إحصائيات Webhook:

"function">curl "keyword">-X GET "https://omdaa.com/api/v1/webhooks/stats" \
  "keyword">-H "Authorization: Bearer YOUR_JWT_TOKEN"

Circuit Breaker

Omdaa API يستخدم Circuit Breaker لحماية Webhook من الفشل المتكرر:

الحصول على حالة Circuit Breaker

"function">curl "keyword">-X GET "https://omdaa.com/api/v1/webhooks/circuit class="keyword">-breaker" \
  "keyword">-H "Authorization: Bearer YOUR_JWT_TOKEN"

إعادة تعيين Circuit Breaker

"function">curl "keyword">-X POST "https://omdaa.com/api/v1/webhooks/circuit class="keyword">-breaker/reset" \
  "keyword">-H "Authorization: Bearer YOUR_JWT_TOKEN"

جميع الأحداث المتاحة

message.incoming
رسالة واردة
message.sent
رسالة مرسلة
message.delivered
رسالة تم تسليمها
message.read
رسالة تم قراءتها
session.connected
جلسة متصلة
session.disconnected
جلسة منفصلة
group.created
مجموعة جديدة
group.updated
تحديث مجموعة