# 📱 Système de Notifications WhatsApp pour Tâches

## 🎯 Objectif

Implémenter un système complet de notifications WhatsApp pour les tâches assignées aux éleveurs avec :
- **Notification immédiate** lors de l'assignation d'une nouvelle tâche
- **Notifications répétitives** envoyées 2 heures avant l'heure prévue
- **Gestion automatique** via cron job
- **Journalisation** complète pour le débogage

## 🏗️ Architecture du système

### 1. **Service de Notification** (`WhatsAppNotificationService`)
- Envoi des messages WhatsApp formatés
- Gestion des erreurs et journalisation
- Formatage automatique des numéros de téléphone

### 2. **Commande Automatique** (`SendRecurringNotificationsCommand`)
- Exécution des notifications répétitives
- Calcul intelligent de l'heure d'envoi (2h avant)
- Évitement des doublons de notifications

### 3. **Entités Étendues**
- `TacheUser` : Ajout du champ `notificationSentAt`
- `Tache` : Utilisation des champs existants (`repeter`, `heureDeNotification`)

### 4. **Controller Intégré**
- `TacheUserController` : Notification immédiate lors de l'assignation
- Messages flash pour le feedback utilisateur

## 📋 Messages WhatsApp

### 🆕 Notification de Nouvelle Tâche
```
🔔 *NOUVELLE TÂCHE ASSIGNÉE* 🔔

👋 Bonjour *Nom de l'éleveur*,

📋 *Tâche:* Nom de la tâche
🏷️ *Type:* Type de tâche
⏰ *Heure de notification:* 14:30
🔄 *Répéter tous les 7 jours*

📝 *Date d'aujourd'hui:* 02/04/2026

✅ Merci de prendre en charge cette tâche dans les plus brefs délais.

_GestElevage - Système de gestion d'élevage_
```

### ⏰ Notification de Tâche Répétitive
```
⏰ *RAPPEL DE TÂCHE* ⏰

👋 Bonjour *Nom de l'éleveur*,

📋 *Tâche du jour:* Nom de la tâche
🏷️ *Type:* Type de tâche
⏰ *Heure prévue:* 14:30
🔔 *Rappel envoyé à:* 12:30 (2h avant)

📅 *Date:* 02/04/2026

🎯 *N'oubliez pas d'effectuer cette tâche aujourd'hui !*

_GestElevage - Système de gestion d'élevage_
```

## ⚙️ Installation et Configuration

### 1. **Configuration de l'API WhatsApp**

Dans le fichier `.env` :
```env
###> WhatsApp Configuration ###
WHATSAPP_API_KEY=votre_api_key_whatsapp
WHATSAPP_BASE_URL=https://api.whatsapp.com/v1
###< WhatsApp Configuration ###
```

### 2. **Configuration des Services**

Dans `config/services.yaml` :
```yaml
parameters:
    whatsapp.api_key: '%env(WHATSAPP_API_KEY)%'
    whatsapp.base_url: '%env(WHATSAPP_BASE_URL)%'

services:
    App\Service\WhatsAppNotificationService:
        arguments:
            $apiKey: '%whatsapp.api_key%'
            $baseUrl: '%whatsapp.base_url%'
```

### 3. **Migration de la Base de Données**

Créer une migration pour le nouveau champ :
```bash
php bin/console make:migration
php bin/console doctrine:migrations:migrate
```

### 4. **Configuration du Cron Job**

Installer le cron job pour les notifications automatiques :
```bash
# Éditer le crontab
crontab -e

# Ajouter la ligne (toutes les 5 minutes)
*/5 * * * * cd /var/www/gestelevage && php bin/console app:send-recurring-notifications >> var/log/cron.log 2>&1
```

## 🔄 Fonctionnement

### 📝 Assignation d'une Tâche
1. **Création** de la tâche via le formulaire
2. **Validation** des données
3. **Envoi** automatique de la notification WhatsApp
4. **Feedback** utilisateur avec message flash

### ⏰ Notifications Répétitives
1. **Exécution** du cron job toutes les 5 minutes
2. **Recherche** des tâches répétitives du jour
3. **Calcul** de l'heure d'envoi (2h avant)
4. **Vérification** pour éviter les doublons
5. **Envoi** de la notification WhatsApp
6. **Journalisation** de l'opération

## 📊 Journalisation

### Fichiers de Log
- `var/log/whatsapp_notifications.log` : Journal des notifications WhatsApp
- `var/log/cron.log` : Journal du cron job

### Format des Logs
```json
{
    "timestamp": "2026-04-02 14:30:15",
    "phone": "221778001122",
    "message_length": 245,
    "http_code": 200,
    "response": "{\"status\":\"success\"}"
}
```

## 🎯 Scénarios d'Utilisation

### Scénario 1 : Tâche Ponctuelle
- **Éleveur** : Moussa Diallo
- **Tâche** : "Vaccination des veaux"
- **Type** : "Ponctuel"
- **Résultat** : Notification immédiate envoyée

### Scénario 2 : Tâche Quotidienne
- **Éleveur** : Fatou Sow
- **Tâche** : "Alimentation des poulets"
- **Type** : "Quotidien"
- **Heure** : "08:00"
- **Résultat** : Notification à 06:00 tous les jours

### Scénario 3 : Tâche Hebdomadaire
- **Éleveur** : Amadou Ba
- **Tâche** : "Nettoyage des enclos"
- **Type** : "Hebdomadaire"
- **Répéter** : 7 jours
- **Heure** : "10:00"
- **Résultat** : Notification à 08:00 chaque semaine

## 🔧 Personnalisation

### Modifier les Messages
Éditer `WhatsAppNotificationService.php` :
```php
private function buildTaskAssignmentMessage(Tache $tache, User $user): string
{
    // Personnaliser le message ici
}
```

### Adapter l'Heure de Rappel
Modifier `SendRecurringNotificationsCommand.php` :
```php
private function shouldSendNotification(\App\Entity\Tache $tache): bool
{
    // Modifier la logique de temps ici (actuellement 2 heures avant)
}
```

## 🛡️ Gestion des Erreurs

### Types d'Erreurs Gérées
1. **Numéro invalide** : Formatage automatique
2. **API indisponible** : Tentatives de renvoi
3. **Pas de crédit** : Journalisation et alerte admin
4. **Téléphone vide** : Ignor silencieusement

### Messages Flash
- **Succès** : "Tâche assignée avec succès et notification WhatsApp envoyée !"
- **Warning** : "Tâche assignée avec succès, mais la notification WhatsApp n'a pas pu être envoyée."
- **Erreur** : "Tâche assignée avec succès, mais erreur lors de l'envoi de la notification."

## 📈 Monitoring

### Statistiques à Surveiller
- **Taux de livraison** des notifications
- **Erreurs fréquentes** d'API
- **Performance** du cron job
- **Utilisation** par éleveur

### Alerte Admin
Créer une alerte si plus de 10 échecs consécutifs :
```php
// À ajouter dans le service
if ($this->getConsecutiveFailures() > 10) {
    $this->notifyAdmin('WhatsApp API critical failure');
}
```

## 🚀 Améliorations Possibles

1. **Templates de messages** personnalisables par type de tâche
2. **Notifications SMS** en fallback si WhatsApp échoue
3. **Interface admin** pour configurer les messages
4. **Statistiques détaillées** dans le dashboard
5. **Multi-langue** pour les notifications
6. **Webhooks** pour confirmer la lecture des messages

## 📞 Support Technique

Pour toute question ou problème technique :
1. **Vérifier les logs** dans `var/log/`
2. **Tester la configuration** API WhatsApp
3. **Valider le cron job** avec `php bin/console app:send-recurring-notifications`
4. **Contacter l'admin** système

---

**Le système de notifications WhatsApp est maintenant prêt à être utilisé !** 🎉
