# WABOT — Installation sur VPS Windows + Laragon

Guide spécifique Windows. (Le `README.md` d'origine était pour Linux/systemd : ignore-le.)
Sur un VPS Windows, deux choses diffèrent : le **worker** tourne en service Windows
(pas systemd), et le **webhook** doit être exposé en HTTPS public.

---

## 1. Emplacement & Apache

Le dossier est dans `C:\laragon\www\wabot`. Laragon crée un domaine local `wabot.test`.

Pour que **waboxapp** puisse appeler ton webhook depuis Internet, il te faut un
**domaine public pointant vers l'IP de ton VPS** (un sous-domaine suffit, ex
`bot.tondomaine.com`). Crée un enregistrement DNS **A** : `bot` → IP du VPS.

Vérifie aussi que les ports **80 et 443 sont ouverts** dans :
- le Pare-feu Windows (règles entrantes),
- le pare-feu / panneau de ton hébergeur VPS.

> Rappel Laragon : lance Laragon **en administrateur** pour qu'Apache puisse
> écouter sur le port 80.

---

## 2. Vérifier PHP

Ouvre le **Terminal Laragon** (bouton *Terminal*) — `php` y est déjà dans le PATH :

```bat
php -v
php -m
```

Dans `php -m`, tu dois voir : `curl`, `pdo_mysql`, `openssl`, `mbstring`.
S'il en manque, active-les dans `php.ini` (menu Laragon → PHP → php.ini, décommente
les `extension=...` correspondantes) puis relance Laragon.

---

## 3. Base de données

Clique **Database** dans Laragon (ouvre HeidiSQL), connecté en `root` **sans mot de passe**.
Crée une base `wabot` (collation `utf8mb4_unicode_ci`), puis File → Load SQL file →
`C:\laragon\www\wabot\db\schema.sql` → exécute (F9).

Ou en une ligne dans le Terminal Laragon :
```bat
mysql -u root wabot < C:\laragon\www\wabot\db\schema.sql
```

Édite ensuite ton catalogue dans la table `products` (réf, nom, prix, variantes).

---

## 4. Configurer `config.php`

Ouvre `C:\laragon\www\wabot\config.php` :

```php
const DB_HOST = '127.0.0.1';
const DB_NAME = 'wabot';
const DB_USER = 'root';
const DB_PASS = '';                 // vide par défaut sous Laragon

const WABOX_TOKEN = 'ton_token_waboxapp';
const WABOX_UID   = '212600000000'; // ton numéro WhatsApp, format international sans +
const WEBHOOK_SECRET = 'invente_une_longue_chaine_aleatoire';

const GEMINI_API_KEY = 'ta_cle_aistudio';
const GEMINI_MODEL   = 'gemini-flash-lite-latest';

const BRAND_NAME     = 'Ma Boutique';
const ADMIN_PASSWORD = 'un_mot_de_passe_admin';
```

---

## 5. Tester Gemini

```bat
cd C:\laragon\www\wabot
php test_gemini.php
```
Doit afficher un JSON `reply`/`status`/`slots`. Sinon → voir `logs\gemini.log`.

---

## 6. Exposer le webhook en HTTPS

waboxapp appelle ton webhook depuis Internet, en HTTPS. Deux options.

### Option A (la plus simple) — Cloudflare devant ton domaine
1. Mets ton domaine sur Cloudflare (gratuit), DNS A `bot` → IP du VPS, **proxy activé** (nuage orange).
2. SSL/TLS → mode **Flexible** (Cloudflare gère le HTTPS côté visiteur ; ton Apache reste en HTTP).
3. Ton URL publique HTTPS est prête : `https://bot.tondomaine.com`.

### Option B — certificat Let's Encrypt sur Laragon (win-acme)
Télécharge **win-acme** (`wacs.exe`), lance-le en admin, choisis ton domaine ;
il installe et renouvelle le certificat dans Apache automatiquement.

### Configurer le vhost Laragon
Assure-toi qu'Apache sert le dossier `wabot` sur ton domaine. Le plus simple :
renomme/duplique le dossier pour que Laragon génère le vhost, ou ajoute un vhost
manuel pointant `DocumentRoot` sur `C:\laragon\www\wabot`.

### URL finale à coller dans waboxapp (champ webhook de réception)
```
https://bot.tondomaine.com/public/webhook.php?secret=TON_WEBHOOK_SECRET
```

> 💡 Test rapide sans HTTPS : si waboxapp accepte une URL en HTTP, tu peux d'abord
> tester avec `http://IP_DU_VPS/public/webhook.php?secret=...` (port 80 ouvert),
> puis passer en HTTPS pour la prod.

Après ton **premier vrai message**, ouvre `logs\webhook.log`, repère la ligne `RAW ...`
et vérifie que `parse_inbound()` (dans `public\webhook.php`) lit bien les noms de
champs envoyés par waboxapp. C'est le seul réglage susceptible d'être nécessaire.

---

## 7. Faire tourner le worker en continu (service Windows)

Sous Windows il n'y a pas de systemd. Le worker doit tourner en permanence pour
traiter les messages. Méthode recommandée : **NSSM** (gestionnaire de services).

1. Télécharge **NSSM** (nssm.cc), décompresse, ouvre un **invite de commandes en admin**.
2. Trouve le chemin exact de `php.exe` (ex `C:\laragon\bin\php\php-8.3.x-...\php.exe`).
3. Crée le service :

```bat
nssm install WabotWorker "C:\laragon\bin\php\php-8.3.x-...\php.exe" "C:\laragon\www\wabot\worker.php"
nssm set WabotWorker AppDirectory "C:\laragon\www\wabot"
nssm set WabotWorker AppStdout "C:\laragon\www\wabot\logs\worker-svc.log"
nssm set WabotWorker AppStderr "C:\laragon\www\wabot\logs\worker-svc.log"
nssm set WabotWorker Start SERVICE_AUTO_START
nssm start WabotWorker
```

Le worker tourne maintenant en boucle, redémarre tout seul, et se relance au boot.
Pour le piloter : `nssm stop WabotWorker` / `nssm restart WabotWorker` / `nssm remove WabotWorker confirm`.

### Alternatives
- **Test rapide** : ouvre simplement le Terminal Laragon et lance `php worker.php`
  (tourne tant que la fenêtre reste ouverte).
- **Sans NSSM** : Planificateur de tâches Windows → tâche au démarrage exécutant
  `php C:\laragon\www\wabot\worker.php once` toutes les 1 min (réponses un peu moins
  rapides à cause de la granularité d'une minute).

---

## 8. Panneau d'admin

```
https://bot.tondomaine.com/admin/
```
Connexion avec `ADMIN_PASSWORD`. Tu y vois les conversations, les infos collectées,
tu peux reprendre la main, et exporter les commandes confirmées en CSV.

---

## 9. Checklist de mise en route

- [ ] Dossier dans `C:\laragon\www\wabot`, Laragon lancé en admin
- [ ] `php -m` montre curl, pdo_mysql, openssl, mbstring
- [ ] Base `wabot` créée + `schema.sql` importé + catalogue `products` édité
- [ ] `config.php` rempli (MySQL root, token waboxapp, numéro, clé Gemini, secret, admin)
- [ ] `php test_gemini.php` → JSON OK
- [ ] Domaine + DNS A → IP VPS, ports 80/443 ouverts, HTTPS actif (Cloudflare ou win-acme)
- [ ] URL webhook configurée dans waboxapp
- [ ] Service `WabotWorker` (NSSM) démarré
- [ ] Premier message test → vérifier `logs\webhook.log` puis ajuster `parse_inbound()` si besoin
