حتى الآن whitelabel: true في نقاط تقريرنا (report-ендпоінтах) كان يتطلب حساب WordPress مع مفاتيح مكوّنة في whitelabel_configs. هذا تاريخي - سابقًا كان العلامة البيضاء ميزة Pro في إضافة WP، وكان API يقرأ ببساطة نفس جدول قاعدة البيانات.
لمستخدمي SDK بدون WP هذا يعني: لا يمكن الحصول على brand-config بدون قفزة HTTP إضافية (الحفاظ على خدمة تكوين منفصلة، مزامنتها مع خدمتنا، ثم إرسال whitelabel: true).
الآن الحقل يقبل inline-об’єкт مع جميع الـ 15 حقلًا للعلامة التجارية. طلب واحد = سياق كامل للعلامة = PDF مخصص.
مثال: تقرير PDF للولادة مع علامة تجارية مخصصة
Section titled “مثال: تقرير PDF للولادة مع علامة تجارية مخصصة”curl -X POST https://api.astroway.info/v1/reports/natal \ -H "X-Api-Key: aw_live_..." \ -H "Content-Type: application/json" \ -d '{ "chart": { "date": "1990-05-15", "time": "14:30:00", "timezoneOffset": 3, "latitude": 50.45, "longitude": 30.52, "name": "Maria" }, "whitelabel": { "companyName": "Acme Astrology", "companyUrl": "https://acme-astro.example.com", "companyEmail": "hello@acme-astro.example.com", "logoUrl": "https://cdn.example.com/logo.png", "themeColor": "#ff5500", "headingColor": "#1a1a2e", "reportName": "My Personal Cosmic Map", "footerText": "© 2026 Acme Astrology", "fontPairing": "serif-sans" } }'يتم إنشاء PDF مع الشعار في الرأس، عنوان مخصص على الغلاف، ألوان theme-color المناسبة في مخطط SVG، وكتلة اتصالات في التذييل.
جميع الـ 15 حقلًا للكائن
Section titled “جميع الـ 15 حقلًا للكائن”جميعها اختيارية - الحقل المفقود يأخذ القيمة من تكوين DB (إذا كان مفتاح API مرتبطًا بمستخدم WP) أو من القيم الافتراضية النظامية (لمستخدمي SDK بدون WP).
| الحقل | النوع | الغرض |
|---|---|---|
companyName | string | اسم العلامة في رأس PDF |
companyUrl | URL | رابط قابل للنقر إلى الموقع في التذييل |
companyEmail | رابط اتصال في التذييل (mailto:) | |
companyMobile | string | هاتف في التذييل |
companyBio | string | فقرة واحدة تصف الشركة على صفحة الغلاف |
logoUrl | URL (.png/.jpg/.svg/.webp) | الشعار، https فقط، نسبة موصى بها 200×60 |
frontImage | URL | صورة البطل على صفحة الغلاف |
textPrimaryColor | #RGB/#RRGGBB | النص الأساسي |
textSecondaryColor | #RGB/#RRGGBB | التعليقات، البيانات الوصفية |
backgroundColor | #RGB/#RRGGBB | خلفية الصفحات |
themeColor | #RGB/#RRGGBB | التأكيدات، العناوين، خطوط الجوانب في المخططات |
headingColor | #RGB/#RRGGBB | عناوين H1/H2 |
footerText | string | حقوق نشر مخصصة في التذييل |
fontPairing | enum | serif-sans / sans-serif / serif-only / sans-only / system |
reportName | string | يستبدل الاسم الافتراضي للتقرير على الغلاف |
12 نقطة نهاية من عائلة /v1/reports/* تقبل هذا الحقل بنفس الطريقة: natal, transit-yearly, synastry, business, career, love, money, child, lal-kitab, human-design, tarot, vedic-kundli.
التوافقية العكسية
Section titled “التوافقية العكسية”وضع Boolean لا يزال فعالًا ولم يتغير:
whitelabel: true: يقرأ تكوين DB للمستخدم WP المرتبط (كما كان سابقًا)whitelabel: falseأو عدم وجود الحقل: العلامة التجارية القياسية لـ AstroWaywhitelabel: {…}: كائن inline، سلوك جديد
مخطط OpenAPI لهذا الحقل أصبح boolean | BrandingObject (نوع اتحاد). لن يتعطل أي طلب موجود.
أولوية الحل
Section titled “أولوية الحل”عندما يكون مفتاح API مرتبطًا بمستخدم WP و يرسل العميل كائن inline - الـ inline يتفوق على DB. بالتحديد:
- القيم الافتراضية النظامية (علامة AstroWay)
- تكوين DB من
whitelabel_configs(إذا كان لدى مستخدم WP واحد) - كائن inline من جسم الطلب
الدمج - سطحي، مفتاحًا بمفتاح. أي أن inline.themeColor = "#ff5500" سيستبدل قيمة DB، لكن inline.logoUrl إذا كان مفقودًا سيترك شعار DB. هذا مفيد لسيناريوهات SaaS حيث العلامة الأساسية مخزنة في DB، وتخصيص per-tenant يأتي عبر inline.
التحويل الداخلي: themeColor يتحول إلى primaryColor بعد استدعاء applyBrandingPreferences، fontPairing يتحول إلى ستاك CSS font-family في قالب Handlebars (مثلاً، serif-sans = font-family: 'Playfair Display', serif للعناوين + 'Inter', sans-serif للجسم).
OpenAPI 3.1 + كتابة نوعية SDK
Section titled “OpenAPI 3.1 + كتابة نوعية SDK”BrandingObject الآن مكوّن منفصل في /v1/openapi.json - هذا يعني أن الإصدار التالي من SDK (TS / Python / PHP) سيحصل على فئة مكتوبة بنوع:
// TS SDK - після наступного codegen-релізуimport { Astroway } from "@astroway/sdk";
const client = new Astroway({ apiKey: process.env.ASTROWAY_KEY });
const pdf = await client.reports.natal.create({ chart: { date: "1990-05-15", time: "14:30", /* ... */ }, whitelabel: { companyName: "Acme Astrology", themeColor: "#ff5500", reportName: "My Personal Cosmic Map", fontPairing: "serif-sans", // typed enum, autocomplete у IDE },});خرائط طريق حزم SDK - في المستودعات التجريبية المناسبة (astroway-typescript-staging/ROADMAP.md، إلخ). Cron ينشر إصدارات صغرى كل 5-8 أيام؛ BrandingObject المكتوب بنوع سيكون قريبًا.
ما الذي يلغي هذا
Section titled “ما الذي يلغي هذا”سابقًا لمستهلك SaaS الذي يدمج توليد PDF من AstroWay في منتجه الخاص، كان المسار:
- إنشاء جدول
tenantsمع حقلbranding_jsonفي نظامك - قبل كل طلب تقرير: جلب تكوين المستخدم الخاص بك
- عدم معرفة كيفية الإرسال إلى API بدون إضافة WP (سابقًا: لا يمكن، كان عليك طلب إدخال في
whitelabel_configsلمستخدم SaaS) - أو القيام بمعالجة PDF بعديًا باستخدام محركك الخاص: هذه بنية تحتية إضافية
الآن المسار:
- حفظ
branding_jsonفي نظامك - إرسال inline في
whitelabelلكل طلب
قليل من قفزات HTTP، لا مزامنة DB بين الخدمات، تحكم كامل بالعلامة التجارية لكل طلب.
التوافر
Section titled “التوافر”وضع inline متاح في جميع الخطط التي تحتوي على تقارير PDF - من Indie ($19/شهر) إلى Business. الطبقة المجانية لا توفر PDF (هذا مقصود - في Free تحصل على JSON مجاني، بدون توليد). تكلفة الائتمان للطلب لا تتغير - تكوين inline لا يضيف credit-cost فوق التوليد.
تم تحديث وثائق جميع الـ 12 نقطة النهاية بأمثلة وضع inline. راجع /docs/api/ → Reports
نفس Swiss Ephemeris الموجود في Solar Fire - في 4 أسطر من الكود.
مفتاح مجاني بدون بطاقة. 5000 استدعاء شهرياً حتى الدفعة الأولى.