Vai al contenuto
OmniChannels.ai

Come collegare un CRM a una inbox omnicanale con i webhook

Collegare un CRM a una inbox omnicanale con i webhook: eventi da sincronizzare, idempotenza, retry, associazione dei contatti, privacy e architettura.

Aggiornato 8 min di lettura

Di OmniChannels.ai Editorial Team · Revisione di BroadNet Messaging Solutions Team

Integrazione

Risposta breve

Per collegare un CRM a una inbox omnicanale, sottoscrivete i webhook della inbox per gli eventi di conversazione e di messaggio, riceveteli su un piccolo endpoint che verifica le firme e salva ogni evento una sola volta usando il suo ID, poi elaborateli in modo asincrono: associate il mittente a un contatto del CRM tramite telefono normalizzato, email o ID social e scrivete le attività nel CRM. In senso inverso usate l'API della inbox per inviare messaggi o aggiornare l'assegnazione dai flussi di lavoro del CRM.

In questa pagina
  1. Cosa devono scambiarsi un CRM e una inbox omnicanale?
  2. A quali eventi webhook conviene iscriversi?
  3. Come si costruisce un ricevitore di webhook affidabile?
  4. Come associare i contatti tra i canali?
  5. Come gestire la privacy dei dati in un'integrazione con un CRM?
  6. Che aspetto ha un'architettura di riferimento?
  7. Esempio pratico: un gruppo di cliniche di Gedda
  8. Quali sono gli errori più comuni?
  9. Come vi aiuta OmniChannels.ai

Punti chiave

  • I webhook inviano eventi dalla inbox al CRM quasi in tempo reale; le API leggono dati o attivano azioni nell'altra direzione. Un'integrazione solida usa entrambi.
  • La consegna dei webhook è di solito at-least-once, quindi chi li riceve deve deduplicare per ID evento e tollerare eventi che arrivano fuori ordine.
  • Confermate rapidamente la ricezione dei webhook ed eseguite il lavoro sul CRM in una coda in background, così chiamate lente al CRM non provocano retry e duplicati.
  • Associate i contatti su identificativi normalizzati come numeri di telefono E.164 ed email in minuscolo, e non unite mai i record sul solo nome.
  • Inviate solo i dati di cui il CRM ha bisogno, tenete i contenuti dei messaggi fuori dal CRM dove basta un riepilogo e rispettate la normativa privacy applicabile, come il GDPR o le leggi sulla protezione dei dati di Emirati e Arabia Saudita.

Questa guida è rivolta a CTO, solution architect e amministratori CRM che vogliono che CRM e inbox omnicanale condividano un'unica visione del cliente. Spiega quali eventi sincronizzare, come costruire un ricevitore di webhook che regga retry e duplicati, come associare i contatti tra WhatsApp, Instagram ed email e quali regole di privacy condizionano la progettazione.

Cosa devono scambiarsi un CRM e una inbox omnicanale?

La inbox dovrebbe dire al CRM chi vi ha contattato, su quale canale, per quale motivo e con quale esito. Il CRM dovrebbe dire alla inbox chi è il cliente, chi ne è responsabile e quale contesto serve agli operatori.

Direzione Dati Uso tipico
Dalla inbox al CRM Nuova conversazione, canale, identificativi del contatto Creare o aggiornare il contatto, registrare l'attività
Dalla inbox al CRM Cambi di assegnazione e di stato, risoluzione Aggiornare la cronologia di caso o trattativa, riportare i tempi di gestione
Dalla inbox al CRM Stato di consegna dei template in uscita Monitorare gli esiti di campagne o notifiche
Dal CRM alla inbox Nome del contatto, lingua, responsabile dell'account, livello Smistamento e personalizzazione
Dal CRM alla inbox Trigger per inviare un template approvato Aggiornamenti di ordine, appuntamento o caso
Dal CRM alla inbox Cambio di assegnazione Instradare i clienti ricorrenti al loro account manager

Partite dall'insieme più piccolo che supporti un flusso di lavoro reale. Sincronizzare nel CRM il testo di ogni messaggio è raramente necessario e aumenta l'esposizione sul fronte privacy.

A quali eventi webhook conviene iscriversi?

Iscrivetevi agli eventi del ciclo di vita, non solo ai messaggi. I nomi esatti degli eventi differiscono da piattaforma a piattaforma, quindi associateli a queste categorie:

  • Conversazione creata — primo messaggio di un cliente su qualsiasi canale.
  • Messaggio ricevuto — messaggio in ingresso del cliente, con canale e identificativo del mittente.
  • Messaggio inviato — messaggio in uscita di un operatore o template.
  • Stato del messaggio — inviato, consegnato, letto o fallito, dove il canale lo riporta.
  • Conversazione assegnata — cambiati responsabile o coda.
  • Conversazione risolta o riaperta — transizioni di stato.
  • Contatto aggiornato — identificativi o attributi modificati nella inbox.

Per WhatsApp, i webhook di Meta consegnano alla piattaforma i messaggi in ingresso e gli aggiornamenti di stato dei messaggi in uscita; il vostro provider di inbox espone poi i propri eventi ai vostri sistemi.

Come si costruisce un ricevitore di webhook affidabile?

Accettate in fretta, verificate, salvate una volta, elaborate dopo. La maggior parte dei problemi di consegna nasce dal fare il lavoro sul CRM dentro la richiesta del webhook.

Progettazione del ricevitore passo dopo passo

  1. Esponete un endpoint HTTPS per ambiente, ad esempio /webhooks/inbox.
  2. Verificate l'autenticità. Controllate la firma (di solito un HMAC del corpo grezzo con un segreto condiviso, come definito nell'RFC 2104) o il token documentato dal mittente. Calcolatela sui byte grezzi prima di fare il parsing del JSON.
  3. Controllate la freschezza. Se è incluso un timestamp, rifiutate gli eventi fuori da una breve tolleranza per limitare i replay.
  4. Deduplicate. Inserite l'ID dell'evento in una tabella con un vincolo di unicità. Se l'inserimento fallisce perché l'ID esiste già, restituite successo e fermatevi.
  5. Mettete in coda. Inserite l'evento in una coda e restituite subito una risposta 2xx.
  6. Elaborate in modo asincrono. Un worker legge la coda, associa il contatto e scrive nel CRM con upsert.
  7. Riprovate con backoff. Se il CRM non è raggiungibile, riprovate dalla vostra coda con backoff esponenziale; non contate sui retry del mittente.
  8. Dead-letter. Dopo diversi fallimenti, spostate l'evento in una dead-letter queue e avvisate una persona.
  9. Riconciliate. Eseguite un processo periodico che confronta le conversazioni recenti della inbox con i record del CRM e colma le lacune tramite l'API della inbox.

Perché idempotenza e ordinamento contano

I mittenti di webhook di solito ritentano quando non ricevono una risposta di successo tempestiva, il che rende la consegna at-least-once. Lo stesso evento può arrivare due volte e un evento "risolto" può arrivare prima dell'ultimo "messaggio ricevuto". Gestitelo così:

  • Usate l'ID evento come chiave di deduplicazione.
  • Usate upsert con chiave sull'ID di conversazione o di messaggio nel CRM.
  • Confrontate timestamp o numeri di sequenza degli eventi e ignorate lo stato più vecchio.

Quando il flusso di lavoro del CRM chiama l'API della inbox per inviare un messaggio, passate una chiave di idempotenza se l'API la prevede; la bozza IETF per l'intestazione HTTP Idempotency-Key descrive lo schema più diffuso.

Come associare i contatti tra i canali?

Associate su identificativi normalizzati, preferite le corrispondenze deterministiche e affidate l'ambiguità a una persona.

Identificativo Normalizzare come Affidabilità della corrispondenza Note
Numero di telefono WhatsApp o SMS E.164, ad esempio +9715XXXXXXXX Alta Attenzione ai formati locali con zero iniziale
Indirizzo email Minuscolo, senza spazi Alta Gli alias possono essere la stessa persona; non darlo per scontato
Account Instagram ID utente specifico della piattaforma Alta all'interno di quell'account Gli handle possono cambiare; conservate l'ID, non solo l'handle
Utente Telegram ID utente della piattaforma Alta all'interno di quel bot o account Il telefono potrebbe non essere condiviso
Nome Non usato da solo Bassa Non unite mai in base al nome

Regole decisionali:

  1. Una corrispondenza esatta: collegare.
  2. Nessuna corrispondenza: creare un lead o un "contatto non associato" con il canale di origine.
  3. Più corrispondenze: segnalare a un operatore, nessuna unione automatica.
  4. Il cliente conferma un altro identificativo durante la conversazione: collegarlo con una nota sull'evidenza.

Come gestire la privacy dei dati in un'integrazione con un CRM?

Spostate solo ciò che serve a ciascun sistema, documentate il perché e fate in modo che la cancellazione funzioni su entrambi i sistemi.

  • Minimizzazione dei dati. Conservate nel CRM link alle conversazioni, esiti e riepiloghi; tenete le trascrizioni complete nella inbox, salvo una finalità definita.
  • Base giuridica e consenso. Registrate l'opt-in al marketing per canale; una conversazione di assistenza non è consenso a template di marketing.
  • Conservazione. Allineate i periodi di conservazione in inbox, CRM, code e log; i log dei payload dei webhook sono spesso dimenticati.
  • Controllo degli accessi. Limitate chi può vedere contenuti e allegati dei messaggi nel CRM.
  • Richieste di cancellazione e di accesso. Fate in modo che una richiesta in un sistema si propaghi all'altro.
  • Trasferimenti transfrontalieri. Verificate dove ciascun sistema archivia i dati. Il GDPR si applica ai dati personali delle persone nell'UE, e gli Emirati Arabi Uniti e l'Arabia Saudita hanno proprie leggi sulla protezione dei dati personali; confermate gli obblighi attuali con il regolatore competente e con il vostro team legale.

Che aspetto ha un'architettura di riferimento?

In forma testuale, il flusso è: dai canali alla inbox, dalla inbox al ricevitore, dal ricevitore alla coda, dalla coda al worker, dal worker al CRM e dai flussi di lavoro del CRM di nuovo all'API della inbox.

Componente Responsabilità Scelta progettuale chiave
Canali (WhatsApp, Instagram, email, Telegram) Consegnare i messaggi dei clienti alla inbox Regolati dalle norme di ciascuna piattaforma
Inbox omnicanale Conversazioni, assegnazione, operatori, eventi Emette webhook; espone l'API
Ricevitore di webhook Verificare, deduplicare, mettere in coda Senza stato, risposta 2xx rapida
Archivio eventi e coda Buffer durevole, riesecuzione ID evento univoco, dead-letter queue
Worker di sincronizzazione Associazione dei contatti, upsert sul CRM Scritture idempotenti, backoff
CRM Contatti, trattative, casi, flussi di lavoro Chiama l'API della inbox con chiavi di idempotenza
Processo di riconciliazione Rilevare e riparare le lacune Eseguito a intervalli programmati
Monitoraggio Ritardi, errori, dead letter Avvisi a un responsabile

Esempio pratico: un gruppo di cliniche di Gedda

"Wahat Clinics", gruppo sanitario fittizio in Arabia Saudita, usa un CRM per gli appuntamenti dei pazienti e una inbox per WhatsApp ed email.

  • Un paziente scrive su WhatsApp. La inbox emette un evento di conversazione creata; il ricevitore lo verifica, lo salva e lo mette in coda.
  • Il worker normalizza il numero in E.164, trova un solo record paziente e registra un'attività con un link alla conversazione, non con il testo del messaggio.
  • Il CRM indica l'arabo come lingua preferita del paziente e la invia alla inbox, che instrada alla coda in arabo.
  • Quando l'appuntamento viene prenotato nel CRM, un flusso di lavoro chiama l'API della inbox per inviare una conferma con un template di utilità approvato, passando l'ID dell'appuntamento come chiave di idempotenza, così un retry non può inviare due conferme.
  • L'evento "messaggio consegnato" della inbox aggiorna il record dell'appuntamento.

Quali sono gli errori più comuni?

  • Eseguire scritture sul CRM dentro la richiesta del webhook, causando timeout, retry e duplicati.
  • Nessuna deduplicazione, con attività e contatti duplicati.
  • Associare numeri di telefono non normalizzati, per cui i formati +971 e con zero iniziale non si incontrano mai.
  • Unire automaticamente su nome o corrispondenze parziali.
  • Copiare nel CRM tutto il contenuto dei messaggi senza finalità né regola di conservazione.
  • Nessuna riconciliazione, così un evento perso diventa una deriva permanente.
  • Segreti nel codice sorgente e nessun piano di rotazione.

Come vi aiuta OmniChannels.ai

OmniChannels.ai, sviluppata da BroadNet Technologies, riunisce le conversazioni di WhatsApp, Instagram, Messenger, Telegram ed Email in un'unica Omni Inbox con assegnazione agli operatori ed etichettatura, oltre all'attivazione di WhatsApp tramite Meta Embedded Signup e a template approvati con variabili, contenuti multimediali e pulsanti. Per l'integrazione con il CRM, l'API REST è documentata pubblicamente con una specifica OpenAPI 3.1 e i webhook riportano gli stati di consegna (SENT, DELIVERED, READ, FAILED e altri) in un unico formato normalizzato. I rapporti di consegna (DLR) con filtri ed esportazione CSV supportano la riconciliazione. Partite dalla pagina sviluppatori.

Domande frequenti

Qual è la differenza tra webhook e API per l'integrazione con un CRM?

Un webhook è una richiesta HTTP che la inbox invia al vostro endpoint quando succede qualcosa, come un nuovo messaggio o la chiusura di una conversazione. Un'API è qualcosa che il vostro sistema chiama per leggere dati o eseguire azioni, come inviare una risposta o riassegnare una conversazione. I webhook mantengono il CRM aggiornato senza polling; le API permettono ai flussi di lavoro del CRM di agire sulla inbox.

Che cosa significa idempotenza per i webhook?

Idempotenza significa che elaborare due volte lo stesso evento ha lo stesso effetto che elaborarlo una volta. Poiché i mittenti dei webhook ritentano quando non ricevono una risposta di successo tempestiva, il vostro endpoint può ricevere duplicati. Salvate l'ID univoco di ogni evento, saltate gli ID già elaborati e progettate le scritture sul CRM come upsert, così un evento ripetuto non può creare una seconda attività o un secondo contatto.

Come si associa un numero WhatsApp a un contatto del CRM?

Normalizzate entrambi i lati nel formato internazionale E.164, con prefisso del Paese e senza spazi né zeri iniziali, poi cercate nel CRM con quel valore. Se corrisponde esattamente un contatto, collegatelo. Se non ne corrisponde nessuno, create un lead o un contatto non associato. Se ne corrispondono diversi, non tirate a indovinare: segnalate la conversazione a un operatore perché scelga, e registrate la decisione per la volta successiva.

Le trascrizioni complete delle chat vanno conservate nel CRM?

Solo se avete una finalità chiara e una base giuridica. Molti team conservano nel CRM un link alla conversazione, un riepilogo, l'esito e gli orari, mentre la trascrizione completa resta nella inbox con propri controlli di accesso e periodo di conservazione. Ciò riduce la duplicazione di dati personali e rende più semplice evadere le richieste di cancellazione secondo leggi come il GDPR.

Come proteggere gli endpoint dei webhook?

Esponete l'endpoint solo su HTTPS, verificate la firma o il segreto condiviso che il mittente include in ogni richiesta, rifiutate le richieste con timestamp vecchi per limitare i replay e conservate i segreti in un gestore di segreti anziché nel codice. Limitate ciò che l'endpoint può fare: deve solo mettere in coda gli eventi, non esporre dati del CRM né accettare comandi arbitrari.

Fonti

  1. Webhooks — WhatsApp Cloud API, Meta for Developers
  2. The Idempotency-Key HTTP Header Field — IETF HTTPAPI Working Group draft
  3. RFC 2104: HMAC — Keyed-Hashing for Message Authentication
  4. Regulation (EU) 2016/679 (GDPR) — EUR-Lex
  5. Data protection laws — The UAE Government portal (u.ae)