L’automazione WordPress con Claude API trasforma il modo in cui le agenzie web gestiscono maintenance, reportistica e supporto clienti. In questa guida mostriamo configurazione concreta, use case reali e integrazione con la REST API di WordPress, con esempi di codice testati in produzione su AgencyPilot.
TL;DR
- Claude API (Anthropic) permette di automatizzare task ripetitivi su WordPress: generazione report, analisi plugin, risposte supporto, audit SEO
- L’integrazione avviene via REST API: WordPress espone gli endpoint, Claude processa le richieste via Python o Node.js
- Costo reale: mediamente 0,02$ a chiamata per task di analisi con Claude Sonnet
- AgencyPilot usa Claude API per generare report automatici su 50+ siti gestiti
Perché Claude API per Automazione WordPress
Le agenzie che gestiscono multipli siti WordPress si trovano davanti a una mole di operazioni ripetitive: controllo aggiornamenti plugin, audit di sicurezza, generazione report mensili per i clienti, risposte a ticket di supporto. La documentazione ufficiale Claude API descrive un modello capace di elaborare testo strutturato, generare output in formato JSON e mantenere contesto su conversazioni lunghe.
Nella nostra esperienza con AgencyPilot, dove gestiamo oltre 50 siti WordPress per clienti diversi, il collo di bottiglia non era la competenza tecnica ma il tempo necessario per task che richiedono comprensione del contesto ma non decisioni creative. Claude API colma esattamente quel gap.
Il vantaggio principale rispetto ad altre LLM è la qualità del reasoning su dati tecnici. Claude legge log, analizza configurazioni Nginx, interpreta report di scan sicurezza e produce output strutturato senza allucinazioni frequenti. Questo conta quando il cliente riceve il report mensile.
Configurazione Base: Claude API + WordPress REST API
Prerequisiti: un account Anthropic con API key attiva, Python 3.10+ o Node.js 18+, e accesso alla REST API del sito WordPress. Per l’autenticazione WordPress usiamo Application Passwords, disponibili nativamente da WordPress 5.6.
Setup variabili d’ambiente
# .envANTHROPIC_API_KEY=sk-ant-xxxxxWP_API_URL=https://tuosito.it/wp-json/wp/v2WP_USER=adminWP_APP_PASSWORD=xxxx xxxx xxxx xxxx xxxx xxxx
Client Python base
import osimport requestsfrom anthropic import Anthropic# Inizializza client Claudeclient = Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))# Credenziali WordPressWP_URL = os.getenv("WP_API_URL")WP_AUTH = (os.getenv("WP_USER"), os.getenv("WP_APP_PASSWORD"))def get_wp_posts(limit=10): """Recupera gli ultimi post da WordPress.""" resp = requests.get( f"{WP_URL}/posts", params={"per_page": limit, "orderby": "date", "order": "desc"}, auth=WP_AUTH, timeout=30 ) resp.raise_for_status() return resp.json()def analyze_posts_with_claude(posts): """Analizza i post con Claude e restituisce insights strutturati.""" content = "\n\n".join([ f"Titolo: {p['title']['rendered']}\nData: {p['date']}\nStato: {p['status']}" for p in posts ]) response = client.messages.create( model="claude-sonnet-4-20250514", max_tokens=1024, messages=[{ "role": "user", "content": f"Analizza questi post WordPress. Per ognuno indica: "
f"1) categoria SEO stimata\n"
f"2) lunghezza titolo vs best practice (60 char)\n"
f"3) suggerimento miglioramento\n\n{content}" }] ) return response.content[0].text# Esecuzioneposts = get_wp_posts(10)analysis = analyze_posts_with_claude(posts)print(analysis)
Questo esempio base mostra il pattern fondamentale: WordPress fornisce i dati, Claude li elabora, l’output torna all’utente o viene salvato. Da questo si costruiscono automazioni più complesse.
5 Use Case Concreti per Agenzie WordPress
1. Report Mensili Automatici per Clienti
Il task più time-consuming per un’agenzia è generare report mensili personalizzati per ogni cliente. Con Claude API puoi raccogliere dati da WordPress (post pubblicati, commenti, uptime), incrociarli con Google Analytics e far generare a Claude un report in linguaggio naturale.
def generate_monthly_report(site_url, month, analytics_data): """Genera report mensile con Claude API.""" # Raccogli dati da WordPress posts = requests.get(f"{site_url}/wp-json/wp/v2/posts", params={"after": f"{month}-01T00:00:00", "before": f"{month}-31T23:59:59"}, auth=WP_AUTH, timeout=30).json() prompt = f"""Sei un account manager di un'agenzia web. Genera un report mensile per il cliente in tono professionale ma diretto. Dati WordPress: - Post pubblicati: {len(posts)} - Titoli: {[p['title']['rendered'] for p in posts]} Dati Analytics: - Visite: {analytics_data['visits']} - Pagine più viste: {analytics_data['top_pages']} - Tempo medio: {analytics_data['avg_time']} Genera un report di 300 parole con: 1) Riepilogo attività 2) Performance 3) Raccomandazioni per il prossimo mese""" response = client.messages.create( model="claude-sonnet-4-20250514", max_tokens=1024, messages=[{"role": "user", "content": prompt}] ) return response.content[0].text
Costo reale: circa 0,02$ a report con Claude Sonnet. Per 50 clienti mensili: 1$ totale. Il tempo risparmiato rispetto alla scrittura manuale: circa 25 ore.
2. Audit Automatico Plugin WordPress
I plugin sono il vettore numero uno di vulnerabilità in WordPress. Un’agenzia che gestisce 50 siti non può controllare manualmente ogni plugin su ogni sito. Claude può analizzare la lista plugin, cross-referenciarla con il database CVE e produrre un report prioritizzato.
def audit_plugins(site_url): """Audit plugin con Claude API.""" # Recupera plugin attivi via REST API resp = requests.get(f"{site_url}/wp-json/wp/v2/plugins", auth=WP_AUTH, timeout=30) plugins = resp.json() plugin_list = "\n".join([ f"- {p['name']} v{p['version']} (attivo: {p['status']})" for p in plugins if p['status'] == 'active' ]) prompt = f"""Analizza questi plugin WordPress attivi e identifica: 1) Plugin con versioni datate o note vulnerabilità 2) Plugin ridondanti (funzionalità sovrapposte) 3) Plugin non manutenuti (ultimo update > 2 anni) 4) Raccomandazioni di sostituzione Plugin attivi: {plugin_list} Restituisci un JSON con struttura: {{"critical": [], "warnings": [], "recommendations": []}}""" response = client.messages.create( model="claude-sonnet-4-20250514", max_tokens=2048, messages=[{"role": "user", "content": prompt}] ) return response.content[0].text
3. Generazione Risposte Ticket di Supporto
Quando un cliente apre un ticket, il primo livello di risposta può essere automatizzato. Claude legge il ticket, accede alla knowledge base del progetto e genera una bozza di risposta che l’operatore umano revisiona in 30 secondi invece di scriverla in 10 minuti.
def draft_support_reply(ticket_text, site_context): """Genera bozza risposta supporto con Claude.""" prompt = f"""Sei il supporto tecnico di un'agenzia web italiana. Rispondi al ticket del cliente in tono professionale, tecnico ma comprensibile. Non inventare soluzioni. Contesto sito: {site_context} Ticket cliente: {ticket_text} Se non hai informazioni sufficienti, chiedi chiarimenti. Non promettere tempistiche che non puoi verificare.""" response = client.messages.create( model="claude-sonnet-4-20250514", max_tokens=1024, messages=[{"role": "user", "content": prompt}] ) return response.content[0].text
Questo è particolarmente efficace per ticket ricorrenti: problemi di cache, errori 404, configurazione DNS, reset password. Claude riconosce il pattern e genera la risposta standard in pochi secondi.
4. Analisi SEO e Suggerimenti Content
Claude può analizzare il contenuto di un post WordPress e suggerire ottimizzazioni SEO: keyword mancanti, lunghezza paragrafi, density, link interni. Questo si integra perfettamente con il workflow di pubblicazione.
def seo_audit_post(post_id): """Audit SEO di un post WordPress con Claude.""" # Recupera il post post = requests.get(f"{WP_URL}/posts/{post_id}", auth=WP_AUTH, timeout=30).json() # Rimuovi HTML per l'analisi import re clean_text = re.sub(r'<[^>]+>', '', post['content']['rendered']) prompt = f"""Analizza questo articolo per SEO. Restituisci: 1) Keyword primaria stimata 2) Keyword density (stima) 3) Lunghezza titolo vs ideal (60 char) 4) Presenza di H2, H3 5) Suggerimenti link interni 6) Meta description suggerita (155 char) Titolo: {post['title']['rendered']} Contenuto: {clean_text[:3000]}""" response = client.messages.create( model="claude-sonnet-4-20250514", max_tokens=1024, messages=[{"role": "user", "content": prompt}] ) return response.content[0].text
5. Monitoraggio Uptime e Diagnosi Automatica
Quando un sito va offline, il primo step è capire perché. Claude può analizzare i log di Nginx, lo stato dei servizi e generare una diagnosi immediata. Questo riduce il tempo di risposta (MTTR) del team tecnico.
def diagnose_downtime(site_url, nginx_logs, service_status): """Diagnosi automatica downtime con Claude.""" prompt = f"""Analizza questi dati e identifica la causa probabile di downtime per il sito {site_url}. Log Nginx (ultime 50 righe): {nginx_logs} Stato servizi: {service_status} Restituisci: 1) Causa probabile (con confidence %) 2) Step di risoluzione ordinati per priorità 3) Comandi suggeriti per verificare""" response = client.messages.create( model="claude-sonnet-4-20250514", max_tokens=1024, messages=[{"role": "user", "content": prompt}] ) return response.content[0].text
Architettura di un Sistema di Automazione WordPress
Per un’agenzia che gestisce multipli siti, l’architettura tipica prevede:
| Componente | Ruolo | Tecnologia |
|---|---|---|
| WordPress REST API | Fonte dati, endpoint azioni | WordPress 5.6+, Application Passwords |
| Orchestratore | Schedula task, gestisce code | FastAPI + Celery o cron |
| Claude API | Elaborazione linguaggio, reasoning | Anthropic Python SDK |
| Database | Salva risultati, storico | PostgreSQL |
| Notifiche | Alert risultati, errori | Discord webhook, email |
In AgencyPilot usiamo FastAPI come orchestratore. Ogni task (report, audit, monitoraggio) è un endpoint che schedula un job Celery. Il job chiama la REST API del sito WordPress, passa i dati a Claude, salva il risultato in PostgreSQL e notifica via Discord webhook.
Gestione Costi e Rate Limit
Anthropic applica rate limit basati sul tier del account. Per un’agenzia con 50 siti, il volume tipico mensile è:
| Task | Chiamate/mese | Costo stimato |
|---|---|---|
| Report mensili | 50 | ~1,00$ |
| Audit plugin settimanali | 200 | ~4,00$ |
| Bozze supporto | 300 | ~6,00$ |
| Audit SEO post | 100 | ~2,00$ |
| Diagnosi downtime | 10 | ~0,20$ |
| Totale | 660 | ~13,20$/mese |
Questi costi sono con Claude Sonnet. Per task più semplici (bozze supporto standard) si può usare Claude Haiku, riducendo il costo del 70% circa. Il controllo dei costi passa per tre leveraggi: scelta del modello per task, max_tokens appropriato, e caching delle risposte per query identiche.
Strategie per ridurre i costi
- Model selection per task: Haiku per task semplici (classificazione, bozze standard), Sonnet per reasoning complesso (audit, diagnosi)
- Prompt caching: Claude API supporta il caching dei prompt di sistema. Se il system prompt è lo stesso across chiamate, si risparmia fino al 90% sui token di input
- Batch processing: Invece di una chiamata per sito, raggruppa più siti in un’unica chiamata quando il task lo permette
- Output strutturato: Usa JSON mode per ridurre i token di output e facilitare il parsing
Sicurezza: Proteggere le API Key
L’accesso a Claude API e alla REST API di WordPress richiede credenziali sensibili. Nella nostra esperienza, tre pratiche sono non negoziabili:
- Mai hardcodare API key nel codice. Usa variabili d’ambiente o un secrets manager. I file
.envdevono stare fuori dal repository. - Application Passwords WordPress con permessi minimi. Crea un utente con ruolo Editor o Author, non Administrator, se Claude deve solo leggere post. Usa il plugin User Role Editor per definire permessi granulari.
- Rate limiting custom. Anche se Anthropic ha rate limit propri, implementa un throttle lato applicazione per evitare spike inattesi. Un bug in un loop può generare centinaia di chiamate in pochi minuti.
# Esempio rate limiting con Redisimport redisfrom datetime import datetimer = redis.Redis()def check_rate_limit(user_id, max_calls=50, window=3600): """Verifica rate limit per utente.""" key = f"claude_api:{user_id}:{datetime.now().strftime('%Y%m%d%H')}" current = r.incr(key) if current == 1: r.expire(key, window) if current > max_calls: raise Exception(f"Rate limit superato: {current}/{max_calls} chiamate/ora")
Integrazione con AgencyPilot
AgencyPilot automatizza già molti di questi task. L’architettura interna usa Claude API per:
- Generazione report mensili personalizzati per ogni cliente
- Analisi automatica dei log di sicurezza
- Bozze di risposta per ticket di supporto
- Audit SEO semantico sui post pubblicati
- Rilevamento anomalie nei pattern di uptime
Se gestisci multipli siti WordPress, AgencyPilot centralizza questi task senza dover scrivere l’orchestratore da zero. Per chi preferisce il fai-da-te, gli esempi di codice sopra sono un punto di partenza funzionante.
Error Handling e Resilienza
Le chiamate API possono fallire per motivi diversi: rate limit, timeout, errori 5xx, risposte non valide. Un sistema di automazione production-ready deve gestire questi casi.
import timefrom anthropic import APIError, RateLimitError, APITimeoutErrordef call_claude_with_retry(prompt, max_retries=3): """Chiama Claude API con retry e exponential backoff.""" for attempt in range(max_retries): try: response = client.messages.create( model="claude-sonnet-4-20250514", max_tokens=1024, messages=[{"role": "user", "content": prompt}] ) return response.content[0].text except RateLimitError: wait = 2 ** attempt * 5 # 5s, 10s, 20s time.sleep(wait) except APITimeoutError: if attempt == max_retries - 1: raise time.sleep(2 ** attempt) except APIError as e: if attempt == max_retries - 1: raise time.sleep(2 ** attempt) raise Exception(f"Claude API fallita dopo {max_retries} tentativi")
Questo pattern si applica a ogni chiamata Claude. Per sistemi critici, aggiungi anche un circuit breaker che disabilita temporaneamente le chiamate se il tasso di errore supera una soglia.
FAQ: Automazione WordPress con Claude API
Claude API può modificare direttamente i post WordPress?
Sì, ma con cautela. Claude può generare il contenuto e un endpoint intermedio può pubblicarlo via REST API. Per safety, consigliamo sempre un passaggio di review umano. In AgencyPilot, Claude genera la bozza ma la pubblicazione richiede approvazione manuale.
Quanto costa automatizzare 50 siti WordPress con Claude?
In base ai nostri dati reali su AgencyPilot: circa 13$/mese per 660 chiamate, coprendo report, audit, supporto e SEO. Il costo varia in base al modello usato (Haiku vs Sonnet) e alla lunghezza dei prompt.
Claude API è meglio di ChatGPT per automazione WordPress?
Dipende dal task. Nella nostra esperienza, Claude produce output più strutturato e con meno allucinazioni su dati tecnici (log, config, codice). ChatGPT eccelle in generazione creativa. Per automazione tecnica WordPress, preferiamo Claude.
Serve un server dedicato per l’automazione?
No. Un VPS base (1 vCPU, 1GB RAM) è sufficiente per orchestrazione con cron. Se usi Celery con worker multipli, scala a 2 vCPU. Il bottleneck non è mai la CPU ma le chiamate API a Claude e WordPress.
Come gestire il GDPR con dati clienti inviati a Claude?
Anthropic non usa i dati API per training (politica ufficiale documentata). Per conformità GDPR: non inviare PII dei clienti finali, anonimizza i dati prima dell’invio, e documenta il flusso dei dati nel registro dei trattamenti. Consulta la Anthropic Trust Center per dettagli.
Conclusione
L’automazione WordPress con Claude API è un investimento che si ripaga in settimane per un’agenzia che gestisce più di 10 siti. Il ROI non sta solo nel tempo risparmiato, ma nella consistenza: ogni report segue lo stesso formato, ogni audit segue gli stessi criteri, ogni bozza di risposta segue lo stesso tono.
I cinque use case descritti sopra sono tutti operativi in AgencyPilot oggi. Non sono teorici. Se vuoi saltare la fase di costruzione dell’infrastruttura, AgencyPilot li include nativamente. Se preferisci costruire in-house, il codice in questo articolo è un punto di partenza funzionante.
Per approfondire l’automazione WordPress in generale, consulta la nostra guida all’automazione della gestione WordPress. Per temi di sicurezza, vedi la guida alla sicurezza WordPress per agenzie.