🔍 Problème : Les notifications WhatsApp ne sont plus envoyées lors de l'acceptation
📋 Diagnostic du système actuel
Comment fonctionne le système de notification
-
Acceptation d'une commande créée par l'Agent IA :
- L'utilisateur accepte la commande dans
commande_details_page.dart - La fonction
_updateCommandeStatus()met à jour le statut - Si la commande a un
conversationId(créée par l'IA),_sendStatusChangeMessage()est appelé - Un message est inséré dans la table
agent_messagesavec ces métadonnées :metadata: {
'type': 'system',
'sent_from': 'mobile_app',
}
- L'utilisateur accepte la commande dans
-
Le trigger Supabase détecte le message :
- Le trigger
send_whatsapp_message_trigger(fichier:supabase/migrations/create_whatsapp_message_trigger.sql) - Détecte les messages système provenant de l'app mobile
- Récupère la configuration WhatsApp de l'utilisateur depuis
vendor_whatsapp_config - Utilise l'extension
pg_netde Supabase pour envoyer une requête HTTP à l'API WhatsApp
- Le trigger
⚠️ Problèmes potentiels
1. Extension pg_net non activée ✅ VÉRIFIER EN PREMIER
Le trigger utilise net.http_post() qui nécessite l'extension pg_net de Supabase.
Comment vérifier et activer :
- Aller sur Supabase Dashboard → Votre projet
- Database → Extensions
- Chercher
pg_netounet - Si elle n'est pas activée, cliquer sur Enable
Alternative : Activer via SQL
CREATE EXTENSION IF NOT EXISTS pg_net;
2. Configuration WhatsApp non valide
Vérifier que la configuration WhatsApp est correcte :
-- Vérifier la configuration WhatsApp de l'utilisateur
SELECT
user_id,
wa_phone_id,
wa_access_token,
is_active,
updated_at
FROM vendor_whatsapp_config
WHERE user_id = 'VOTRE_USER_ID'
AND is_active = true;
3. Le trigger n'est pas activé
Vérifier que le trigger existe :
-- Vérifier si le trigger existe
SELECT * FROM pg_trigger
WHERE tgname = 'trigger_send_whatsapp_message';
-- Vérifier si la fonction existe
SELECT * FROM pg_proc
WHERE proname = 'send_whatsapp_message_trigger';
Si le trigger n'existe pas, le recréer :
-- Exécuter le fichier de migration
\i supabase/migrations/create_whatsapp_message_trigger.sql
4. La conversation n'a pas de external_sender_id
Le trigger envoie le message au numéro stocké dans agent_conversations.external_sender_id :
-- Vérifier qu'une conversation a bien un external_sender_id
SELECT
id,
external_sender_id,
platform,
status,
client_name
FROM agent_conversations
WHERE id = 'CONVERSATION_ID';
🧪 Comment tester le système
Test 1 : Vérifier les logs du trigger
Après avoir accepté une commande, vérifier les logs dans Supabase :
- Supabase Dashboard → Database → Logs
- Chercher les logs avec
[WHATSAPP_TRIGGER] - Vérifier qu'il n'y a pas d'erreurs
Test 2 : Insérer manuellement un message test
-- Trouver une conversation active
SELECT id, external_sender_id FROM agent_conversations
WHERE status = 'active'
LIMIT 1;
-- Insérer un message test (remplacer CONVERSATION_ID)
INSERT INTO agent_messages (conversation_id, role, content, metadata)
VALUES (
'CONVERSATION_ID',
'assistant',
'🧪 Ceci est un message de test depuis Supabase',
'{"type": "system", "sent_from": "mobile_app"}'::jsonb
);
Si tout fonctionne, le client devrait recevoir ce message sur WhatsApp.
Test 3 : Vérifier les messages insérés
-- Voir les derniers messages système envoyés
SELECT
m.id,
m.conversation_id,
m.content,
m.metadata,
m.created_at,
c.external_sender_id,
c.client_name
FROM agent_messages m
JOIN agent_conversations c ON c.id = m.conversation_id
WHERE m.metadata->>'type' = 'system'
AND m.metadata->>'sent_from' = 'mobile_app'
ORDER BY m.created_at DESC
LIMIT 10;
✅ Solution recommandée
Option 1 : Activer pg_net (RECOMMANDÉ)
C'est la solution la plus simple si le trigger fonctionne déjà pour d'autres notifications.
- Activer l'extension
pg_netdans Supabase Dashboard - Tester en acceptant une commande
Option 2 : Utiliser une Edge Function
Si pg_net pose problème, créer une Edge Function Supabase :
// supabase/functions/send-whatsapp-notification/index.ts
import { serve } from "https://deno.land/std@0.168.0/http/server.ts"
serve(async (req) => {
try {
const { conversationId, message, userId } = await req.json()
// Récupérer la config WhatsApp
const { data: config } = await supabaseClient
.from('vendor_whatsapp_config')
.select('*')
.eq('user_id', userId)
.eq('is_active', true)
.single()
// Récupérer la conversation
const { data: conversation } = await supabaseClient
.from('agent_conversations')
.select('external_sender_id')
.eq('id', conversationId)
.single()
// Envoyer sur WhatsApp
const response = await fetch(
`https://graph.facebook.com/v18.0/${config.wa_phone_id}/messages`,
{
method: 'POST',
headers: {
'Authorization': `Bearer ${config.wa_access_token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
messaging_product: 'whatsapp',
to: conversation.external_sender_id,
type: 'text',
text: { body: message }
})
}
)
return new Response(JSON.stringify({ success: true }), {
headers: { 'Content-Type': 'application/json' }
})
} catch (error) {
return new Response(JSON.stringify({ error: error.message }), {
status: 500,
headers: { 'Content-Type': 'application/json' }
})
}
})
Puis modifier le trigger pour appeler cette fonction :
-- Modifier le trigger pour utiliser une Edge Function
CREATE OR REPLACE FUNCTION send_whatsapp_message_trigger()
RETURNS TRIGGER AS $$
BEGIN
IF (NEW.metadata->>'type' = 'system' AND NEW.metadata->>'sent_from' = 'mobile_app') THEN
PERFORM net.http_post(
url := 'https://YOUR_PROJECT.supabase.co/functions/v1/send-whatsapp-notification',
headers := jsonb_build_object(
'Authorization', 'Bearer YOUR_ANON_KEY',
'Content-Type', 'application/json'
),
body := jsonb_build_object(
'conversationId', NEW.conversation_id::text,
'message', NEW.content,
'userId', (SELECT user_id FROM agent_conversations WHERE id = NEW.conversation_id)::text
)
);
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;
📝 Checklist de vérification
- Extension
pg_netactivée dans Supabase - Trigger
send_whatsapp_message_triggerexiste et est actif - Configuration WhatsApp valide dans
vendor_whatsapp_config - Les commandes créées par l'IA ont bien un
conversationId - Les conversations ont un
external_sender_idvalide - Tester l'insertion manuelle d'un message test
- Vérifier les logs Supabase pour les erreurs
- Le token WhatsApp n'a pas expiré
🔗 Fichiers concernés
- Trigger SQL :
supabase/migrations/create_whatsapp_message_trigger.sql - Code Flutter :
lib/features/calendar/presentation/pages/commande_details_page.dart(ligne 562-616) - Repository :
lib/features/agent_ia/data/repositories/agent_repository_impl.dart(ligne 199-234)