Email Capture
Lê o e-mail dos vendedores copiado para a non-reply@, resolve o contexto do CRM e registra cada e-mail; inativo até configurar.
- Plataforma
- n8n · Abrir no n8n
- Status
- Ativo
- ID do workflow
SAyagoahreVjMNmE- Nós
- 11
- Versão no n8n
8bd6ad9b-9bcf-4481-8878-2ae51a9b4d40- Último salvamento no n8n
- 2026-11-06T19:42:09.676Z
O Email Capture guarda o registro dos e-mails entre vendedores e clientes. O Google Workspace copia todo e-mail externo enviado ou recebido por um membro do grupo sales-crm@snackprompt.com para a caixa de captura non-reply@snackprompt.com. Este workflow lê essas cópias, acha o vendedor e o cliente nos sistemas e entrega cada e-mail ao Communication — Record Email, que grava uma Message no Communication e uma Interaction por thread no CRM. Depois marca o e-mail no Gmail com um marcador de status. Nunca cria uma pessoa e nunca apaga e-mail.
O workflow está ativo desde 06/11/2026. Antes de ativar guarda a lista de preparação e o que ainda falta. Ele substitui o Email Logging, que precisava de uma credencial do Gmail por vendedor.
O maintainer do Communication cuida da caixa de captura e das Messages; o do CRM cuida das Interactions e das regras de follow-up; o do Tooling and Access cuida da Tool Account de cada vendedor.
Fluxo
Gerado da versão do n8n do quadro acima: cada caixa é um nó e cada seta é uma ligação no n8n. Pílulas rosa são gatilhos, hexágonos amarelos são nós If e Switch com as saídas nas setas, cilindros azuis leem (Airtable, Data Table, HTTP GET), cilindros verdes gravam, caixas roxas chamam outro workflow e setas tracejadas são saídas de erro.
Código Mermaid
flowchart TD
subgraph g0["Ler a caixa de captura"]
n1(["Gmail Trigger"]):::trigger
n0["Config"]:::logic
n6["List Labels"]:::logic
n7["Normalize"]:::logic
end
subgraph g1["Resolver e registrar"]
n9["Resolve CRM Context<br/><small>CRM — Resolve Context</small>"]:::subflow
n2{{"Known Person?"}}:::decision
n8["Record Email<br/><small>Communication — Record Email</small>"]:::subflow
end
subgraph g2["Marcadores de status"]
n5["Label Registered"]:::logic
n4["Label No Match"]:::logic
n3["Label Error"]:::logic
end
n1 --> n0
n0 --> n6
n6 --> n7
n7 --> n9
n9 --> n2
n2 -->|sim| n8
n2 -->|não| n4
n8 --> n5
n8 -.->|erro| n3
classDef trigger fill:#fde7f3,stroke:#d6409f,color:#111
classDef decision fill:#fff7e0,stroke:#c99a00,color:#111
classDef read fill:#e8f1ff,stroke:#3b82f6,color:#111
classDef write fill:#e7f8ee,stroke:#16a34a,color:#111
classDef subflow fill:#f3e8ff,stroke:#9333ea,color:#111
classDef wait fill:#f1f1f1,stroke:#888,color:#111
classDef logic fill:#ffffff,stroke:#999,color:#111Sistemas que ele toca
Este workflow não lê nem grava nenhuma tabela do Airtable diretamente. Ele lê o Gmail e chama dois sub-workflows que fazem o trabalho no Airtable.
| Sistema | Por meio de | Lê | Grava |
|---|---|---|---|
| Gmail (caixa de captura) | Gmail Trigger, List Labels, nós Label | Cópias marcadas, lista de marcadores | Marcadores de status em cada cópia |
| Tooling and Access, CRM | CRM — Resolve Context | Tool Account, Membership, People, Deal | Nada |
| Communication, CRM | Communication — Record Email | Message, Interaction, Person | Message, Interaction |
Como as cópias chegam na caixa
Duas regras de roteamento no Admin Console do Google Workspace copiam o e-mail dos membros de sales-crm@: uma para o enviado, entregue em non-reply+crm-out@, e outra para o recebido, entregue em non-reply+crm-in@. A cópia leva três headers: X-capture-source: external-contacts, X-capture-direction (outbound ou inbound) e, nas cópias recebidas, X-Gm-Original-To com o endereço do vendedor. A cópia do cliente não leva nenhum deles. Filtros do Gmail na caixa de captura marcam as cópias com CRM/CRM - Outbound e CRM/CRM - Inbound e pulam a caixa de entrada. E-mail entre domínios internos não é copiado.
Gatilho e configuração
O Gmail Trigger consulta a caixa de captura a cada minuto com a busca deliveredto:non-reply+crm-out@snackprompt.com OR deliveredto:non-reply+crm-in@snackprompt.com (os mesmos endereços dos filtros do Gmail), lidas e não lidas, e devolve as mensagens completas com headers. Cada cópia nova é um item.
O Config define cinco valores que os nós seguintes leem: mailbox (o endereço de captura), internalDomains (domínios da empresa separados por vírgula) e os nomes dos três marcadores de status: labelRegistered, labelNoMatch e labelError.
O List Labels lê a lista de marcadores da caixa uma vez por execução, para o Normalize converter os nomes nos ids que os nós Label precisam.
O que o Normalize mantém
| Valor | Como é definido |
|---|---|
| Mantida ou descartada | Descartada quando X-capture-source existe e não é external-contacts, quando a cópia não foi entregue em um endereço +crm-, ou quando a cópia já leva o marcador CRM/CRM - Registered |
| Direção | X-capture-direction; fallback: o endereço de entrega +crm-out ou +crm-in, depois o domínio do From |
| Vendedor | Enviado: o endereço do From. Recebido: X-Gm-Original-To, depois o primeiro endereço interno em To ou Cc. Descartada quando não há vendedor interno |
| Contraparte | Recebido: o remetente. Enviado: o primeiro endereço externo em To, depois Cc. Descartada quando é interna ou automática (no-reply, mailer-daemon, notifications) |
| Cc externos | Os outros endereços externos em To e Cc |
| Participantes internos | Os outros endereços internos em To e Cc, sem o vendedor |
| Message-ID, In-Reply-To | Dos headers, sem os sinais de maior e menor |
| Assunto, enviada em, corpo, snippet | Assunto cortado em 250 caracteres; a data da mensagem ou o horário do processamento; texto puro cortado em 20.000 caracteres; uma linha cortada em 300 caracteres |
| Link da thread | https://mail.google.com/mail/u/0/#all/ mais o id da thread do Gmail na caixa de captura |
| Ids dos marcadores | Ids dos três marcadores de status, vazios quando um marcador não existe |
Quando todas as cópias de uma consulta são descartadas, a execução termina no Normalize.
Resolver e registrar
O Resolve CRM Context chama o CRM — Resolve Context uma vez por e-mail com o endereço do vendedor, o endereço e o nome da contraparte. Ele devolve a Membership e a empresa do vendedor, a pessoa, a empresa da pessoa e o Deal aberto, mais notas.
O Known Person? só segue quando a pessoa foi achada no mirror People do CRM. O Record Email então chama o Communication — Record Email com o e-mail normalizado e o contexto. Esse sub-workflow grava a Message e a Interaction e aplica a tag email-log-n8n.
Marcadores de status
| Resultado | Marcador | Efeito |
|---|---|---|
| Message e Interaction gravadas | CRM/CRM - Registered |
Feito |
| Pessoa fora do mirror People do CRM | CRM/CRM - No match |
Nada gravado; revise a pessoa e tire o marcador para reprocessar |
| Record Email falhou | CRM/CRM - Error |
Tire o marcador e deixe o gatilho pegar a cópia de novo |
Os nós Label adicionam o marcador na cópia da caixa de captura. Quando um nome de marcador do Config não existe no Gmail, o nó Label não tem id para adicionar e segue sem erro. Nenhum nó tira marcadores, marca como lida ou apaga e-mail: o Evidence URL da Interaction aponta para a thread nesta caixa.
Nós
O workflow tem 11 nós: 10 que executam e uma nota adesiva. Num nó If, a saída 0 é verdadeiro e a saída 1 é falso. O Record Email tem uma segunda saída para erros.
| Nó | Tipo | O que faz |
|---|---|---|
| Gmail Trigger | gmailTrigger | Consulta a caixa de captura a cada minuto pelos dois marcadores de captura |
| Config | set | Caixa, domínios internos e os nomes dos três marcadores de status |
| List Labels | gmail | Lê a lista de marcadores uma vez por execução |
| Normalize | code | Um item por cópia; lê os headers de captura; descarta o que não é contato com cliente |
| Resolve CRM Context | executeWorkflow | Chama o CRM — Resolve Context por e-mail |
| Known Person? | if | Segue só quando a contraparte é uma pessoa do CRM |
| Record Email | executeWorkflow | Chama o Communication — Record Email; saída de erro em falha |
| Label Registered | gmail | Adiciona CRM/CRM - Registered na cópia |
| Label No Match | gmail | Adiciona CRM/CRM - No match na cópia |
| Label Error | gmail | Adiciona CRM/CRM - Error na cópia |
| Sticky Note | stickyNote | Nota de configuração no canvas; não executa |
Ligações
| De | Saída | Para |
|---|---|---|
| Gmail Trigger | 0 | Config |
| Config | 0 | List Labels |
| List Labels | 0 | Normalize |
| Normalize | 0 | Resolve CRM Context |
| Resolve CRM Context | 0 | Known Person? |
| Known Person? | 0 | Record Email |
| Known Person? | 1 | Label No Match |
| Record Email | 0 | Label Registered |
| Record Email | 1 | Label Error |
Configurações e tratamento de erro
| Configuração | Valor |
|---|---|
| Status | Ativo desde 06/11/2026 |
| Ordem de execução | v1 |
| Workflow de erro | Nenhum |
| On error | Record Email: segue pela saída de erro. Nós Label: seguem pela saída normal. Outros nós: param o workflow (padrão) |
| Chamadas de sub-workflow | Uma chamada por item, esperando o resultado |
| Caller policy | Workflows do mesmo dono |
| Retenção dos dados de execução | Padrão da instância; este workflow não define |
Antes de ativar
| Passo | Onde | Estado na última revisão |
|---|---|---|
O Gmail Trigger, o List Labels e os três nós Label usam a credencial OAuth de non-reply@snackprompt.com |
n8n | Feito: os cinco usam a credencial no-reply mail |
Os marcadores CRM/CRM - Registered, CRM/CRM - No match e CRM/CRM - Error existem na caixa de captura |
Gmail | Feito |
| As regras de roteamento e os filtros do Gmail estão prontos e testados | Google Workspace | Configurados; os cinco testes do documento de configuração estão pendentes |
Todo membro de sales-crm@ tem uma Tool Account (Google Workspace, Login Alias = e-mail) com Identity Binding |
Tooling and Access | Pendente |
| Os dois sub-workflows existem e podem ser chamados | n8n | Criados, inativos; um sub-workflow não precisa estar ativo para ser chamado |
O Channel da non-reply@ está Active |
Communication | Feito |
Lacunas conhecidas
Estas vêm da configuração dos nós e do lado Google.
| Lacuna | Efeito |
|---|---|
| Cliente só em Cco de um e-mail enviado não aparece nos headers da cópia | Esse e-mail fica sem contraparte e é descartado |
| Só o primeiro endereço externo é a contraparte | Uma mensagem para vários clientes é registrada em um deles; os outros vão para Receivers (Person) ou ficam como cc: em About Keys |
| E-mail entre domínios internos não é copiado pelo Google | Threads internas nunca são registradas, de propósito |
| “Hoje” e “mais três dias” usam a data UTC | E-mail processado no fim da noite no Brasil fica com o dia seguinte |
| O link da thread abre na caixa de captura | Só o admin da caixa abre o Evidence URL |
| Os bounces são suprimidos no endereço de captura | Uma regra de roteamento quebrada falha em silêncio; o Email Capture — Health Check cobre isso |
Recuperar uma gravação parcial
| O que foi salvo | O que fazer |
|---|---|
Cópia com CRM/CRM - Error |
Corrija a causa e tire o marcador; a próxima consulta reprocessa a cópia e o sub-workflow atualiza no lugar |
Cópia com CRM/CRM - No match |
Crie ou ache a pessoa no Core, espere o mirror do CRM e tire o marcador |
| Message gravada, Interaction faltando | Tire o marcador de status; o Record Email atualiza a Message e cria a Interaction pelo link da thread |
Manter esta página em dia
O quadro no topo mostra a versão do n8n que esta página descreve. Abra o workflow no n8n: quando o último salvamento dele é mais novo que a data do quadro, esta página está desatualizada até a próxima revisão. Todos os nós e todas as ligações dessa versão estão em Nós e Ligações.