O Notti envia e-mails em HTML (com alternativa em texto simples) para eventos de conta, eventos de segurança e problemas operacionais com seus Apps.
Todo e-mail, exceto convites, é enviado em segundo plano pelo worker, com novas tentativas. Um e-mail que falha nunca faz a ação que o disparou falhar.
E-mails enviados
Os alertas vão para todos os Owners da Empresa. Alertas com janela de deduplicação são enviados no máximo uma vez por janela - uma rajada de falhas idênticas gera um e-mail, não um por entrega.
| Enviado quando | Destinatário | Deduplicação | |
|---|---|---|---|
invite-new-user | Alguém sem conta é convidado | Convidado | - |
company-added | Uma conta existente é adicionada a uma Empresa | Convidado | - |
welcome | O onboarding cria uma Empresa | Novo Owner | - |
verify-email | Onboarding, ou Reenviar e-mail no banner do painel | O usuário | Limite de 60s |
password-reset | Esqueceu a senha? é enviado para uma conta existente | O usuário | Limite de 60s |
sign-in-method-linked | Google ou GitHub é vinculado a uma conta existente (primeiro login com um e-mail verificado correspondente, ou Configurações → Métodos de login) | O usuário | - |
member-removed | Um Owner remove um membro | Membro removido | - |
access-changed | Um Owner altera o perfil ou o acesso a Apps de um membro | Esse membro | Somente quando algo realmente mudou |
key-rotated | Uma chave REST ou de cliente é rotacionada | Owners | Nenhuma - toda rotação |
provider-not-configured | Uma entrega falha porque FCM/APNs não está configurado | Owners | Uma vez por App + plataforma a cada 24h |
app-disabled-pending | Entregas pendentes são marcadas como falhas porque o App foi desativado | Owners | Uma vez por evento de desativação |
mau-exceeded | Uma notificação é rejeitada pelo limite de MAU | Owners | Uma vez por App a cada 30 dias |
limit-reached | Um convite ou a criação de um App é rejeitado pelo limite de usuários/Apps do plano | Owners | Uma vez por Empresa + recurso a cada 24h |
delivery-digest | Diário: um App teve ≥100 entregas e ≥10% falharam no dia UTC anterior | Owners | Uma vez por App por dia |
invalid-tokens | Diário: os dispositivos invalidados pelo provedor para um App/plataforma foram ≥500, ou ≥5% da sua base inscrita, no dia UTC anterior | Owners | Uma vez por App + plataforma por dia |
mau-warning | Diário: o MAU de um App ultrapassou 80% ou 90% do limite do plano | Owners | Uma vez por limiar por App a cada 30 dias |
As verificações diárias rodam a cada hora em todos os workers e sempre olham o dia UTC anterior; o registro de deduplicação garante que cada e-mail seja enviado exatamente uma vez, mesmo com várias réplicas de worker.
Os e-mails de rotação de chave incluem apenas o prefixo da chave (rk_/ck_ mais os 4 primeiros caracteres), nunca a chave em si. Ainda não há preferências de alerta por usuário - todo Owner recebe todos os alertas.
Redefinição de senha
- Na tela de login, clique em Esqueceu a senha? e informe seu e-mail. O Notti sempre responde da mesma forma, quer a conta exista ou não, para que o formulário não possa ser usado para descobrir quem tem uma conta.
- Se a conta existir, chega um e-mail
password-resetcom um link para/reset-password. O link é de uso único e expira após 1 hora. Solicitar de novo em até 60 segundos não envia outro e-mail. - Escolha uma nova senha. Depois de salva:
- todos os outros links de redefinição pendentes dessa conta deixam de funcionar;
- toda sessão e todo refresh token emitidos antes da redefinição são rejeitados, então os outros navegadores conectados são desconectados na próxima requisição;
- o endereço de e-mail é marcado como verificado.
Um link inválido, expirado ou já usado mostra um erro com a ação Solicitar um novo link.
Limites de requisições
Os endpoints públicos de conta têm limite de requisições por IP de cliente, em janelas fixas de 1 minuto compartilhadas por todas as réplicas do servidor (os contadores ficam no Redis). Ultrapassar o limite responde 429 rate_limited com um header Retry-After em segundos.
| Endpoint | Requisições por minuto |
|---|---|
POST /v1/auth/login | 10 |
POST /v1/auth/forgot-password | 5 |
POST /v1/auth/reset-password | 10 |
POST /v1/auth/verify-email | 10 |
POST /v1/auth/accept-invite | 10 |
POST /v1/auth/refresh | 30 |
POST /v1/companies (onboarding) | 5 |
Se o Redis estiver inacessível, os limites são ignorados (as requisições passam) e o erro é registrado em log, para que uma indisponibilidade nunca bloqueie o acesso dos administradores.
Verificação de e-mail
Novos Owners recebem uma mensagem verify-email durante o onboarding. O link abre /verify-email, é de uso único e expira após 24 horas. Até que o endereço seja verificado, o painel mostra um banner dispensável com a ação Reenviar e-mail.
Aceitar um convite ou redefinir a senha também marca o endereço como verificado, já que ambos provam que você consegue ler aquela caixa de entrada. Hoje a verificação é apenas informativa: uma conta não verificada ainda pode entrar e usar o painel.