castomFLOW
افتح castomFLOW

توصيل أي حاجة

HTTP داخلة وHTTP خارجة، والحاجات المزعجة متظبطة

كل أداة أوتوميشن بتعلن عن عدد تكاملات. الرقم دايمًا كبير ودايمًا السؤال غلط، لأن النظام اللي محتاجه فعلًا هو اللي اتبنى داخليًا سنة ٢٠١٤ على إيد حد ساب الشغل. المهم هو مدى إتقان الأداة للبروتوكول اللي تحت كل التكاملات دي.

التوصيلات الجاهزة

التطبيقات اللي أغلب الشغلات بتشتغل عليها فيها خطوات جاهزة: متاجر وماركت بلايس، محاسبة وفواتير، شيتات وداتابيز، كالندرات وإيميل، تخزين ورسايل، CRMs وهيلب ديسك، بوابات دفع وشركات شحن. بتأوثرايز الحساب مرة واحدة، والحقول مسمّية بالمصطلحات اللي التطبيق نفسه بيستخدمها، مش بلغة الـ JSON بتاعته.

وحيث إن التطبيق فيه خصوصية للسوق البولندي — نظام فواتير لازم يكون جاهز لـ KSeF، أو شركة شحن ملصقاتها معيار وطني — الخطوة الجاهزة عارفة الحتة دي، لأن العيلة بتبيع في السوق ده واضطرت تتعلمه.

وبعدين الحالة العامة

أي حاجة تانية هي خطوة HTTP، وخطوة HTTP هنا مش جايزة ترضية. دي نفس الآلة اللي التوصيلات الجاهزة مبنية عليها، وبنفس التعامل مع الأجزاء اللي مملة لو هتكتبها بنفسك.

الأجزاء المزعجة

متظبطة، فمش هتكتبها تاني

المصادقة

مفاتيح API، وbearer tokens، وbasic auth، وOAuth 2 مع refresh، وتوقيع طلبات HMAC، وmutual TLS. الـ credential بتتخزن مرة واحدة، وبتتنده باسمها، ومش بتتطبع أبدًا في لوج أو سجل تنفيذ.

ترقيم الصفحات

الكيرسورات، وأرقام الصفحات، والإوفسِت، وهيدرز Link، والـ API اللي بيدلّك على النهاية برجوع مصفوفة فاضية. قول الشكل إيه، والخطوة تمشي على المجموعة كلها.

حدود المعدل

حد أقصى لكل اتصال، محترم في كل workflow بيستخدمه. لما المزوّد يرد بـ 429 مع Retry-After، الخطوة تستنى المدة دي بدل ما تضغط على المزوّد.

إعادة المحاولات والانتظار التدريجي

الأعطال المؤقتة بتتعاد المحاولة فيها بفاصل زمني بيزيد تدريجيًا وحد أقصى. الخطوة دالة نقية من مدخلاتها، فإعادة المحاولة بتشغّل الخطوة نفسها مش الـ run كله.

البيانات الصعبة

JSON، ترميز فورمات، XML، نص عادي، رفع multipart. الردود بتتحلل لحقول تقدر تشير ليها بالاسم، حتى اللي متداخلة أربعة مستويات لتحت.

المهلات الزمنية

حد زمني لكل خطوة، عشان اعتمادية بطيئة واحدة متقدرش تحجز worker والباقي كله واقف في طابور. اللي يحصل لما الحد يوصل ده قرارك، لكل خطوة.

لو بيتكلم HTTP، يبقى المحادثة بدأت خلاص.

الـ webhooks الواردة، مأخوذة بجدية

كل workflow ممكن يكون ليه URL يبدّأه. الـ URL ده بيتحقق من التواقيع — HMAC بالأشكال اللي المزوّدين المشهورين بيستخدموها، وسر مشترك لما ده كل اللي المرسل يقدر عليه. الطلب اللي ملوش توقيع لـ workflow متوقع منه توقيع بيرفض وبيتسجّل، مش بيتعالج في صمت.

إزالة التكرار بتكون على المعرّف بتاع الـ payload نفسه، فالمرسل اللي بيعيد المحاولة عشان مش شاف الـ 200 بتاعك في الوقت بياخد run واحد مش تلاتة. الـ payloads الشكلها غلط بتفضل محفوظة، مع سبب رفضها، لأن السبب الأكتر شيوعًا لفجوة غامضة في الأتمتة هو مرسل غيّر رأيه في حقل معين.

الأنظمة اللي بتفهم CSV بس

موجودين فعلًا. ملف بيظهر على سيرفر SFTP الساعة أربعة الصبح، أو بيوصل كمرفق، أو بيتحط في فولدر مشترك. الـ workflow يقدر يستنى الملف ده، يقراه، ويعتبر كل سطر سجل — بما فيهم الملف اللي فيه byte-order mark وفواصل منقوطة وعناوين أعمدة بالبولندي، لأن ده الشكل الحقيقي للتصدير.

والعكس بيشتغل برضه: الـ workflow يقدر يركّب ملف ويحطه في المكان اللي النظام التاني متوقع يلاقيه فيه، وده غالبًا الواجهة الوحيدة اللي برنامج من 2006 عندها.

تغذية المورّدين الليليةSFTP → HTTP
  • ⚡مشغلملف جديد على SFTP بتاع المورّد: stock-2026-09-09.csv.
  • 2تحليلفواصل منقوطة، byte-order mark، عناوين بالبولندي. 4,118 سطر.
  • 3توحيدرموز العملات اتدققت ضد البيانات المرجعية؛ اتنين اترفضوا لأنهم مش صالحين.
  • 4ارفعHTTP PATCH على دفعات من 200، مع احترام حد المعدل.
  • !الاستثناءاتسطرين اتسجلوا لشخص واحد، مع رقم السطر والسبب. الباقي 4,116 عدّوا عادي.

الخطوات اللي نادت موديل: 0تكلفة الـ run ده: ولا حاجة

فين بتعيش بيانات الاعتماد

مشفّرة، بتتشاور بالاسم، محدودة بالـ workspace اللي بتاعتها، ومبتظهر أبدًا في سجل run ولا رسالة خطأ ولا محادثة دعم. سجل الـ run بيوضح إن الخطوة عملت مصادقة باسم supplier-sftp؛ مش بيوضح إيه اللي هو supplier-sftp.

وكالة بتشغّل workflow واحد لثلاثين عميل بتدي كل عميل مجموعة بيانات اعتماد خاصة بيه، والـ workflow بيشار للمجموعة مش للسر. تغيير مفتاح تعديل واحد في مكان واحد — وده معظم سبب إن الوكالات بتيجي هنا.

الحد اللي يستاهل تعرفه: نظام ملوش أي واجهة خالص — لا API ولا webhook ولا ملف ولا حاجة، غير إنسان بيضغط في متصفح — ده مش هيتأتمت لا هنا ولا بأي حاجة نزيهة تانية. مفيش متصفح headless بيتظاهر إنه مستخدم هنا، لأن ده بيتكسر أول ما الطرف التاني يحرّك زرار، وبيكسر في صمت.