Kontakter & samtykke
En liste, du kan forsvare – ikke bare en liste, du har
Alle kan have ti tusind e-mailadresser. Det spørgsmål, der tæller – det, som en myndighed, en udbyder og din egen samvittighed alle stiller i let forskellige ord – er, hvor hver enkelt kommer fra, og på hvilket grundlag du må skrive til den. ClickSomo gør det til en gemt kendsgerning i stedet for noget, du skulle rekonstruere.
Identiteten er e-mailadressen
Én kontakt pr. adresse pr. projekt, håndhævet af databasen og ikke af håb. Adresser normaliseres, når de skrives, aldrig når de læses – normaliserer man ved læsning, er begrænsningen kun pynt, der lader både Anna@ og anna@ komme ind.
Telefonnumre gemmes i E.164, hvor de findes, men et telefonnummer er en egenskab, ikke en identitet. Der er ingen identifikationsgraf, ingen fletteprotokol og ingen revisionsspor over fletninger, fordi hver kontakt her kommer gennem en kanal, der allerede har en adresse: en import, en formular, en tilmelding eller din egen kode.
Navnet gemmes som helhed
display_name gemmes præcis, som det blev angivet, og deles aldrig op. Navnesplitning er en fejlmaskine – "van der Berg", "Kim Min-jun", navne med ét ord, titler og enhver rækkefølgekonvention, der ikke er engelsk – og en forkert opdeling dukker op i et merge-tag som "Kære van,", hvilket er værre end ingen personalisering overhovedet.
Strukturerede dele findes kun for kilder, der allerede leverer dem adskilt. Intet udleder dem. Og et navn, som nogen selv har tastet ind, bliver aldrig overskrevet af en senere CSV, der tilfældigvis registrerede noget andet, for med sidste-skriv-vinder vinder den mest sløvede import.
- 1IdentitetE-mail, normaliseret. Unik inden for projektet.
- 2NavnGemt som helhed.
first_nameudledes ved visning og gemmes aldrig. - 3AttributterHvad du vil, som JSON. Dine egne, og kan interpoleres som
attrs.*. - 4Tags og listerTags er førsteklasses og ligger i ét lager; lister er eksplicit medlemskab.
- 5SamtykkeÉn række pr. kanal, med et lovligt grundlag og dets dokumentation.
- 6HændelserEn append-only-log over alt, hvad denne person gjorde. Tabellen, som produktet hviler på.
- ×AldrigIngen adgangskode, ingen hash, ingen session, ingen API-nøgle. En kolonne, der kan autentificere nogen, ville være en hændelse, ikke en funktion.
Afgrænset til både tenant og projekt
Samtykkeregistret
Fravær er ikke tilladelse
Én række pr. kontakt pr. kanal – e-mail, SMS, brev, push – hver med en tilstand, et lovligt grundlag, en kilde, dokumentationen, tidsstemplerne og jurisdiktionen. En kontakt uden grundlagsrække for en kanal kan ikke få noget sendt på den kanal. Ikke "er markeret". Kan ikke.
consent
Nogen har aktivt sagt ja. En formularindsendelse med gemt dokumentation, en dobbelt opt-in, et afkrydsningsfelt, de selv satte kryds i. Dette er det stærkeste grundlag, og det eneste, en formular kan give.
legitimate_interest
Det bedste, en CSV-import kan ende som. Et regneark kan ikke huske, at nogen har sagt ja til noget, så det må aldrig hævde det – og genindlæsning af samme fil ændrer det ikke.
contract
Du skriver til personen på grund af noget, I begge er part i. Servicermindelsen, fornyelsesbeskeden, det, personen ville være irriteret over ikke at modtage.
Før en kampagne sendes, ser du grundlagsfordelingen i dens målgruppe: hvor mange af disse personer har bedt om det, hvor mange du når under legitim interesse, og hvor mange er der på grund af en kontrakt. Det er ét tal, der har forhindret flere dårlige udsendelser end noget advarselsbanner nogensinde.
Hvorfor dette er strengere, end du behøver: det handler egentlig ikke om dig. Omdømmet for masseforsendelse er en fælles ressource, og én uansvarlig liste forgifter brønden for alle, der sender fra samme infrastruktur. Klage- og bounce-rater pr. tenant overvåges, og en konto, der overskrider grænsen, bliver droslet her – før en udbyder gør det for alle på én gang.

Bag hver række på listen har nogen sagt ja.
Fire veje ind
Hver vej ind på din liste er dig, der handler på dine egne data
Der er ingen service-token-indgangslane og intet søsterprodukt, der i stilhed skriver i dine kontakter. Hvis du vil have nogen på en liste, var det en af disse fire, der satte dem der.
CSV-import
Kolonne for kolonne afbildet, normaliseret ved skrivning, MX-tjekket, så døde og stavede domæner fanges, før de hard-bouncer, og landet med et grundlag, du selv angiver eksplicit. Importen får et id, og hver kontakt, den oprettede, peger tilbage på det.
En ClickSomo-formular
Genereret fra det samme dokument som alt andet, med validering, en honeypot og en hastighedsgrænse. En indsendelse er den eneste vej, der legitimt kan give consent, fordi det er den eneste, hvor personen er til stede.
En side, du har bygget i dash-b
Dashboard-designeren udgiver sider; en formular på en af dem poster hertil med dine egne legitimationsoplysninger. Samme validering, samme samtykkehåndtering, ingen anden integration at vedligeholde.
Den offentlige API
POST /v1/contacts med din egen token, upsert-semantik, idempotensnøgle respekteres. Din app ved allerede, hvem der tilmeldte sig; dette er den korteste vej fra det faktum til en tragt.
Segmenter er et prædikat, kompileret
Et segment er et gemt prædikattræ over kontaktfelter, attributter, tags, listemedlemskab og adfærd, kompileret til SQL og gemt i cache med et antal. Operatorerne er de almindelige — lig med, ikke lig med, i, ikke i, begynder med, ender med, indeholder, er sat, er ikke sat — kombineret med and, or og not i den dybde, du har brug for.
Forhåndsvis det, før du bruger det. Endpointet returnerer rigtige kontakter, så spørgsmålet "hvem er faktisk med her" besvarer du ved at kigge frem for at sende og finde ud af det.
Segmenter gør derefter dobbelttjeneste: som målgruppe for en kampagne, som betingelse på en tragtgren og som trigger i sig selv — segment_enter starter en kørsel i det øjeblik, nogen bliver berettiget.
- 1Tag
tags contains "regular" - 2Attribut
attrs.total_orders >= 3— dit felt, dit navn for det. - 3AdfærdIngen
order.paid-hændelse inden for de seneste 90 dage. - 4SamtykkeEt brugbart e-mailgrundlag. Kontakter uden et sådant tælles ikke med, for de kunne alligevel ikke sendes til.
- iForhåndsvisning412 kontakter, vist. Tælles igen ved afsendelse, for et segment er et spørgsmål og ikke et øjebliksbillede.
Kompileret til SQLAntal i cache, svar live
Undertrykkelse, og hvornår den tjekkes
Undertrykkelser er projektomfattende og globale: hårde afvisninger, klager, afmeldinger, manuelle indtastninger og rolleadresser. De tjekkes ved afsendelsestidspunktet, og derefter igen inde i selve afsendelsestjenesten.
Det andet tjek er det, der gør forskellen. En tragt med en tre dages ventetid har et tre dages vindue, hvor nogen kan melde sig af, og et system, der tjekkede undertrykkelse, da beskeden blev sat i kø, sender alligevel til dem. At tjekke ved afsendelse er forskellen mellem at respektere en afmelding og blot registrere en.
Sletning fungerer på samme måde: en anmodning om sletning fjerner kontakten og deres beskedhistorik her og når alle søstertjenester, der har en kopi, via samme interne kanal, som resten af familien bruger. Der er ét sted at spørge og én ting, der sker.