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.
- ⚡Gatilho
api_event—signup.completed, planofree. - 2Enviar e-mailA única coisa a fazer primeiro. Não uma visita a onze funcionalidades.
- 3Esperar 2 dias
wake_atna 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.
- 5Meta
project.createdchega. 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.