La Timeline del Cliente e gli Eventi dal tuo Gestionale
La Timeline è il racconto di cosa è successo a un cliente, in ordine di tempo: quando il contratto è partito, quando è stato messo in pausa, quando un pagamento è arrivato e con quanti giorni di ritardo, quando gli è stata mandata una notifica. Non devi ricordarti di scriverci nulla: si riempie da sola.
E se il tuo gestionale sa cose che SalesControl non può sapere — una call di onboarding fissata, un accesso consegnato, una campagna approvata — puoi fargliele raccontare con un webhook: ogni evento che invii diventa una riga della Timeline, con la sua data e ora.
La Timeline e i webhook eventi richiedono un piano a pagamento (dal piano Starter in su). Vedi i Piani di Abbonamento.
Dove si trova
Apri un cliente dalla lista Clienti e scegli la scheda Timeline. Ogni riga porta l’evento e il momento in cui è stato registrato, nel tuo fuso orario.
È una cosa diversa dalla scheda Logs: quella è il registro tecnico completo, riservato a chi ha il permesso di vedere i log, e contiene anche importi e dettagli interni. La Timeline racconta i fatti del rapporto con quel cliente, senza i dettagli riservati: per questo la vede tutto il team.
Quello che si registra da solo
Senza configurare nulla, finiscono in Timeline gli eventi che SalesControl già conosce:
- Il contratto: creato, partito, rinnovato, messo in pausa e ripreso, scaduto, chiuso. La scadenza tiene conto delle pause, quindi è quella vera, non quella teorica.
- Il contratto mandato alla firma: Contratto inviato alla firma, una voce Contratto aperto dal cliente per ogni apertura del link (dalla seconda in poi col numero, “apertura n. 2”, poi il luogo e il tempo di lettura quando ci sono), Contratto firmato, Invio del contratto annullato se lo annulli, Offerta scaduta senza firma se il link scade prima della firma, Contratto abbandonato e Contratto ripristinato se lo sposti fra gli Abbandonati e lo riporti indietro (queste due sono organizzazione interna: non finiscono nel PDF né nella chat del cliente). Se il contratto era stato mandato al lead, alla conversione queste voci passano al cliente come le altre. Il dettaglio di ogni apertura è nello storico delle aperture.
- I pagamenti: incassati (con i giorni di ritardo, se ce ne sono stati), segnati come non pagati, stornati, riconciliati da Stripe.
- La prova: attivazione delle campagne, esito superato o fallito.
- I cambi importanti del contratto: quando cambia il servizio, la durata, il valore, il tipo di pagamento, la data di inizio o il prezzo — cioè ogni volta che le rate vengono ricostruite.
- Le notifiche inviate: una riga per invio, con i canali su cui è davvero arrivata.
- La storia da lead: se il cliente nasce dalla conversione di un lead, al momento della conversione l’intera storia della fase lead viene copiata qui con le date originali — Lead creato (con la fonte), Appuntamento fissato, Appuntamento spostato o Appuntamento annullato, gli eventuali Lead perso e Lead riaperto, fino a Lead convertito in cliente. Le riassegnazioni e i follow-up pianificati vengono travasati anch’essi, ma restano visibili solo nella scheda Logs: sono organizzazione interna, non fatti del cliente.
Quella storia è una copia, non un collegamento: se il lead viene poi eliminato, gli eventi travasati sul cliente restano dove sono. E una seconda conversione dello stesso lead non crea doppioni.
La Timeline parte dal 19 agosto 2026: gli eventi anteriori non vengono ricostruiti a posteriori. Un contratto firmato a giugno non avrà la riga “contratto partito”, ma da qui in avanti tutto viene registrato. La storia da lead ha una data di nascita sua: il suo registro esiste dal 28 agosto 2026, quindi un lead lavorato prima porta in dote solo ciò che è stato registrato da quel giorno in poi.
Gli eventi dall’ecosistema (GodAds)
Se la tua agenzia usa anche GodAds e le due piattaforme sono collegate tramite l’Ecosistema, nella Timeline possono comparire anche gli eventi che arrivano da lì. Toccano solo i clienti che SalesControl riconosce con certezza (gli altri aspettano nella lista Clienti non abbinati della card Ecosistema, dove li abbini a mano) e dipendono da due interruttori che l’Admin trova nella stessa card, entrambi spenti finché non li attiva.
- Campagne lanciate (GodAds) — con l’automazione Campagne lanciate → prova cliente attiva, quando GodAds lancia le campagne di un cliente abbinato la riga entra in Timeline. Se il cliente è in prova attiva e la data “campagne attivate” è ancora vuota, viene valorizzata da sola con la data del lancio (compare anche la riga Campagne attivate); una data già impostata a mano non viene mai sovrascritta, e l’esito della prova non viene mai toccato.
- Gli eventi informativi — con Eventi informativi da GodAds attivo entrano come sole righe di racconto, mai un’azione: Wallet ads in esaurimento (GodAds), Wallet ads esaurito (GodAds), Campagne messe in pausa manualmente (GodAds), Campagne riattivate manualmente (GodAds), Eliminazione campagne programmata (GodAds), Eliminazione campagne annullata (GodAds), Campagne eliminate (GodAds). Attenzione alla parola: “eliminazione” si riferisce sempre alle campagne del cliente, mai al cliente.
Come si collega l’ecosistema, come si accendono le automazioni e come si abbinano gli eventi in attesa è spiegato in Collegare SalesControl all’Ecosistema (GodAds).
Portare gli eventi del tuo gestionale
Nel Pannello Admin, scheda Integrazioni, la card Eventi personalizzati crea gli indirizzi a cui il tuo gestionale può mandare quello che succede.
Se hai collegato l’app GoHighLevel non serve un webhook per ogni evento: nella card Eventi da tag GoHighLevel decidi quale tag, aggiunto a un contatto del sotto-account dell’agenzia o di un cliente, scrive quale evento nella Timeline. Gli eventi da tag che non trovano il cliente finiscono nella stessa coda qui sotto, con l’etichetta tag GHL.
Nuovo webhook, dagli un nome che ti ricordi a cosa serve (“Onboarding”, “Accessi consegnati”). Puoi crearne quanti ne vuoi: uno per tipo di evento tiene le automazioni ordinate.
Finisce con /functions/v1/client-event-intake?t=…. La parte dopo t= è il token di quel webhook: chi lo possiede può scrivere eventi nella tua agenzia, quindi trattalo come una credenziale.
In GoHighLevel: in un workflow aggiungi l’azione Webhook, metodo POST, e aggiungi i campi personalizzati. In Zapier o Make: una richiesta POST allo stesso indirizzo con un corpo JSON.
La voce Come configurarlo apre due esempi JSON già pronti, uno per ciascuno dei due casi spiegati qui sotto, ognuno col suo pulsante di copia.
Due casi, due template: chi sta inviando?
È il punto più importante da capire, e l’unico dove si può sbagliare in modo silenzioso.
Se il workflow parte dal sotto-account del cliente
È il caso normale: il cliente ha il suo sotto-account in GoHighLevel e l’automazione gira lì. Le variabili della location indicano proprio lui, quindi bastano quelle:
{
"event": "Contratto firmato",
"location_id": "{{location.id}}",
"location_name": "{{location.name}}",
"external_event_id": ""
}
Al primo evento SalesControl riconosce il cliente dal nome e impara l’identificativo del sotto-account: da quel momento gli eventi successivi lo trovano subito, anche se il nome nel gestionale cambia.
Se il workflow parte dal sotto-account dell’agenzia
Alcune procedure che riguardano un cliente girano dal tuo sotto-account: una call di onboarding che prenoti tu, per dire. Lì la variabile della location è l’agenzia, non il cliente. Dichiaralo con location_type e indica il cliente per nome:
{
"event": "Onboarding prenotata",
"location_type": "agenzia",
"cliente_nome": "Nome del cliente",
"contact_id": "{{contact.id}}",
"external_event_id": ""
}
Il contact_id è ciò che rende automatici gli invii successivi. Nel tuo sotto-account i contatti sono i tuoi clienti: al primo evento SalesControl riconosce il cliente dal nome e impara quel contatto; da allora il nome non serve più, e l’evento arriva a destinazione anche se in GoHighLevel il cliente viene rinominato. Se non lo mandi, funziona lo stesso: ogni volta si tornerà a confrontare il nome.
Senza quella dichiarazione, SalesControl prenderebbe la location dell’agenzia per quella del cliente e la collegherebbe al primo cliente riconosciuto per nome. Da quel momento ogni evento inviato dal tuo sotto-account — anche quelli di altri clienti — finirebbe addosso a lui, senza nessun errore visibile. Con location_type impostato a agenzia la location viene conservata ma ignorata: né cerca il cliente né viene mai collegata.
Il valore da scrivere è agenzia (va bene anche agency). Dai sotto-account dei clienti il campo si omette: l’assenza significa già “sono il cliente”.
I campi accettati
| Campo | Chiavi riconosciute | A cosa serve |
|---|---|---|
| Nome dell’evento | event, evento, event_name, tipo_evento, azione | Il testo che comparirà in Timeline. Se il webhook ha un nome evento predefinito, può anche mancare. |
| Identificativo del sotto-account | location_id, ghl_location_id, sub_account_id, account_id | Il sotto-account del cliente. Al primo aggancio viene collegato e poi basta lui. |
| Nome del sotto-account | location_name, nome_location, sub_account, account_name | Serve al primo aggancio, per riconoscere il cliente dal nome. |
| Tipo di sotto-account | location_type, tipo_location | Scrivi agenzia quando invii dal tuo sotto-account. Omettilo negli altri casi. |
| Cliente | cliente_nome, customer_name, client_name, customer_name, oppure cliente_id | Indica il cliente per nome. È la strada da usare quando invii dall’account dell’agenzia. |
| Contatto | contact_id, ghl_contact_id, id_contatto | Solo dagli invii dell’agenzia: il contatto che rappresenta il cliente. Viene collegato al primo aggancio e poi basta lui. |
| Id dell’evento | external_event_id, event_id, idempotency_key | Chiave anti-doppioni: se lo stesso identificativo torna, l’evento non viene registrato due volte. |
I nomi si leggono senza distinzione tra maiuscole e minuscole. In GoHighLevel i valori personalizzati del workflow finiscono dentro customData: il webhook legge sia quelli, sia il livello principale, sia contact — e un campo personalizzato lasciato vuoto non cancella il valore standard con lo stesso nome.
La data e l’ora sono quelle in cui l’evento arriva, prese dall’orologio del server: è ciò che rende la Timeline una prova e non una dichiarazione. Se vuoi registrare che qualcosa è avvenuto davvero, manda un secondo evento nel momento in cui avviene — per esempio “Onboarding prenotata” quando la si prenota e “Onboarding fatta” quando si tiene.
Come l’evento trova il cliente
- Se il sotto-account è già collegato a un cliente, l’abbinamento è immediato.
- Altrimenti si confronta il nome, ignorando maiuscole, accenti e spazi doppi. Un solo cliente corrispondente: abbinato, e il collegamento viene imparato. Più clienti possibili, o nessuno: l’evento resta in attesa.
- Quando l’evento arriva dall’account dell’agenzia valgono le stesse regole, ma con l’altra chiave: si guarda il contatto se è già collegato, altrimenti il nome del cliente — e il collegamento che si impara è quello del contatto, mai quello della location.
Le due non si scambiano mai di posto, ed è voluto. Nel sotto-account di un cliente la location è lui, mentre i contatti sono i suoi lead: impararne uno significherebbe scambiare un lead per il cliente. Nel tuo sotto-account è l’opposto — la location sei tu, i contatti sono i tuoi clienti.
La coda degli eventi da associare
Gli eventi che non trovano un cliente non si perdono: restano nella card Eventi personalizzati, sotto Eventi da associare, con il nome e l’identificativo arrivati. Scegli il cliente e conferma: l’evento entra in Timeline con la sua data originale, non con quella di oggi.
Se l’evento portava un sotto-account del cliente, associandolo colleghi anche quello, e le altre righe in attesa con la stessa provenienza vengono sistemate insieme. Lo stesso vale per gli eventi arrivati dall’agenzia che portano un contact_id: associandone uno colleghi il contatto e le altre righe dello stesso contatto vengono sistemate insieme. Se invece il contatto non c’era, quegli eventi si associano uno per uno: la location dell’agenzia non appartiene a nessun cliente e non può fare da criterio per gli altri.
Il collegamento al gestionale
Quando un cliente è collegato a un sotto-account, nella sua Timeline compare l’etichetta Collegato al gestionale con il pulsante Scollega. Se è collegato anche a un contatto — cioè se ricevi suoi eventi dal tuo sotto-account — compare accanto l’etichetta Collegato al contatto, con il suo Scollega.
Scollegando, gli eventi che arrivavano per quella via smettono di agganciarsi da soli e torneranno nella coda di associazione — quelli già registrati restano dove sono. I due collegamenti sono indipendenti: puoi disfarne uno e tenere l’altro. Serve quando un collegamento è stato imparato sul cliente sbagliato, o quando un cliente cambia sotto-account.
Mostrare gli eventi nella chat del cliente
Gli eventi possono comparire anche nella chat con il cliente, come annotazioni al centro della conversazione — non come messaggi di qualcuno. Il cliente vede solo il nome dell’evento, mai i dettagli.
- La preferenza dell’agenzia si imposta in Impostazioni › Chat di supporto cliente, nella card Eventi nella chat, con la levetta Mostra gli eventi nella chat dei clienti, e vale per tutti.
- Nella stessa card scegli quali eventi compaiono: ce n’è una levetta per ciascuno, raggruppati in Contratto, Prova e campagne, Pagamenti e Personalizzati. Di serie sono tutti accesi; quelli che spegni non compaiono in nessuna chat, nemmeno nei clienti in cui gli eventi sono accesi uno per uno.
- Gli eventi dei webhook si possono scegliere anche per nome: sotto la levetta Evento, in Per nome di evento, trovi ogni nome ricevuto dai tuoi webhook, con quante volte è arrivato e la data dell’ultimo. Spegni un nome e i suoi eventi restano solo in Timeline; con Evento spento non compare nessuno di loro. Un nome compare nell’elenco dopo il primo evento ricevuto.
- Sul singolo cliente, nella sua Timeline, puoi scegliere Sempre o Mai, oppure lasciare Come l’agenzia.
Solo alcuni eventi possono arrivare in chat: i passi della firma, gli appuntamenti, la storia da lead e le correzioni interne restano sempre e solo in Timeline.
Portare la Timeline fuori
- Scarica PDF genera il registro stampabile, utile da allegare a un rendiconto o da portare a una riunione.
- Invia nel gruppo pubblica il riepilogo nella chat del cliente. Il messaggio non può essere cancellato, quindi la conferma ti dice prima quanti eventi verranno inviati.
Se qualcosa non funziona
- Il tuo strumento riceve un 404: l’indirizzo è sbagliato o incompleto, il token è stato rigenerato, oppure il webhook è disattivato.
- Errore 403: l’agenzia è sul piano Free, che non include gli eventi personalizzati.
- Errore 422: manca il nome dell’evento e il webhook non ne ha uno predefinito.
- Gli eventi arrivano ma restano tutti in coda: probabilmente il nome che invii non coincide con quello con cui il cliente è registrato qui. Associane uno a mano: il collegamento viene imparato e i successivi si sistemano da soli.
- Gli eventi di clienti diversi finiscono tutti sullo stesso cliente: stai inviando dal sotto-account dell’agenzia senza
location_type. Aggiungilo al workflow, poi apri il cliente sbagliato e usa Scollega nella sua Timeline. - La scheda Timeline non compare: il piano non la include.