غير متأكد بشأن البيانات التي سيتم إرسالها إلى عقدة PDF

مرحبا بالجميع

لقد عانيت من هذا سير العمل لمدة يومين. الهدف لدي هو إرسال بيانات جدول البيانات إلى عقدة pdf حتى تتمكن من إنشاء عرض أسعار مخصص.

ومع ذلك، كلما حاولت إنشاء عرض أسعار باستخدام بيانات جدول البيانات، ظهر القالب فارغًا. لقد طلبت عن هذا الموضوع بالفعل أمس: Can't create PDF Template to send to workflow - #2 by kjooleng

أحد الحلول كان ربط المتغيرات من القالب الخاص بي بـ JSON أي {“customer.name” {{ $(“Edit Fields”).item.json[“What’s your name?”] }}. حاولت ذلك، لكنني حصلت على قالب فارغ

حل آخر كان تغيير قسم البيانات في عقدة مولد pdf إلى هذا:

{
“quote_content”: “{{ $json.output }}”
}

بالإضافة إلى تحديث قالب pdf ليشمل هذا المتغير. لقد جربت هذه الطريقة، بالإضافة إلى إضافة “quote_content” إلى مصفوفات JSON الفردية في قالب PDF Generator API الخاص بي. لكنني لا أزال أحصل على قالب فارغ.

لقد قمت أيضًا بالتبديل إلى استخدام قالب مخصص بدون أي متغيرات جديدة، حتى أتمكن من نقل البيانات دون القلق بشأن أي متغيرات خارجية.

ما هي الخطوات التي أفتقدها؟

أي مساعدة سيتم تقديرها

{
“nodes”: [
{
“parameters”: {
“formTitle”: “احصل على عرض أسعار لدالة”,
“formDescription”: “مرحبا!\n\nاسمي Quotebot، مساعدك الودود في عرض الأسعار لكل دالة تحتاجها.\n\nفقط أجب على الأسئلة أدناه، وسنعود إليك في أقرب وقت”,
“formFields”: {
“values”: [
{
“fieldLabel”: “ما الدالة التي تستضيفها؟”
},
{
“fieldLabel”: “كم عدد الأشخاص المتوقع حضورهم؟”,
“fieldType”: “number”
},
{
“fieldLabel”: “هل لديك أي متطلبات غذائية؟”
},
{
“fieldLabel”: “متى سيتم عقد الفعالية الخاصة بك؟”,
“fieldType”: “date”
},
{
“fieldLabel”: “ما اسمك؟”
},
{
“fieldLabel”: “ما عنوان بريدك الإلكتروني؟”,
“fieldType”: “email”
},
{
“fieldLabel”: “ما هو اسم الفعالية؟”
},
{
“fieldLabel”: “ما هو عنوان الحفل؟”
}
]
},
“options”: {}
},
“type”: “n8n-nodes-base.formTrigger”,
“typeVersion”: 2.5,
“position”: [
-64,
64
],
“id”: “f097eb29-0b1f-4d29-9e1f-67a3674f68f6”,
“name”: “عند تقديم النموذج”,
“webhookId”: “388b123e-f115-4213-9bd7-b4ad56bea13a”
},
{
“parameters”: {
“promptType”: “define”,
“text”: “=مرحبا\n\nهل يمكنك الرجاء كتابة عرض أسعار كامل لـ {{ $(“Edit Fields”).item.json[“What’s your name?”] }} وإرساله إلى {{ $(“Edit Fields”).item.json[“What’s your email address?”] }}؟\n\nتفاصيل العميل:\n- نوع الفعالية: {{ $(“Edit Fields”).item.json[“What function are you hosting?”] }}\n- الحضور المتوقع: {{ $(“Edit Fields”).item.json[“How many people are expected to attend?”] }}\n- المتطلبات الغذائية: {{ $(“Edit Fields”).item.json[“Do any guests have Dietary Requirements?”] }}\n- تاريخ الفعالية: {{ $(“Edit Fields”).item.json[“When will your function be held?”] }}\n- اسم الحدث: {{ $json[‘What is the event name?’] }}\n- عنوان الحفل {{ $json[‘What is the venue address?’] }}\n\n”,
“options”: {
“systemMessage”: “=أنت خبير عرض أسعار الأغذية والمشروبات.\n\nتم منحك إمكانية الوصول إلى خادم MCP Client\n\nأحتاج إليك لاستخدامه لإنشاء عرض أسعار للعميل وإرساله إليهم عبر البريد الإلكتروني\n\n{{ $today }}”
}
},
“type”: “@n8n/n8n-nodes-langchain.agent”,
“typeVersion”: 3.1,
“position”: [
384,
64
],
“id”: “982cc05d-25be-4b87-a048-d6f39591c952”,
“name”: “وكيل الذكاء الاصطناعي”,
“alwaysOutputData”: true,
“onError”: “continueRegularOutput”
},
{
“parameters”: {
“modelName”: “models/gemini-2.5-flash-lite”,
“options”: {}
},
“type”: “@n8n/n8n-nodes-langchain.lmChatGoogleGemini”,
“typeVersion”: 1.1,
“position”: [
400,
288
],
“id”: “76de3829-d663-44b0-a562-1b7ea31e98c1”,
“name”: “نموذج الدردشة Google Gemini”,
“credentials”: {
“googlePalmApi”: {
“id”: “r5K1AFY1c2dmiqsE”,
“name”: “حساب Google Gemini(PaLM) Api”
}
}
},
{
“parameters”: {
“assignments”: {
“assignments”: [
{
“id”: “1fb0c0f2-eff7-4900-9ca9-15950c133260”,
“name”: “ما الدالة التي تستضيفها؟”,
“value”: “={{ $json[“What function are you hosting?”] }}”,
“type”: “string”
},
{
“id”: “c4171ed1-c773-4dec-9126-57d400eb9bbd”,
“name”: “كم عدد الأشخاص المتوقع حضورهم؟”,
“value”: “={{ $json[“How many people are expected to attend?”] }}”,
“type”: “number”
},
{
“id”: “feeaa131-f6c7-47d0-b16a-a107e56c5d8d”,
“name”: “هل لديك أي متطلبات غذائية؟”,
“value”: “={{ $json[“Do any guests have Dietary Requirements?”] }}”,
“type”: “string”
},
{
“id”: “c5318dd3-dbcc-4a18-ab72-90c2eda07fb2”,
“name”: “متى سيتم عقد الفعالية الخاصة بك؟”,
“value”: “={{ $json[“When will your function be held?”] }}”,
“type”: “string”
},
{
“id”: “754d4f71-338b-4b3e-ba87-c66852b76799”,
“name”: “ما اسمك؟”,
“value”: “={{ $json[“What’s your name?”] }}”,
“type”: “string”
},
{
“id”: “5432c27a-958f-4f76-9fa0-3663ab7b8f19”,
“name”: “ما عنوان بريدك الإلكتروني؟”,
“value”: “={{ $json[“What’s your email address?”] }}”,
“type”: “string”
},
{
“id”: “3644948e-b74b-42fe-8456-0261a87e81a2”,
“name”: “ما هو اسم الفعالية؟”,
“value”: “={{ $json[‘What is the event name?’] }}”,
“type”: “string”
},
{
“id”: “19d462d9-c51e-421e-8e7e-f900742ffd99”,
“name”: “ما هو عنوان الحفل؟”,
“value”: “={{ $json[‘What is the venue address?’] }}”,
“type”: “string”
}
]
},
“options”: {}
},
“type”: “n8n-nodes-base.set”,
“typeVersion”: 3.4,
“position”: [
160,
64
],
“id”: “400a62c7-dab9-4924-88cc-5cab0a0e14ac”,
“name”: “تحرير الحقول”
},
{
“parameters”: {
“endpointUrl”: “https://timb.app.n8n.cloud/mcp/8d44ab8f-e11c-492a-9b68-b3fbafec81f5”,
“include”: “selected”,
“includeTools”: [
“furniture_Rentals”,
“Payment”,
“Additional_Service”,
“Pricing”,
“Menu_Drinks”,
“Staffing”,
“Venue_Logistics”,
“Ingredients”
],
“options”: {}
},
“id”: “22441ba6-367a-48ca-9f76-938338ecb6c3”,
“name”: “أداة عميل MCP”,
“type”: “@n8n/n8n-nodes-langchain.mcpClientTool”,
“typeVersion”: 1.3,
“position”: [
528,
288
]
},
{
“parameters”: {
“assignments”: {
“assignments”: [
{
“id”: “acf6fc3f-89fd-4c14-865f-c9bb597e4b62”,
“name”: “output”,
“value”: “={{ $json.output }}”,
“type”: “string”
}
]
},
“options”: {}
},
“type”: “n8n-nodes-base.set”,
“typeVersion”: 3.4,
“position”: [
736,
64
],
“id”: “15f99c2a-3831-4241-94f2-574c4f794f5f”,
“name”: “تحرير الحقول1”
},
{
“parameters”: {
“sendTo”: “barrtimm@gmail.com”,
“subject”: “عرض أسعار حفل Job”,
“emailType”: “text”,
“message”: “=مرحبا إليك عرض الأسعار الخاص بك”,
“options”: {
“appendAttribution”: false,
“attachmentsUi”: {
“attachmentsBinary”: [
{
“property”: “={{ $json.filename }}”
}
]
}
}
},
“type”: “n8n-nodes-base.gmail”,
“typeVersion”: 2.2,
“position”: [
1408,
64
],
“id”: “e0df1045-382b-47b2-bb57-8120a7554cbb”,
“name”: “إرسال رسالة”,
“webhookId”: “528a735e-f777-4a86-9115-82bab5906ab7”
},
{
“parameters”: {
“templateId”: {
“__rl”: true,
“value”: “1650471”,
“mode”: “list”,
“cachedResultName”: “Job Blob Quote (ID: 1650471)”
},
“data”: “={“quote_content”: “{{ $json.output }}” }”,
“documentOutput”: “file”,
“additionalFields”: {}
},
“type”: “@pdfgeneratorapi/n8n-nodes-pdf-generator-api.pdfGeneratorApi”,
“typeVersion”: 1,
“position”: [
944,
64
],
“id”: “ea60f1cf-803e-4b97-b2fa-bc03045c7394”,
“name”: “إنشاء مستند PDF”,
“credentials”: {
“pdfGeneratorApi”: {
“id”: “XUfVEGWx0Q45fr5L”,
“name”: “حساب PDF Generator”
}
}
}
],
“connections”: {
“On form submission”: {
“main”: [
[
{
“node”: “Edit Fields”,
“type”: “main”,
“index”: 0
}
]
]
},
“AI Agent”: {
“main”: [
[
{
“node”: “Edit Fields1”,
“type”: “main”,
“index”: 0
}
]
]
},
“Google Gemini Chat Model”: {
“ai_languageModel”: [
[
{
“node”: “AI Agent”,
“type”: “ai_languageModel”,
“index”: 0
}
]
]
},
“Edit Fields”: {
“main”: [
[
{
“node”: “AI Agent”,
“type”: “main”,
“index”: 0
}
]
]
},
“MCP Client Tool”: {
“ai_tool”: [
[
{
“node”: “AI Agent”,
“type”: “ai_tool”,
“index”: 0
}
]
]
},
“Edit Fields1”: {
“main”: [
[
{
“node”: “Generate a PDF document”,
“type”: “main”,
“index”: 0
}
]
]
},
“Generate a PDF document”: {
“main”: [
[
{
“node”: “Send a message”,
“type”: “main”,
“index”: 0
}
]
]
}
},
“pinData”: {
“On form submission”: [
{
“What function are you hosting?”: “حفل زفاف”,
“How many people are expected to attend?”: 69,
“Do any guests have Dietary Requirements?”: “نعم - Jack نباتي السمك”,
“When will your function be held?”: “2026-09-23”,
“What’s your name?”: “Skoot”,
“What’s your email address?”: “barrtimm@gmail.com”,
“What is the event name?”: “حفل زفاف Skkoot و toots”,
“What is the venue address?”: “10 Stanley La”,
“submittedAt”: “2026-06-17T07:48:32.786+10:00”,
“formMode”: “test”
}
]
},
“meta”: {
“instanceId”: “845031bfdb8f607d8c7ae907fb5de28c6fb4d0a8d0cd06c1a605d7c42f4018a9”
}
}

مرحبا تيم،

ملف PDF فارغ يكاد يكون دائما نتيجة لأحد أمرين: البيانات التي ترسلها إلى عقدة PDF Generator API ليست JSON صحيح، أو اسم متغير القالب لا يتطابق مع المفتاح الذي ترسله. بالنظر إلى سير عملك، أنا متأكد تقريبا أنها الحالة الأولى.

المشبوه الأساسي هو حقل data الخاص بك. في الوقت الحالي هو ={ "quote_content": "{{ $json.output }}" }. المشكلة: $json.output نص تم إنشاؤه بواسطة الذكاء الاصطناعي، لذا فهو يحتوي على فواصل أسطر وعلامات اقتباس وفواصل عليا. عندما يقوم n8n بإسقاط هذا النص الخام داخل سلسلة JSON التي كتبتها بنفسك، فإن هذه الأحرف تكسر JSON (علامة اقتباس غير مهروبة أو سطر جديد داخل القيمة = JSON غير صحيح)، لذا تحصل واجهة برمجة التطبيقات PDF Generator على شيء لا يمكنها تحليله وتعيد القالب بدون بيانات، أي فارغ.

الحل: دع n8n ينشئ JSON لك بحيث يتم دائما هروب الأحرف بشكل صحيح. اضبط حقل البيانات على ={{ JSON.stringify({ quote_content: $json.output }) }}. بهذه الطريقة quote_content يصل دائما كقيمة نظيفة وصحيحة.

ثم تحقق من شيئين. أولا، أن output مملوء بالفعل: افتح آخر تنفيذ للوكيل الذكي وأكد أن output يحمل نص الاقتباس الكامل. وكيلك لديه onError: continueRegularOutput، لذا إذا فشلت خطوة Gemini/MCP بصمت، فستمرر output فارغ إلى المتدفق التالي وستحصل على PDF فارغ حتى مع إصلاح الربط. ثانيا، اسم المتغير الدقيق في القالب: في Job Blob Quote (1650471) يجب أن يكون العنصر النائب بالضبط {{quote_content}}، نفس الإملاء وبدون مسافات إضافية، وإلا فإن القيمة لن تصل.

قم بتغيير JSON.stringify أولا وأعد التشغيل؛ هذا يصلح حالة “أرسلت بيانات لكنها فارغة” في الغالبية العظمى من الأحيان. إذا كان output لا يزال فارغا بعد ذلك، الصق ما يعيده الوكيل وسنتتبعه من هناك.

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