clickSomo

Kontakter og samtykke

En liste du kan forsvare, ikke bare en liste du har

Alle kan ha ti tusen e-postadresser. Spørsmålet som betyr noe – det som en tilsynsmyndighet, en leverandør og din egen samvittighet stiller i litt ulike ord – er hvor hver av dem kommer fra og på hvilket grunnlag du kan skrive til dem. ClickSomo gjør dette til en lagret fakta i stedet for noe du må rekonstruere.

Identiteten er e-postadressen

Én kontakt per adresse per prosjekt, håndhevet av databasen og ikke av håp. Adresser normaliseres når de skrives, aldri når de leses – normaliserer du ved lesing er begrensningen bare pynt som slipper inn både Anna@ og anna@.

Telefonnumre lagres i E.164 der de finnes, men et telefonnummer er en egenskap, ikke en identitet. Det finnes ingen identitetsoppløsningsgraf, ingen sammenslåingsprotokoll og ingen revisjonsspor av sammenslåinger, fordi hver kontakt her kommer inn via en kanal som allerede har en adresse: en import, et skjema, en påmelding eller din egen kode.

Navnet lagres som helhet

display_name beholdes nøyaktig slik det ble oppgitt og deles aldri opp i deler. Navnsplitting er en feilfabrikk – «van der Berg», «Kim Min-jun», mononymer, titler og alle konvensjoner for rekkefølge som ikke er engelsk – og en feil splitting dukker opp i en flettekode som «Kjære van,», noe som er verre enn ingen personalisering i det hele tatt.

Strukturerte deler finnes bare for kilder som allerede leverer dem adskilt. Ingenting utleder dem. Og et navn noen selv har skrevet inn blir aldri overskrevet av en senere CSV som tilfeldigvis registrerte noe annet, fordi «sist skriver vinner» lar den slurvete importen vinne.

Én kontaktHva som lagres
  • 1IdentitetE-post, normalisert. Unik innenfor prosjektet.
  • 2NavnLagres som helhet. first_name utledes ved visning, lagres aldri.
  • 3EgenskaperHva du vil, som JSON. Dine, og kan interpoleres som attrs.*.
  • 4Etiketter og listerEtiketter er førsteklasses og ligger i ett lager; lister er eksplisitt medlemskap.
  • 5Saklig grunnlagÉn rad per kanal, med et lovlig grunnlag og dets bevis.
  • 6HendelserEn logg som bare utvides, over alt denne personen gjorde. Tabellen produktet hviler på.
  • ×AldriIngen passord, ingen hash, ingen økt, ingen API-nøkkel. En kolonne som autentiserer noen ville vært en hendelse, ikke en funksjon.

Avgrenset til både leietaker og prosjekt

Samtykkeregisteret

Fravær er ikke tillatelse

Én rad per kontakt per kanal – e-post, SMS, brev, push – hver med en tilstand, et lovlig grunnlag, en kilde, beviset, tidsstemplene og jurisdiksjonen. En kontakt uten grunnlagsrad for en kanal kan ikke sendes noe på den kanalen. Ikke «er flagget». Kan ikke.

consent

Noen har aktivt samtykket. En innsending via skjema med beviset lagret, en dobbel påmelding, en avkrysningsboks de selv huket av. Dette er det sterkeste grunnlaget, og det eneste et skjema kan produsere.

legitimate_interest

Det beste en CSV-import kan ende som. Et regneark kan ikke huske at noen samtykket til noe, så det får aldri hevde at de gjorde det – og å laste opp samme fil på nytt oppgraderer det ikke.

contract

Du skriver til dem på grunn av noe dere begge er part i. Servicemeldingen, fornyelsesvarselet, det de ville blitt irritert over ikke å motta.

Før en kampanje sendes, ser du grunnlagsfordelingen i målgruppen: hvor mange av disse personene som har bedt om det, hvor mange du når under berettiget interesse, og hvor mange som er der på grunn av en kontrakt. Det er ett tall som har stoppet flere dårlige utsendelser enn noe advarselsbånd noensinne.

Hvorfor dette er strengere enn nødvendig for deg: det handler egentlig ikke om deg. Omdømmet for masseutsendelser er en felles ressurs, og én uaktsom liste forgifter brønnen for alle som sender fra samme infrastruktur. Klage- og returfrekvenser per leietaker overvåkes, og en konto hvis frekvenser overskrider terskelen blir strupet her – før en leverandør gjør det for alle samtidig.

Bak hver rad i listen har noen sagt ja.

Fire veier inn

Hver vei inn i listen din er deg, som handler på egne data

Det finnes ingen inntakslane for tjenestetokens og intet søsterprodukt som stille skriver til kontaktene dine. Vil du ha noen på en liste, er det én av disse fire som har plassert dem der.

CSV-import

Kolonnetilkolonne mappet, normalisert ved skriving, MX-sjekket slik at døde og feilstavede domener fanges opp før de gir hard retur, og landet med et grunnlag du angir eksplisitt. Importen får en id, og hver kontakt den opprettet peker tilbake på den.

Et ClickSomo-skjema

Generert fra samme dokument som alt annet, med validering, honeypot og hastighetsgrense. En innsending er den eneste ruten som kan produsere consent på gyldig måte, fordi det er den eneste der personen faktisk er til stede.

En side du bygde i dash-b

Dashboard-designeren publiserer sider; et skjema på en av dem poster hit med dine egne legitimasjopplysninger. Samme validering, samme håndtering av samtykke, ingen ekstra integrasjon å vedlikeholde.

Det offentlige API-et

POST /v1/contacts med din egen token, upsert-semantikk, idempotensnøkkel respektert. Appen din vet allerede hvem som meldte seg på; dette er den korteste veien fra det faktum til en trakt.

Segmenter er et predikat, kompilert

Et segment er et lagret predikat-tre over kontaktfelter, attributter, tagger, listemedlemskap og atferd, kompilert til SQL og cachet med et antall. Operatorene er de vanlige — equals, not equals, in, not in, starts with, ends with, contains, is set, is not set — kombinert med and, or og not til den dybden du trenger.

Forhåndsvis det før du bruker det. Endepunktet returnerer ekte kontakter, så «hvem er faktisk i dette» er et spørsmål du svarer på ved å se, ikke ved å sende og finne ut.

Segmenter gjør deretter dobbelttjeneste: som målgruppe for en kampanje, som betingelse på en traktgren, og som utløser i seg selv — segment_enter starter en kjøring i det øyeblikket noen blir kvalifisert.

Stille fastbrukereSegmentforhåndsvisning · 412
  • 1Taggtags contains "regular"
  • 2Attributtattrs.total_orders >= 3 — ditt felt, ditt navn på det.
  • 3AtferdIngen order.paid-hendelse de siste 90 dagene.
  • 4SamtykkeEt brukbart e-postgrunnlag. Kontakter uten en telles ikke med, for de kunne uansett ikke blitt sendt til.
  • iForhåndsvisning412 kontakter, listet opp. Telles på nytt ved utsendelse, for et segment er et spørsmål og ikke et øyeblikksbilde.

Kompilert til SQLAntall cachet, svaret levende

Undertrykkelse, og når den sjekkes

Undertrykkelser er prosjektomfattende og globale: harde retur, klager, oppsigelser av abonnement, manuelle oppføringer og rolleadresser. De sjekkes ved utsendelsestidspunktet, og deretter igjen inne i selve utsendelsestjenesten.

Det andre ordet er det som gjør jobben. En trakt med en tre dagers venting i seg har et vindu på tre dager der noen kan melde seg av, og et system som sjekket undertrykkelse da meldingen ble lagt i kø, sender likevel til dem. Å sjekke ved utsendelse er forskjellen mellom å respektere en oppsigelse og å registrere en.

Sletting fungerer på samme måte: en slettingsforespørsel fjerner kontakten og meldingshistorikken deres her, og når alle søstertjenester som holdt en kopi, via samme interne kanal som resten av familien bruker. Det er ett sted å spørre og én ting som skjer.