Guia do desenvolvedorAutomações
Sequências
Sequências de e-mail por evento no Couryo, com gatilhos, passos (enviar, esperar, condição, sair), saídas automáticas, horário de silêncio e limite por contato. Sem cobrança por contato.
Uma sequência manda uma série de e-mails para cada contato que entra nela: boas-vindas no cadastro, lembretes do teste grátis, carrinho abandonado. Você monta os passos em lista no painel (em Sequências) ou pela API, e o Couryo cuida do tempo, das condições e das saídas.
Sem cobrança por contato. Os e-mails das sequências contam na cota do plano e mais nada.
Gatilhos#
- Evento: o contato entra quando chega um evento com esse nome (
POST /v1/eventsou a ferramentatrack_eventdo MCP). Cada contato entra uma vez por sequência. - Manual: você coloca o contato pelo painel ou por
POST /v1/sequences/{id}/enrollments. Um contato que terminou pode entrar de novo assim. - Evento de conversão (opcional): quando ele chega (por exemplo,
order.paid), o contato sai da sequência como convertido.
Passos#
| Passo | O que faz |
|---|---|
send |
envia um e-mail: um template salvo (template_id + variables) ou assunto, HTML e texto próprios, feitos no editor |
wait |
espera minutos, horas ou dias (amount, unit); com until, depois espera até as HH:mm no fuso da conta ou do contato (timezone: account ou contact) |
condition |
confere se o contato abriu ou clicou num e-mail anterior, se um evento aconteceu desde a entrada, ou se um atributo é igual a um valor; if_true e if_false seguem (next), saem (exit) ou pulam para um passo mais adiante ({ "goto": "<id do passo>" }) |
exit |
o contato sai da sequência ali |
Nos e-mails, valem os atributos do contato ({{nome}}, também como {{contact.nome}}), {{email}}, as propriedades do evento que iniciou a sequência ({{event.plano}}) e {{unsubscribe_url}}.
Contato sem um atributo#
Nem todo contato tem todos os atributos, e isso não derruba a sequência:
- Uma variável com valor padrão usa o padrão:
Oi, {{nome|tudo bem}}!sai "Oi, tudo bem!" para quem não temnome. - Uma variável sem valor e sem padrão sai vazia e o e-mail é enviado mesmo assim, no conteúdo próprio e no template. A inscrição ganha um aviso em
warning(por exemplo, "Variáveis sem valor no passo 1: nome"), visível na lista de inscrições do painel, e o contato continua na sequência. - Só um e-mail que fica vazio de verdade é erro: assunto vazio depois de preencher as variáveis, ou conteúdo vazio. Aí o contato sai com o motivo
send_failede a explicação emlast_error. - No construtor, o painel avisa quando um passo usa uma variável sem padrão: "Contatos sem
{{x}}recebem esse trecho vazio. Use{{x|padrão}}." - O envio pela API (
POST /v1/emailscomtemplateouvariables) continua estrito: variável sem valor e sem padrão é recusada.
curl https://api.couryo.com/v1/sequences \
-H "Authorization: Bearer $COURYO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Onboarding",
"trigger": { "type": "event", "event": "user.signed_up" },
"conversion_event": "order.paid",
"from": "Loja <oi@exemplo.com.br>",
"steps": [
{ "id": "boas", "type": "send", "template_id": "boas-vindas" },
{ "type": "wait", "amount": 2, "unit": "days", "until": "09:00" },
{ "type": "condition", "check": { "kind": "opened", "step_id": "boas" }, "if_true": "next", "if_false": "exit" },
{ "type": "send", "subject": "Uma dica, {{nome}}", "html": "<p>Oi, {{nome}}!</p>" }
]
}'A sequência nasce como rascunho. Ative com POST /v1/sequences/{id}/activate: é preciso um remetente num domínio verificado e pelo menos um e-mail.
Saídas automáticas#
O contato sai da sequência, e nenhum outro e-mail dela sai, quando:
- descadastra (link em um clique ou pedido do provedor): motivo
unsubscribed; - o endereço entra na lista de supressão:
suppressed; - há devolução definitiva:
bounced, ou reclamação de spam:complained; - chega o evento de conversão: o status vira
converted; - a sequência é apagada (
sequence_deleted) ou pausada comexit_enrollments: true(sequence_paused). Pausada sem essa opção, ninguém recebe nada e cada contato continua de onde parou quando ela voltar.
Outros motivos: condition (a condição mandou sair), exit_step, removed (você tirou), contact_deleted e send_failed.
Regras de envio#
- Horário de silêncio: por padrão, nenhum e-mail de sequência sai das 21h às 8h no fuso da conta; o e-mail espera o fim do horário. Configurável em
settings.quiet_hours(ounullpara desligar). - No máximo 1 e-mail de sequência por contato a cada 12 horas, somando todas as sequências do projeto. Configurável em
settings.min_hours_between_emails. - Fluxo marketing por padrão, com descadastro em um clique (
List-Unsubscribe) e um link de descadastro adicionado no fim do e-mail quando o conteúdo não tem. O fluxotransactionalé só para sequências de onboarding de conta, que começam por um evento. - Tudo passa pelo mesmo caminho do
POST /v1/emails: cota do plano, níveis de confiança, supressões e checagem de conteúdo. Se um limite do dia ou uma pausa segurar o envio, o Couryo tenta de novo a cada hora por até 3 dias. - Sem envio duplicado: cada passo roda uma vez por contato, mesmo se o servidor reiniciar no meio.
Planos#
| Plano | Sequências |
|---|---|
| Grátis | 1 sequência ativa, com até 3 e-mails |
| Pro | o mesmo do Grátis; com o complemento Automações, ilimitadas |
| Escala e Empresa | ilimitadas, incluídas |
Rascunhos não contam. Ativar além do limite devolve 403 automations_limit_reached, com upgrade_options (o complemento e o Escala, com preço). O complemento é ligado e desligado em Cobrança, no painel.
Métricas e inscrições#
GET /v1/sequences/{id}/metricstraz, por passo: enviados, entregues, aberturas, cliques, saídas e conversões.GET /v1/sequences/{id}/enrollmentslista quem está ou passou pela sequência (status:active,completed,exited,converted), com o passo atual, o próximo envio (next_run_at), o motivo da saída, o último erro (last_error) e o aviso (warning), como variáveis que saíram vazias. Filtre porstatuse por parte do e-mail (q).
Endpoints#
| Método e caminho | Escopo | O que faz |
|---|---|---|
GET e POST /v1/sequences |
read / admin |
lista e cria (rascunho) |
GET, PATCH e DELETE /v1/sequences/{id} |
read / admin |
uma sequência, muda (steps troca a lista inteira) e apaga |
POST /v1/sequences/{id}/activate |
admin |
ativa ou retoma |
POST /v1/sequences/{id}/pause |
admin |
pausa; { "exit_enrollments": true } também tira todo mundo |
POST /v1/sequences/{id}/duplicate |
admin |
cópia como rascunho |
GET /v1/sequences/{id}/metrics |
read |
métricas por passo |
GET e POST /v1/sequences/{id}/enrollments |
read / send |
lista e coloca um contato à mão |
GET e DELETE /v1/sequences/{id}/enrollments/{eid} |
read / admin |
uma inscrição e tirar o contato |
Pelo MCP: create_sequence (escopo admin, cria como rascunho) e list_sequences (read).