نظرة عامة
- نطاقات قابلة للتهيئة لتغطية بيانات التقويم (calendar) والإشارات (signals) بحيث تستلم فقط البيانات التي تحتاجها
- عمليات تسليم متطابقة (idempotent) مع ترويسة فريدة
X-BZ-Deliveryوحقلidفي الحمولة لأغراض إزالة التكرار - جدول إعادة محاولة متين يتدرج من محاولات سريعة بأسلوب أسي إلى محاولات طويلة الأمد تُجرى كل ساعة
- تحويلات اختيارية على
contentلمواءمة الحمولات مع توقعات الأنظمة اللاحقة في سلسلة المعالجة
تسليم طلبات Webhook
تفاصيل طلب HTTP
- Method:
POST - Content-Type:
application/json - User-Agent:
Benzinga-Dispatch/v1.0.0 {build-version} - Custom Header:
X-BZ-Delivery- معرّف UUID فريد خاص بكل محاولة تسليم (مفيد لمنع التكرار)
سياسة إعادة المحاولة
- المرحلة الأسية: 15 محاولة خلال أول 5 دقائق
- محاولات أسية إضافية: 11 محاولة إضافية عند الحاجة
- مرحلة الفاصل الزمني الثابت: 12 محاولة في الساعة × 24 ساعة/يوم × 7 أيام (لإعادة المحاولة على المدى الطويل)
- أقصى مدة انتظار: 5 دقائق بين المحاولات في المرحلة الأسية
- مهلة الطلب: 30 ثانية لكل طلب
متطلبات الاستجابة
- رموز النجاح (200-202، 204): تشير إلى نجاح عملية التسليم. لن تتم أي محاولات إعادة إرسال.
- رموز أخطاء العميل (401-403): تشير إلى فشل في المصادقة/التفويض. سيتم إيقاف محاولات إعادة الإرسال فورًا لمنع المزيد من المحاولات الفاشلة.
- رموز أخرى (4xx، 5xx): ستؤدي إلى محاولات إعادة إرسال وفقًا لسياسة إعادة المحاولة أعلاه.
بنية حمولة الـ Webhook
حقول الحمولة
الحقول على المستوى الأعلى
id(string, UUID): معرّف فريد لتسليم الـ webhook هذا. استخدمه لمنع التكرار.api_version(string): معرّف إصدار واجهة برمجة التطبيقات API. حاليًا"webhook/v1".kind(string): معرّف مسار نوع البيانات. راجع أنواع البيانات المدعومة لجميع القيم المحتملة.
كائن البيانات
action(string): نوع إجراء الحدث. القيم الممكنة:"Created": تم إنشاء بيانات جديدة (القيمة الافتراضية لمفاتيح webhook الجديدة)"Updated": تم تحديث البيانات الحالية"Removed": تم حذف البيانات- ملاحظة: قد تتلقى مفاتيح webhook القديمة قيماً بحروف صغيرة:
"created","updated","removed"
id(string): معرّف فريد لسجل calendar/signaltimestamp(string، ISO 8601): الطابع الزمني عند إنشاء الـ webhookcontent(object): بيانات calendar أو signal الفعلية. تختلف البنية حسب نوع البيانات (انظر أنواع البيانات المدعومة)
أنواع البيانات المدعومة
أنواع بيانات calendar (v2.1)
| نوع البيانات | مسار kind | الوصف |
|---|---|---|
| Earnings | data/v2.1/calendar/earnings | إعلانات أرباح الشركات |
| Dividends | data/v2.1/calendar/dividends | إعلانات توزيعات الأرباح والمدفوعات |
| Ratings | data/v2.1/calendar/ratings | تقييمات المحللين والأسعار المستهدفة |
| IPOs | data/v2.1/calendar/ipos | الطروحات العامة الأولية |
| Guidance | data/v2.1/calendar/guidance | تحديثات توجيهات الشركات |
| Conference | data/v2.1/calendar/conference | مكالمات وعروض تقديمية في المؤتمرات |
| Economics | data/v2.1/calendar/economics | المؤشرات والإصدارات الاقتصادية |
| Offerings | data/v2.1/calendar/offerings | الطروحات الثانوية |
| Mergers & Acquisitions | data/v2.1/calendar/ma | إعلانات الاندماجات والاستحواذات (M&A) |
| Retail | data/v2.1/calendar/retail | بيانات مبيعات التجزئة |
| Splits | data/v2.1/calendar/splits | تجزئة الأسهم |
| FDA | data/v2.1/calendar/fda | موافقات وإعلانات هيئة الغذاء والدواء الأمريكية (FDA) |
أنواع بيانات الإشارات (v1)
| نوع البيانات | مسار kind | الوصف |
|---|---|---|
| نشاط الخيارات | data/v1/signal/option_activity | نشاط خيارات غير اعتيادي |
| WIIMs | data/v1/wiims | بيانات «لماذا تتحرك» (Why Is It Moving - WIIMs) |
| معاملات المطلعين لدى SEC | data/v1/sec/insider_transactions/filings | ملفات تداول المطلعين المقدَّمة إلى SEC |
| تداولات الحكومة | data/v1/gov/usa/congress | بيانات تداول أعضاء الكونغرس الأمريكي |
أنواع بيانات إضافية (v1)
| نوع البيانات | مسار kind | الوصف |
|---|---|---|
| Bulls Say Bears Say | data/v1/bulls_bears_say | تحليل معنويات السوق |
| Bulls Say Bears Say (Korean) | data/v1/bulls_bears_say/korean | معنويات السوق الكوري |
| Analyst Insights | data/v1/analyst/insights | تحليلات وتعليقات المحللين |
| Consensus Ratings | data/v1/consensus-ratings | تقييمات إجماع مُجمَّعة |
أمثلة على بنية المحتوى
مثال للأرباح
مثال لتوزيعات الأرباح
مثال للتقييمات
مثال على نشاط عقود الخيارات
إجراءات الأحداث
- Created: يتم إرسال حدث عند نشر بيانات
calendarأو بيانات الإشارات الجديدة - Updated: يتم إرسال حدث عند تعديل البيانات الحالية
- Removed: يتم إرسال حدث عند حذف البيانات
- مفاتيح webhook الجديدة: تستقبل إجراءات بحروف كبيرة (
"Created","Updated","Removed") - مفاتيح webhook القديمة (Legacy): تستقبل إجراءات بحروف صغيرة (
"created","updated","removed")
تصفية المحتوى
خيارات التصفية
- أنواع البيانات: التصفية حسب أنواع معيّنة من
calendar/الإشارات (مثلًا: الأرباح فقط، التقييمات فقط) - عوامل التصفية الجغرافية: التحكم في ما إذا كنت ستستقبل:
- بيانات السوق الأمريكية (
AllowUSA) - بيانات السوق الكندية (
AllowCanada) - بيانات السوق الهندية (
AllowIndia) - لبيانات WIIMs
- بيانات السوق الأمريكية (
- عامل تصفية التاريخ: استبعاد البيانات التاريخية الأقدم من تاريخ معيّن (
MaxHistoricalDate)
التصفية حسب البورصة
- البورصات الأمريكية: NYSE, NASDAQ, AMEX, ARCA, OTC, OTCBB, PINX, PINK, BATS, IEX
- البورصات الكندية: TSX, TSXV, CSE, CNSX
تحويل المحتوى
- إعادة تسمية الحقول
- تحويل تنسيقات البيانات
- تصفية/إزالة الحقول
أفضل الممارسات
1. Idempotency
id (UUID) في الـ payload لتطبيق خاصية idempotency. خزّن معرّفات التسليم التي جرى معالجتها لتفادي المعالجة المكرّرة.
2. التعامل مع الاستجابة
- أرجِع
200 OKأو204 No Contentعلى الفور عند استلام الـ webhook - عالِج البيانات بشكل غير متزامن إذا لزم الأمر
- لا تنفِّذ عمليات طويلة الأمد قبل إرسال الاستجابة
٣. معالجة الأخطاء
- أرجِع رموز حالة HTTP المناسبة
- في حالة أخطاء المصادقة (401-403)، تأكّد من ضبط الـ endpoint بشكل صحيح
- في حالة الإخفاقات المؤقتة، أرجِع رموز حالة من نوع 5xx لتفعيل إعادة المحاولة
4. الأمان
- استخدم HTTPS لنقطة النهاية الخاصة بالـ webhook
- نفِّذ آليات المصادقة/التفويض (مفاتيح واجهة برمجة التطبيقات API، رموز الوصول، إلخ)
- تحقَّق من الترويسة
X-BZ-Deliveryلمزيد من الأمان
5. المراقبة
- راقب أزمنة استجابة نقطة النهاية الخاصة بك
- اضبط تنبيهات لحالات الفشل المتكررة
- تتبّع ترويسة
X-BZ-Deliveryلتحديد محاولات التسليم
6. التعامل مع أنواع البيانات
- تحقق من حقل
kindلتحديد نوع البيانات - حلّل كائن
contentوفقًا لبنية نوع البيانات - تعامل مع تنسيقات الإجراء المختلفة (أحرف كبيرة مقابل أحرف صغيرة) إذا كنت بحاجة إلى دعم المفاتيح القديمة
مثال لمُعالج Webhook
Python (Flask)
Node.js (Express)
Go
استكشاف الأخطاء وإصلاحها
المشكلات الشائعة
-
عدم استلام أي webhooks
- تحقَّق من أن عنوان الـ webhook (URL) مكوَّن بشكل صحيح
- تأكَّد من أن نقطة النهاية لديك متاحة للعامة
- تأكَّد من أن مفتاح واجهة برمجة التطبيقات API لديك صالح وفعّال
- تحقَّق من أن عوامل التصفية لا تستبعد جميع أنواع البيانات
- تحقَّق من أن عوامل التصفية الجغرافية تطابق البيانات التي تتوقعها
-
عمليات تسليم مكررة
- نفِّذ خاصية idempotency باستخدام الحقل
id - تحقَّق من أزمنة استجابة نقطة النهاية لديك (قد تؤدي الاستجابات البطيئة إلى إعادة المحاولة)
- نفِّذ خاصية idempotency باستخدام الحقل
-
أخطاء مصادقة (401-403)
- تحقَّق من إعدادات المصادقة لنقطة النهاية لديك
- تحقَّق من مفاتيح واجهة برمجة التطبيقات API ورموز الوصول
- ملاحظة: تؤدي أخطاء المصادقة إلى إيقاف إعادة المحاولة فورًا
-
أخطاء انتهاء المهلة
- تأكَّد من أن نقطة النهاية لديك تستجيب خلال 30 ثانية
- عالج البيانات بشكل غير متزامن عند الحاجة
- أعد استجابة نجاح فورًا ثم عالج البيانات لاحقًا
-
تنسيق إجراء غير متوقَّع
- تحقَّق مما إذا كنت تستخدم مفتاح webhook قديمًا (قِيَم الحقل
actionبحروف صغيرة) - حدِّث إلى مفتاح webhook جديد لاستلام قِيَم الحقل
actionبحروف كبيرة - عالِج كلا التنسيقين إذا كنت تدعم عدة عملاء
- تحقَّق مما إذا كنت تستخدم مفتاح webhook قديمًا (قِيَم الحقل
-
أنواع بيانات مفقودة
- تحقَّق من أن تكوين webhook لديك يتضمّن أنواع البيانات المطلوبة
- تحقَّق من عوامل التصفية الجغرافية (إعدادات US/Canada/India)
- تأكَّد من أن عوامل تصفية التاريخ لا تستبعد البيانات الحديثة
الدعم
- اطّلع على وثائق واجهة برمجة التطبيقات API الخاصة بـ Benzinga
- تواصل مع ممثل حسابك في Benzinga
- راجع إعدادات الـwebhook مع فريق التكامل لديك
سجل الإصدارات
- v1.0.0: الإصدار الأولي لخدمة Webhook للبيانات
- Current: الإصدار الحالي مع تحسين آليات التصفية والتحويل وإعادة المحاولة