أنا أسعى للانتقال من Relay إلى n8n. لقد قمت بإعداد OAuth و مفتاح API Service الخاص بي في Hubspot في Relay وكانت اتصالات OAuth قادرة على تعيين الخطوة الأولى كمشغل تقديم نموذج Hubspot. أرى أن هذا غير ممكن في n8n حتى الآن على الرغم من أنه يحتوي على إمكانية الوصول إلى نفس البنية التحتية بالضبط.
طلب ميزة: هل يمكن إضافة حدث مشغل Form Submission من Hubspot كمشغل Hubspot نظراً لأنه من الواضح أنه تم تفعيله في Relay؟
طلب من المجتمع: ليس لدي حساب المؤسسة في Hubspot المطلوب لخطوة webhook بديلة للتشغيل بناءً على تقديمات النماذج. كما لا يمكنني التشغيل بناءً على إنشاء جهة اتصال لأن العملاء الحاليين قد يكملون أحياناً نماذج Hubspot هذه. يشير مساعد n8n AI إليّ لإعداد بيانات اعتماد Hubspot Developer API منفصلة. عند إنشاء ذلك في Hubspot، أحصل على رمز API لكن n8n يريد معرّف التطبيق ومعرّف العميل وما إلى ذلك وهو ما لا توفره Developer API. يمكنني الحصول على هذه الخصائص معرّف العميل ومعرّف التطبيق المضافة إذا قمت بإنشاء تطبيق Hubspot في السوق العام ولكن هذا لا يبدو صحيحاً. أنا لا أريد أن يكون هذا علناً بأي شكل من الأشكال.
هل لديك أي نصيحة أو مساعدة هنا؟
بالنسبة لتقديمات النماذج على وجه التحديد، فإن المسار الأنظف بدون حساب مؤسسة هو أداة أتمتة Workflows المجانية من HubSpot: قم ببناء سير عمل بسيط يتم تشغيله بواسطة “تم تقديم النموذج”، ثم أضف إجراء Webhook يشير إلى عنوان URL لعقدة n8n Webhook الخاصة بك. يعمل هذا على طبقات Starter/Pro وليس فقط Enterprise، ويتجنب كل فوضى تسجيل تطبيقات Developer API التي تواجهها مع معرّف العميل/معرّف التطبيق. لا تحتاج إلى تطبيق سوق عام لهذا، webhooks سير العمل الداخلي في HubSpot لا تتطلب ذلك. يتجنب هذا الحاجة إلى ميزة اشتراك webhook للمؤسسة بالكامل.
لسوء الحظ، غيّرت Hubspot هذا بعد إطلاق Data Hub ولا يمكنك تنفيذ إجراء webhook في سير العمل باستخدام طبقات Starter أو Pro من Sales Hub أو Marketing Hub. قد أكون أفتقد شيئًا ما لكن هنا هو المكان الذي ذُكر فيه بشكل صريح في Hubspot. وأيضًا في أعلى هذه الصفحة. أود حقًا أن أكون أفتقد شيئًا هنا على الرغم من ذلك 
"إرسال webhook (Data Hub Professional وEnterprise فقط)
تشغيل webhook إلى تطبيق خارجي. يسمح هذا لسير العمل الخاص بك بالتواصل مع هذا التطبيق الخارجي. على سبيل المثال، يمكن لـ webhooks إرسال معلومات شركة HubSpot (بصيغة JSON) إلى نظام CRM خارجي. يمكن استخدام هذا الإجراء مع جميع أنواع سير العمل.
تعرف على المزيد حول تشغيل webhooks." |
إعجاب واحد (1)
اكتشاف جيد، هذا الإجراء يتطلب الآن Data Hub Pro. بما أن إجراء workflow webhook لم يعد متاحًا، انتقل إلى الاستطلاع بدلاً من الدفع: أنشئ HubSpot Private App بنطاق النماذج، ثم استخدم n8n Schedule Trigger بالإضافة إلى عقدة HTTP Request تستدعي GET https://api.hubapi.com/marketing/v3/forms/{formId}/submissions مع رمز Private App كمصادقة Bearer. خزّن آخر submittedAt أو id تم معالجته (جدول بيانات أو حتى Set/IF بسيط مقابل التشغيل السابق) بحيث تقوم فقط بإعادة توجيه الطلبات الجديدة إلى خطوة CRM الخاصة بك. يتجنب هذا متطلب Data Hub webhook وتسجيل التطبيق العام الذي كنت تحاول تجنبه. اختبر عقدة HTTP Request وحدها أولاً وتأكد من أن الاستجابة تتضمن مصفوفة results بطوابع زمنية submittedAt يمكنك تصفيتها.
شكراً لك، فكرة جيدة. يمكنني ضبطه ليعمل كل 15 دقيقة، وبما أنه مضبوط فقط على التقاط الإدخالات الجديدة - هذا بالتأكيد قد ينجح. سأجرب هذا. شكراً لك!
بما أنك ستحاول مسار الاستطلاع كل 15 دقيقة، فأنا أوصي بإنشاء سير عمل صغير مع نقاط تفتيش بدلاً من تدفق مباشر “استطلاع → CRM”. بهذه الطريقة، إعادة المحاولة أو الفشل الجزئي لن يكرران إرسال النموذج.
شكل n8n قابل للتطبيق:
- Schedule Trigger — كل 15 دقيقة.
- HTTP Request: list HubSpot form submissions — استخدم رمز تطبيق HubSpot الخاص كـ
Authorization: Bearer ...؛ استدعِ نقطة نهاية الإرسالات للنموذج المحدد الذي تهتم به.
- Code: filter only new submissions — قارن
submittedAt / معرف الإرسال مقابل نقطة تفتيش محفوظة.
- Split In Batches — معالجة كل إرسال جديد في المرة الواحدة.
- CRM / downstream steps — إنشاء/تحديث أي شيء كنت تفعله في Relay.
- Code: save checkpoint only after success — حدّث آخر طابع زمني/معرف تمت معالجته في النهاية، وليس قبل خطوة CRM.
بالنسبة لعقدة Code الخاصة بالفلتر/نقطة التفتيش، هذا هو النمط الذي سأستخدمه:
const staticData = $getWorkflowStaticData('global');
const lastSubmittedAt = staticData.lastSubmittedAt || '1970-01-01T00:00:00.000Z';
const submissions = $json.results || [];
const fresh = submissions
.filter((submission) => new Date(submission.submittedAt) > new Date(lastSubmittedAt))
.sort((a, b) => new Date(a.submittedAt) - new Date(b.submittedAt));
return fresh.map((submission) => ({
json: {
hubspotSubmissionId: submission.id || submission.submissionId,
submittedAt: submission.submittedAt,
formId: submission.formId,
fields: submission.values || submission.submittedValues || [],
raw: submission,
},
}));
ثم بعد نجاح خطوة CRM اللاحقة، أضف عقدة Code نهائية:
const staticData = $getWorkflowStaticData('global');
const newest = $input.all()
.map((item) => item.json.submittedAt)
.filter(Boolean)
.sort()
.at(-1);
if (newest) staticData.lastSubmittedAt = newest;
return $input.all();
مشكلة واحدة: بيانات سير العمل الثابتة يتم حفظها بموثوقية على عمليات التشغيل النشطة للمُشغِّل، لذا اختبر عقدة HTTP يدويًا، لكن اختبر سلوك نقطة التفتيش مع تفعيل سير العمل. إذا كنت بحاجة لإعادة معالجة نافذة فاشلة، امسح مؤقتًا lastSubmittedAt أو انقله للخلف بضع دقائق.
ملاحظة شفافة: لقد بنيت هذا نموذج الاستطلاع مع نقاط التفتيش باستخدام FlowForge AI وتكييفه مع قيد HubSpot/Data Hub الخاص بك. المنشئ موجود هنا إذا كنت تريد إنشاء نسخة JSON n8n أكثر اكتمالاً: FlowForge AI — Build Smarter Workflows with AI
إعجاب واحد (1)
إذا كانت webhooks سير عمل HubSpot مقيدة لحسابك، فسأتجنب مسار التطبيق العام لهذا. رمز التطبيق الخاص كافٍ لسير عمل استقصاء داخلي.
نمط الرجوع هو:
- إنشاء تطبيق HubSpot خاص مع الحد الأدنى من نطاقات CRM والنماذج التي تحتاجها
- في n8n، استخدم Schedule Trigger بدلاً من HubSpot trigger
- استخدم HTTP Request مع رمز المصادقة الخاص بالتطبيق الخاص
- الاستعلام عن تقديمات النموذج الحديثة أو جهات الاتصال المعدلة مؤخراً
- تصفية معرفات النماذج المحددة التي تهمك
- تخزين مؤشر بحيث يتم معالجة كل تقديم مرة واحدة فقط
- احتفظ بجدول إلغاء الازدواجية مفتاح به form_submission_id إذا كان متاحاً، أو بواسطة form_id بالإضافة إلى submitted_at بالإضافة إلى البريد الإلكتروني/معرف جهة الاتصال
الجزء المهم هو فصل جهة الاتصال التي تم إنشاؤها عن النموذج المرسل. أنت محق في أن جهة الاتصال التي تم إنشاؤها ستفتقد جهات الاتصال الموجودة التي تقدم نموذجاً جديداً. يعتبر الاستقصاء لتقديمات النموذج، ثم إلغاء الازدواجية حسب هوية التقديم، بديلاً أأمن حتى يمتلك n8n محفزًا أصليًا لتقديم نموذج HubSpot.
سأقوم أيضاً بتصميم النسخة الأولى للتشغيل كل 2 إلى 5 دقائق بدلاً من محاولة محاكاة محفز فوري حقيقي. بالنسبة لمعظم سير عمل النموذج، فهذا قريب بما يكفي، وهو يتجنب الاعتماد على إجراء HubSpot webhook قد يختفي مع تغيير الخطة.
قبل بنائه، سأؤكد:
- نماذج HubSpot التي يجب أن تشغل سير العمل بالضبط
- ما إذا كان كل نموذج يعين إلى نفس الإجراء اللاحق أو فروع مختلفة
- ما هو الحقل الذي يثبت أن التقديم جديد
- حيث يجب تخزين معرفات التقديم المعالج في n8n
هذا يمنحك سير عمل داخلي خاص دون إنشاء تطبيق سوق عام.