عقدة QuickBooks “Send Invoice” تفشل قبل إرسال الطلب.
الخطأ:
TypeError: Cannot set properties of undefined (setting ‘Content-Type’)
تتبع المكدس:
TypeError: Cannot set properties of undefined (setting ‘Content-Type’)
at ExecuteContext.quickBooksApiRequest
(…/nodes/QuickBooks/GenericFunctions.ts:70:35)
السلوك المتوقع
يجب أن ترسل العقدة الفاتورة بنجاح باستخدام واجهة برمجة تطبيقات QuickBooks.
خطوات إعادة الإنتاج
أنشئ فاتورة.
أضف عقدة QuickBooks “Send Invoice”.
قدم معرّف فاتورة صالح.
قدم عنوان بريد إلكتروني صالح.
نفّذ العقدة.
البيئة
إصدار n8n: 2.29.9
النشر: ذاتي الاستضافة
وضع البيانات الثنائية: نظام الملفات
معلومات إضافية
يحدث نفس الخطأ على كل من المثيلات المحلية والمستضافة ذاتياً.
معرّفات الفاتورة المشفرة بشكل ثابت وعناوين البريد الإلكتروني تنتج نفس الخطأ.
مرحباً @ankitsingh3112 أهلاً وسهلاً!
تقع تلك stack trace داخل كود العقدة الخاص بها (quickBooksApiRequest في GenericFunctions.ts:70)، حيث يقوم بتعيين Content-Type على كائن headers غير محدد، لذا يرمي Send Invoice قبل أن يغادر أي طلب n8n. إنها خطأ في العقدة، وليس في إعدادك، وهذا هو السبب في فشل معرّفات مشفرة بشكل ثابت وكلا النسختين بنفس الطريقة.
حتى يتم إصلاحه، تجاوز العملية باستخدام عقدة HTTP Request باستخدام بيانات اعتماد QuickBooks Online OAuth2 الخاصة بك (المصادقة: نوع بيانات الاعتماد المحددة مسبقاً). أرسل نص فارغ إلى نقطة النهاية send مع رأس octet-stream، مع وضع معرّف الشركة (realm) ومعرّف الفاتورة والمستقبل في عنوان URL:
POST https://quickbooks.api.intuit.com/v3/company/{realmId}/invoice/{invoiceId}/send?sendTo={email}
Header Content-Type: application/octet-stream
إذا عاد هذا الاتصال برمز 401، فهذه مشكلة معروفة منفصلة مع بيانات اعتماد QBO على عقدة HTTP Request، وليس نقطة النهاية هذه:
@ankitsingh3112 مرحبا! إذا واجهت خطأ 401 في التفويض عند استخدام بيانات اعتماد QBO المحددة مسبقًا على عقدة HTTP Request، فذلك لأن n8n لا يشغل مسار تحديث الرمز بشكل صحيح للوحدات HTTP المخصصة.
الطريقة السريعة لتجاوز 401 هي استخدام مصادقة Generic OAuth2 بدلاً من بيانات اعتماد QBO المحددة مسبقًا داخل عقدة HTTP Request.
و Access Token URL إلى: https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer
ثم أدخل معرّف عميل QBO وسرك. بعد التفويض بهذه الطريقة، سيتم مصادقة طلب POST إلى نقطة النهاية /send بنجاح في كل مرة. أخبرني إذا واجهت مشكلة في إعداد معاملات OAuth2 المخصصة!
أقدّر التوضيح هنا. يمكن أن تكون هذه الأنواع من الأخطاء محيّرة عندما تبدو وكأنها مشاكل في الإعداد، لذا فإن شرح السبب الجذري يجعل استكشاف الأخطاء أسهل بكثير.