Capacidades
- Lê contatos, listas de contatos, campanhas de e-mail e campanhas de SMS, com as estatísticas globais de cada campanha.
- Lê empresas, negócios, os funis com seus estágios, tarefas, tipos de tarefa e notas do CRM.
- Lê os usuários da conta, de onde sai a permissão de todos os outros recursos.
- Separa os atributos de contatos, empresas e negócios: os atributos padrão viram colunas e os atributos que você criou na Brevo, como um CPF, viram linhas em tabelas próprias de valores.
- Instala 23 tabelas clean prontas, com datas em UTC, e-mails em minúsculas, domínio de empresa normalizado e tabelas de ligação entre contato e lista, negócio e contato, negócio e empresa, empresa e contato, tarefa e entidade, nota e entidade, e campanha enviada e lista.
- Alimenta o Memory com os nós
Customer(contatos),Company,Agent(usuários),Deal,Stage,Task,Note,Audience(listas) eCampaign(campanhas de e-mail).Customercasa com nós de outros conectores pelo e-mail,Companypelo domínio eAgentpelo e-mail. Os nós só entram no grafo depois que a ontologia unificada é aplicada. - Aplica a permissão de cada usuário da Brevo por módulo, marketing ou CRM. Veja Permissões (ACL).
Recursos disponíveis
Todo recurso nasce desligado no Data Catalog e você escolhe quais carregar depois de conectar. As exceções:usersé carregado sempre, mesmo sem seleção, porque a permissão de todos os outros recursos é calculada a partir dele.- Os recursos de dicionário e de valores de atributo não têm opção própria: entram e saem junto com a entidade deles.
contact_attribute_valuesecontact_attributesseguemcontacts,company_attribute_valuesecompany_attributesseguemcompanies,deal_attribute_valuesedeal_pipelinesseguemdeals, etask_typesseguetasks.
As 23 tabelas clean da Brevo são instaladas quando você cria o conector, fora do contexto. Ligue no Data Catalog as que você quer usar. Cada uma é atualizada depois de cada sincronização. As colunas que ligam um recurso a outro (ids, listas de ids e o
sent_date das campanhas de e-mail) ficam bloqueadas no Data Catalog: sem elas, as tabelas de ligação e as arestas do grafo sairiam vazias.Como ler os dados
- Toda data das tabelas clean é
TIMESTAMPTZem UTC. A Brevo entrega as datas com o fuso da conta, e o conector as converte. brevo_contacts.emaile o e-mail debrevo_userssaem em minúsculas, sem espaços nas pontas. Um contato só com telefone fica comemailNULL.phoneé o número de SMS.brevo_companies.domainé só o host do domínio: em minúsculas, semhttp://, semwww.e sem caminho.brevo_dealsguarda o funil, o estágio e o responsável como ids. O nome do estágio e do funil está embrevo_deal_stages: juntestage_key(<funil>:<estágio>) com oexternal_iddela. O nome do responsável está embrevo_users: junteowner_idcom oexternal_iddela. O valor emamountestá na moeda do CRM da conta, que a API não informa.brevo_notes.texté o HTML da nota, etext_plainé o mesmo texto sem tags.brevo_contact_list_membershipstem uma linha por contato e lista, incluindo as listas de que o contato se descadastrou, comunsubscribedverdadeiro nesses casos.brevo_email_campaign_sendssó tem campanhas com data de envio.
Atributos e idioma da conta
A Brevo nomeia os atributos padrão de contato no idioma da conta. Uma conta em português temNOME e SOBRENOME, e não FIRSTNAME e LASTNAME. O conector reconhece os nomes em inglês, português, francês, espanhol e alemão e os coloca nas colunas firstname e lastname. Em outro idioma, o nome e o sobrenome não ganham coluna e aparecem em contact_attribute_values.
O valor de todo atributo que não é padrão é marcado como dado pessoal a mascarar, porque o nome do atributo é escolhido por você e pode guardar, por exemplo, um CPF. Veja dados pessoais.
Permissões (ACL)
O conector lê a permissão de cada item na fonte e a guarda junto com o dado. Em Comportamento dos dados, você escolhe entre dois modos:
No modo “Espelhar a fonte”, a Strattum reconhece cada pessoa pelo e-mail. A Brevo não oferece login de terceiros, então não há vínculo de conta: assumimos que a pessoa usa na Brevo o mesmo e-mail que usa na Strattum.
Como a fonte define acesso
A Brevo dá acesso por usuário e por módulo da conta, nunca por registro. Cada usuário tem, por módulo, um nível: dono, acesso total, acesso personalizado ou nenhum. Responsável, autor e atribuído de um negócio, tarefa ou nota são dados do registro, não permissões.Como a Strattum traduz o acesso
A cada execução, o conector lê os usuários da conta e decide, para cada um, se ele tem acesso ao marketing e ao CRM. Cada linha recebe as pessoas com acesso ao módulo do recurso dela:
A decisão por usuário e módulo segue esta regra, sempre para o lado mais restrito:
O usuário é gravado pelo e-mail, em minúsculas. Nenhum grupo ou time é gravado.
Quando a identidade não é encontrada
Quem usa na Brevo um e-mail diferente do da Strattum não vê nada desta conexão no modo “Espelhar a fonte”. O usuário recusado pela regra acima, por exemplo um acesso personalizado cuja consulta falhou, também fica sem acesso, e a sincronização registra no log quantos usuários foram recusados. Se nenhum usuário com acesso a um módulo for reconhecido, os registros desse módulo não aparecem para ninguém nesse modo.Quando a permissão é atualizada
Todo recurso é relido por inteiro a cada execução, e a permissão de toda linha é recalculada junto. Uma mudança de acesso na Brevo vale a partir da próxima sincronização. A associação do e-mail da Brevo com a conta da Strattum é feita por uma rotina própria, a cada 10 minutos por padrão.Pré-requisitos
- Uma conta Brevo. Os recursos de CRM exigem o módulo CRM ativo na conta.
- Uma chave de API REST da Brevo, que começa com
xkeysib-, criada por um usuário com acesso à gestão de usuários da organização. Sem esse acesso, o teste de conexão falha, porque a permissão de todos os recursos depende da lista de usuários. - O IP de saída da VM da Strattum autorizado na Brevo, se a conta bloqueia IPs desconhecidos.
- Uma só conexão Brevo por instalação da Strattum, com uma conta Brevo por conexão. Sub-contas não são lidas.
Autenticação e escopos
A autenticação é por chave de API, enviada no headerapi-key. A chave da Brevo não tem escopo: ela alcança a conta inteira. O que pode faltar é o módulo CRM na conta e a autorização do IP.
1
Crie a chave de API
Na Brevo, abra SMTP & API e vá em API Keys. Crie uma chave com um nome como
strattum-sync e copie o valor que começa com xkeysib-.2
Autorize o IP de saída
Clique no seu nome, no canto superior direito, e abra Security e depois Authorised IPs. Adicione o IP de saída da VM onde a Strattum roda. Na conta usada para construir o conector, o bloqueio de IPs desconhecidos já vinha ligado, e toda chamada de outro IP era recusada.
Configuração no Console
1
Abra o assistente
Em Conectores, clique em + Nova Conexão e selecione Brevo.
2
Preencha a conexão
Nome do Conector (Opcional): como a conexão aparece na lista. O padrão é
Brevo.Chave de API (Obrigatório): a chave xkeysib-.... O Console recusa uma chave com outro prefixo e avisa quando você cola a chave SMTP.3
Teste a conexão
Clique em Testar Conexão. Você só avança depois de um teste com sucesso ou com ressalvas. O teste faz três chamadas: valida a chave, lê a lista de usuários e lê um negócio. Se o CRM não estiver disponível, o resultado é “Conectado à Brevo, mas o CRM não está acessível.” e você pode seguir só com os recursos de marketing.
4
Escolha a frequência
Em Sincronização (Obrigatório), escolha a frequência. Veja Rate limits antes de escolher uma frequência alta.
5
Defina o acesso
Em Permissionamento:Quem pode usar este conector (Obrigatório): “Todos os usuários”, o padrão, ou “Apenas times específicos”. Com times específicos, escolha ao menos um time.Comportamento dos dados (Obrigatório): o assistente começa em “Aberto”. Escolha “Espelhar a fonte” para que cada pessoa veja só o que a Brevo libera para ela.
6
Revise e salve
Em Revisão, confira os dados e salve. A chave não aparece.
7
Ligue os recursos no Data Catalog
No Data Catalog, ligue os recursos e as tabelas clean que você quer carregar. Todos rodam em full refresh.
Como a sincronização funciona
A frequência vem do passo Sincronização. Cada execução segue esta ordem:- Lê os usuários da conta e calcula quem tem acesso ao marketing e ao CRM. Se a lista de usuários não puder ser lida, a execução falha antes de gravar qualquer dado.
- Lê cada recurso ligado no Data Catalog, um por vez, na ordem da tabela de recursos.
- Monta as tabelas clean.
contact_attribute_values, company_attribute_values e deal_attribute_values saem da mesma listagem da entidade, que é lida de novo para eles. Por isso contatos, empresas e negócios são lidos duas vezes por execução.
Remoção. Todo recurso é full refresh, então um registro apagado na Brevo some da tabela na execução seguinte.
Falhas.
API da fonte
Todas as chamadas só leem dados. O host da API é
https://api.brevo.com/v3. O conector envia um User-Agent próprio, porque a Brevo bloqueia o User-Agent padrão de algumas bibliotecas HTTP em alguns endpoints, e não segue redirecionamentos, para que a chave não seja enviada a outro host.
Rate limits. A Brevo define limites por plano. Em todos os planos, os endpoints de contatos aceitam 36.000 chamadas por hora e 10 por segundo, e os demais endpoints, 100 por hora. Nos planos Professional e Enterprise, os contatos sobem para 72.000 por hora e 20 por segundo, e os demais para 200 por hora. No Enterprise, até 60 por segundo nos contatos e 600 por hora nos demais. Passando do limite, a API responde 429 e informa no header x-sib-ratelimit-reset quantos segundos faltam para a janela reiniciar.
Na conta usada para construir o conector, medimos 20 chamadas por segundo em /contacts e /contacts/lists, e 100 por hora para cada um de /emailCampaigns, /smsCampaigns e /organization/invited/users, em contadores separados. Os endpoints de CRM não devolveram header de limite.
O conector envia uma chamada por vez, com tempo limite de 60 segundos. Diante de um 429, espera o tempo do header x-sib-ratelimit-reset, com mínimo de 1 segundo e máximo de 15 minutos. Sem o header, espera 2, 4, 8 e 16 segundos. Depois de 4 esperas, o recurso falha. Erros 5xx e quedas de conexão têm até 4 novas tentativas, com espera de 1, 2, 4 e 8 segundos. Um bloqueio da Cloudflare da Brevo (403) não é repetido.
Cada execução lê a lista de usuários duas vezes, uma para a permissão e outra para o recurso users, e faz uma chamada a mais por usuário com acesso personalizado. Cada teste de conexão gasta mais uma chamada nesse limite de 100 por hora. Campanhas de e-mail custam uma chamada a cada 100 campanhas. Uma frequência de uma hora cabe nesses limites com menos de 100 campanhas e poucos usuários com acesso personalizado.
Referência oficial: Brevo, API rate limits
Limitações conhecidas
- Todo recurso é full refresh. Não há carga incremental: a Brevo não tem endpoint de registros apagados, e as estatísticas de campanha continuam mudando depois do envio.
- A permissão é por usuário e módulo. Se o acesso personalizado da Brevo restringir um usuário a parte dos registros de um módulo, como os próprios negócios, essa restrição não é representada.
- O formato das permissões de acesso personalizado não foi conferido com dado real. Se a Brevo listar as permissões por funcionalidade em vez de por módulo, todo usuário com acesso personalizado fica sem acesso no modo “Espelhar a fonte”. Donos e usuários com acesso total não são afetados.
- No modo “Espelhar a fonte”, a pessoa só é reconhecida se usar na Brevo o mesmo e-mail que usa na Strattum. Não há vínculo de conta.
- O dicionário de atributos de negócio fica de fora, porque a Brevo responde com erro 500 permanente nesse endpoint numa conta nova. Os valores dos atributos de negócio são lidos normalmente.
- E-mail transacional (envios e eventos), remetentes, pastas, segmentos, conversas e sub-contas ficam de fora. O HTML das campanhas e das notas não vai para o Knowledge: o HTML das campanhas não é lido, e o das notas fica como texto na tabela.
- O nome e o sobrenome de contatos só viram coluna nos idiomas de conta inglês, português, francês, espanhol e alemão.
- Os campos de campanhas de SMS seguem a documentação da Brevo e não foram conferidos com dado real.
- Um registro apagado na Brevo durante a leitura pode fazer o conector pular um registro naquela execução. A execução seguinte o recupera.
- Durante a gravação de cada recurso, os registros ficam num arquivo temporário no disco do worker, antes de os dados pessoais serem mascarados. Ocupa cerca de 1 KiB por contato e é apagado ao fim da gravação. Esse disco é compartilhado com outros serviços da Strattum na mesma VM. Se o worker for interrompido à força, o arquivo fica no disco até a próxima sincronização da Brevo.
- As colunas que ligam os recursos ficam bloqueadas no Data Catalog, e uma política de dados pessoais não pode ser aplicada a elas.
- Um atributo que você criou na Brevo nunca serve para casar registros com outros conectores.
- Uma conexão Brevo por instalação da Strattum, e uma conta Brevo por conexão.
Troubleshooting
Próximos passos
Data Catalog
Ligue os recursos e as tabelas clean da Brevo e acompanhe a carga.
Memory
Veja como contatos, empresas, negócios e usuários viram nós do grafo de conhecimento.
Desenvolvimento local
Desenvolvimento local
A sincronização lê a chave só da conexão cadastrada pelo Console, que a guarda no cofre de credenciais com o nome
BREVO_API_KEY. Não há variável de ambiente para a chave.O arquivo temporário de cada recurso vai para a pasta brevo dentro de DUCKDB_TEMP_DIRECTORY quando a variável existe, e para a pasta temporária do sistema quando não existe.Na Brevo, autorize o IP de saída da sua máquina ou da stack local. Os containers podem sair por IPv4 mesmo quando a máquina tem IPv6.Veja o guia de configuração local para subir o Prefect e o worker.