Files
wevads-platform/scripts/warmup-with-creatives.sh
2026-02-26 04:53:11 +01:00

137 lines
4.5 KiB
Bash
Executable File

#!/bin/bash
# WARMUP AVEC MEILLEURES CREATIVES
# Sélectionne automatiquement la meilleure creative par offre
# Usage: ./warmup-with-creatives.sh [batch_size] [emails_per_account]
BATCH_SIZE=${1:-50}
EMAILS_PER=${2:-3}
BATCH_ID="creative_$(date +%Y%m%d_%H%M%S)"
LOG="/var/log/wevads/warmup-creatives.log"
TRACKING="http://151.80.235.110"
echo "$(date) - Creative warmup: $BATCH_ID" >> $LOG
echo "🎨 WARMUP WITH BEST CREATIVES"
echo "📋 Batch: $BATCH_ID | Comptes: $BATCH_SIZE"
echo ""
# Stats
declare -A ISP_SENT
# Comptes O365
ACCOUNTS=$(PGPASSWORD=admin123 psql -U admin -d adx_system -t -A -c "
SELECT id, admin_email FROM admin.office_accounts
WHERE status = 'Active' AND tenant_domain LIKE '%.onmicrosoft.com'
ORDER BY RANDOM() LIMIT $BATCH_SIZE;
")
TOTAL=0
ERRORS=0
while IFS='|' read -r ACC_ID EMAIL; do
[ -z "$ACC_ID" ] && continue
# Seeds avec ISP
SEEDS=$(PGPASSWORD=admin123 psql -U admin -d adx_system -t -A -c "
SELECT id, email,
CASE
WHEN email LIKE '%@gmail.com' THEN 'gmail'
WHEN email LIKE '%@hotmail.%' OR email LIKE '%@outlook.%' THEN 'hotmail'
WHEN email LIKE '%@yahoo.%' THEN 'yahoo'
ELSE 'other'
END
FROM admin.brain_seeds WHERE is_active = true
ORDER BY RANDOM() LIMIT $EMAILS_PER;
")
SENT=0
while IFS='|' read -r SID SEED ISP; do
[ -z "$SEED" ] && continue
# Récupérer offre + meilleure creative
DATA=$(PGPASSWORD=admin123 psql -U admin -d adx_system -t -A -c "
SELECT o.id, o.name, c.id, c.subject_line, c.from_name, c.text_body, o.payout_amount
FROM admin.affiliate_offers o
JOIN admin.offer_creatives c ON o.id = c.offer_id
WHERE (o.status = 'active' OR o.is_active = true)
AND c.status = 'active'
AND (c.is_winner = true OR c.score >= 50)
AND ('$ISP' = ANY(o.allowed_isps) OR o.allowed_isps IS NULL)
ORDER BY c.score DESC, RANDOM()
LIMIT 1;
")
[ -z "$DATA" ] && continue
OID=$(echo "$DATA" | cut -d'|' -f1)
ONAME=$(echo "$DATA" | cut -d'|' -f2)
CID=$(echo "$DATA" | cut -d'|' -f3)
SUBJ=$(echo "$DATA" | cut -d'|' -f4)
FNAME=$(echo "$DATA" | cut -d'|' -f5)
BODY=$(echo "$DATA" | cut -d'|' -f6)
[ -z "$OID" ] && continue
LINK="${TRACKING}/c?o=${OID}&c=${CID}&s=${SID}&b=${BATCH_ID}"
FINAL_BODY=$(echo "$BODY" | sed "s|{offer_link}|$LINK|g" | sed "s|{unsub}|${TRACKING}/u?s=${SID}|g")
# Envoyer
RES=$(python3 << PYEOF 2>/dev/null
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
try:
msg = MIMEMultipart('alternative')
msg['Subject'] = '''$SUBJ'''
msg['From'] = '$FNAME <$EMAIL>'
msg['To'] = '$SEED'
msg['X-Mailer'] = 'Microsoft Outlook 16.0'
msg.attach(MIMEText('''$FINAL_BODY''', 'plain'))
s = smtplib.SMTP('127.0.0.1', 25, timeout=15)
s.sendmail('$EMAIL', '$SEED', msg.as_string())
s.quit()
print("OK")
except Exception as e:
print(f"ERR:{e}")
PYEOF
)
if [[ "$RES" == "OK" ]]; then
((SENT++))
((TOTAL++))
((ISP_SENT[$ISP]++))
# Log + update creative usage
PGPASSWORD=admin123 psql -U admin -d adx_system -q << EOSQL 2>/dev/null
INSERT INTO admin.brain_warmup_tests
(test_batch_id, office_account_id, sender_email, recipient_email, recipient_isp,
config_type, headers_variant, offer_id, offer_name, tracking_link, subject_line)
VALUES ('$BATCH_ID', $ACC_ID, '$EMAIL', '$SEED', '$ISP',
'office365', 'exchange', $OID, '$ONAME', '$LINK', '$SUBJ');
UPDATE admin.offer_creatives SET times_used = times_used + 1, last_used = NOW() WHERE id = $CID;
EOSQL
else
((ERRORS++))
fi
sleep 0.1
done <<< "$SEEDS"
[ $SENT -gt 0 ] && echo "$EMAIL: $SENT sent"
done <<< "$ACCOUNTS"
echo ""
echo "=============================================="
echo "📊 CREATIVE WARMUP COMPLETE"
echo "=============================================="
echo "Batch: $BATCH_ID"
echo "Total: $TOTAL | Errors: $ERRORS"
echo ""
echo "Par ISP:"
for isp in "${!ISP_SENT[@]}"; do
echo " $isp: ${ISP_SENT[$isp]}"
done
echo "$(date) - Done: $TOTAL sent" >> $LOG