تخطّ إلى المحتوى الرئيسي

تدفق البيانات

يوجّه تدفق البيانات الأحداث من 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)

إنشاء تدفق

  1. انتقل إلى البيانات → تدفق البيانات وانقر إنشاء تدفق.
  2. سمِّ التدفق (يظهر في قائمة التدفقات) واختر وجهة.
  3. املأ حقول الاتصال الخاصة بالوجهة.
  4. اختر تنسيق الحمولة: JSON (كائن واحد لكل حدث) أو NDJSON (سطر لكل حدث).
  5. حدد الأحداث التي تريد بثها (انظر أدناه).
  6. راجع شريط الملخص وانقر إنشاء تدفق.

اختيار الأحداث

تتحكم بدقة في الأحداث التي يتلقاها التدفق:

  • كل الأحداث - فعّل هذا لبث كل الأحداث الحالية والمستقبلية. أوقفه لاختيار أحداث محددة.
  • حسب المجموعة - تُجمع الأحداث المدمجة (الرسائل والرسائل داخل التطبيق والرحلات والحملات والتجارة الإلكترونية والهوية). حدد مجموعة كاملة أو أحداثًا فردية.
  • الأحداث المخصصة - ضمن حدث مخصص، ابحث عن الأحداث التي تتبعها أو اكتبها بنفسك (الأحداث التي ترسلها بواسطة 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 قبل التنفيذ.

المراقبة

تعرض قائمة التدفقات مؤشرات الأداء والحالة لكل تدفق:

  • نشط - يُسلّم بصورة طبيعية
  • متوقف مؤقتًا - متوقف مؤقتًا (يمكن استئنافه في أي وقت)
  • خطأ - تفشل عمليات التسليم الأخيرة (تحقق من الاتصال)

يمكنك أيضًا رؤية إجمالي ما تم تسليمه وإجمالي ما فشل ومعدل التسليم ووقت آخر تسليم. افتح تدفقًا لعرض صفحة التفاصيل أو تعديله أو إيقافه/استئنافه أو حذفه.