Salta al contenuto principale
Sistemi Attivi
WP Planet — WordPress Cloud & Managed Services
Torna al MagazineIntegrazioni

Integrazione CRM WordPress: collegare il sito al CRM senza appesantire il database

05 Nov 2026 — 12:45 8 min di lettura
Integrazione CRM WordPress: collegare il sito al CRM senza appesantire il database

Collegare WordPress a un CRM esterno via REST API o webhook, mantenendo il database leggero. Pattern per sincronizzare contatti, lead e ordini senza duplicare dati e senza plugin invadenti.

L'integrazione tra WordPress e un CRM è una delle richieste più frequenti che riceviamo da agenzie e PMI. Il problema classico: il cliente ha un sito WordPress che genera lead tramite form, ma i dati finiscono in un database WordPress che nessuno consulta. Il commerciale usa il CRM, il marketing usa il sito, e i due mondi non comunicano. Il risultato è che un lead può essere contattato tre volte o mai.

L'approccio sbagliato è installare un plugin CRM che replica il database di WordPress dentro il CRM (o viceversa). Questo crea sincronizzazione pesante, conflitti di ID, e un database che cresce senza controllo. L'approccio corretto è usare WordPress come fonte di dati e il CRM come sistema di record, collegati da un webhook unidirezionale.

Pattern: webhook WordPress → CRM (unidirezionale)

Il flusso è semplice: quando un form WordPress viene sottomesso, WordPress invia un evento al CRM via webhook REST. Il CRM crea o aggiorna il contatto. Nessuna sincronizzazione bidirezionale, nessuna replica del database. WordPress resta il sistema di acquisizione, il CRM resta il sistema di gestione.

wp-config.php
<?php
// Webhook WordPress → CRM (unidirezionale, no plugin CRM)

add_action( 'wp_insert_post', function( $post_id, $post, $update ) {
    if ( $post->post_type !== 'lead' || wp_is_post_revision( $post_id ) ) return;

    $payload = [
        'email'       => get_post_meta( $post_id, '_lead_email', true ),
        'name'        => get_post_meta( $post_id, '_lead_name', true ),
        'source'      => 'wordpress_form',
        'created_at'  => $post->post_date_gmt,
        'site_url'    => home_url(),
    ];

    wp_remote_post( 'https://crm.example.com/api/contacts/upsert', [
        'headers' => [
            'Authorization' => 'Bearer ' . getenv( 'CRM_API_TOKEN' ),
            'Content-Type'  => 'application/json',
        ],
        'body'        => wp_json_encode( $payload ),
        'timeout'    => 10,
    ] );
}, 10, 3 );
Nota: Il token del CRM va in una variabile d'ambiente (getenv), mai nel codice. Il webhook è unidirezionale: WordPress scrive, il CRM legge. Nessun sync bidirezionale che crea conflitti di ID.

Deduplicazione: come evitare contatti doppi

Il rischio principale di un'integrazione CRM è la duplicazione: lo stesso lead inviato due volte crea due contatti nel CRM. La soluzione è usare un identificatore univoco (email) e un endpoint upsert nel CRM che aggiorna se esiste, crea se non esiste. Il webhook deve inviare l'email come chiave primaria e il CRM deve fare un upsert, non un insert.

wp-config.php
// Deduplicazione: invia solo se il lead non è già stato sincronizzato
$synced = get_post_meta( $post_id, '_crm_synced', true );
if ( $synced ) return;

// ... invia al CRM ...

// Segna come sincronizzato
update_post_meta( $post_id, '_crm_synced', current_time( 'mysql' ) );
update_post_meta( $post_id, '_crm_id', $crm_response->id );
Nota: Il flag _crm_synced previene invii multipli. Se il webhook fallisce, il flag non viene scritto e il prossimo salvataggio ritenta. È un pattern idempotente.

REST API custom endpoint: leggere dal CRM

Se hai bisogno di leggere dati dal CRM dentro WordPress (es. mostrare lo stato di un lead in una pagina protetta), crea un endpoint REST API custom che fa da proxy. WordPress non accede direttamente al database del CRM — chiama l'API del CRM con il token server-side.

wp-config.php
// Endpoint REST API custom: proxy CRM → WordPress
add_action( 'rest_api_init', function() {
    register_rest_route( 'wp-planet/v1', '/lead/(?P<id>\d+)', [
        'methods'  => 'GET',
        'callback' => function( $request ) {
            $lead_id = $request->get_param( 'id' );
            $response = wp_remote_get( 'https://crm.example.com/api/leads/' . $lead_id, [
                'headers' => [ 'Authorization' => 'Bearer ' . getenv( 'CRM_API_TOKEN' ) ],
            ] );
            return rest_ensure_response( json_decode( wp_remote_retrieve_body( $response ), true ) );
        },
        'permission_callback' => function() { return current_user_can( 'edit_posts' ); },
    ] );
} );
Nota: L'endpoint è protetto da permission_callback (solo utenti autenticati). Il token CRM è letto server-side via getenv, mai esposto al browser. Questo pattern mantiene il database WordPress leggero e il CRM come sistema di record.

L'integrazione CRM non è un plugin da installare e dimenticare. È un'infrastruttura che richiede un endpoint, un token, una strategia di deduplicazione e un monitoraggio degli errori. Ma se fatta bene, elimina il lavoro manuale di copiare dati tra sistemi e rende ogni lead immediatamente disponibile al commerciale. Il valore non è nel plugin, è nel flusso.

Sviluppo WordPress

Integrazioni API, webhook e automazioni su misura.

Sviluppo WordPress personalizzato per collegare il sito a CRM, gateway di pagamento e servizi esterni via REST API e webhook.

Sviluppo WordPress
Condividi