BDS0.1

Communication — Record Email

Sub-workflow: grava um e-mail capturado como Message no Communication e a thread dele como Interaction no CRM.

Revisado 2026-11-06Markdown
Plataforma
n8n · Abrir no n8n
Status
Inativo
ID do workflow
HFJxURe214QwOkMM
Nós
19
Versão no n8n
4388d0fc-19a2-4e8d-bd47-ab75803f3166
Último salvamento no n8n
2026-11-06T21:25:38.694Z
Chamado por
Email Capture

O Communication — Record Email grava um e-mail capturado nos sistemas. Ele cria ou atualiza uma Message no Communication, com chave no Message-ID do e-mail, e uma Interaction no CRM por thread, com chave no link da thread. Liga a Message às pessoas que escreveram e receberam e a Interaction à pessoa, à empresa dela, ao Deal aberto e à Membership do vendedor, e anda a data de follow-up: responder hoje quando o cliente escreveu, conferir de novo em três dias depois da primeira mensagem que o vendedor mandou. Os dois registros levam a tag email-log-n8n. Nunca cria uma pessoa nem um Deal.

É um sub-workflow: roda quando o Email Capture o chama com um e-mail normalizado e o contexto do CRM — Resolve Context.

O maintainer do Communication cuida das Messages; o do CRM cuida das Interactions e das regras de follow-up.

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.

Interaction do CRM

Message do Communication

Pedido e buscas

sim

não

sim

não

Record Request

Config

Build Lookups

Find Message
GET Communication Message

Find Interaction
GET CRM Interaction

Find External People
GET Communication Person

Find Accounts
GET Communication Tool Account

Resolve Accounts

Find Internal People
GET Communication Membership

Prepare

Message Exists?

Update Message
PATCH Communication Message

Create Message
POST Communication Message

Continue

Interaction Exists?

Update Interaction
PATCH CRM Interaction

Create Interaction
POST CRM Interaction

Result

Código Mermaid
flowchart TD
  subgraph g0["Pedido e buscas"]
    n13(["Record Request"]):::trigger
    n1["Config"]:::logic
    n0["Build Lookups"]:::logic
    n9[("Find Message<br/><small>GET Communication Message</small>")]:::read
    n7[("Find Interaction<br/><small>GET CRM Interaction</small>")]:::read
    n6[("Find External People<br/><small>GET Communication Person</small>")]:::read
    n5[("Find Accounts<br/><small>GET Communication Tool Account</small>")]:::read
    n14["Resolve Accounts"]:::logic
    n8[("Find Internal People<br/><small>GET Communication Membership</small>")]:::read
    n12["Prepare"]:::logic
  end
  subgraph g1["Message do Communication"]
    n11{{"Message Exists?"}}:::decision
    n17[("Update Message<br/><small>PATCH Communication Message</small>")]:::write
    n4[("Create Message<br/><small>POST Communication Message</small>")]:::write
    n2["Continue"]:::logic
  end
  subgraph g2["Interaction do CRM"]
    n10{{"Interaction Exists?"}}:::decision
    n16[("Update Interaction<br/><small>PATCH CRM Interaction</small>")]:::write
    n3[("Create Interaction<br/><small>POST CRM Interaction</small>")]:::write
    n15["Result"]:::logic
  end
  n13 --> n1
  n1 --> n0
  n0 --> n9
  n9 --> n7
  n7 --> n6
  n6 --> n5
  n5 --> n14
  n14 --> n8
  n8 --> n12
  n12 --> n11
  n11 -->|sim| n17
  n11 -->|não| n4
  n17 --> n2
  n4 --> n2
  n2 --> n10
  n10 -->|sim| n16
  n10 -->|não| n3
  n16 --> n15
  n3 --> n15
  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:#111

Sistemas que ele toca

Sistema Tabela Lê Grava
Communication Message Find Message Create Message, Update Message
Communication Person (mirror) Find External People Nada
Communication Tool Account (mirror) Find Accounts Nada
Communication Membership (mirror) Find Internal People Nada
CRM Interaction Find Interaction Create Interaction, Update Interaction

Toda chamada ao Airtable é um nó HTTP Request com uma credencial de token do Airtable. As leituras filtram pelo nome do campo: {External Message Id} em Message, {Evidence URL} em Interaction, {Email} no mirror Person {Login Alias} e {Tool} no mirror Tool Account, e {Membership ID} e {Company Email} no mirror Membership. As gravações usam ids de campo. Renomear um dos campos lidos quebra a busca sem erro: o nó não devolve registro e o fluxo cria uma duplicata.

Entrada e configuração

O Record Request recebe dois objetos de quem chama: message, o e-mail normalizado (direção, vendedor, contraparte, Cc externos, participantes internos, Message-ID, id e link da thread, assunto, corpo, snippet, enviada em), e context, o contexto do CRM (membership, empresa responsável, pessoa, empresa da pessoa, Deal, notas).

O Config guarda os ids de registro que as gravações precisam: channelId (o Channel do Communication da caixa de captura) e tagCommunicationId e tagCrmId (a tag email-log-n8n em cada base).

Buscas

O Build Lookups monta três fórmulas. A chave da Message é o RFC Message-ID, ou o id do Gmail quando o header falta. O Find Message procura, em uma chamada, a Message com esse External Message Id e a Message cujo External Message Id é o header In-Reply-To do e-mail, quando o header existe. O Find Interaction procura uma Interaction cujo Evidence URL é o link da thread. O Find External People procura, em uma chamada, a contraparte e todos os endereços externos em Cc no mirror Person do Communication. O Find Accounts procura, em uma chamada, o vendedor e todos os participantes internos no mirror Tool Account, pelo Login Alias entre as contas Google Workspace. O Resolve Accounts lê o Bound Membership ID de cada conta achada, e o Find Internal People lê essas Memberships no mirror Membership, por Membership ID ou por Company Email, para chegar à Person por trás de cada endereço interno.

Gravar a Message

O Message Exists? manda o item para o Update Message quando o Find Message achou uma, e para o Create Message nos outros casos. O Continue então passa o item preparado para a parte do CRM.

Uma segunda captura do mesmo Message-ID acontece quando outra conta interna estava em cópia: o Google entrega uma cópia por destinatário interno. Nesse caso o Update Message muda só o About Keys, juntando as linhas novas de account: e participant: às existentes, e o Participants (Account), somando as contas da cópia nova. Nada mais na Message é tocado.

Gravar a Interaction

O Interaction Exists? manda para o Update Interaction quando uma Interaction já tem este link de thread, e para o Create Interaction nos outros casos. Uma thread é uma Interaction: o Date e o Result dela seguem a última mensagem processada.

Mensagem Result Next Contact Date° Next Action°
Inbound, qualquer uma Answered Hoje “Reply to <nome>: <assunto>”
Outbound, primeira da thread No answer Hoje mais três dias “Follow up if no reply: <assunto>”
Outbound, depois na thread No answer Não muda Não muda

“Hoje” é a data UTC no momento do processamento. O Result informa o que foi gravado: o id da Message, o id da Interaction e se cada um foi atualizado ou criado.

Campos gravados

Message do Communication (Create Message)

Campo Valor
Subject Assunto (Name é uma fórmula: quem escreveu para quem, depois o Subject)
Body Texto puro, até 20.000 caracteres
Sent At Enviada em
Status Received para inbound, Sent para outbound
External Message Id RFC Message-ID, ou o id do Gmail quando falta
Direction Inbound ou Outbound
Thread Id Id da thread do Gmail na caixa de captura
Context Base CRM
Context Key Deal/ mais o id do registro do Deal, ou Person/ mais o id do registro da pessoa
Channel O Channel do Config
Tags email-log-n8n
Sender (Person) Quem escreveu: a contraparte no inbound, a Person do vendedor no outbound
Receivers (Person) Todos que receberam e existem como Person: outbound, a contraparte, os Cc externos e os colegas internos em cópia; inbound, o vendedor, os Cc externos e os colegas internos em cópia
Account O registro do vendedor no mirror Tool Account, pelo Login Alias, quando encontrado
In Reply To A Message capturada que o e-mail responde, pelo header In-Reply-To; vazio quando aquele e-mail não foi capturado. Replies na Message respondida é o inverso
Participants (Account) Os outros endereços internos em To ou Cc que têm Tool Account
About Keys Uma linha cada: email: contraparte, account: vendedor, participant: cada outro endereço interno, cc: cada Cc externo fora do mirror Person, gmail: id, rfc: Message-ID, in-reply-to: quando existe

O Update Message grava só o About Keys e o Participants (Account), como descrito acima.

Interaction do CRM

Campo Create Interaction Update Interaction
People° A pessoa do contexto Não muda
Company° A empresa da pessoa do contexto, quando há Não muda
Deal° O Deal aberto do contexto, quando há Não muda
Date* Enviada em Enviada em desta mensagem
Title* Assunto Não muda
Type Email Não muda
Result Answered ou No answer Answered ou No answer
Description° “E-mail thread with <nome> <e-mail> via <caixa do vendedor>. First message (<direção>): <snippet>” Não muda
Note As notas do contexto, vendedor sem Person por trás da conta, e os Cc externos fora do People, quando houver Não muda
Evidence URL Link da thread na caixa de captura Link da thread
Next Contact Date° Veja a tabela acima Veja a tabela acima
Next Action° Veja a tabela acima Veja a tabela acima
Accountable (Person) O vendedor como Person do CRM (Member da Membership encontrada), quando encontrado Não muda
Accountable (Company) A Business Unit da Membership, quando encontrada Não muda
Tags email-log-n8n Não muda

Toda gravação manda typecast: true: um valor de select que ainda não existe é criado como opção nova.

Nós

O workflow tem 19 nós: 18 que executam e uma nota adesiva. Num nó If, a saída 0 é verdadeiro e a saída 1 é falso.

Nó Tipo O que faz
Record Request executeWorkflowTrigger Recebe message e context de quem chama
Config set Id do Channel, os dois ids de tag e o campo Account opcional
Build Lookups code Chave da Message, link da thread e e-mails externos como fórmulas
Find Message httpRequest Message com o mesmo External Message Id, ou com o id do In-Reply-To
Find Interaction httpRequest Interaction com o mesmo link de thread em Evidence URL
Find External People httpRequest Mirror Person do Communication pelos e-mails externos
Find Accounts httpRequest Mirror Tool Account do Communication pelos e-mails internos
Resolve Accounts code Lê as contas e monta a busca da Membership por Bound Membership ID ou Company Email
Find Internal People httpRequest Mirror Membership do Communication: as pessoas por trás das contas internas
Prepare code Monta os corpos da Message e da Interaction e os valores de follow-up
Message Exists? if Atualizar ou criar a Message
Update Message httpRequest PATCH no About Keys da Message existente
Create Message httpRequest POST de uma Message nova
Continue code Repassa o item preparado depois da gravação da Message
Interaction Exists? if Atualizar ou criar a Interaction
Update Interaction httpRequest PATCH na Interaction da thread
Create Interaction httpRequest POST da Interaction da thread
Result code Devolve os ids da Message e da Interaction a quem chamou
Sticky Note stickyNote Nota de configuração no canvas; não executa

Ligações

De Saída Para
Record Request 0 Config
Config 0 Build Lookups
Build Lookups 0 Find Message
Find Message 0 Find Interaction
Find Interaction 0 Find External People
Find External People 0 Find Accounts
Find Accounts 0 Resolve Accounts
Resolve Accounts 0 Find Internal People
Find Internal People 0 Prepare
Prepare 0 Message Exists?
Message Exists? 0 Update Message
Message Exists? 1 Create Message
Update Message 0 Continue
Create Message 0 Continue
Continue 0 Interaction Exists?
Interaction Exists? 0 Update Interaction
Interaction Exists? 1 Create Interaction
Update Interaction 0 Result
Create Interaction 0 Result

Configurações e tratamento de erro

Configuração Valor
Status Inativo; um sub-workflow roda quando é chamado mesmo inativo
Ordem de execução v1
Workflow de erro Nenhum
Retry on fail Em todos os nós HTTP Request, 3 tentativas
On error Para o workflow (padrão) em todos os nós; quem chama recebe o erro e marca a cópia com CRM/CRM - Error
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 Channel da non-reply@ do Config existe e está Active Communication Existe, Draft
A tag email-log-n8n existe no Core e chegou nos dois mirrors Core, CRM, Communication Feito
O Status da Message tem a opção Received Communication Feito
O mirror Tool Account existe e toda caixa de vendedor está nele com o Login Alias Communication, Tooling and Access Feito em 06/11/2026; um endereço sem Tool Account fica só em About Keys

Lacunas conhecidas

Lacuna Efeito
Toda mensagem outbound põe Result em No answer Uma resposta enviada depois que o cliente respondeu volta uma Interaction Answered para No answer
Só o About Keys e o Participants (Account) são juntados num Message-ID repetido Uma cópia que chega com mais Cc externos que a primeira não acrescenta Receivers (Person)
Uma thread sem Deal aberto na primeira captura nunca ganha o Deal Deal° só é gravado no Create Interaction
A Message nunca é ligada à sua Interaction O Context Key guarda o Deal ou a pessoa, não a Interaction
“Hoje” e “mais três dias” usam a data UTC E-mail processado no fim da noite no Brasil fica com o dia seguinte

Recuperar uma gravação parcial

O que foi salvo O que fazer
Message gravada, Interaction falhou Rode o e-mail de novo; a Message é atualizada no lugar e a Interaction é criada ou atualizada pelo link da thread
Duas Interactions para uma thread Fique com uma, mantenha a Evidence URL dela, depois apague a outra
Message com a pessoa errada Corrija os links à mão; a próxima captura da thread não mexe neles

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.