Salesforce
O MailInApp não tem um aplicativo do Salesforce para instalar — você não precisa de um. A própria API REST do Salesforce responde em JSON simples sobre HTTPS, e a fonte de dados via API do MailInApp com autenticação OAuth2 JWT Bearer foi criada para falar diretamente o fluxo de login servidor a servidor do Salesforce: sem tela de consentimento interativa, sem refresh token para gerenciar, e sua senha do Salesforce nunca chega ao MailInApp.
Este guia configura uma conexão somente leitura — trazendo linhas de Opportunity, Account ou Contact para tags de personalização, blocos de repetição e blocos de gráfico vinculados ao vivo. Ele não grava de volta no Salesforce.
Como funciona a conexão
- O MailInApp assina uma asserção JWT de curta duração com a chave privada do seu Connected App do Salesforce.
- Ele faz um POST dessa asserção para o endpoint de token do Salesforce, que verifica a assinatura em relação ao certificado que você enviou e retorna um token de acesso — nenhum nome de usuário ou senha é enviado, nunca.
- O MailInApp armazena o token de acesso em cache e chama a API REST do Salesforce (uma consulta SOQL) usando-o como token
Bearer, renovando automaticamente antes que o token expire ou caso uma chamada retorne como não autorizada.
Cada etapa acontece no servidor, a cada busca — não há nada para manter ativo ou reautorizar manualmente depois de configurado.
Configure o lado do Salesforce
- No Salesforce Setup, vá em App Manager → New Connected App (ou New Connected App (Lightning)).
- Preencha os campos básicos de nome/e-mail e marque Enable OAuth Settings.
- Em Use digital signatures, envie um certificado. Se você ainda não tiver um, gere um certificado autoassinado e sua chave privada RSA correspondente — o certificado vai para o Salesforce, a chave privada vai para o MailInApp. Guarde a chave privada em um lugar seguro; você vai colá-la no MailInApp uma única vez, e depois ela fica mascarada.
- Adicione o escopo OAuth de que sua integração precisa —
api(Manage user data via APIs) já é suficiente para leitura de registros. - Salve e depois edite as políticas do Connected App: defina Permitted Users como Admin approved users are pre-authorized. É isso que torna o fluxo não interativo — sem essa configuração, o Salesforce espera que um humano passe por uma tela de consentimento, o que uma troca JWT servidor a servidor não consegue fazer.
- Atribua o usuário de integração (um usuário real do Salesforce com acesso à API habilitado no perfil, ou um usuário dedicado só para integração) ao Connected App por meio de um conjunto de permissões.
- Anote o Consumer Key do Connected App — é o
issuerque o MailInApp precisa — e a URL My Domain da sua organização (Setup → My Domain), por exemplohttps://yourorg.my.salesforce.com.
Conecte no MailInApp
Em Fontes de Dados → + Conexão de API, defina:
- Endpoint — a URL de consulta REST da sua organização, por exemplo
https://yourorg.my.salesforce.com/services/data/v61.0/query?q=SELECT+Name,Amount,StageName,CloseDate+FROM+Opportunity+WHERE+IsClosed+=+false(uma consulta SOQL codificada como URL — veja Consultando com SOQL abaixo). - Data path —
records. A resposta de consulta do Salesforce envolve as linhas reais em um arrayrecords, junto com os campostotalSize/done. - Autenticação — OAuth2 JWT Bearer:
- URL de token —
https://login.salesforce.com/services/oauth2/tokenpara organizações de produção e Developer Edition, ehttps://test.salesforce.com/services/oauth2/tokenpara um sandbox. - Emissor — o Consumer Key do Connected App.
- Sujeito — o nome de usuário do Salesforce do usuário de integração (a identidade que o JWT declara).
- Audiência — o mesmo host da URL de token:
https://login.salesforce.com(ouhttps://test.salesforce.compara um sandbox). - Chave privada — a chave privada RSA pareada com o certificado que você enviou ao Connected App.
- URL de token —
Clique em Testar estas configurações para confirmar a conexão antes de salvar — isso gera um token real e pré-visualiza as primeiras linhas. Depois de salvar, use Testar conexão salva quando quiser verificar novamente sem colar a chave privada de novo.
Consultando com SOQL
A própria string de consulta do endpoint é o dado que você recebe de volta — não existe uma interface separada para "escolher seus campos", então molde a consulta SOQL para retornar exatamente as colunas que seu e-mail precisa:
SELECT Name, Amount, StageName, CloseDate FROM Opportunity WHERE IsClosed = false
Algumas coisas vale saber sobre o formato do que volta:
- Somente campos simples (flat). Um campo de relacionamento como
Owner.EmailouAccount.Namevolta como um objeto JSON aninhado ({"Owner": {"Email": "..."}}), e o interpretador de linhas do MailInApp descarta valores aninhados em vez de tentar adivinhar como achatá-los. Se você precisa de um identificador de proprietário ou de conta como tag de personalização utilizável, selecione um campo simples em vez disso —OwnerId, por exemplo — em vez de um caminho de relacionamento com ponto. - Até 1.000 linhas por busca. Suficiente para um e-mail de resumo ou dashboard; restrinja ainda mais com
WHERE/ORDER BY/LIMITna própria consulta se você quiser apenas um recorte específico. - Buscado direto a cada renderização. Um envio recorrente executa a consulta novamente e renderiza de novo os blocos vinculados com as linhas atuais do Salesforce a cada envio — não há cache além do próprio token OAuth.
Usando os dados
Depois de conectado, adicione-o a um projeto pelo painel de Dados do estúdio, com um alias (por exemplo, pipeline) e uma função:
- Campos de personalização resolvem
{{pipeline.field}}a partir da primeira linha retornada — útil para um único número de destaque. - Linhas de repetição alimentam um bloco de repetição — uma linha por Opportunity, renderizada como lista ou tabela.
- A função
collectioné o que os blocos de Scorecard de KPI, gráfico de barras, linha e pizza vinculam diretamente — um campo Value do Scorecard de KPI definido comoAmountcom um agregado de Soma te dá um número "total do pipeline em aberto" ao vivo, sem nenhuma manipulação de tags de personalização, e um gráfico de barras agrupado porStageNametransforma a mesma consulta em uma distribuição de pipeline por estágio.
Veja E-mail interativo alimentado por dados do Salesforce em tempo real para um exemplo completo — um resumo semanal de pipeline construído inteiramente a partir desta conexão.