# بوابة واتساب - Walled Garden Chat Gateway

واجهة محادثة واتساب للهوت سبوت تعمل مع منصة **wifi2fm.com** (WA Client API).

---

## كيف يعمل النظام

```
┌─────────────────────────────────────────────────────┐
│  جهاز المستخدم (بدون إنترنت)                        │
│  المتصفح → http://chat.hotspot.local                │
└──────────────┬──────────────────────────────────────┘
               │ (walled garden يسمح بهذا الدومين)
               ▼
┌─────────────────────────────────────────────────────┐
│  السيرفر (PHP + Apache/Nginx)                       │
│                                                     │
│  1. المستخدم يدخل رقم واتساب                        │
│  2. السيرفر يتحقق عبر wifi2fm.com/api/check_number  │
│  3. إذا الرقم صالح → يدخل المحادثة                  │
│  4. الرسائل تُنقل عبر wifi2fm.com/api/send          │
│  5. ردود البوت تصل عبر webhook                       │
└─────────────────────────────────────────────────────┘
```

## هيكل الملفات

```
whatsapp-walled-garden/
├── index.php                 # واجهة المحادثة الرئيسية (عربي RTL)
├── setup_webhook.php         # أداة إعداد الـ webhook (تُشغّل مرة واحدة)
├── .htaccess                 # إعدادات Apache
├── includes/
│   ├── config.php            # الإعدادات (instance_id, access_token)
│   └── functions.php         # الدوال الأساسية (API, تخزين, تحقق)
├── api/
│   ├── login.php             # POST - تسجيل دخول + التحقق من الرقم
│   ├── logout.php            # POST - تسجيل خروج
│   ├── send.php              # POST - إرسال رسالة للبوت
│   ├── poll.php              # GET  - فحص الرسائل الجديدة
│   ├── history.php           # GET  - سجل المحادثة
│   └── webhook.php           # POST - استقبال ردود البوت من wifi2fm.com
├── assets/
│   ├── style.css             # تنسيق عربي RTL
│   └── app.js                # JavaScript (محادثة + خطوات التحقق)
└── data/                     # تخزين تلقائي
    ├── chats/                # ملفات JSON لكل محادثة
    └── logs/                 # سجلات يومية
```

## الإعداد

### 1. متطلبات السيرفر

- PHP 7.4+ مع `curl` و `json`
- Apache أو Nginx
- حساب على wifi2fm.com مع instance_id و access_token

### 2. إعداد البيانات

عدّل `includes/config.php`:

```php
define('WA_API_BASE_URL',   'https://wifi2fm.com');
define('WA_INSTANCE_ID',    'YOUR_INSTANCE_ID');    // مثال: 69A6D75E11512
define('WA_ACCESS_TOKEN',   'YOUR_ACCESS_TOKEN');   // مثال: 6996f56d84470
```

### 3. إعداد الـ Webhook

شغّل أمر الإعداد مرة واحدة:

```bash
php setup_webhook.php https://YOUR_DOMAIN/api/webhook.php
```

أو افتح في المتصفح:
```
https://YOUR_DOMAIN/setup_webhook.php?url=https://YOUR_DOMAIN/api/webhook.php
```

هذا يخبر wifi2fm.com أن يرسل ردود البوت إلى سيرفرك.

### 4. إعداد السيرفر

**Apache (.htaccess موجود):**
```apache
<VirtualHost *:80>
    ServerName chat.hotspot.local
    DocumentRoot /var/www/whatsapp-gateway
</VirtualHost>
```

**Nginx:**
```nginx
server {
    listen 80;
    server_name chat.hotspot.local;
    root /var/www/whatsapp-gateway;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location /data { deny all; }
    location /includes { deny all; }
}
```

### 5. إعداد MikroTik Hotspot Walled Garden

```routeros
# DNS للدومين المحلي
/ip dns static
add name=chat.hotspot.local address=192.168.88.10

# السماح بالوصول في walled garden
/ip hotspot walled-garden
add dst-host=chat.hotspot.local action=allow
add dst-host=wifi2fm.com action=allow
add dst-host=fonts.googleapis.com action=allow
add dst-host=fonts.gstatic.com action=allow

# السماح على مستوى IP
/ip hotspot walled-garden ip
add dst-address=192.168.88.10 action=accept
```

> **مهم:** استبدل `192.168.88.10` بعنوان IP السيرفر الفعلي.
> **مهم:** يجب السماح لـ `wifi2fm.com` حتى يتمكن السيرفر من الاتصال بالـ API.

### 6. صلاحيات الملفات

```bash
mkdir -p data/chats data/logs
chown -R www-data:www-data data/
chmod -R 755 data/
```

---

## نقاط API المستخدمة من wifi2fm.com

| النقطة | الوظيفة |
|--------|---------|
| `POST /api/check_number` | التحقق من تسجيل الرقم في واتساب |
| `POST /api/send` | إرسال رسالة نصية |
| `POST /api/set_webhook` | ضبط رابط استقبال الردود |

### مثال: التحقق من رقم
```bash
curl -X POST 'https://wifi2fm.com/api/check_number' \
  -H 'Content-Type: application/json' \
  --data '{
    "number": "970599123456",
    "instance_id": "69A6D75E11512",
    "access_token": "6996f56d84470"
  }'
```

### مثال: إرسال رسالة
```bash
curl -X POST 'https://wifi2fm.com/api/send' \
  -H 'Content-Type: application/json' \
  --data '{
    "number": "970599123456",
    "type": "text",
    "message": "مرحباً",
    "instance_id": "69A6D75E11512",
    "access_token": "6996f56d84470"
  }'
```

---

## التدفق الكامل

1. **المستخدم يتصل بالهوت سبوت** → لا يوجد إنترنت
2. **يفتح المتصفح** → يتم توجيهه إلى `chat.hotspot.local`
3. **يدخل رقم الواتساب** → النظام يتحقق عبر `check_number`
4. **إذا الرقم غير صالح** → رسالة خطأ "هذا الرقم غير مسجل في واتساب"
5. **إذا الرقم صالح** → يدخل شاشة المحادثة
6. **يكتب رسالة** → تُرسل إلى البوت عبر `send`
7. **البوت يرد** → الرد يصل عبر webhook → يظهر في الواجهة

## ملاحظات أمنية

- يتم التحقق من كل رقم قبل السماح بالمحادثة
- حد الرسائل: 30 رسالة كل 60 ثانية
- الجلسة تنتهي بعد ساعة
- مجلد data محمي من الوصول المباشر
- جميع المدخلات يتم تنظيفها
