clickSomo

Equipas de SaaS e de produto

O teu produto sabe coisas que nenhuma ferramenta de marketing consegue observar

Quem terminou o onboarding e quem parou no passo três. Quem convidou um colega. Quem atingiu o limite duas vezes esta semana. Quem não abriu a coisa há duas semanas. Cada um desses é um gatilho melhor do que qualquer coisa derivada de uma abertura de e-mail, e todos estão a duas linhas de código de o ser.

Os eventos são toda a integração

POST /v1/events com o teu próprio token: um nome que escolheste, um contacto, um payload, uma chave de idempotência. Essa é toda a ligação. Não há SDK para manter atualizado, sem ecrã de mapeamento, e sem vocabulário nosso para traduzires o teu produto.

Cada evento entra no registo de apenas-acréscimo do contacto, e a partir daí são três coisas ao mesmo tempo. Um gatilho, para um funil começar quando chega. Um predicado, para um segmento poder dizer "fez isto nos últimos catorze dias" ou, mais útil, "não fez". E um objetivo, para uma sequência terminar no momento em que alguém faz a coisa para que estava a ser empurrado.

Esse terceiro é o que torna as mensagens de ciclo de vida suportáveis de receber. O empurrão para terminar de configurar a tua conta devia deixar de existir no segundo em que a conta está configurada, e na maioria das ferramentas não deixa, porque a sequência e o produto não estão a falar entre si.

AtivaçãoExecução #2 118
  • ⚡Gatilhoapi_event — signup.completed, plano free.
  • 2Enviar e-mailA única coisa a fazer primeiro. Não uma visita a onze funcionalidades.
  • 3Esperar 2 diaswake_at na execução. Nada em fila, nada a desfazer se reescreveres isto amanhã.
  • ?CondiçãoChegou project.created? Não → o ramo de ajuda. Sim → o objetivo abaixo.
  • 4Ramo de ajudaUma mensagem, oferecendo a coisa específica que não fizeram. Depois uma segunda espera.
  • 5Metaproject.created chega. A execução termina. Nenhum outro e-mail de onboarding, nunca, para esta pessoa.

Os teus nomes de eventosA tua definição de ativação

Cinco funis

O ciclo de vida, pela ordem em que realmente acontece

1 · Ativação

Acionador: registo. Duas ou três mensagens, cada uma sobre uma ação, cada uma com um objetivo que termina a sequência quando essa ação acontece. O funil mais valioso que vais construir, e o que mais vale a pena reescrever três vezes.

2 · A paragem

Acionador: segment_enter — registado, sem evento relevante em sete dias. Uma mensagem que pergunta em vez de dizer, e outra que oferece algo específico. Depois, parar. Uma quarta mensagem para alguém que ignorou três é uma mensagem para ninguém.

3 · O momento de expansão

Acionador: um evento que significa que estão a obter valor — atingiram o limite, convidaram um terceiro colega, exportaram pela segunda vez. É o único momento em que uma mensagem de upgrade é bem-vinda, e é um momento que o teu produto consegue nomear com precisão.

4 · Renovação e cobranças

Acionador: date_field antes da renovação, ou um evento de pagamento. Aviso, lembrete e — se um pagamento falhar — uma sequência curta que para no instante em que tem sucesso. Nós de objetivo não são opcionais em cobranças; são a diferença entre um lembrete e uma perseguição.

5 · Recuperação

Acionador: segment_enter — cancelado ou inativo há sessenta dias. Duas mensagens, honestas, depois uma etiqueta e silêncio. O que mudou desde que saíram é uma mensagem melhor do que um desconto.

E o interno

notify_team avisa uma pessoa quando uma conta que merece atenção cruza um limite. Um funil não tem de terminar num e-mail a um cliente; às vezes a ação certa é dizer a alguém do teu lado para pegar no telefone.

Ninguém abandona de propósito. Apenas deixam de abrir.

Porque é que um programador poderia realmente gostar disto

As partes que importam quando és tu a integrar

Sem endpoints privados

Todos os ecrãs são construíveis a partir da API pública, porque não existe outro tipo. Se quiseres incorporar um relatório de campanha no teu próprio backoffice, nada te impede e nada tem de ser decifrado por engenharia inversa.

Chaves de idempotência em todo o lado

Em todas as rotas de mutação. A tua lógica de repetição, a tua fila at-least-once e a tua rede instável tornam-se problema de outra pessoa — concretamente, de um índice único.

Simular antes de lançar

POST /v1/simulate faz um ensaio de um contacto num funil e devolve o caminho e cada mensagem que enviaria. Mete-o em CI se quiseres: um funil é um grafo, e um grafo pode ser testado.

Um servidor MCP

Aponta um agente para /mcp e deixa-o criar e verificar funis. As ferramentas com capacidade de envio exigem uma confirmação explícita e estão limitadas por quota, por isso um prompt mal interpretado não se pode transformar em cinquenta mil e-mails.

Webhooks de saída

Assinado, repetido com backoff, pelo menos uma vez. O mesmo vocabulário de eventos que os relatórios usam, para que o teu armazém e o teu painel não discordem sobre o que "entregue" significa.

Eliminação que realmente chega

Um pedido de eliminação remove o contacto e o seu histórico de mensagens aqui e propaga-se a todos os serviços irmãos que tinham uma cópia. Um pedido, um resultado, e algo a que podes apontar quando te perguntarem.

Onde fica a fronteira

O ClickSomo mantém uma lista de contactos e o que essa lista fez. Não é a tua base de dados de utilizadores e não pretende sê-lo: um contacto nunca carrega uma credencial, nunca inicia sessão e nunca se torna uma conta. Os teus utilizadores vivem no teu produto; os contactos vivem aqui, e os dois são unidos por um endereço de e-mail e pelos eventos que escolheres enviar.

Essa separação é deliberada e é a razão pela qual o modelo de consentimento funciona. Tu és o responsável pelo tratamento dos dados dos teus utilizadores; nós processamos em teu nome. Um desenho em que uma ferramenta de marketing se torna silenciosamente o armazém de identidades é um que não pode ser desembaraçado mais tarde, e é exatamente a falha que este foi construído para evitar.

A versão prática: envia os eventos, envia os atributos pelos quais queres segmentar, e mantém todo o resto onde está. Se te apanhares a empurrar todo o teu esquema para aqui, o segmento que estás a tentar construir é provavelmente uma consulta na tua própria base de dados que deveria chegar como um único atributo booleano.