تدفق البيانات
يوجّه تدفق البيانات الأحداث من Joryio إلى وجهات خارجية في وقت شبه حقيقي. يربط كل تدفق وجهةً بمجموعة من الأحداث، وتسلّم Joryio الأحداث المطابقة إلى تلك الوجهة على دفعات.
انتقل إلى البيانات → تدفق البيانات لإدارة تدفقاتك.
الوجهات
| الوجهة | النوع | وظيفتها |
|---|---|---|
| Webhook | نقطة نهاية HTTP | أرسل كل حدث بطريقة POST كـ JSON إلى أي عنوان HTTPS |
| Snowflake | مستودع بيانات | حمّل الأحداث باستمرار إلى جدول Snowflake |
| BigQuery | مستودع بيانات | ابث الأحداث إلى مجموعة بيانات BigQuery |
| Amazon Redshift | مستودع بيانات | حمّل الأحداث إلى عنقود Amazon Redshift |
| Amazon S3 | تخزين كائنات | اكتب ملفات JSON / NDJSON مجمعة إلى حاوية |
| Kafka | تدفق أحداث | انشر الأحداث إلى موضوع Kafka |
| Mixpanel | تحليلات المنتج | وجّه الأحداث إلى مشروع Mixpanel |
| Amplitude | تحليلات المنتج | وجّه الأحداث إلى مشروع Amplitude |
حقول الاتصال
تطلب كل وجهة تفاصيل اتصالها الخاصة. تُشفّر الأسرار (كلمات المرور والمفاتيح والرموز المميزة وJSON حساب الخدمة) أثناء التخزين.
- Webhook - عنوان URL وسر التوقيع (اختياري) وترويسات إضافية (اختيارية)
- Snowflake - الحساب واسم المستخدم وكلمة المرور والدور وWarehouse وقاعدة البيانات وSchema والجدول
- BigQuery - معرّف المشروع ومعرّف مجموعة البيانات ومعرّف الجدول وJSON حساب الخدمة
- Amazon Redshift - المضيف والمنفذ وقاعدة البيانات والمستخدم وكلمة المرور وSchema والجدول
- Amazon S3 - الحاوية والبادئة والمنطقة ونقطة النهاية (اختيارية، للتخزين المتوافق مع S3) ومعرّف مفتاح الوصول ومفتاح الوصول السري
- Kafka - الوسطاء والموضوع واسم مستخدم/كلمة مرور SASL وSSL
- Mixpanel - رمز المشروع والمنطقة (US / EU / India)
- Amplitude - مفتاح API والمنطقة (US / EU)
إنشاء تدفق
- انتقل إلى البيانات → تدفق البيانات وانقر إنشاء تدفق.
- سمِّ التدفق (يظهر في قائمة التدفقات) واختر وجهة.
- املأ حقول الاتصال الخاصة بالوجهة.
- اختر تنسيق الحمولة: JSON (كائن واحد لكل حدث) أو NDJSON (سطر لكل حدث).
- حدد الأحداث التي تريد بثها (انظر أدناه).
- راجع شريط الملخص وانقر إنشاء تدفق.
اختيار الأحداث
تتحكم بدقة في الأحداث التي يتلقاها التدفق:
- كل الأحداث - فعّل هذا لبث كل الأحداث الحالية والمستقبلية. أوقفه لاختيار أحداث محددة.
- حسب المجموعة - تُجمع الأحداث المدمجة (الرسائل والرسائل داخل التطبيق والرحلات والحملات والتجارة الإلكترونية والهوية). حدد مجموعة كاملة أو أحداثًا فردية.
- الأحداث المخصصة - ضمن حدث مخصص، ابحث عن الأحداث التي تتبعها أو اكتبها بنفسك (الأحداث التي ترسلها بواسطة
track()، مثلpurchaseأوpage_view). يعرض المنتقي الأحداث التي تتبعها مساحة العمل فعليًا؛ ويمكنك أيضًا كتابة حدث لم يُتتبع بعد والنقر إضافة.
كتالوج الأحداث
هذه هي الأحداث المدمجة التي يمكنك بثها. ويمكنك أيضًا بث أي حدث مخصص ترسله بواسطة track().
| المجموعة | الأحداث |
|---|---|
| الرسائل | message.sent, message.delivered, message.opened, message.clicked, message.failed, message.bounced, message.complained, message.spamreport, message.deferred, message.unsubscribed, message.queued, message.skipped |
| الردود الواردة | sms.message.received, whatsapp.message.received |
| داخل التطبيق | in_app.displayed, in_app.clicked, in_app.dismissed, in_app.converted |
| الرحلات | canvas.experiment.entered, canvas.ai_decision.entered |
| الحملات | campaign.sent, campaign.abtest.winner_declared, campaign.ai_decision.entered |
| التجارة الإلكترونية | Order Completed |
| الهوية | $identify, $alias |
لا توجد أسماء أحداث مخصصة لكل قناة مثل email.delivered أو sms.delivered. يصدر كل إرسال عبر Email وSMS وPush وWhatsApp وWebhook أحداث message.* نفسها، وتحمل كل حمولة خاصية channel التي تكون إحدى email أو sms أو push أو whatsapp أو webhook. اشترك مرة واحدة في message.delivered لتلقي عمليات التسليم من كل القنوات، ثم صفّها لاحقًا عبر خاصية channel.
تضييق القنوات في إعداد التدفق (اختياري): عند اختيار حدث message.*، يظهر فلتر لكل قناة في نموذج الإنشاء/التعديل؛ حدد أيًا من email أو sms أو push أو whatsapp أو webhook لبث تلك القنوات فقط بدل تصفيتها لاحقًا. اتركه فارغًا لكل القنوات (الافتراضي). ينطبق ذلك فقط على الأحداث التي تحمل خاصية channel؛ ولا تتأثر الأحداث التي لا تحمل قناة (canvas.* وOrder Completed وغيرها).
التجميع في دفعات
تُخزن الأحداث مؤقتًا وتُسلّم على دفعات. يمكنك ضبط:
- حجم الدفعة - عدد الأحداث المتراكمة قبل الإرسال.
- فاصل الإرسال - أطول مدة انتظار قبل إرسال دفعة جزئية.
تُسلّم الدفعة عند بلوغ حجم الدفعة أو انقضاء فاصل الإرسال، أيهما يحدث أولًا.
آلية العمل
تُسلّم الأحداث إلى التدفقات عبر ناقل توزيع دائم ومنفصل عن تخزين التحليلات. يرى كل تدفق سيل الأحداث الكامل عبر كل القنوات، لذلك تستمر الوجهة في تلقي الأحداث بصورة مستقلة عن طريقة كتابة التحليلات.
عندما يطابق حدث اختيار أحداث التدفق، يُوضع في الطابور ويُسلّم إلى الوجهة في الدفعة التالية. يتضمن كل تسليم اسم الحدث وخصائصه وطابعه الزمني ومعرّف المستخدم، وقناة المصدر لأحداث الرسائل. تحمّل وجهات مستودعات البيانات والتخزين الدفعة كصفوف/ملفات، وتوجّه وجهات تحليلات المنتج كل حدث عبر API الإدخال، وتتلقى Webhooks نص JSON أو NDJSON.
يجمع كل تدفق (وفق حجم الدفعة وفاصل الإرسال) ويعيد المحاولة عند الفشل. إذا تعذر الوصول إلى وجهة، تُعاد الأحداث غير المسلّمة إلى الطابور وتُرسل من جديد عند تعافيها، فلا يفقد انقطاع الخدمة بياناتك.
ضمانات التسليم والتكرارات
التسليم مرة واحدة على الأقل (at-least-once). في حالات نادرة - إعادة محاولة بعد فشل شبكة، أو إعادة تشغيل عامل في منتصف دفعة - قد يُسلَّم الحدث نفسه إلى وجهتك أكثر من مرة.
هذا مقصود، وهو الضمان نفسه الذي تقدمه كل منصات البث. البديل، التسليم مرة واحدة على الأكثر، يعني إسقاط حدث بصمت عندما تكون نتيجة التسليم غير معروفة؛ ونحن نفضّل الإرسال مرتين على الفقدان.
كل حدث يحمل eventId ثابتًا. وهو القيمة نفسها في كل تسليم لذلك الحدث، فيمكنك استخدامه لإزالة التكرار:
| الوجهة | ما نقوم به |
|---|---|
| Amplitude | يُرسل كـ insert_id - يزيل Amplitude التكرار تلقائيًا |
| Mixpanel | يُرسل كـ $insert_id - يزيل Mixpanel التكرار تلقائيًا |
| S3 | الدفعة المُعاد تسليمها تُكتب على مفتاح الكائن نفسه، فتستبدل بدل أن تضيف ملفًا ثانيًا |
| BigQuery, Snowflake, Redshift | أزل التكرار حسب eventId عند التحميل، مثل ROW_NUMBER() OVER (PARTITION BY eventId) |
| Webhook | تجاهل أي eventId سبق أن عالجته |
بالنسبة لمستودعات البيانات والتخزين، التكرارات غير ضارة بعد إزالتها عند التحميل. أما webhooks التي تنفّذ إجراءً على كل حدث - إنشاء تذكرة، خصم مبلغ - فتحقق من eventId قبل التنفيذ.
المراقبة
تعرض قائمة التدفقات مؤشرات الأداء والحالة لكل تدفق:
- نشط - يُسلّم بصورة طبيعية
- متوقف مؤقتًا - متوقف مؤقتًا (يمكن استئنافه في أي وقت)
- خطأ - تفشل عمليات التسليم الأخيرة (تحقق من الاتصال)
يمكنك أيضًا رؤية إجمالي ما تم تسليمه وإجمالي ما فشل ومعدل التسليم ووقت آخر تسليم. افتح تدفقًا لعرض صفحة التفاصيل أو تعديله أو إيقافه/استئنافه أو حذفه.