{{-- Page Header --}}

الإعدادات

إعدادات النظام وتكامل واتساب

{{-- Warnings --}} @if(count($warnings) > 0)
@foreach($warnings as $warning)
@switch($warning['type']) @case('error') 🔴 @break @case('warning') 🟡 @break @default 🔵 @break @endswitch {{ $warning['message'] }}
@endforeach
@endif {{-- Section 0: WhatsApp Provider Switch --}}

📡 مزود الاتصال بواتساب

اختر المزود النشط. التغيير يسري فوراً دون إعادة تشغيل السيرفر.

{{-- Active provider badge --}}
المزود الحالي: @if($activeProvider === 'evolution') 🟢 Evolution API (رقمك الشخصي) @else 🔵 Official Meta API (الرقم الرسمي) @endif
{{-- Provider selector --}}
{{-- Evolution-specific fields (shown only when evolution is selected) --}} @if($providerData['provider'] === 'evolution')

⚙️ إعدادات Evolution API

{{-- ⛔ Clear warning box explaining the two URLs --}}

⚠️ تنبيه مهم — هناك رابطان مختلفان تماماً:

رابط السيرفر (الحقل أدناه) = رابط سيرفر Evolution نفسه.
مثال الإنتاج الحالي: http://127.0.0.1:12300 أو http://YOUR_SERVER_IP:12300

رابط الـ Webhook (الصندوق الرمادي أسفل الصفحة) = رابط تطبيقك — يُسجَّل في Evolution فقط ولا يُكتب في الحقل.

{{-- Server URL field --}}

✅ على السيرفر الحالي: http://127.0.0.1:12300 (Evolution على نفس الجهاز)

❌ خطأ شائع: لا تضع هنا رابط ngrok أو رابط الـ Webhook

مفتاح AUTHENTICATION_API_KEY من إعدادات Evolution

اسم الـ Instance اللي أنشأته في Evolution (الافتراضي: main)

اختياري. اكتبه بصيغة دولية بدون + لو Evolution لا يعرض QR ويرجع pairing code.

{{-- Webhook URL — read-only, clearly labelled as NOT the server URL --}}

② رابط الـ Webhook — سجّله في Evolution فقط (لا تضعه في الحقل أعلاه)

{{ $evolutionWebhookUrl }}

سجّله في Evolution عبر: POST /webhook/set/main

{{-- QR Code Section — only shown when Evolution URL is configured --}} @if(empty(trim($providerData['evolution_url'] ?? '')))

⚠️ سيرفر Evolution غير مضبوط بعد

لاستخدام QR Code، ثبّت Evolution API على VPS أولاً (راجع المرحلة الأولى من ملف الخطة)، ثم أدخل رابط السيرفر ومفتاح API في الحقول أعلاه واضغط حفظ.

@else

📱 ربط رقم واتساب بـ QR Code أو كود الربط

احفظ الإعدادات أولاً. للكود اكتب رقم واتساب بصيغة دولية بدون + ثم اضغط "عرض كود الربط"

@if($evolutionStatus === 'open') @endif
{{-- Connection status badge --}} @if($evolutionStatus !== null)
@if($evolutionStatus === 'open') متصل ✓ @elseif($evolutionStatus === 'connecting') جاري الاتصال... @else غير متصل @endif
@endif {{-- Error message --}} @if($evolutionQrError)
⚠️ {{ $evolutionQrError }}
@endif @if($evolutionStatus === 'open')

واتساب متصل

الرقم نشط ويستقبل الرسائل

@else

الخيار الأول: QR Code

@if($evolutionQr)
QR Code واتساب

افتح واتساب ← الأجهزة المرتبطة ← ربط جهاز ← امسح الكود

QR Code صالح لمدة قصيرة. اضغط تحديث لو انتهت المهلة.

@else

اضغط "عرض QR" لتوليد الكود المصور.

@endif

الخيار الثاني: كود الربط

@if($evolutionPairingCode) {{ $evolutionPairingCode }} @if($evolutionPairingCodeAt)

آخر طلب للكود: {{ $evolutionPairingCodeAt }}

@endif

افتح واتساب ← الأجهزة المرتبطة ← ربط جهاز ← الربط برقم الهاتف بدلاً من QR ← اكتب الكود فوراً

@else

اكتب رقم الواتساب بالأعلى ثم اضغط "عرض كود الربط".

@endif
@endif
@endif {{-- end evolution URL configured --}} @endif {{-- end providerData.provider === evolution --}}
{{-- Section: Sync Evolution History --}} @if($activeProvider === 'evolution')

🔄 مزامنة المحادثات القديمة

استيراد جميع المحادثات والرسائل القديمة من واتساب — مثل فتح واتساب ويب للمرة الأولى. آمن للتشغيل أكثر من مرة، لا يكرر الرسائل.

{{-- Step 1: Enable full history on Evolution --}}

الخطوة 1 — تفعيل مزامنة كل التاريخ

بشكل افتراضي Evolution يجلب فقط آخر الرسائل. لجلب كل المحادثات القديمة مثل واتساب ويب، فعّل syncFullHistory ثم أعد ربط الرقم بـ QR Code جديد.

← ثم اقطع الاتصال وأعد الربط بـ QR Code جديد
{{-- Step 2: Manual sync --}}

الخطوة 2 — مزامنة يدوية

يجلب ما وصله Evolution من محادثات ورسائل حتى الآن. شغّله بعد ربط الرقم أو في أي وقت لاستيراد ما فات.

{{-- Status --}} @if($evolutionSyncStatus === 'running')
جاري المزامنة في الخلفية... اضغط تحديث الصفحة لرؤية التقدم.
@elseif($evolutionSyncStatus === 'done')
✅ اكتملت المزامنة {{ $evolutionSyncDoneAt ? 'في ' . $evolutionSyncDoneAt : '' }}
@elseif($evolutionSyncStatus === 'failed')

❌ فشلت المزامنة

@if($evolutionSyncError)

{{ $evolutionSyncError }}

@endif
@endif {{-- Stats --}} @if(!empty($evolutionSyncStats) && ($evolutionSyncStatus === 'done' || $evolutionSyncStatus === 'running')) @php $s = $evolutionSyncStats; @endphp
{{ $s['chats_processed'] ?? 0 }}/{{ $s['chats_total'] ?? 0 }}
المحادثات
{{ $s['messages_imported'] ?? 0 }}
رسائل مستوردة
{{ $s['messages_skipped'] ?? 0 }}
مكررة (تم تخطيها)
{{ $s['errors'] ?? 0 }}
أخطاء
@endif
{{-- How it works --}}
كيف تعمل المزامنة الكاملة؟

١. اضغط تفعيل syncFullHistory أعلاه.

٢. اذهب إلى قسم QR Code أعلاه → اضغط قطع الاتصال.

٣. أعد ربط الرقم بـ QR Code جديد.

٤. Evolution سيبدأ تلقائياً بإرسال كل المحادثات القديمة عبر Webhook — النظام سيحفظها تلقائياً.

٥. أو يمكنك الاكتفاء بالمزامنة اليدوية (الخطوة 2) لاستيراد ما وصل إلى Evolution حتى الآن.

@endif {{-- Section 1: WhatsApp Integration Status --}}

🔌 حالة تكامل واتساب

@php $statusItems = [ ['label' => 'App Secret', 'status' => $whatsAppStatus['app_secret_configured'], 'value' => $whatsAppStatus['app_secret_masked']], ['label' => 'Access Token', 'status' => $whatsAppStatus['access_token_configured'], 'value' => $whatsAppStatus['access_token_masked']], ['label' => 'Phone Number ID', 'status' => $whatsAppStatus['phone_number_id_configured'], 'value' => $whatsAppStatus['phone_number_id']], ['label' => 'Verify Token', 'status' => $whatsAppStatus['verify_token_configured'], 'value' => $whatsAppStatus['verify_token_value']], ['label' => 'Business Account ID', 'status' => $whatsAppStatus['business_account_id_configured'], 'value' => $whatsAppStatus['business_account_id']], ['label' => 'توقيع الطلب (Signature)', 'status' => $whatsAppStatus['verify_signature_enabled'], 'value' => $whatsAppStatus['verify_signature_enabled'] ? 'مفعل' : 'معطل'], ]; @endphp @foreach($statusItems as $item)
{{ $item['label'] }}
{{ $item['value'] }}
@if($item['status']) @else @endif
@endforeach
Webhook URL: {{ $whatsAppStatus['webhook_url'] }}
{{-- Editable WhatsApp Settings --}}

تعديل إعدادات واتساب

حفظ
{{-- Section 2: Webhook Health --}}

📡 صحة Webhook

{{ number_format($webhookHealth['total_events']) }}
إجمالي الأحداث
{{ number_format($webhookHealth['last_24h_events']) }}
آخر 24 ساعة
{{ number_format($webhookHealth['last_7d_events']) }}
آخر 7 أيام
{{ $webhookHealth['last_event_at'] ?? 'لا يوجد' }}
آخر حدث
النقطة النهائية (Endpoint)
{{ $webhookHealth['endpoint_url'] }}
التحقق من التوقيع
@if($webhookHealth['signature_enabled']) مفعل @else معطل @endif
@if($webhookHealth['signature_enabled']) @else ⚠️ @endif
{{-- Section 3: Cloud API Health --}}

☁️ صحة Cloud API

@php $healthChecks = [ ['key' => 'access_token', 'label' => 'Access Token', 'ok' => $cloudApiHealth['checks']['access_token']], ['key' => 'phone_number_id', 'label' => 'Phone Number ID', 'ok' => $cloudApiHealth['checks']['phone_number_id']], ['key' => 'business_account_id', 'label' => 'Business Account ID', 'ok' => $cloudApiHealth['checks']['business_account_id']], ['key' => 'app_secret', 'label' => 'App Secret', 'ok' => $cloudApiHealth['checks']['app_secret']], ['key' => 'verify_token', 'label' => 'Verify Token', 'ok' => $cloudApiHealth['checks']['verify_token']], ]; @endphp @foreach($healthChecks as $check)
{{ $check['label'] }} @if($check['ok']) ✅ جاهز @else ❌ مفقود @endif
@endforeach
{{ $cloudApiHealth['all_configured'] ? '✅' : '⚠️' }}
{{ $cloudApiHealth['all_configured'] ? 'جميع إعدادات Cloud API مهيأة' : 'بعض إعدادات Cloud API مفقودة' }}
@if(!$cloudApiHealth['all_configured'] && count($cloudApiHealth['missing_configs']) > 0)
المفقود: {{ implode(', ', $cloudApiHealth['missing_configs']) }}
@endif
{{-- Section 4: Routing Rules --}}

🔄 قواعد التوجيه

سلوك توجيه المحادثات الحالي (قراءة فقط — سيتم إضافة إعدادات التحرير لاحقاً)

1️⃣
العامل المخصص (Dedicated Agent)
{{ $routingRules['dedicated_agent_desc'] }}
2️⃣
مطابقة رقم هاتف WABA
{{ $routingRules['waba_phone_desc'] }}
3️⃣
قائمة الانتظار (Waiting List)
{{ $routingRules['waiting_list_desc'] }}
4️⃣
الموظف النشط فقط
{{ $routingRules['active_employee_desc'] }}
5️⃣
سلوك العامل غير النشط
{{ $routingRules['inactive_behavior_desc'] }}
6️⃣
نافذة اللصق (Sticky Window)
{{ $routingRules['sticky_window_desc'] }} ({{ $routingRules['sticky_window_days'] }} يوم)
{{-- Section 5: Notification Settings --}}

🔔 إعدادات الإشعارات

فترة الاستعلام (Polling)
{{ $notificationSettings['polling_interval'] }}
إشعارات قاعدة البيانات
{{ $notificationSettings['db_notifications_desc'] }}
الإشعارات الصوتية
{{ $notificationSettings['audio_desc'] }}
الإشعارات المرئية
{{ $notificationSettings['visual_desc'] }}
البث المباشر (Broadcast)
{{ $notificationSettings['broadcast_desc'] }}
@if($notificationSettings['broadcast_configured']) @else @endif

تعديل إعدادات الإشعارات

حفظ
{{-- Section 6: Chat Behavior --}}

💬 سلوك المحادثة

وضع علامة مقروء عند الفتح
{{ $chatBehavior['mark_read_desc'] }}
تتبع عدد الرسائل غير المقروءة
{{ $chatBehavior['unread_count_desc'] }}
@if($chatBehavior['closed_reopen_enabled']) @else ⏸️ @endif
إعادة فتح المحادثات المغلقة
{{ $chatBehavior['closed_reopen_desc'] }}
دعم المرفقات
{{ $chatBehavior['attachment_desc'] }}
@if($chatBehavior['quick_replies_enabled']) @else ⏸️ @endif
الردود السريعة
{{ $chatBehavior['quick_replies_desc'] }}
حقل إدخال النص
{{ $chatBehavior['textarea_desc'] }}

تعديل سلوك المحادثة

حفظ
{{-- Section 7: Theme Settings --}}

🎨 إعدادات المظهر

تخصيص ألوان النظام — التغييرات تُطبق فوراً وتستمر بعد التحديث والتنقل.

{{-- Primary Color --}}

يؤثر على الأزرار والروابط والقائمة الجانبية والشارات في كل الصفحات.

الافتراضي: #16a34a (أخضر واتساب)

{{-- Dark / Light Mode --}}

اختر بين الوضع الداكن والوضع الفاتح لكل صفحات النظام.

{{-- Reset --}}

إعادة جميع إعدادات المظهر إلى الافتراضي: أخضر واتساب، وضع داكن.

💡 ملاحظة: إعدادات المظهر محفوظة في المتصفح (localStorage). تُطبق على الفور في كل صفحات النظام وتبقى بعد التحديث والتنقل.