وصف المشكلة/الخطأ/السؤال
مرحباً!!
لدينا حالياً تكامل مع QB يعمل بشكل جيد، بالصيغة القديمة. بدءاً من أغسطس، سيفرضون تغييراً على مخططهم الجديد…
واجهنا مشكلة في صيغة حمولة CloudEvents الجديدة (إصدار المخطط 2.0) — عقدة Webhook تُرجع جسماً فارغاً ({}), سواء مع تفعيل Raw Body أو تعطيله 
ملخص سريع للإعداد:
- عقدة Webhook (v2.1) تستقبل طلبات POST من QuickBooks
- مع Raw Body = false: الجسم موجود لكنه فارغ (
{})
- مع Raw Body = true: الجسم غير موجود تماماً في المخرجات
رؤوس الطلب تمر بدون مشاكل، لذا الطلب يصل العقدة بالفعل — يبدو فقط أن n8n لا يحلل نوع محتوى الجسم بشكل صحيح.
هل واجه أحد آخر صيغة حمولة Webhook الجديدة من QuickBooks؟ هل هناك أي حلول بديلة للحصول على الجسم مقسماً بشكل صحيح؟
مشكلة GitHub ذات الصلة للمرجعية: Quickbooks API returning null body · Issue #28750 · n8n-io/n8n · GitHub
ما رسالة الخطأ (إن وجدت)؟ غير متاح
يرجى مشاركة سير عملك
{
“nodes”: [
{
“parameters”: {
“httpMethod”: “POST”,
“path”: “qb-invoice-created”,
“options”: {
“binaryPropertyName”: “data”,
“rawBody”: true
}
},
“type”: “n8n-nodes-base.webhook”,
“typeVersion”: 2.1,
“position”: [
-384,
96
],
“id”: “e4f54943-e131-42a2-99f5-43ec3e7cc314”,
“name”: “Webhook”,
“webhookId”: “9b2ef218-1f57-46b0-99ba-1d1929ccb5f4”
}
],
“connections”: {
“Webhook”: {
“main”: [
]
}
},
“pinData”: {},
“meta”: {
“templateCredsSetupCompleted”: true,
“instanceId”: “b45ee928b826ee03de7f50699776b5bbce13dfef5ed3d12709796e32a0102f85”
}
}
شارك المخرجات التي أرجعتها آخر عقدة
{}
معلومات عن إعداد n8n الخاص بك
- إصدار n8n: 1.123.54
- تشغيل n8n عبر (Docker, npm, سحابة n8n, تطبيق سطح المكتب): سحابة n8n
إعجاب واحد (1)
أهلا بك @Mathias_Viscardi!
السبب الجذري هو أن عقدة webhook في n8n لا تتعرف على application/cloudevents+json كنوع محتوى يجب عليها تحليله تلقائياً، لذا يأتي النص الأساسي فارغاً. عند تعيين Raw Body = true، يجب أن تصل الحمولة إلى المخرجات الثنائية. جرب إضافة عقدة Code مباشرة بعد webhook واستخرجها بهذه الطريقة:
const raw = $input.item.binary?.data
? Buffer.from($input.item.binary.data, 'base64').toString('utf8')
: $input.item.json.rawBody;
return [{ json: JSON.parse(raw) }];
إذا كانت binary.data فارغة أيضاً، تحقق من $input.item.json - بعض إصدارات n8n تخزن النص الخام تحت مفتاح rawBody حتى عندما تعرض الواجهة قيمة فارغة. هذه فجوة معروفة مسجلة في مشكلة GitHub التي ربطتها، لذا من الجدير إضافة تعليق هناك أيضاً قبل شهر أغسطس.
مرحباً بك @Mathias_Viscardi!
هذه مشكلة نوع محتوى CloudEvents. مخطط QuickBooks v2 يرسل طلبات بـ application/cloudevents+json كرأس Content-Type، وهو ما لا يحلله عقدة Webhook في n8n كـ JSON قياسي - فإما أنه يتجاهل النص بالكامل أو يعيد null له.
مع Raw Body = true (وهو ما لديك بالفعل)، تصل البايتات الخام إلى $binary.data كسلسلة مشفرة بـ base64. أضف عقدة Code مباشرة بعد Webhook وحللها يدويّاً:
const rawData = $input.first().binary.data;
const decoded = Buffer.from(rawData.data, 'base64').toString('utf8');
return [{ json: JSON.parse(decoded) }];
هذا يعطيك حمل CloudEvents الكامل كـ كائن JSON عادي. يمكنك بعد ذلك الوصول إلى بيانات حدث QuickBooks عبر $json.data (أو أي مفتاح يستخدمه QB في المخطط الجديد).
إعجاب واحد (1)
مرحباً @nguyenthieutoan !
شكراً لك جزيلاً على اقتراحك
كان عليّ تعديله قليلاً إلى
const rawData = $input.first().binary.data;const decoded = Buffer.from(rawData.data, 'base64').toString('utf8');const parsed = JSON.parse(decoded);return [{ parsed }];
لكن يبدو أنه يعمل بشكل صحيح الآن!!
شكراً لك مرة أخرى!!
إعجاب واحد (1)
يسعدني أنها نجحت! المسار .binary.data هو الصحيح لحمولة webhook من Intuit، حيث يخزن n8n البيانات الثنائية الخام هناك. ملاحظة موفقة بشأن التعديل.