clickSomo
Otwórz ClickSomo

Kontakty i zgody

Lista, której da się bronić,a nie tylko lista, którą się ma.

Dziesięć tysięcy adresów może mieć każdy. Pytanie, które naprawdę ma znaczenie — a które regulator, dostawca i własne sumienie zadają nieco innymi słowami — brzmi: skąd wziął się każdy z nich i na jakiej podstawie wolno do niego pisać. W ClickSomo to zapisany fakt, a nie coś, co trzeba by odtwarzać z pamięci.

Tożsamością jest adres e-mail.

Jeden kontakt na adres w projekcie, pilnowany przez bazę danych, a nie przez dobre chęci. Adresy normalizujemy przy zapisie, nigdy przy odczycie — normalizacja przy odczycie zamienia ograniczenie w ozdobę i wpuszcza jednocześnie Anna@ i anna@.

Numery telefonów trzymamy w formacie E.164, jeśli są, ale numer to atrybut, a nie tożsamość. Nie ma tu grafu rozpoznawania tożsamości, protokołu scalania ani dziennika scaleń, bo każdy kontakt trafia tu kanałem, który adres już ma: import, formularz, zapis albo Twój własny kod.

Imię i nazwisko trzymamy w całości

display_name zostaje dokładnie tak, jak zostało podane, i nigdy nie jest dzielone na części. Dzielenie nazwisk to fabryka błędów — „van der Berg”, „Kim Min-jun”, jednoczłonowe imiona, tytuły i każda konwencja kolejności, która nie jest anglosaska — a zły podział wychodzi potem w personalizacji jako „Szanowna van,”, co jest gorsze niż brak personalizacji.

Osobne pola istnieją tylko dla źródeł, które podają je już rozdzielone. Nic ich nie wyprowadza. A imienia, które ktoś wpisał sam, nie nadpisuje później CSV, w którym akurat było coś innego — bo zasada „wygrywa ostatni zapis” oddaje zwycięstwo najbardziej niechlujnemu importowi.

Jeden kontaktCo przechowujemy
  • 1TożsamośćE-mail, znormalizowany. Unikalny w obrębie projektu.
  • 2Imię i nazwiskoW całości. first_name wyliczamy przy renderowaniu, nigdy nie zapisujemy.
  • 3AtrybutyCokolwiek chcesz, jako JSON. Twoje i dostępne w treści jako attrs.*.
  • 4Tagi i listyTagi są pełnoprawne i mieszkają w jednym miejscu; listy to jawne członkostwo.
  • 5ZgodyJeden wiersz na kanał, z podstawą prawną i dowodem.
  • 6ZdarzeniaDopisywany dziennik wszystkiego, co ta osoba zrobiła. Tabela, na której wisi cały produkt.
  • ×NigdyŻadnego hasła, skrótu, sesji ani klucza API. Kolumna, która kogoś uwierzytelnia, byłaby incydentem, a nie funkcją.

Ograniczone do najemcy i projektu jednocześnie

Rejestr zgód

Brak wpisu nie jest zgodą.

Jeden wiersz na kontakt i kanał — e-mail, SMS, list, push — a w nim stan, podstawa prawna, źródło, dowód, daty i jurysdykcja. Do kontaktu bez wiersza podstawy dla danego kanału nie da się nic wysłać. Nie „jest oznaczony”. Nie da się.

consent — zgoda

Ktoś aktywnie o to poprosił. Wysłany formularz z zapisanym dowodem, podwójne potwierdzenie, zaznaczony przez tę osobę checkbox. To najmocniejsza podstawa i jedyna, którą może wytworzyć formularz.

legitimate_interest

Prawnie uzasadniony interes — najwyżej tyle może dać import z CSV. Arkusz nie pamięta, że ktoś się na coś zgodził, więc nigdy nie wolno mu tego twierdzić — a ponowne wgranie tego samego pliku niczego nie podnosi.

contract — umowa

Piszesz, bo łączy Was coś, czego oboje jesteście stroną. Przypomnienie serwisowe, informacja o odnowieniu, rzecz, której brak byłby dla odbiorcy kłopotem.

Przed wysyłką kampanii widzisz strukturę podstaw prawnych jej odbiorców: ilu z tych ludzi samo o to poprosiło, do ilu piszesz w ramach uzasadnionego interesu, a ilu jest tu z powodu umowy. To jedna liczba, która zatrzymała więcej złych wysyłek niż jakikolwiek napisany kiedykolwiek komunikat ostrzegawczy.

Dlaczego to surowsze, niż wymaga tego Twoja sytuacja: bo tak naprawdę nie chodzi o Ciebie. Reputacja masowego nadawcy jest zasobem wspólnym i jedna niechlujna lista zatruwa studnię wszystkim, którzy wysyłają z tej samej infrastruktury. Wskaźniki skarg i odbić są pilnowane per konto, a konto, które przekracza próg, jest tu spowalniane — zanim zrobi to dostawca wszystkim naraz.

Za każdym wierszem na liście ktoś powiedział: tak.

Cztery drogi wejścia

Każda droga na Twoją listę to Ty,
działający na własnych danych.

Nie ma kanału wejścia dla tokenów usługowych ani siostrzanego produktu, który po cichu dopisuje coś do Twoich kontaktów. Jeśli ktoś ma być na liście, wprowadziła go jedna z tych czterech dróg.

Import z CSV

Mapowany kolumna po kolumnie, normalizowany przy zapisie, sprawdzany pod kątem MX, żeby martwe i literówkowe domeny wyłapać przed twardym odbiciem, i wprowadzony z podstawą, którą ustawiasz wprost. Import dostaje identyfikator, a każdy utworzony przez niego kontakt na niego wskazuje.

Formularz ClickSomo

Renderowany z tego samego dokumentu co wszystko inne, z walidacją, pułapką na boty i limitem zapytań. Wysłanie formularza to jedyna droga, która może w sposób uprawniony wytworzyć consent, bo tylko przy niej ta osoba jest obecna.

Strona zbudowana w dash-b

Projektant pulpitów publikuje strony; formularz na takiej stronie wysyła dane tutaj Twoimi poświadczeniami. Ta sama walidacja, ta sama obsługa zgód, żadnej drugiej integracji do utrzymania.

Publiczne API

POST /v1/contacts własnym tokenem, semantyka upsert, klucz idempotencji uszanowany. Twoja aplikacja już wie, kto się zapisał — to najkrótsza droga od tego faktu do lejka.

Segment to skompilowany predykat.

Segment to zapisane drzewo warunków nad polami kontaktu, atrybutami, tagami, członkostwem w listach i zachowaniem, kompilowane do SQL i buforowane wraz z liczebnością. Operatory są zwyczajne — równa się, różne od, w zbiorze, poza zbiorem, zaczyna się od, kończy się na, zawiera, ustawione, nieustawione — łączone przez „i”, „lub” oraz negację, na dowolną głębokość.

Podejrzyj go przed użyciem. Endpoint zwraca prawdziwe kontakty, więc „kto właściwie w tym jest” to pytanie, na które odpowiadasz patrząc, a nie wysyłając i przekonując się.

Segmenty pracują potem podwójnie: jako grupa odbiorców kampanii, jako warunek na gałęzi lejka i jako samodzielny wyzwalacz — segment_enter startuje przebieg w chwili, gdy ktoś staje się kwalifikowany.

Cisi stali klienciPodgląd segmentu · 412
  • 1Tagtags zawiera "staly"
  • 2Atrybutattrs.total_orders >= 3 — Twoje pole, Twoja nazwa dla niego.
  • 3ZachowanieBrak zdarzenia order.paid w ostatnich 90 dniach.
  • 4ZgodaUżyteczna podstawa dla e-maila. Kontakty bez niej nie wchodzą do liczby, bo i tak nie dałoby się do nich napisać.
  • iPodgląd412 kontaktów, wypisanych. Liczone ponownie przy wysyłce, bo segment jest pytaniem, a nie migawką.

Kompilowany do SQLLiczba buforowana, odpowiedź na żywo

Wykluczenia i moment ich sprawdzania.

Lista wykluczeń działa w obrębie projektu i globalnie: twarde odbicia, skargi, wypisania, wpisy ręczne i adresy funkcyjne. Sprawdzamy ją w chwili wysyłki, a potem jeszcze raz wewnątrz samej usługi wysyłkowej.

To „w chwili wysyłki” robi tu całą robotę. Lejek z trzydniowym oczekiwaniem ma trzydniowe okno, w którym ktoś może się wypisać, a system sprawdzający wykluczenia przy kolejkowaniu i tak do niego napisze. Sprawdzanie przy wysyłce to różnica między uszanowaniem wypisania a jego odnotowaniem.

Tak samo działa usunięcie danych: żądanie usuwa kontakt i historię jego wiadomości tutaj, a przez ten sam wewnętrzny kanał, którego używa reszta rodziny, dociera do każdej siostrzanej usługi, która miała kopię. Jest jedno miejsce, w którym się prosi, i jedna rzecz, która się dzieje.

Napisz, co dziś wysyłasz i do ilu osób.

Pokażemy, jak to wygląda tutaj — zwykle z narysowanym lejkiem, bo to szybsze niż akapit o nim.

Otwórz ClickSomo Porozmawiaj z człowiekiem

Ilustracje: Pixeltrue (pakiet Minimalistic).