📊 Product Simulator
احسب ربحك قبل ما تبدأ — اعرف واش المنتج Winner ولا Loser
🌍 COUNTRY
🇲🇦 Maroc
🇸🇦 Saudi Arabia
🇦🇪 UAE
🇪🇬 Egypt
🇹🇳 Tunisia
🇩🇿 Algeria
🎯 CAMPAIGN
QTY Stock (المخزون)
الستوك كافي
QTY Leads
COD% (Confirmation)
%
Delivery Rate
%
💵 PRICING
AOV — Selling Price
MAD
CPL — Cost Per Lead
MAD
Product Cost (per unit)
MAD
🔗 مربوط بالستوك
➡️ OPERATIONS
Call Center (per delivered)
MAD
Delivery Price (per unit)
MAD
Ads Budget (total)
MAD
Ads = CPL × Leads أوتوماتيك
🌙 الزكاة
2.5% فوق 10K ربح
🏛️ TVA
20% من الربح الصافي
📈 النتائج
اضغط "Calculate Now" لتظهر النتائج
🔴 تحليل الخسائر — الطلبات اللي ما خدموش
✗ Leads ما تأكدوش
—
📦 مؤكدة لكن ما وصلوش
—
📊 إجمالي الخسائر الضائعة!
—
💡 +%باش توصل لـ 50.00% — شغّل Ad targeting لـ 40 أو الـ Call Center فقط بناكيد، حسن الـ Confirmation Rate — مشكلتك في الـ Confirmation Rate
🎯 Revenue Goals Calculator
شحال خاصك تبيع باش توصل لهدفك؟
MAD
📦 UNITS NEEDED
—
منتجات مسلمة
📞 LEADS NEEDED
—
ليدات خاصك
📢 ADS BUDGET
—
ميزانية الإعلانات
✅ NET PROFIT
—
الربح الصافي
📅 ROADMAP لهدف
🔵 إعلانات MAD—
🟣 كل أسبوع—
🟢 في الشهر—
هدفك— MAD / شهر
🤝 حساب الشراكة — المستمر
📦 عدد المنتجات اللي دفع فيها
حبة
💰 نسبة ربحه من الصافي
%
👋 مرحباً
🔴 أولوية عالية
🟡 أولوية متوسطة
🟢 أولوية منخفضة
📦 إدارة الستوك
تتبع مخزونك — احسب التكاليف والأرباح بشكل أوتوماتيك
📦 إجمالي المنتجات
0
🔢 إجمالي الحبات
0
💰 قيمة الستوك (تكلفة)
0 MAD
💵 قيمة الستوك (بيع)
0 MAD
المنتج
الكمية
تكلفة/حبة
سعر البيع
الحالة
عمليات
لا توجد منتجات — اضغط "زيد منتج" تبدأ
🎯 حساب الأهداف — من الستوك
اختار منتج من ستوكك وحدد هدفك الشهري — يحسب ليك شحال خاصك تبيع كل يوم وأسبوع وشهر
📦 اختار منتج
💰 الهدف الشهري (MAD)
✅ Confirmation %
🚚 Delivery %
📞 CPL (MAD)
💸 تتبع الديون
الناس اللي كيسلفوني — تتبع المبالغ وتنقص أوتوماتيك
👥 عدد الأشخاص
0
💰 إجمالي الديون
0 MAD
✅ المسدد
0 MAD
لا يوجد أشخاص بعد — اضغط "زيد شخص" تبدأ
💰 أعلى ربح صافي
—
من حسابات Simulator
—
📊 أعلى ROI
—
أفضل نسبة عائد
—
📦 قيمة الستوك (بيع)
—
— منتج
—
💸 إجمالي الديون
—
— شخص
—
تطور الأرباح
— آخر حسابات Simulator
توزيع المصاريف
— آخر حساب
أحسن منتجات
— بهامش الربح
أضف منتجات في الستوك باش تظهر هنا
سجل الحسابات
— Simulator History
ما كاين حسابات بعد — درها Calculate Now
➕ إضافة أوردر جديد
📅
0
إجمالي الأوردرات
كل الوقت
0
📦 Delivered
— %
0
✅ Confirmed
— %
0
❌ Cancelled
— %
0
💰 Revenue MAD
Delivered فقط
📊 Confirmation Rate
اليوم:
— %
إجمالي:
— %
0%
50% (حد أدنى)
70% (جيد)
85%+ (ممتاز)
📦 إحصائيات المنتجات
لا توجد بيانات بعد
العميلالمنتجMADالمدينةالتاريخالحالة — اضغط لتغييرحذف
لا توجد أوردرات — أضف الأول!
0
👥 إجمالي العملاء
0
⭐ VIP (+3 طلبيات)
0
💰 Revenue الكلي
0
🛒 متوسط الطلبيات
أضف أوردرات أو استورد من Excel باش تظهر العملاء هنا
📱 الموردين
تتبع موردينك — السعر، التسليم، التقييم
➕ مورد جديد
اسم المورد
المنتج / التخصص
سعر الشراء (MAD)
أيام التسليم
رقم الهاتف / واتساب
التقييم
★
★
★
★
★
ملاحظات
🧪 A/B Test Tracker
قارن بين إعلانين أو منتجين — أيهما ROI أحسن؟
🅰️ الإعلان / المنتج A
الاسم
ميزانية الإعلانات
عدد الليدات
Confirmation Rate %
Delivery Rate %
سعر البيع (AOV)
تكلفة المنتج
الشحن
🅱️ الإعلان / المنتج B
الاسم
ميزانية الإعلانات
عدد الليدات
Confirmation Rate %
Delivery Rate %
سعر البيع (AOV)
تكلفة المنتج
الشحن
📅 Calendrier des Campagnes
Budget مخطط vs فعلي — جدول أسبوعي / شهري
➕ حملة جديدة
اسم الحملة
تاريخ البداية
تاريخ النهاية
البودجيه المخطط (MAD)
البودجيه الفعلي (MAD)
الليدات المتوقعة
الليدات الفعلية
الأوردرات المسلّمة
الإيراد الفعلي (MAD)
المنتج
المنصة
الحالة
ملاحظات
💬 Script Call Center
نصوص جاهزة بالدارجة والفرنسية — قابلة للتعديل
📂 اختر Script
📊 Profit Tracker يومي
سجّل ربحك كل يوم — curve شهري + average
➕ تسجيل يوم جديد
التاريخ
الإيراد (MAD)
التكاليف (MAD)
أوردرات مسلّمة
ملاحظات اليوم
🔁 Retour Manager
تتبع الإرجاعات — السبب، المدينة، الخسارة
➕ إرجاع جديد
المنتج
المدينة
سعر البيع (MAD)
تكلفة الإرجاع (MAD)
سبب الإرجاع
التاريخ
حالة المنتج بعد الإرجاع
اسم العميل (اختياري)
ملاحظات
💡 Idées Produits
تتبع أفكار المنتجات — الهامش، التست، الملاحظات
➕ فكرة منتج جديدة
اسم المنتج
الفئة
سعر الشراء (MAD)
سعر البيع المتوقع
المورد / المصدر
المنافسة
الحالة
التقييم الشخصي
★
★
★
★
★
ملاحظات / نتيجة التست
📞 Follow-up Tracker
ليدات خاصهم callback — ما تفوّتك لا واحد
➕ lead جديد للمتابعة
اسم العميل
رقم الهاتف
المنتج
تاريخ الـ Callback
الوقت
الأولوية
سبب الـ Follow-up
المدينة
ملاحظات
⚙️ الإعدادات
ربط Google Sheets للحفظ السحابي
🤖 مفاتيح الذكاء الاصطناعي — AI API Keys
أدخل مفاتيح الـ API باش تستخدم مباشرة من تطبيقك — محفوظة محلياً مشفرة، ما كيشوفهاش حد
🔐
المفاتيح خاصة بحساب
—
🟠 Anthropic — Claude (claude-3-5-sonnet)
Claude Key
🟢 OpenAI — GPT-4o
OpenAI Key
🔵 Google — Gemini 1.5 Flash
Gemini Key
🔒 الأمان: المفاتيح كتتحفظ فـ localStorage ديال متصفحك فقط (مشفرة بـ XOR) — ما كيمشيوش لأي سيرفر. الكولات كتمشي مباشرة من متصفحك لـ API.
🔗 Configuration: Google Sheets
اربط حسابك مع Google Sheets باش تتحفظ المهام في السحاب
✅ البيانات محفوظة في Persistent Storage — تبقى بعد Refresh وتسجيل الخروج والدخول
🔑 Spreadsheet ID
تلقاه في رابط الـ Sheet: docs.google.com/spreadsheets/d/ID هنا/edit
🌐 Apps Script Web App URL
تلقاه بعد Deploy في Apps Script
🛍️ ربط Dropify / Google Sheets للأوردرات
استعمل Google Sheets API v4 مباشرة بـ API Key — بدون Apps Script
🔑 Google Sheets API Key
Google Cloud Console → APIs → Sheets API → Credentials → API Key
📄 Sheet ID
من رابط الشيت: docs.google.com/spreadsheets/d/ID_هنا/edit
📋 اسم الورقة (Sheet1!A1:Z1000)
🔢 صف رأس الأعمدة (عادةً 1)
⏱️ تكرار التحديث التلقائي
🗂️ ربط أعمدة الشيت (اسم العمود في الشيت ديالك)
📅 التاريخ
👤 الاسم
🏙️ المدينة
📱 الهاتف
💰 السعر
📦 المنتج (URL)
💡 استعمل اسم العمود بالضبط كما هو في الصف الأول ديال الشيت (Created At, B, C...) أو رقم العمود (A=1, B=2...)
📋 كيفاش تحصل على API Key و Sheet ID — اضغط للعرض
1. افتح Google Sheet ديال الأوردرات
2. من القائمة: Extensions → Apps Script
3. احذف الكود الموجود وحط الكود اللي تحت
4. Deploy → New Deployment → Web App
5. Execute as: Me · Who has access: Anyone
6. انسخ الرابط وحطه فوق
📄 الكود (انسخه كاملاً):
2. من القائمة: Extensions → Apps Script
3. احذف الكود الموجود وحط الكود اللي تحت
4. Deploy → New Deployment → Web App
5. Execute as: Me · Who has access: Anyone
6. انسخ الرابط وحطه فوق
📄 الكود (انسخه كاملاً):
1. احصل على API Key:
→ console.cloud.google.com
→ أنشئ مشروع جديد أو افتح واحد موجود
→ APIs & Services → Enable APIs → Google Sheets API → Enable
→ Credentials → Create Credentials → API Key
→ انسخ المفتاح (يبدأ بـ AIzaSy...)
2. احصل على Sheet ID:
→ افتح شيت الأوردرات ديالك
→ من الرابط:
→ انسخ الـ ID اللي بين /d/ و /edit
3. اجعل الشيت Public (مهم!):
→ في الشيت: Share → Anyone with the link → Viewer
→ أو استعمل Service Account إذا بغيتي يبقى private
⚡ ملاحظة: API Key مجاني حتى 300 request/دقيقة — كافي بزاف للـ polling
→ console.cloud.google.com
→ أنشئ مشروع جديد أو افتح واحد موجود
→ APIs & Services → Enable APIs → Google Sheets API → Enable
→ Credentials → Create Credentials → API Key
→ انسخ المفتاح (يبدأ بـ AIzaSy...)
2. احصل على Sheet ID:
→ افتح شيت الأوردرات ديالك
→ من الرابط:
docs.google.com/spreadsheets/d/SHEET_ID_HENA/edit→ انسخ الـ ID اللي بين /d/ و /edit
3. اجعل الشيت Public (مهم!):
→ في الشيت: Share → Anyone with the link → Viewer
→ أو استعمل Service Account إذا بغيتي يبقى private
⚡ ملاحظة: API Key مجاني حتى 300 request/دقيقة — كافي بزاف للـ polling
📋 كيفاش تربط Google Sheets — خطوة بخطوة
1
افتح sheets.new — إنشاء Google Sheet جديدة وسميها BenCheikh DB
2
من القائمة: Extensions → Apps Script — احذف الكود القديم والصق الكود من الأسفل
3
Deploy → New deployment → Web app — Execute as: Me — Who has access: Anyone
4
انسخ Web App URL و Spreadsheet ID والصقهم فوق ✅
const SHEET_USERS = 'Users';
const SHEET_STOCK = 'Stock';
const BC_WORKER_URL = 'https://bencheikh-worker.mounirlahgui.workers.dev';
const ADMIN_EMAIL = 'mounirlahgui@gmail.com';
function doGet(e) {
const cb = e.parameter.callback;
try {
const raw = e.parameter.data;
if (!raw) return out(cb, {ok:true, msg:'API OK'});
return out(cb, handle(JSON.parse(raw)));
} catch(err) { return out(cb, {ok:false, error:err.message}); }
}
function getOrCreateSheet(ss, name, headers) {
let sheet = ss.getSheetByName(name);
if (!sheet) { sheet = ss.insertSheet(name); sheet.appendRow(headers); }
return sheet;
}
function handle(d) {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const usersSheet = getOrCreateSheet(ss, SHEET_USERS,
['email','hash','tasks','updated','token','created','lastLogin','active']);
const rows = usersSheet.getDataRange().getValues();
if (d.action === 'register') {
if (rows.slice(1).find(r => r[0] === d.email))
return {ok:false, error:'الإيميل مسجل بالفعل'};
const token = Utilities.getUuid();
const now = new Date().toISOString();
usersSheet.appendRow([d.email, sha(d.pass), '{}', now, token, now, now, true]);
return {ok:true, token};
}
if (d.action === 'login') {
const i = rows.findIndex((r,n) => n>0 && r[0]===d.email);
if (i < 1) return {ok:false, error:'الإيميل غير موجود'};
if (rows[i][1] !== sha(d.pass)) return {ok:false, error:'الرقم السري غلط'};
if (d.email !== ADMIN_EMAIL && rows[i][7] === false) return {ok:false, blocked:true};
const token = rows[i][4] || Utilities.getUuid();
const now = new Date().toISOString();
usersSheet.getRange(i+1,5).setValue(token);
usersSheet.getRange(i+1,7).setValue(now);
return {ok:true, token};
}
if (d.action === 'save') {
const i = rows.findIndex((r,n) => n>0 && r[0]===d.email && r[4]===d.token);
if (i < 1) return {ok:false, error:'غير مصرح'};
usersSheet.getRange(i+1,3).setValue(JSON.stringify(d.tasks));
usersSheet.getRange(i+1,4).setValue(new Date().toISOString());
return {ok:true};
}
if (d.action === 'load') {
const i = rows.findIndex((r,n) => n>0 && r[0]===d.email && r[4]===d.token);
if (i < 1) return {ok:true, tasks:'{}'};
return {ok:true, tasks: rows[i][2] || '{}'};
}
if (d.action === 'saveStock') {
const stockSheet = getOrCreateSheet(ss, SHEET_STOCK, ['email','stock','updated']);
const srows = stockSheet.getDataRange().getValues();
const si = srows.findIndex((r,n) => n>0 && r[0]===d.email);
const now = new Date().toISOString();
if (si >= 1) {
stockSheet.getRange(si+1,2).setValue(JSON.stringify(d.stock||[]));
stockSheet.getRange(si+1,3).setValue(now);
} else { stockSheet.appendRow([d.email, JSON.stringify(d.stock||[]), now]); }
return {ok:true};
}
if (d.action === 'loadStock') {
const stockSheet = getOrCreateSheet(ss, SHEET_STOCK, ['email','stock','updated']);
const srows = stockSheet.getDataRange().getValues();
const si = srows.findIndex((r,n) => n>0 && r[0]===d.email);
if (si < 1) return {ok:true, stock:[]};
try { return {ok:true, stock: JSON.parse(srows[si][1]||'[]')}; }
catch(e) { return {ok:true, stock:[]}; }
}
if (d.action === 'listUsers') {
if (d.email !== ADMIN_EMAIL) return {ok:false, error:'غير مصرح'};
const list = rows.slice(1).map(r => ({
email: r[0], created: r[5]||'', lastLogin: r[6]||r[3]||'', active: r[7] !== false
}));
return {ok:true, users: list};
}
if (d.action === 'toggleUser') {
if (d.email !== ADMIN_EMAIL) return {ok:false, error:'غير مصرح'};
const i = rows.findIndex((r,n) => n>0 && r[0]===d.target);
if (i < 1) return {ok:false, error:'المستخدم غير موجود'};
const newActive = !(rows[i][7] !== false);
usersSheet.getRange(i+1,8).setValue(newActive);
return {ok:true, active: newActive};
}
if (d.action === 'ping') return {ok:true, msg:'pong'};
return {ok:false, error:'unknown action'};
}
function sha(s) {
return Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, s, Utilities.Charset.UTF_8)
.map(b => ('0'+(b&0xFF).toString(16)).slice(-2)).join('');
}
function out(cb, obj) {
const text = cb ? cb+'('+JSON.stringify(obj)+')' : JSON.stringify(obj);
const mime = cb ? ContentService.MimeType.JAVASCRIPT : ContentService.MimeType.JSON;
return ContentService.createTextOutput(text).setMimeType(mime);
}
👥 المستخدمين المسجلين
قائمة الإيميلات والحسابات المسجلة — من Google Sheets
اضغط تحديث لجلب القائمة من الشيت
💾 النسخ الاحتياطي والاستعادة
📌 تحميل بيانات منتظمة والاحفظها في مكان آمن
🔵 Google Drive
⚫ Dropbox
✅ البيانات تتحفظ تلقائياً في Google Drive أو Dropbox
📊 التقارير المتقدمة
🔍 تحليل شامل للمبيعات والعملاء والأرباح — قابل للتحميل بصيغ مختلفة
🔔 التنبيهات والإخطارات
📖 شرح طريقة الربط مع Google Drive و Dropbox
🔵 Google Drive:
الخطوة 1: اضغط هنا
الخطوة 2: إنشاء مشروع جديد (New Project)
الخطوة 3: بحث عن "Google Drive API" وفعّلها (Enable)
الخطوة 4: اضغط Credentials → Create Credentials → API Key
الخطوة 5: انسخ الـ API Key والصقها فوق
الخطوة 6: في Google Drive، أنشئ مجلد "Bencheikh" وانسخ ID:
الخطوة 2: إنشاء مشروع جديد (New Project)
الخطوة 3: بحث عن "Google Drive API" وفعّلها (Enable)
الخطوة 4: اضغط Credentials → Create Credentials → API Key
الخطوة 5: انسخ الـ API Key والصقها فوق
الخطوة 6: في Google Drive، أنشئ مجلد "Bencheikh" وانسخ ID:
drive.google.com/drive/folders/FOLDER_ID_HENA
الخطوة 7: الصق الـ ID وحط 💾 حفظ
⚫ Dropbox:
الخطوة 1: اضغط هنا
الخطوة 2: اضغط "Create app"
الخطوة 3: اختار "Scoped access" و "App folder"
الخطوة 4: سمّ التطبيق "Bencheikh" وإنشاء (Create)
الخطوة 5: روح على "Permissions" وفعّل: files.content.read, files.content.write
الخطوة 6: اضغط "Generate" في "Access token" وانسخ الـ Token
الخطوة 7: الصق الـ Token وكتب المجلد (/Bencheikh) وحط 💾 حفظ
الخطوة 2: اضغط "Create app"
الخطوة 3: اختار "Scoped access" و "App folder"
الخطوة 4: سمّ التطبيق "Bencheikh" وإنشاء (Create)
الخطوة 5: روح على "Permissions" وفعّل: files.content.read, files.content.write
الخطوة 6: اضغط "Generate" في "Access token" وانسخ الـ Token
الخطوة 7: الصق الـ Token وكتب المجلد (/Bencheikh) وحط 💾 حفظ