尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗نظام لتسعير شرائح الألمنيوم والإكسسوارات والمكائن. يحفظ كل الأسعار في قاعدة بيانات، ويرسل التحديثات إلى أنظمة أخرى عبر Webhooks، ويرتبط بـ WhatsApp Cloud API، وفيه حاسبة يطلب منها العميل عرض سعر.
start-windows.batstart-mac.command. إذا ظهرت رسالة أمان: انقر عليه بالزر الأيمن ← Open ← Open..env داخل المجلد.اترك النافذة السوداء مفتوحة ما دمت تستخدم النظام، وأغلقها لإيقافه.
| الجزء | المسار | الوظيفة |
|---|---|---|
| لوحة الإدارة | /admin (public/admin.html) | بكلمة مرور: حاسبة التسعير والوزن، المنتجات، أسعار الشراء، بوابات الشتر، الطلبات، الربط |
| حاسبة بوابة الشتر | / (public/calculator.html) | يختار العميل المقاس ونوع البوابة والسماكة واللون وفئة كل إكسسوار، ويرى السعر مع التركيب حسب ولايته |
| طلب مستلزمات | /materials.html | شراء شرائح وإكسسوارات بالكمية |
| الخادم | src/server.js | واجهة REST (Node.js + Express) |
| قاعدة البيانات | data/aluminum.db | SQLite مدمجة في Node، لا تحتاج تثبيت خادم قاعدة بيانات |
| المساعد الذكي | src/agent.js | محادثة واتساب بنموذج Claude، والأسعار من أدوات النظام |
| ملف PDF | src/pdf.js | عرض سعر عربي بخط Noto Naskh Arabic (رخصة OFL في assets/fonts) |
يحتاج Node.js بإصدار 22.13 أو أحدث.
npm install
cp .env.example .env # ثم عدّل ADMIN_TOKEN
npm start
ADMIN_TOKEN في ملف .env.npm testلو فتحت public/admin.html مباشرة بدون الخادم، ستعمل حاسبة التسعير والوزن كما كانت بالقيم الافتراضية، لكن لن يُحفظ أي شيء.
السماكات في «حاسبة التسعير» و«حاسبة الوزن»: تُعدَّل من بطاقة «السماكات ووزن المتر» في تبويب «حاسبة التسعير».
ملاحظة: الخادم يعيد حساب السعر دائماً عند استلام الطلب، فلا يستطيع أحد تغيير السعر من المتصفح. أسعار الشراء والتكاليف لا تُرسل أبداً إلى صفحة العملاء.
من تبويب أسعار الشراء تسجّل كل فاتورة مورد: المنتج، المورد، الكمية، سعر الوحدة، العملة، سعر الصرف، ومصاريف الشحن والجمارك للوحدة.
عند أول تشغيل تُضاف منتجات تجريبية: 4 أنواع شرائح، و3 إكسسوارات، ومكينتان. الإكسسوارات والمكائن أسعارها تجريبية ومخفية عن العملاء، فعدّل أسعارها ثم فعّل «يظهر في حاسبة العملاء».
من تبويب الربط تضيف رابطاً (مثلاً من n8n أو Make أو Zapier)، فيستقبل طلب POST بصيغة JSON عند كل حدث من هذه الأحداث:
| الحدث | متى يُرسل |
|---|---|
quote.created | عميل أرسل طلب عرض سعر |
quote.status_changed | غيّرت حالة الطلب (تم التواصل، مقبول...) |
product.created / product.updated / product.deleted | إضافة منتج أو تعديله أو حذفه |
purchase.created | تسجيل سعر شراء جديد |
settings.updated | تغيير LME أو سعر الصرف أو الربح... |
إذا وضعت مفتاحاً سرياً، يُرفق مع كل طلب الترويسة X-Aluminum-Signature: sha256=<HMAC> لتتحقق أن الطلب قادم من نظامك.
الأمان:
http أو https يشير إلى عنوان عام على الإنترنت. تُرفض العناوين الداخلية مثل localhost و127.0.0.1 و192.168.x.x و10.x.x.x وعنوان بيانات السحابة 169.254.169.254. يُفحص الرابط عند الحفظ، ثم مرة أخرى قبل كل إرسال، لأن النطاق قد يتغيّر لاحقاً.WEBHOOK_ALLOW_PRIVATE_TARGETS=1 يلغي هذا الفحص، وهو للاختبارات والتطوير المحلي فقط. لا تضعه في الإنتاج، فلوحة الإدارة تُظهر تحذيراً أحمر ما دام مفعّلاً.مثال: تبني في n8n مساراً يبدأ بـ Webhook ← ثم WhatsApp ← ثم Google Sheets، فيصلك كل طلب عرض سعر على واتساب ويُسجَّل في جدول.
WHATSAPP_TOKEN و WHATSAPP_PHONE_NUMBER_ID إلى ملف .env.WHATSAPP_VERIFY_TOKEN.WHATSAPP_APP_SECRET. هذا إلزامي: بدونه تُرفض كل رسائل Meta الواردة (POST) برمز 401، لأن النظام لا يستطيع التأكد أنها من Meta. يُفحص التوقيع X-Hub-Signature-256 على جسم الطلب كما وصل بالضبط.https://موقعك/webhooks/whatsapp مع نفس كلمة السر، واشترك في حدث messages. خطوة التحقق (GET) تعمل بكلمة السر وحدها، دون App Secret.هذا الربط مستقل تماماً عن MazBot: تشغيل MazBot لا يحتاج أي متغير من متغيرات WHATSAPP_*.
بعد ذلك يعمل النظام كالتالي:
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗