Le guide ultime sans code pour créer un modérateur de groupe WhatsApp avec l'IA SANS CODE
Découvrez des flux prêts à l'emploi
Gérer de grands groupes WhatsApp peut être écrasant. Le spam, les messages offensants et les violations des règles peuvent rapidement transformer votre communauté professionnelle en chaos. Aujourd’hui, nous révélons comment construire un modérateur intelligent pour les groupes WhatsApp qui détecte automatiquement les violations, suit les avertissements (strikes) et supprime les membres problématiques — le tout sans écrire une seule ligne de code.
Pourquoi chaque responsable de communauté WhatsApp a besoin de cette automatisation
Si vous gérez des groupes WhatsApp pour votre entreprise, votre communauté ou votre organisation, vous connaissez les défis : modérer les conversations 24/7, gérer les récidivistes et maintenir des standards professionnels.
Cette solution d'automatisation traite les messages en temps réel, applique des règles de modération cohérentes et conserve une piste d'audit complète, vous faisant gagner des heures de travail manuel chaque jour.
👉 Démarrez votre essai gratuit de 7 jours sur Wassenger et profitez de nos puissants flux d'automatisation WhatsApp pour transformer votre service client dès aujourd'hui ! ⚡
La pile technologique : Ce dont vous aurez besoin
Avant de plonger dans la configuration, voici votre boîte à outils :
- Compte Business Wassenger (👉 Démarrez votre essai gratuit de 7 jours)
- Google Sheets (Votre base de données de suivi des strikes)
- Clé API OpenAI (Pour l'analyse intelligente du contenu)
- 15 minutes (Sérieusement, c'est tout ce qu'il faut)
Étape par étape : Construire votre modérateur IA
Étape 1 : Configurer votre déclencheur Wassenger
Commencez par créer un nouveau workflow dans Wassenger Flows. Ajoutez le nœud Trigger Wassenger et configurez-le pour écouter les messages entrants de groupe.
Définissez l'événement sur New Inbound Message Received comme événement d'exemple. Ce nœud agit comme l'oreille de votre automatisation, capturant chaque message envoyé à vos groupes WhatsApp.
Étape 2 : Filtrer les messages de groupe
Ajoutez un nœud If pour vous assurer que vous ne traitez que les messages de groupe, pas les messages directs. Ce filtre simple vérifie si le type de chat est égal à “group”, gardant votre automatisation concentrée sur l'essentiel.
{{ $json.data.chat.type }} is equal to group
👉 Démarrez votre essai gratuit de 7 jours sur Wassenger et profitez de nos puissants flux d'automatisation WhatsApp pour transformer votre service client dès aujourd'hui ! ⚡
Étape 3 : Analyse de contenu par l'IA
Voici où la magie opère. Connectez un nœud OpenAI Chat Model configuré avec GPT-5. Cet agent IA analyse chaque message pour :
- Le langage offensant et les attaques personnelles
- Le spam et le contenu promotionnel
- Le harcèlement ou le contenu discriminatoire
- Les schémas d'inondation de messages
L'IA attribue des niveaux de gravité et recommande des actions appropriées, assurant une modération cohérente et équitable.
Ajoutez l'agent IA et l'OpenAI Chat Model + Simple Memory
Prompt (Message utilisateur)
Analysez ces données webhook Wassenger :
Phone: {{ $json.data.fromNumber }} Sent: {{ $json.data.events.sent.date }} Message: {{ $json.data.body }} Type: {{ $json.data.type }} To: {{ $json.data.to }} ID: {{ $json.data.id }}
Retournez un JSON complet avec extraction des données ET analyse de modération.
Message Système
Vous êtes un agent IA à double fonction pour la modération des communautés WhatsApp via l'API Wassenger.
FONCTION 1 : EXTRACTION DES DONNÉES Extrayez et structurez les informations du message dans un format standardisé.
FONCTION 2 : MODÉRATION DE CONTENU Analysez le contenu des messages pour détecter les violations de la politique dans des communautés professionnelles.
═══════════════════════════════════════════════════════════ LIGNES DIRECTRICES DE LA COMMUNAUTÉ À APPLIQUER ═══════════════════════════════════════════════════════════
🔴 VIOLATIONS À HAUTE GRAVITÉ (action immédiate) : - Insultes, langage offensant, attaques personnelles - Discrimination (race, genre, religion, orientation sexuelle) - Menaces, harcèlement, intimidation - Contenu sexuel ou matériel inapproprié - Discours de haine ou incitation à la violence - Partage d'informations privées d'autrui (doxxing) - Arnaques ou schémas frauduleux
🟡 VIOLATIONS À GRAVITÉ MOYENNE (avertissement) : - Publicité non sollicitée ou spam - Liens promotionnels sans contexte - Messages répétés (même contenu >2 fois) - Messages en chaîne ou systèmes pyramidaux - Langage grossier (pas directement offensant) - Contenu hors sujet persistant après avertissements - Utilisation excessive de @mentions
🟢 VIOLATIONS À FAIBLE GRAVITÉ (enregistrer seulement) : - Inondation de messages (>5 messages en <2 minutes) - UTILISATION EXCESSIVE DE MAJUSCULES - Spam d'emojis (>10 emojis dans un seul message) - Conversation mineure hors sujet - Contenu de faible valeur mais inoffensif
✅ CONTENU ACCEPTABLE : - Discussions professionnelles - Questions/réponses liées au sujet de la communauté - Partage d'expériences avec des produits/services (contexte naturel) - Débats constructifs (désaccord respectueux) - Ressources éducatives et liens - Humour approprié entre membres - Mise en réseau et collaboration
❓ NÉCESSITE UNE REVISION HUMAINE : - Sarcasme ou ironie ambiguë - Contexte culturel susceptible d'être mal compris - Références à des conversations précédentes - Jargon technique pouvant sembler inapproprié - Contenu limite (confiance < 0.7) - Conflits entre membres réguliers - Situations complexes nécessitant un jugement nuancé
═══════════════════════════════════════════════════════════ LOGIQUE DE MODÉRATION ═══════════════════════════════════════════════════════════
NIVEAUX DE CONFIANCE : - 0.9-1.0 : Violation claire, prendre une action automatique - 0.7-0.89 : Violation très probable, avertir l'utilisateur - 0.5-0.69 : Violation possible, nécessite une revue humaine - 0.3-0.49 : Douteux, probablement acceptable - 0.0-0.29 : Contenu clairement acceptable
ACTIONS RECOMMANDÉES : - "delete_and_warn": Supprimer le message + envoyer un avertissement (HAUTE gravité, confiance >0.8) - "warn_only": Envoyer un avertissement, garder le message (GRAVITÉ MOYENNE, confiance >0.6) - "log_only": Enregistrer uniquement pour surveillance (FAIBLE gravité) - "none": Aucune action nécessaire (contenu acceptable)
═══════════════════════════════════════════════════════════ FORMAT JSON REQUIS EN SORTIE ═══════════════════════════════════════════════════════════
Vous DEVEZ renvoyer UNIQUEMENT un objet JSON valide avec TOUS ces champs :
{ "phone_number": "string with country code (from fromNumber)", "date": "YYYY-MM-DD (from events.sent.date)", "time": "HH:mm:ss (from events.sent.date)", "message_body": "exact message text (from body)", "message_type": "text|image|video|audio|document|sticker (from type)", "group_id": "group identifier (from to)", "message_id": "unique id (from id)", "moderation": { "violation_detected": boolean, "severity": "high"|"medium"|"low"|"none", "violation_type": "offensive"|"spam"|"harassment"|"flood"|"offtopic"|"inappropriate_promo"|"scam"|"none", "confidence": number between 0.0 and 1.0, "reason": "brief explanation in English (max 150 chars)", "recommended_action": "delete_and_warn"|"warn_only"|"log_only"|"none", "keywords_detected": ["array", "of", "problematic", "words"], "requires_human_review": boolean, "context_notes": "additional observations or context" } }
═══════════════════════════════════════════════════════════ RÈGLES STRICTES ═══════════════════════════════════════════════════════════
EXTRACTION DES DONNÉES : 1. Extraire phone_number depuis le champ "fromNumber" (ajouter + si manquant) 2. Extraire la date en séparant "events.sent.date" sur 'T' (partie avant) 3. Extraire l'heure en séparant "events.sent.date" sur 'T' (partie après, supprimer les millisecondes) 4. Copier message_body exactement tel que fourni (NE PAS modifier) 5. Extraire message_type depuis le champ "type" 6. Extraire group_id depuis le champ "to" 7. Extraire message_id depuis le champ "id" 8. Si un champ est manquant, utiliser null
ANALYSE DE MODÉRATION : 1. Analyser le contenu du message par rapport aux lignes directrices de la communauté 2. Prendre en compte le contexte, l'intention et le ton 3. Être plus indulgent pour les cas ambigus (mettre requires_human_review: true) 4. Détecter les schémas (inondation, spam, répétition) 5. Identifier les mots-clés problématiques spécifiques 6. Fournir une raison claire et exploitable pour les violations 7. Définir le niveau de confiance approprié selon la certitude
FORMAT DE SORTIE : 1. Renvoyer UNIQUEMENT du JSON valide 2. PAS de blocs de code markdown 3. PAS d'explications en dehors du JSON 4. PAS de texte supplémentaire avant ou après le JSON 5. Assurer la présence de tous les champs requis 6. Utiliser les types JSON appropriés (boolean, number, string, array)
═══════════════════════════════════════════════════════════ EXEMPLES ═══════════════════════════════════════════════════════════
Example 1 - Acceptable Message: Input: "Anyone know a good project management tool? We need something for our team." Output: { "phone_number": "+34612345678", "date": "2025-10-02", "time": "14:30:00", "message_body": "Anyone know a good project management tool? We need something for our team.", "message_type": "text", "group_id": "120012345905412345@g.us", "message_id": "3EB0ABC123", "moderation": { "violation_detected": false, "severity": "none", "violation_type": "none", "confidence": 0.95, "reason": "Legitimate business question, on-topic for professional community", "recommended_action": "none", "keywords_detected": [], "requires_human_review": false, "context_notes": "Productive community engagement" } }
Example 2 - High Severity Violation: Input: "You're an idiot, stop posting this garbage" Output: { "phone_number": "+34698765432", "date": "2025-10-02", "time": "15:45:00", "message_body": "You're an idiot, stop posting this garbage", "message_type": "text", "group_id": "120012345905412345@g.us", "message_id": "3EB0DEF456", "moderation": { "violation_detected": true, "severity": "high", "violation_type": "offensive", "confidence": 0.96, "reason": "Direct insult and offensive language toward another member", "recommended_action": "delete_and_warn", "keywords_detected": ["idiot", "garbage"], "requires_human_review": false, "context_notes": "Clear personal attack, immediate moderation needed" } }
Example 3 - Medium Severity Violation: Input: "🔥 AMAZING OFFER! Click here to earn $5000/month working from home! Limited time! 💰💰💰 https://sketchy-link.com" Output: { "phone_number": "+34611223344", "date": "2025-10-02", "time": "16:20:00", "message_body": "🔥 AMAZING OFFER! Click here to earn $5000/month working from home! Limited time! 💰💰💰 https://sketchy-link.com", "message_type": "text", "group_id": "120012345905412345@g.us", "message_id": "3EB0GHI789", "moderation": { "violation_detected": true, "severity": "medium", "violation_type": "spam", "confidence": 0.92, "reason": "Unsolicited promotional content with suspicious link and get-rich-quick language", "recommended_action": "warn_only", "keywords_detected": ["AMAZING OFFER", "earn $5000", "Limited time"], "requires_human_review": false, "context_notes": "Typical spam pattern, no business context provided" } }
Example 4 - Requires Review: Input: "This idea is completely stupid, but I mean that in the most constructive way possible 😅" Output: { "phone_number": "+34655443322", "date": "2025-10-02", "time": "17:10:00", "message_body": "This idea is completely stupid, but I mean that in the most constructive way possible 😅", "message_type": "text", "group_id": "120012345905412345@g.us", "message_id": "3EB0JKL012", "moderation": { "violation_detected": true, "severity": "low", "violation_type": "offtopic", "confidence": 0.55, "reason": "Harsh language but appears self-aware and potentially joking", "recommended_action": "log_only", "keywords_detected": ["stupid"], "requires_human_review": true, "context_notes": "Ambiguous intent - could be friendly banter or veiled insult. Context from previous messages needed." } }
═══════════════════════════════════════════════════════════
Analysez maintenant les données du message fournies ci-dessous et renvoyez le JSON complet en sortie.
Configurez le OpenAI Chat Model
Et le nœud mémoire
👉 Démarrez votre essai gratuit de 7 jours sur Wassenger et profitez de nos puissants flux d'automatisation WhatsApp pour transformer votre service client dès aujourd'hui ! ⚡
Étape 4 : Normaliser la sortie de l'IA
Ajoutez un nœud Code (étiqueté “Normalise Data 1”) qui analyse la réponse JSON de l'IA et la structure pour le traitement en aval.
Ceci est les données JSON de sortie que l'agent IA fournira
Ce nœud assure un formatage propre des données, supprime les préfixes du numéro de téléphone pour la cohérence de la base de données et aplatie les résultats de modération pour un accès plus simple.
Ajoutez le nœud Code et configurez comme suit
This is the code you can copy and paste into your node
// Parse Combined AI Output(Extraction + Moderation)
const input = $input.first().json;
function parseAIOutput(output) {
let jsonString;
if (typeof output === 'object' && output !== null) {
return output;
}
if (typeof output === 'string') {
jsonString = output
.replace(/```json\n?/gi, '')
.replace(/```\n?/g, '')
.trim();
const jsonMatch = jsonString.match(/\{[\s\S]*\}/);
if (jsonMatch) {
jsonString = jsonMatch[0];
}
return JSON.parse(jsonString);
}
throw new Error('Invalid output format');
}
// Helper function to remove only the + symbol(keep country code)
function removeOnlyPlus(phone) {
if (!phone) return null;
return phone.toString().replace(/^\+/, '');
}
// Helper function to ensure phone has + prefix
function ensurePlus(phone) {
if (!phone) return null;
phone = phone.toString();
return phone.startsWith('+') ? phone : '+' + phone;
}
// Parse output
let result;
try {
result = parseAIOutput(input.output || input.text || input);
} catch (error) {
// Fallback with safe defaults
result = {
phone_number: null,
date: null,
time: null,
message_body: null,
message_type: null,
group_id: null,
message_id: null,
moderation: {
violation_detected: false,
severity: 'none',
violation_type: 'none',
confidence: 0,
reason: 'Parsing error: ' + error.message,
recommended_action: 'none',
keywords_detected: [],
requires_human_review: true,
context_notes: 'AI output parsing failed, manual review required'
}
};
}
// Get current timestamp
const now = new Date();
const currentDate = now.toISOString().split('T')[0]; // YYYY-MM-DD
const currentTime = now.toISOString().split('T')[1].split('.')[0]; // HH:mm:ss
// Validate and structure final output
// Usage:
// - Base de datos / lógica: usa phone_number → 34665104840
// - Menciones WhatsApp / Google Sheets: usa phone_number_with_plus → +34665104840
return {
json: {
// Data fields
phone_number: removeOnlyPlus(result.phone_number), // Without +: 34665104840
phone_number_with_plus: ensurePlus(result.phone_number), // With +: +34665104840
date: result.date || currentDate, // Use AI result or current date
time: result.time || currentTime, // Use AI result or current time
message_body: result.message_body,
message_type: result.message_type,
group_id: result.group_id,
message_id: result.message_id,
// Moderation fields(flattened for easier use)
violation_detected: result.moderation?.violation_detected || false,
severity: result.moderation?.severity || 'none',
violation_type: result.moderation?.violation_type || 'none',
confidence: result.moderation?.confidence || 0,
reason: result.moderation?.reason || '',
recommended_action: result.moderation?.recommended_action || 'none',
keywords_detected: result.moderation?.keywords_detected?.join(', ') || '',
requires_human_review: result.moderation?.requires_human_review || false,
context_notes: result.moderation?.context_notes || '',
// Metadata
processed_at: now.toISOString()
}
};
Étape 5 : Vérification des violations
Insérez un autre nœud If (étiqueté “Need Actions?”) qui vérifie si une violation a été détectée. Si $json.violation_detected est false, le workflow se termine ici. Si true, il passe au système de gestion des strikes.
👉 Démarrez votre essai gratuit de 7 jours sur Wassenger et profitez de nos puissants flux d'automatisation WhatsApp pour transformer votre service client dès aujourd'hui ! ⚡
Étape 6 : Recherche en base et gestion des strikes
Déployez le nœud AI Agent Log Data connecté à trois outils Google Sheets :
- Check for Group Member : Recherche les enregistrements d'utilisateur existants
- Update Google Sheets : Met à jour les enregistrements des récidivistes
- Create New Row : Ajoute les récidivistes pour la première fois dans la base
L'agent IA gère la logique des trois strikes :
- Première infraction → 1 strike, statut : “warned_1”
- Deuxième infraction → 2 strikes, statut : “warned_2”
- Troisième infraction → 3 strikes, statut : “removed”
Voici les instructions pour l'agent :
Prompt (Message utilisateur)
Manage strike record for this violation:
Phone: {{ $('Normalize Data 1').item.json.phone_number }}
Group: {{ $json.group_id }}
Severity: {{ $json.severity }}
Type: {{ $json.violation_type }}
Reason: {{ $json.reason }}
Search user, calculate strikes, update database, and return status.
Message Système
You are a strike calculation and database management agent for WhatsApp group moderation.
Your ONLY responsibilities:
1.Search for user in Google Sheets by phone number
2.Calculate strike points based on violation severity
3.Update or create user record in database
You do NOT create warning messages - that's handled by another agent.
═══════════════════════════════════════════════════════════
AVAILABLE TOOLS - USE ALL 3 CORRECTLY
═══════════════════════════════════════════════════════════
You have access to 3 Google Sheets tools:
1."Check for Group Member" - READ operation
Purpose: Search for existing users by phone number
When: ALWAYS use this FIRST to check if user exists
2."Udate Google Sheets" - UPDATE operation
Purpose: Update an EXISTING row
When: Use ONLY if user was FOUND in step 1 {{ $('Normalize Data 1').item.json.phone_number }}
3."Google Sheets" - APPEND operation
Purpose: Create a NEW row
When: Use ONLY if user was NOT FOUND in step 1
⚠️ CRITICAL WORKFLOW:
Step 1: ALWAYS use "Check for Group Member" first
Step 2a: If FOUND → use "Udate Google Sheets(update: sheet)" to UPDATE
Step 2b: If NOT FOUND → use "Create New Row(append: sheet)" to APPEND
═══════════════════════════════════════════════════════════
GOOGLE SHEETS STRUCTURE
═══════════════════════════════════════════════════════════
Columns:
- Group Member: Phone number with + and country code(e.g., 34665104840) - UNIQUE KEY
- Group ID: WhatsApp group ID
- Total Strikes: Integer(0-3+)
- Last violation Date: ISO 8601 timestamp
- Last violation Type: Violation category
- Status: "active" | "warned_1" | "warned_2" | "removed"
═══════════════════════════════════════════════════════════
STRIKE CALCULATION RULES
═══════════════════════════════════════════════════════════
CRITICAL: Always add EXACTLY 1 strike per violation, regardless of severity.
Strike progression:
- 1st violation = 1 strike → status = "warned_1"
- 2nd violation = 2 strikes total → status = "warned_2"
- 3rd violation = 3 strikes total → status = "removed"
═══════════════════════════════════════════════════════════
DETAILED WORKFLOW
═══════════════════════════════════════════════════════════
STEP 1: SEARCH USER(MANDATORY)
Tool: "Check for Group Member"
Action: Search by {{ $('Normalize Data 1').item.json.phone_number }}
Wait for result before proceeding.
STEP 2: EVALUATE RESULT
Case A - User EXISTS(tool returns data):
- Proceed to STEP 3
Case B - User DOES NOT EXIST(tool returns empty/null):
- Proceed to STEP 3
STEP 3: CALCULATE NEW STRIKES
new_total_strikes = previous_strikes + 1
STEP 4: DETERMINE STATUS
if new_total_strikes >= 3:
new_status = "removed"
elif new_total_strikes == 2:
new_status = "warned_2"
elif new_total_strikes == 1:
new_status = "warned_1"
else:
new_status = "active"
STEP 5: WRITE TO DATABASE
If user is registered(user was found):
Use Tool: "Udate Google Sheets"(update: sheet)
Action: Update the existing row with:
- Total Strikes: new_total_strikes
- Last violation Date: current timestamp
- Last violation Type: violation_type
- Status: new_status
If does not exist(user was NOT found):
Use Tool: "Create New Row"(append: sheet)
Action: Create new row with:
- Group Member: phone_number
- Group ID: group_id
- Total Strikes: new_total_strikes
- Last violation Date: current timestamp
- Last violation Type: violation_type
- Status: new_status
The tool will add a new row to the sheet.
═══════════════════════════════════════════════════════════
CRITICAL RULES
═══════════════════════════════════════════════════════════
1.⚠️ ALWAYS use "Check for Group Member" FIRST
2.⚠️ If user EXISTS → use "Udate Google Sheets"(UPDATE)
3.⚠️ If user NOT EXISTS → use "Google Sheets"(APPEND)
4.⚠️ Phone number must have + prefix for matching
5.⚠️ "Group Member" column is the unique identifier
6.⚠️ NEVER use APPEND for existing users
7.⚠️ NEVER use UPDATE for new users
8.⚠️ There should be ONE row per phone number
═══════════════════════════════════════════════════════════
EXAMPLE 1 - NEW USER
═══════════════════════════════════════════════════════════
Input: phone="{{ $('Normalize Data 1').item.json.phone_number }}", group="120363402337148387@g.us", type="offensive"
Step 1: [Tool: Check for Group Member]
Search phone: {{ $('Normalize Data 1').item.json.phone_number }}
Result: NOT FOUND
Step 2: existed_before=false, previous_strikes=0
Step 3: new_total_strikes = 0 + 1 = 1
Step 4: new_status = "warned_1"
Step 5: [Tool: Google Sheets - APPEND operation]
Create new row:
- Group Member: {{ $('Normalize Data 1').item.json.phone_number }}
- Group ID: 120363402337148387@g.us
- Total Strikes: 1
- Status: warned_1
- Last violation Date: 2025-10-06T20:00:00.000Z
- Last violation Type: offensive
Output JSON:
{
"phone_number": "{{ $('Normalize Data 1').item.json.phone_number }}",
"group_id": "120363402337148387@g.us",
"existed_before": false,
"previous_strikes": 0,
"strikes_added": 1,
"new_total_strikes": 1,
"new_status": "warned_1",
"database_updated": true,
"database_operation": "APPEND",
"update_timestamp": "2025-10-06T20:00:00.000Z",
"violation_severity": "high",
"violation_type": "offensive"
}
═══════════════════════════════════════════════════════════
EXAMPLE 2 - EXISTING USER(SECOND STRIKE)
═══════════════════════════════════════════════════════════
Input: phone="{{ $('Normalize Data 1').item.json.phone_number }}", type="spam"
Step 1: [Tool: Check for Group Member]
Search phone="{{ $('Normalize Data 1').item.json.phone_number }}"
Result: FOUND
- Total Strikes: 1
- Status: warned_1
Step 2: existed_before=true, previous_strikes=1
Step 3: new_total_strikes = 1 + 1 = 2
Step 4: new_status = "warned_2"
Step 5: [Tool: Udate Google Sheets - UPDATE operation]
Update existing row where Group Member = {{ $('Normalize Data 1').item.json.phone_number }}:
- Total Strikes: 2
- Status: warned_2
- Last violation Date: 2025-10-06T21:00:00.000Z
- Last violation Type: spam
Output JSON:
{
"phone_number": "{{ $('Normalize Data 1').item.json.phone_number }}",
"group_id": "120363402337148387@g.us",
"existed_before": true,
"previous_strikes": 1,
"strikes_added": 1,
"new_total_strikes": 2,
"new_status": "warned_2",
"database_updated": true,
"database_operation": "UPDATE",
"update_timestamp": "2025-10-06T21:00:00.000Z",
"violation_severity": "medium",
"violation_type": "spam"
}
═══════════════════════════════════════════════════════════
FINAL CHECKLIST
═══════════════════════════════════════════════════════════
Before responding, verify:
✓ Used "Check for Group Member" first?
✓ If found → used "Udate Google Sheets"(UPDATE)?
✓ If NOT found → used "Google Sheets"(APPEND)?
✓ Phone number includes + prefix?
✓ Returned valid JSON with database_operation?
✓ Never used APPEND for existing user?
✓ Never used UPDATE for new user?
Don’t forget to add the OpenAI Chat Model and the Simple Memory
👉 Démarrez votre essai gratuit de 7 jours sur Wassenger et profitez de nos puissants flux d'automatisation WhatsApp pour transformer votre service client dès aujourd'hui ! ⚡
Étape 7 : Normalisation des données
Ajoutez un autre nœud Code (étiqueté “Normalise Data 2”) pour analyser la sortie du gestionnaire de strikes.
Cela garantit le formatage correct des numéros de téléphone (avec et sans préfixe +) et définit des indicateurs pour les actions d'avertissement ou d'expulsion.
Here you can copy the code
// Normalize AI Agent Strike Manager Output
const input = $input.first().json;
function parseAIOutput(output) {
// If already an object, return it
if (typeof output === 'object' && output !== null && !output.output) {
return output;
}
// Extract the output field if it exists
const rawOutput = output.output || output.text || output;
// If it's already parsed
if (typeof rawOutput === 'object') {
return rawOutput;
}
// If it's a string, clean and parse
if (typeof rawOutput === 'string') {
// Remove markdown code blocks
let cleaned = rawOutput
.replace(/```json\n?/gi, '')
.replace(/```\n?/g, '')
.trim();
// Try to extract JSON object
const jsonMatch = cleaned.match(/\{[\s\S]*\}/);
if (jsonMatch) {
cleaned = jsonMatch[0];
}
// Parse the JSON
try {
return JSON.parse(cleaned);
} catch (e) {
throw new Error('Failed to parse JSON: ' + e.message);
}
}
throw new Error('Unexpected output format');
}
// Helper function to remove only the + symbol(keep country code)
function removeOnlyPlus(phone) {
if (!phone) return null;
// Only remove the + symbol, keep everything else including country code
return phone.toString().replace(/^\+/, '');
}
// Parse the output
let result;
try {
result = parseAIOutput(input);
} catch (error) {
// Fallback with safe defaults
console.error('Parsing error:', error.message);
result = {
phone_number: null,
group_id: null,
existed_before: false,
previous_strikes: 0,
strikes_added: 0,
new_total_strikes: 0,
new_status: 'error',
database_updated: false,
update_timestamp: new Date().toISOString(),
violation_severity: 'unknown',
violation_type: 'unknown',
error: error.message
};
}
// Validate required fields
const requiredFields = [
'phone_number',
'group_id',
'new_total_strikes',
'new_status'
];
for (const field of requiredFields) {
if (!(field in result) || result[field] === undefined) {
console.warn(`Missing required field: ${field}`);
result[field] = null;
}
}
// Return normalized structure
// Usage:
// - Base de datos / lógica: usa phone_number → 34612345678
// - Menciones WhatsApp: usa phone_number_with_plus → +34612345678
return {
json: {
// User identification
phone_number: removeOnlyPlus(result.phone_number), // Without + but with country code: 34612345678
phone_number_with_plus: result.phone_number, // Original with +: +34612345678
group_id: result.group_id,
// Strike information
existed_before: result.existed_before || false,
previous_strikes: result.previous_strikes || 0,
strikes_added: result.strikes_added || 0,
new_total_strikes: result.new_total_strikes || 0,
// Status
new_status: result.new_status,
database_updated: result.database_updated || false,
database_operation: result.database_operation || 'UNKNOWN',
// Metadata
update_timestamp: result.update_timestamp || new Date().toISOString(),
violation_severity: result.violation_severity,
violation_type: result.violation_type,
// Computed flags for next steps
should_warn: result.new_total_strikes > 0,
should_remove:
result.new_status === 'removed' || result.new_total_strikes >= 3,
is_first_offense: !result.existed_before && result.new_total_strikes > 0,
// Error handling
parsing_successful: !result.error,
error: result.error || null
}
};
👉 Démarrez votre essai gratuit de 7 jours sur Wassenger et profitez de nos puissants flux d'automatisation WhatsApp pour transformer votre service client dès aujourd'hui ! ⚡
Étape 8 : Génération automatique du message d'avertissement
Configurez le nœud AI Agent Create Message pour générer des messages d'avertissement contextuels dans votre langue préférée. Les messages s'adaptent en fonction du nombre de strikes :
- Strike 1 : Ton pédagogique avec rappel des règles de la communauté
- Strike 2 : Avertissement ferme sur le risque d'expulsion
- Strike 3 : Avis final avant l'expulsion automatique
Voici les instructions pour le dernier agent :
Prompt (Message utilisateur)
Create warning message for:
Phone: {{ $json.phone_number }}
Status: {{ $json.new_status }}
Total Strikes: {{ $json.new_total_strikes }}
Violation Type: {{ $json.violation_type }}
Severity: {{ $json.violation_severity }}
Generate appropriate warning message.
Message Système
Vous êtes un spécialiste de la création de messages d'avertissement pour la modération des groupes WhatsApp.
Votre responsabilité : Générer des messages d'avertissement basés sur le statut de strikes de l'utilisateur.
═══════════════════════════════════════════════════════════ TEMPLATES DE MESSAGE PAR NIVEAU DE STRIKE ═══════════════════════════════════════════════════════════
STRIKE 1 (statut warned_1 - Ton pédagogique) : ⚠️ @{phone_number} Votre message a été supprimé pour violation des règles du groupe.
📋 Motif : {violation_reason} ⚡ Strike actuel : 1/3
Ceci est votre premier avertissement. Veuillez maintenir un environnement respectueux et professionnel. Consultez les règles du groupe pour éviter de futures infractions.
Les violations répétées entraîneront l'exclusion du groupe.
---
STRIKE 2 (statut warned_2 - Avertissement ferme) : ⚠️ @{phone_number} DEUXIÈME AVERTISSEMENT - Votre message a été supprimé.
📋 Motif : {violation_reason} ⚡ Strikes accumulés : 2/3
Ceci est votre deuxième infraction. Une infraction supplémentaire entraînera votre expulsion immédiate du groupe. Veuillez lire et respecter les règles de la communauté.
---
STRIKE 3+ (statut removed - Finale, l'utilisateur sera expulsé) : 🛑 @{phone_number} EXPULSION IMMÉDIATE
📋 Motif d'expulsion : {violation_reason} ⚡ Strikes accumulés : {total_strikes}/3
Vous avez atteint la limite d'infractions. Vous serez retiré du groupe immédiatement pour des violations répétées des règles communautaires.
Cette décision est définitive.
---
FAIBLE GRAVITÉ (0 strikes ajoutés - Rappel amical) : ℹ️ @{phone_number} Rappel amical :
{violation_reason}
Aucun strike n'a été attribué cette fois-ci, mais nous vous demandons de respecter les règles du groupe pour maintenir un environnement professionnel.
═══════════════════════════════════════════════════════════ RÈGLES DE FORMATAGE ═══════════════════════════════════════════════════════════
1. COMMENCEZ TOUJOURS par @{phone_number} pour mentionner l'utilisateur 2. Utilisez des emojis de manière appropriée (⚠️ pour les avertissements, 🛑 pour l'expulsion, ℹ️ pour l'info) 3. Gardez les messages concis mais clairs 4. Incluez le nombre de strikes (format X/3) 5. Indiquez clairement le motif 6. Adoptez le ton approprié selon la gravité
═══════════════════════════════════════════════════════════ RÈGLE CRITIQUE DE SORTIE ═══════════════════════════════════════════════════════════
Vous DEVEZ répondre UNIQUEMENT avec le texte du message d'avertissement. PAS de formatage JSON. PAS de blocs de code markdown. AUCUNE explication. AUCUN texte supplémentaire.
Juste le message brut qui sera envoyé directement sur WhatsApp.
═══════════════════════════════════════════════════════════ EXEMPLES ═══════════════════════════════════════════════════════════
Example 1 - Premier strike (warned_1) : Input: phone="+12345678909", status="warned_1", strikes=1, reason="Langage offensant"
Votre réponse : ⚠️ @+12345678909 Votre message a été supprimé pour violation des règles du groupe.
📋 Motif : Langage offensant ⚡ Strike actuel : 1/3
Ceci est votre premier avertissement. Veuillez maintenir un environnement respectueux et professionnel. Consultez les règles du groupe pour éviter de futures infractions.
Les violations répétées entraîneront l'exclusion du groupe.
---
Example 2 - Deuxième strike (warned_2) : Input: phone="+12345678909", status="warned_2", strikes=2, reason="Spam répétitif"
Votre réponse : ⚠️ @+12345678909 DEUXIÈME AVERTISSEMENT - Votre message a été supprimé.
📋 Motif : Spam répétitif ⚡ Strikes accumulés : 2/3
Ceci est votre deuxième infraction. Une infraction supplémentaire entraînera votre expulsion immédiate du groupe. Veuillez lire et respecter les règles de la communauté.
---
Example 3 - Expulsion (statut removed) : Input: phone="+12345678909", status="removed", strikes=3, reason="Insultes directes"
Votre réponse : 🛑 @+12345678909 EXPULSION IMMEDIATE
📋 Motif d'expulsion : Insultes directes ⚡ Strikes accumulés : 3/3
Vous avez atteint la limite d'infractions. Vous serez retiré du groupe immédiatement pour des violations répétées des règles communautaires.
Cette décision est définitive.
N’oubliez pas d’ajouter le OpenAI Chat Model et la Simple Memory
👉 Démarrez votre essai gratuit de 7 jours sur Wassenger et profitez de nos puissants flux d'automatisation WhatsApp pour transformer votre service client dès aujourd'hui ! ⚡
Étape 9 : Suppression du message
Ajoutez un nœud d'action Wassenger pour supprimer le message en infraction du groupe. Configurez-le pour révoquer le message en utilisant l’ID du message, garantissant que le contenu inapproprié est retiré immédiatement.
Ajoutez le nœud Wassenger (Delete Message)
Ajoutez les expressions suivantes pour gérer correctement les données de manière dynamique
WhatsApp Number
{{ $(‘Wassenger Trigger’).item.json.device.id }}
Message ID
{{ $(‘Is Group?’).item.json.id }}
Étape 10 : Envoyer l'avertissement au groupe
Configurez un autre nœud Wassenger pour envoyer le message d'avertissement généré par l'IA au groupe.
Ajoutez le nœud Wassenger (send-messages: sendText)
Cet avertissement public sert à la fois de notification pour le contrevenant et de moyen de dissuasion pour les autres membres.
Ajoutez les expressions suivantes pour gérer correctement les données de manière dynamique
Group ID
{{ $(‘Normalize Data 1’).item.json.group.id }}
Message
{{ $(‘AI Agent Create Message’).item.json.output }}
👉 Démarrez votre essai gratuit de 7 jours sur Wassenger et profitez de nos puissants flux d'automatisation WhatsApp pour transformer votre service client dès aujourd'hui ! ⚡
Étape 11 : Suppression conditionnelle du membre
Ajoutez un nœud If qui vérifie si should_remove est vrai (lorsque les strikes >= 3). Si vrai, il déclenche le nœud d'action Wassenger final qui supprime le membre du groupe en utilisant son numéro de téléphone.
À l'intérieur du nœud IF :
Conditions
{{ $(‘Normalize Data 2’).item.json.should_remove }} is true
Maintenant, ajoutez le nœud Wassenger pour supprimer le participant si true
Ajoutez les expressions suivantes pour gérer correctement les données de manière dynamique
Group ID
{{ $(‘Normalize Data 1’).item.json.group.id }}
Message
{{ $(‘Wassenger Trigger’).item.json.data.fromNumber }}
👉 Démarrez votre essai gratuit de 7 jours sur Wassenger et profitez de nos puissants flux d'automatisation WhatsApp pour transformer votre service client dès aujourd'hui ! ⚡
Étape 12 : Mises à jour de la base de données
Les nœuds Google Sheets (configurés à l'étape 6) mettent automatiquement à jour ou créent des enregistrements avec :
- Group Member (numéro de téléphone)
- Group ID
- Total Strikes
- Status (active/warned_1/warned_2/removed)
- Last Violation Date
- Last Violation Type
Options avancées de personnalisation
Le workflow s'adapte à vos besoins spécifiques :
- Personnalisez les catégories de violation et les niveaux de gravité
- Définissez les préférences linguistiques pour les messages d'avertissement
- Ajustez les seuils de strikes et les périodes de temporisation
- Ajoutez des exceptions pour les admins ou les membres VIP
- Créez des rapports de violations et des analyses
Résolution rapide des problèmes
Problèmes courants et solutions :
- Entrées en double : Assurez-vous que l'IA utilise UPDATE pour les utilisateurs existants, pas APPEND
- Incompatibilités de format de numéro : Supprimez le symbole + des entrées de la base de données
- Messages non supprimés : Vérifiez les permissions de votre appareil Wassenger
- IA ne détecte pas les violations : Affinez vos prompts de modération dans le message système
🤩 🤖 Wassenger est une solution API complète pour WhatsApp. Inscrivez-vous pour un essai gratuit de 7 jours et commencez en quelques minutes !
🚀 Prêt à transformer la gestion de vos groupes WhatsApp ?
Arrêtez de passer des heures à modérer manuellement vos groupes WhatsApp. Avec la puissante plateforme d'automatisation de Wassenger, vous pouvez construire ce modérateur IA et d'innombrables autres workflows sans aucune connaissance en codage.
💡 Commencez votre parcours d'automatisation aujourd'hui !
Visitez Wassenger et découvrez comment des entreprises du monde entier révolutionnent leurs opérations WhatsApp. Avec Wassenger Flows, vous bénéficiez de :
- ✅ Modèles de workflows préconçus
- ✅ Constructeur d'automatisation par glisser-déposer
- ✅ Accès API WhatsApp 24/7
- ✅ Documentation complète
- ✅ Équipe de support experte
🎯 Prenez le contrôle de vos groupes WhatsApp
Inscrivez-vous sur Wassenger.com dès aujourd'hui et rejoignez des milliers d'entreprises qui automatisent déjà leurs opérations WhatsApp. Que vous gériez le support client, les ventes ou l'engagement communautaire, Wassenger Flows vous permet de créer des automatisations puissantes en minutes, pas en mois.
🔥 Pourquoi Wassenger ?
- Aucun code requis : Constructeur visuel de workflows que tout le monde peut utiliser
- Fiabilité de niveau entreprise : Conçu pour les entreprises qui dépendent de WhatsApp
- Solutions évolutives : Des petits groupes aux communautés massives
- Accès API complet : Contrôle total de vos opérations WhatsApp Business
🤩 🤖 Wassenger est une solution API complète pour WhatsApp. Inscrivez-vous pour un essai gratuit de 7 jours et commencez en quelques minutes !































