JSON Stringify لا يمكنه إرسال البيانات إلى PDF

أنا أقوم ببناء سير عمل يرسل بيانات وكيل AI ليتم إنشاؤها كملف PDF باستخدام عقدة ‘PDF Generator API’.

لقد استخدمت هذا الأمر في حقل ‘data’ الخاص بالعقدة في سيري عمل سابقين بنفس الدالة تماماً، وكان يعمل بشكل جيد:

{{ JSON.stringify({ post_event_report: $json.output }) }}

لكن هنا، يقوم بإنشاء PDF فارغ. لقد قمت بالفعل بإدراج المتغير في قالب PDF Generator كما فعلت في سيري العمل السابقين، لذا ليس لدي أي فكرة عن سبب ظهور PDF فارغ فجأة.

هل لديك أي أفكار؟

{
“nodes”: [
{
“parameters”: {},
“type”: “n8n-nodes-base.manualTrigger”,
“typeVersion”: 1,
“position”: [
0,
0
],
“id”: “27e200f4-843d-4d50-b42c-0b8a26f7291b”,
“name”: “When clicking ‘Execute workflow’”
},
{
“parameters”: {
“documentId”: {
“__rl”: true,
“value”: “1DSaJKyI1eCp6WZJ8X1aAa6jg7fvOOS5vJFKUmar7quA”,
“mode”: “list”,
“cachedResultName”: “Post Event Reporting”,
“cachedResultUrl”: “https://docs.google.com/spreadsheets/d/1DSaJKyI1eCp6WZJ8X1aAa6jg7fvOOS5vJFKUmar7quA/edit?usp=drivesdk
},
“sheetName”: {
“__rl”: true,
“value”: “gid=0”,
“mode”: “list”,
“cachedResultName”: “Sheet1”,
“cachedResultUrl”: “https://docs.google.com/spreadsheets/d/1DSaJKyI1eCp6WZJ8X1aAa6jg7fvOOS5vJFKUmar7quA/edit#gid=0
},
“options”: {}
},
“type”: “n8n-nodes-base.googleSheets”,
“typeVersion”: 4.7,
“position”: [
224,
0
],
“id”: “3b86eb78-0869-40c3-9bcf-1ad77f80cf74”,
“name”: “Get row(s) in sheet”,
“credentials”: {
“googleSheetsOAuth2Api”: {
“id”: “wV1Zw6McyxYXrk8t”,
“name”: “Google Sheets account”
}
}
},
{
“parameters”: {
“promptType”: “define”,
“text”: “= Get {{ $json.Feedback }} for {{ $json[“Event Name”] }} {{ $json.Date }} {{ $json.Location }} {{ $json[‘No. of Guests’] }}”,
“options”: {
“systemMessage”: "=You are a Post Event Reporting specialist working with a Small Catering Business with over 30 years of experience in the industry. Your role is to analyze the spreadsheet and generate areas of improvement based on the {{ $json.Feedback }} given. Compile all of the data into a comprehensive post-event report "
}
},
“type”: “@n8n/n8n-nodes-langchain.agent”,
“typeVersion”: 3.1,
“position”: [
448,
0
],
“id”: “1cebd084-c6fa-4477-b507-96bffc2a3733”,
“name”: “AI Agent”
},
{
“parameters”: {
“templateId”: {
“__rl”: true,
“value”: “1655316”,
“mode”: “list”,
“cachedResultName”: “Post-Event Report (ID: 1655316)”
},
“data”: “={{ JSON.stringify({ post_event_report: $json.output }) }}”,
“documentOutput”: “viewer”,
“additionalFields”: {
“outputName”: “=Post event report for {{ $(‘Get row(s) in sheet’).item.json[“Event Name”] }} on {{ $(‘Get row(s) in sheet’).item.json.Date }}”,
“testing”: false
}
},
“type”: “@pdfgeneratorapi/n8n-nodes-pdf-generator-api.pdfGeneratorApi”,
“typeVersion”: 1,
“position”: [
800,
0
],
“id”: “4304c3b8-5210-4b2d-8d6d-49eac03b03a6”,
“name”: “Generate a PDF document”,
“alwaysOutputData”: true,
“credentials”: {
“pdfGeneratorApi”: {
“id”: “XUfVEGWx0Q45fr5L”,
“name”: “PDF Generator account”
}
}
},
{
“parameters”: {
“options”: {}
},
“type”: “@n8n/n8n-nodes-langchain.lmChatGoogleGemini”,
“typeVersion”: 1.1,
“position”: [
320,
208
],
“id”: “630d55ef-1a19-4f5a-bad5-a14c85c8fb4d”,
“name”: “Google Gemini Chat Model”,
“credentials”: {
“googlePalmApi”: {
“id”: “r5K1AFY1c2dmiqsE”,
“name”: “Google Gemini(PaLM) Api account”
}
}
}
],
“connections”: {
“When clicking ‘Execute workflow’”: {
“main”: [
[
{
“node”: “Get row(s) in sheet”,
“type”: “main”,
“index”: 0
}
]
]
},
“Get row(s) in sheet”: {
“main”: [
[
{
“node”: “AI Agent”,
“type”: “main”,
“index”: 0
}
]
]
},
“AI Agent”: {
“main”: [
[
{
“node”: “Generate a PDF document”,
“type”: “main”,
“index”: 0
}
]
]
},
“Google Gemini Chat Model”: {
“ai_languageModel”: [
[
{
“node”: “AI Agent”,
“type”: “ai_languageModel”,
“index”: 0
}
]
]
}
},
“pinData”: {},
“meta”: {
“templateCredsSetupCompleted”: true,
“instanceId”: “845031bfdb8f607d8c7ae907fb5de28c6fb4d0a8d0cd06c1a605d7c42f4018a9”
}
}

غيّر هذا: ={{ JSON.stringify({ post_event_report: $json.output }) }}

إلى هذا: = { "post_event_report": $json.output }

إليك سير العمل

إعجاب واحد (1)

نظراً لأن هذا النمط بالذات نجح في سير عملين آخرين، فإن الخطأ يكاد يكون مؤكداً في ما يحتويه $json.output فعلياً هنا، وليس في طريقة JSON.stringify نفسها. هناك شيئان يلفتان النظر من JSON الخاص بك:

  1. alwaysOutputData: true على عقدة PDF يعني أنها ستعيد النتيجة بسعادة حتى عندما يكون إدخالها فارغاً أو معيباً — وهذا بالضبط السبب في حصولك على ملف PDF فارغ بدلاً من خطأ. أزل هذا الإعداد مؤقتاً حتى يظهر الإدخال السيء كفشل فعلي يمكنك فحصه.
  2. ضع عقدة Set (أو انقر فقط على دبوس الإدخال لعقدة PDF) مباشرة قبل “إنشاء مستند PDF” وتحقق من ما هو $json.output فعلياً في تلك النقطة. مع عقدة LangChain Agent مدعومة بـ Gemini على وجه التحديد، رأيت حالات حيث تعود الاستجابة متداخلة بشكل مختلف عما هو متوقع (على سبيل المثال تحت مفتاح مختلف، أو كمصفوفة) اعتماداً على النموذج/الإصدار — لذا “نفس التعبير الذي نجح من قبل” يمكن أن يتحقق بصمت إلى undefined هذه المرة، و JSON.stringify({ post_event_report: undefined }) ينتج {} بشكل أساسي، وبالتالي ملف PDF فارغ/قالب لكنه فارغ.
  3. يستحق الفحص أيضاً بشكل مستقل عن البيانات: هل قالب مولد PDF (معرّف 1655316) يملك فعلاً متغير دمج باسم post_event_report بالضبط؟ إعادة تسمية أو معرّف قالب جديد مع حقل مسمى بشكل مختلف ستنتج نفس عرض “PDF فارغ، بدون خطأ” حتى مع بيانات جيدة جداً تتدفق.

عزل ما إذا كانت (2) أو (3) هو اختبار واحد: قم بترميز حقل البيانات بشكل ثابت إلى {{ JSON.stringify({ post_event_report: “محتوى الاختبار” }) }} وقم بتشغيله. إذا تم عرض ذلك في PDF، فإن المشكلة تأتي من المصدر (شكل إخراج Agent). إذا كانت لا تزال فارغة، فإن المشكلة هي خريطة القالب/الحقل.

مرحباً @Tim_Barrett ،

عادةً ما يحدث ملف PDF فارغ من PDF Generator API لسببين محددين: Double Stringification أو undefined AI output.

إليك كيفية إصلاحه:

1. قم بإزالة JSON.stringify() (تجنب Double Escaping)

في وضع التعبير في n8n (={{ … }})، قد يؤدي استخدام JSON.stringify() إلى double-stringification لأن مجموعة المجتمع (community node) تقوم بالفعل بتسلسل العناصر قبل إرسالها إلى API. عند التهريب المزدوج، يستقبل PDF Generator API سلسلة نصية غير صالحة بدلاً من كائن بيانات صالح، مما يؤدي إلى عرض جميع حقول القالب بشكل فارغ.

حاول تغيير حقل data في عقدة PDF Generator من:

={{ JSON.stringify({ post_event_report: $json.output }) }}

إلى كائن JavaScript مباشر:

={{ { post_event_report: $json.output } }}

2. تحقق مما إذا كان $json.output غير محدد

إذا كانت خاصية مخرجات AI Agent مفقودة أو لها اسم مختلف، فإن JSON.stringify({ post_event_report: undefined }) يُقيّم إلى {} (كائن JSON فارغ). عندما يستقبل PDF Generator API {} بدون مفاتيح متطابقة، فإنه يعرض ملف PDF فارغ.

  • انقر على مخرجات تنفيذ عقدة AI Agent وتأكد من أن المفتاح مسمى بدقة باسم output.
  • إذا قام Gemini بإنشاء نص markdown متعدد الأسطر مع فواصل أسطر (\n)، يمكنك تنقيحه/تقليصه بأمان باستخدام:
={{ { post_event_report: ($json.output || "").trim() } }}

اختبار سريع

حاول تغيير معامل البيانات إلى كائن سلسلة نصية مشفرة أولاً لترى ما إذا كان قالب PDF يعرض بشكل صحيح:

={{ { post_event_report: "Test report content here..." } }}

إذا ظهر النص الاختباري على ملف PDF، فإن التبديل إلى ={{ { post_event_report: $json.output } }} سيحل المشكلة!

أخبرني إذا تم حل مشكلة ملف PDF الفارغ!

شكراً!