Salesforce + Interaflow — CTI nativo no Lightning.
Chamada toca, o Lightning abre o Lead ou Contact certo antes do agente atender. Desligou, vira Task com transcrição, gravação e disposition. WhatsApp e e-mail aparecem na Activity Timeline do mesmo registro. Outbox pattern com retry e DLQ — se a Salesforce API tiver 503, nada se perde. OAuth2 via Connected App, sem middleware no meio.
- Setup com apoio do time em 1 dia útil
- Open CTI oficial — sem Service Cloud Voice
- Outbox resiliente com DLQ
Open CTI (beta)
Lightning + Classic
Outbox com DLQ
retry exponencial
Setup em 1 dia
com apoio do time
Como funciona a integração Salesforce + Interaflow, na prática
A integração tem duas metades que conversam entre si. A primeira é o CTI no Lightning — um Lightning Component do Interaflow que ancora no Utility Bar (aquela barra persistente no rodapé do Lightning) e fala com o Interaflow via Open CTI, o framework JavaScript oficial da Salesforce pra embedar softphones. Quando uma chamada toca no Interaflow, o widget faz um sforce.opencti.screenPop no ID do Lead, Contact ou Account correspondente — o agente vê o cliente antes mesmo de atender. Quando a chamada encerra, o widget pode abrir automaticamente o formulário de log de chamada pré-preenchido, ou criar a Task silenciosamente via outbox (configurável por operação).
A segunda metade é o sync de dados via API, usando OAuth2 (Connected App publicada no seu org Salesforce) e o outbox pattern — cada evento do Interaflow (chamada iniciada, mensagem de WhatsApp, resultado de campanha, gravação disponível) é enfileirado, entregue à Salesforce REST API com chave de idempotência, e re-tentado com backoff exponencial se a Salesforce responder 5xx ou estourar o governor limit. Idempotency key garante que nenhum evento vira duplicata, mesmo sob retry.
O que a integração sincroniza, do Interaflow pro Salesforce: chamadas (como Task com Type='Call', CallDuration, CallDisposition e CallObject apontando pra gravação — também suportado como custom object Interaflow_Call__c pra quem preferir separar), mensagens de WhatsApp (como Task ou custom activity), atualização de propriedades de Lead/Contact/Account (Last_Call_Result__c, Preferred_Channel__c), criação ou atualização de Opportunity e Case quando a campanha tem essa regra, e criação de relação com User (owner do Task) via match por email do agente.
O que a integração sincroniza, do Salesforce pro Interaflow: mudança de stage em Opportunity dispara régua de cadência no Interaflow, criação de Lead vira contato no mailing de campanha, mudança de status em Case pode abrir conversa de WhatsApp. Esse caminho roda via Platform Events (ou Outbound Message como fallback legado) + endpoint REST nosso de ingestão. (Fluxo de volta em rollout — enquanto não libera, trazer contatos via Bulk API no Salesforce-side ou export de Report + import bulk.)
O que a integração entrega pro usuário final. O rep abre o Lightning pela manhã, não precisa abrir ferramenta de softphone separada — o Interaflow já tá no Utility Bar. Chamada toca, o Lead pula na tela. Desliga, a Task já aparece na Activity Timeline com transcrição. O SDR continua no Lightning. O gerente roda relatório Salesforce nativo cruzando origem de Lead (Marketing) com resultado de chamada (Contact Center) sem export. E o cliente não percebe — ele só sente o efeito de "eles sabem quem eu sou". Mais contexto no pillar /omnichannel, na feature /crm e no hub /integracoes. Pra quem está avaliando HubSpot em paralelo, ver /integracoes/hubspot.
Ficha técnica
Ficha técnica da integração
Os detalhes que o admin Salesforce e o time de RevOps pedem antes de aprovar. Tudo abaixo é o que está em produção; o que está em rollout tem flag explícita.
Objetos Salesforce mapeados (Interaflow → Salesforce)
| Objeto Salesforce | Notas | |
|---|---|---|
| Contato | Lead ou Contact | Match por telefone E.164 (Phone/MobilePhone) ou email. Configurável: sempre Lead, sempre Contact, ou roteador (Lead até conversão, depois Contact). |
| Empresa | Account | Associada ao Contact ou Lead quando aplicável. |
| Chamada | Task (Type='Call') | Campos CallDuration, CallDisposition, CallObject (URL gravação), Description (transcrição). Custom object Interaflow_Call__c como opção avançada. |
| Mensagem WhatsApp | Task (Type='Other') | Ou custom activity se o org usar Enhanced Messaging. |
| Campanha | Campaign + CampaignMember | Lista do Interaflow vira Campaign; cada contato vira CampaignMember com status atualizado pelo resultado. |
| Resultado | Opportunity (update) ou Case (create) | Regra por campanha. Update em StageName, criação de Case com Origin='Call'. |
| Agente | User | Match por email do usuário Salesforce (case-insensitive). |
Contato
- Objeto Salesforce
- Lead ou Contact
- Notas
- Match por telefone E.164 (Phone/MobilePhone) ou email. Configurável: sempre Lead, sempre Contact, ou roteador (Lead até conversão, depois Contact).
Empresa
- Objeto Salesforce
- Account
- Notas
- Associada ao Contact ou Lead quando aplicável.
Chamada
- Objeto Salesforce
- Task (Type='Call')
- Notas
- Campos CallDuration, CallDisposition, CallObject (URL gravação), Description (transcrição). Custom object Interaflow_Call__c como opção avançada.
Mensagem WhatsApp
- Objeto Salesforce
- Task (Type='Other')
- Notas
- Ou custom activity se o org usar Enhanced Messaging.
Campanha
- Objeto Salesforce
- Campaign + CampaignMember
- Notas
- Lista do Interaflow vira Campaign; cada contato vira CampaignMember com status atualizado pelo resultado.
Resultado
- Objeto Salesforce
- Opportunity (update) ou Case (create)
- Notas
- Regra por campanha. Update em StageName, criação de Case com Origin='Call'.
Agente
- Objeto Salesforce
- User
- Notas
- Match por email do usuário Salesforce (case-insensitive).
Autenticação
OAuth2 via Connected App
Authorization code flow com refresh token automático. API v59.0+ (Lightning Experience e Classic). Named Credentials suportado pra quem prefere armazenar credencial no Salesforce. Credenciais criptografadas via Fernet em storage isolado por tenant. Revogação em 1 click no painel do Interaflow.
Escopos mínimos
- api
- refresh_token
- offline_access
- lightning
- visualforce
Eventos publicados pelo outbox
call.started
instantâneo
call.ended
< 1s
message.outbound
instantâneo
recording.available
30–90s
transcription.available
1–3 min
Platform Event (Salesforce → Interaflow)
em rollout
Open CTI widget (AppExchange)
beta
CTI no Lightning — Open CTI beta
- Lightning Component
interaflowSoftphoneancorado no Utility Bar (configurável por App). - Eventos suportados:
screenPop,saveLog,setSoftphoneItemLabel,enableClickToDial,onClickToDial. - Screen pop match por telefone (Contact primeiro, Lead depois; múltiplos, lista pro agente escolher). Click-to-call em qualquer campo telefone do Lightning.
- Status: widget em beta (instalável via URL em sandbox). Publicação no AppExchange em rollout.
Exemplo de payload entregue pro Salesforce
POST https://<myorg>.my.salesforce.com/services/data/v59.0/sobjects/Task/
Authorization: Bearer <oauth-token>
Idempotency-Key: tn_x9k-call_4821-f3b7a1
Content-Type: application/json
{
"Subject": "Chamada — Interaflow",
"Type": "Call",
"Status": "Completed",
"WhoId": "00Q...lead_or_contact_id...",
"CallDuration": 204,
"CallDisposition": "promessa_pagamento",
"CallObject": "https://recordings.interaflow.co/signed/...",
"Description": "Cliente confirma débito em 15/05. Transcrição: ...",
"ActivityDate": "2026-04-20"
}
# → 201 Created
# Location: /services/data/v59.0/sobjects/Task/00T...Entrega e resiliência
- Idempotency key por evento (hash de
tenant_id + entity_id + event_type + timestamp). Salesforce nunca recebe Task duplicada, mesmo sob retry. - Retry: backoff exponencial (1s, 4s, 16s, 1min, 5min, 30min) até 6 tentativas.
- Dead-letter queue: eventos não entregues vão pra DLQ com replay manual via painel admin.
- Governor limits respeitados (Enterprise = 100k calls/24h por licença; Unlimited = 1M). Fila interna adapta pressão de saída. Bulk API 2.0 pra volumes acima de 2k eventos/hora.
- Observabilidade: dashboard de eventos (24h/7d/30d), log com payload + response (30 dias de retenção), alertas Slack/email/webhook por limiar de DLQ ou
API_QUERY_LIMIT_EXCEEDED.
6
RETRIES ANTES DE DLQ
100k/24h
LIMITE API RESPEITADO
30d
RETENÇÃO DE LOG
Mesma arquitetura descrita no hub /integracoes (outbox pattern compartilhado) e usada na integração HubSpot.
Como funciona
Como os dados fluem entre Interaflow e Salesforce
Três fluxos rodando em paralelo: o CTI no Lightning (visual, tempo real), o outbox (dados, quase tempo real), e o inbound via Platform Events (ainda em rollout). Um diagrama resolve mais que cem bullets.
CTI LIGHTNING — Open CTI (beta)
- Utility Bar (Lightning Component)
- sforce.opencti (postMessage)
- Interaflow softphone — ring · screenPop · saveLog
OUTBOX — Interaflow → Salesforce (GA)
- Discador · WhatsApp · Chat · E-mail · Flow engine
- Event bus (dedup + idempotency)
- Outbox queue (retry + governor-aware)
- Salesforce REST API
- Salesforce — Task · Lead · Contact · Account · Opportunity · Case · CampaignMember
PLATFORM EVENTS — Salesforce → Interaflow (em rollout)
- Salesforce (Flow / Apex)
- Platform Event Interaflow_Event__e
- CometD / Pub/Sub API
- Interaflow — Contato · Campanha · Flow trigger
Diagrama em low-fi — SVG final entra no próximo release.
Linha do tempo de uma chamada inbound no Salesforce
00:00
Chamada inbound entra no Interaflow (SIP)
00:00
CTI dispara onCallReceived — Lightning faz screenPop no Contact
00:03
Agente aceita a chamada; card do Contact já está aberto
03:24
Agente encerra; CTI dispara saveLog (Task criada no Salesforce)
04:10
Evento recording.available — CallObject preenchido com URL pré-assinada
05:30
Evento transcription.available — Description da Task atualizada
Latências típicas — refinar com medição real no ambiente.
Casos de uso
Três jeitos de usar Salesforce + Interaflow
Três recortes que cobrem o que a gente vê instalado em campo em Sales Cloud, Service Cloud e em orgs híbridos.
Sales Cloud — SDR vive no Lightning, disca pelo Utility Bar
Quem usa:Time de Sales Cloud com discador preditivo no topo do funil (prospecção ou qualificação), Lead-to-Opportunity, e cadência multicanal que não pode sair do Lightning.
+22%vs. Sales Dialer padrãoTAXA DE CONEXÃO
- Report do Salesforce (Leads MQL, região SP, sem última atividade nos últimos 15 dias) vira mailing de campanha no Interaflow via Bulk API.
- Discador preditivo liga, AMD filtra caixa postal, conectadas caem pro SDR com o Lead pulando na tela via Open CTI (screenPop).
- SDR fala, desliga, Task é criada com Type='Call', CallDuration, CallDisposition mapeada pra campo custom do Lead (Last_Call_Result__c).
- Se converter Lead em Opportunity, a Task migra pro Contact + Opportunity automaticamente (padrão Salesforce).
- Quem não responde em 48h entra no fluxo de WhatsApp + e-mail no Interaflow — e cada toque também vira Task no Lead.
Mix típico de canais na cadência
- Voz (discador) 55%
- WhatsApp 30%
- E-mail (Sales Engagement) 15%
Service Cloud — Case aberto, Activity Timeline viva
Quem usa:Operação de suporte em Service Cloud que atende por múltiplos canais (WhatsApp, chat, voz) e quer tudo virando Activity no Case.
+6ppagente tem Case abertoCSAT PÓS-INTEGRAÇÃO
- Cliente manda WhatsApp → Interaflow identifica pelo telefone (match no Contact via SOQL) → abre Case no Service Cloud com Origin='WhatsApp'.
- Cada mensagem vira Task no Case. Se for Enhanced Messaging do Salesforce, vira Conversation.
- Cliente liga depois — Open CTI faz screenPop no Case (se há Case aberto ativo) em vez do Contact genérico. Agente continua a conversa sem perder contexto.
- Quando o Case fecha, Interaflow dispara CSAT no canal preferido do cliente (regra configurável).
- Tudo vira relatório Service Cloud nativo — sem plugin extra.
Distribuição de canais no SAC
- WhatsApp 50%
- Chat web 25%
- Voz 20%
- E-mail 5%
Cobrança — Stage em Opportunity dispara régua no Interaflow
Quem usa:Financeiro ou RevOps que usa Opportunity (ou Custom Object) pra rastrear pendências de pagamento e já roda Flow/Process Builder no Salesforce.
+15%vs. régua só e-mailRECUPERAÇÃO DE INADIMPLÊNCIA
- Opportunity muda pra stage 'Atrasada 30d' → Flow publica Interaflow_Event__e → Interaflow inicia régua.
- Régua tem 4 toques: WhatsApp (D+0), ligação (D+2), SMS (D+5), ligação final (D+10).
- Cada toque atualiza campo custom da Opportunity no Salesforce (Last_Contact_Channel__c, Last_Contact_Result__c).
- Pagamento confirmado (webhook do ERP ou mudança manual no Salesforce) → Flow publica outro Platform Event → Interaflow derruba a régua.
Mix de canais na régua de cobrança
- WhatsApp 45%
- Voz 30%
- SMS 15%
- E-mail 10%
Números ilustrativos baseados em benchmark de mercado. Serão substituídos por case Interaflow real com cliente autorizado — ver também /discador e /whatsapp/campanhas.
How-to
5 passos pra ligar Salesforce e Interaflow
Tempo médio de setup com apoio do nosso time, do zero até o primeiro evento chegando no Salesforce: cerca de 1 dia útil. Enterprise com Softphone Layout customizado, Platform Events e workflows: 2–3 dias com o admin.
Roadmap de setup · tempo cumulativo estimado
- 15%1. Criar a Connected App no Salesforce
- 30%2. Autorizar o Interaflow
- 60%3. Mapear objetos e configurar o outbox
- 85%4. Instalar o Softphone no Lightning (Open CTI)
- 100%5. Rodar o teste de ida e volta
Criar a Connected App no Salesforce
No seu org Salesforce, em Setup → App Manager → New Connected App, cria uma Connected App com OAuth habilitado. Escopos:
api,refresh_token,offline_access(elightning+visualforcepra CTI). O Callback URL é fornecido pelo Interaflow no onboarding. Copia Consumer Key e Consumer Secret.Autorizar o Interaflow
No painel do Interaflow, em Configurações → Integrações → Salesforce, cola Consumer Key/Secret, clica em Conectar. O Interaflow redireciona pro OAuth2 oficial do Salesforce, você aprova escopos com o usuário de serviço (recomendado) e volta pro Interaflow autenticado. Named Credentials também é suportado se você prefere armazenar credencial no Salesforce.
Mapear objetos e configurar o outbox
Escolha quais objetos o Interaflow vai tocar (Lead e Contact sempre; Account, Opportunity, Case opcionais). Pra Call, decide: Task padrão (recomendado) ou custom object Interaflow_Call__c. Mapeia campos (
Phone,MobilePhone,Email, disposition custom etc.). Custom fields aparecem automaticamente — o Interaflow lê o schema via Describe API.Instalar o Softphone no Lightning (Open CTI)
Admin Salesforce instala o Interaflow Softphone Layout (pacote enviado pelo nosso time — AppExchange em rollout) em Setup → Call Center → Softphone Layouts. Ancora o Lightning Component
interaflowSoftphoneno Utility Bar do App Lightning principal (Setup → App Manager → Edit → Utility Items → Add → Interaflow). Atribui licença de Call Center aos usuários que vão usar o softphone.Rodar o teste de ida e volta
O painel do Interaflow traz um test run que cria uma Task sintética no Salesforce (associada a um Contact de teste), verifica se chegou com o idempotency key correto e qual response code. Se 201 Created, liga o switch Enviar eventos reais. Monitora as primeiras 24h no dashboard — DLQ deve ficar zerada, contagem de enviados deve bater com o volume real.
Exemplo · test run criando Task no sandbox $ interaflow-cli salesforce test-run --contact test@example.com → POST /services/data/v59.0/sobjects/Task/ ← 201 Created (idempotency-key: tn_x9k-test-f3b7a1) ✓ Task 00T... created in 420ms
Comparação
Interaflow nativo vs. Zapier/middleware vs. custom code vs. Service Cloud Voice
Quem compra CTI Salesforce hoje avalia quatro caminhos — e um deles é da própria Salesforce. A gente compara os quatro sem maquiar.
| Zapier / Make / middleware | Integração custom (código) | Service Cloud Voice | Interaflow nativo | |
|---|---|---|---|---|
| Infra de voz embaixo | Nenhuma — só dados | Você pluga a sua | Amazon Connect (obrigatório) | Asterisk + SIP próprio Interaflow |
| Autenticação | OAuth2 do middleware | Você implementa | Salesforce + AWS | OAuth2 direto Connected App |
| CTI no Lightning | Não existe | Você constrói com Open CTI | Nativo (via SCV) | Widget Open CTI (beta) |
| Latência típica | 15s–2min (fila do middleware) | Depende | < 1s | < 1s |
| Retry / DLQ | Parcial | Você implementa | Nativo | Nativo, 6 retries + DLQ |
| Governor limits Salesforce | Não respeita | Você gerencia | Salesforce-side | Gerenciado pelo outbox |
| Discador preditivo nativo | Não | Você integra | Limitado (progressive) | Sim — Asterisk + AMD |
| WhatsApp Business integrado | Via plugin terceiro | Você integra | Não oficial | Nativo |
| Speech Analytics + Monitoria IA | Não | Você integra | Básico (real-time analytics) | Nativo (add-on) |
| Volume suportado | Centenas de eventos/dia | Depende | Ilimitado (paga Connect) | Milhares de eventos/minuto |
| Custo por seat/mês | US$ 20–200 + tarifa de op | Dev time contínuo | ~US$ 150/seat + Connect usage | Incluso no plano Plus+ |
| Tempo de go-live | 1 dia + N semanas (edge cases) | 4–12 semanas | 2–6 semanas (SCV onboarding) | ~1 dia útil |
Infra de voz embaixo
- Zapier / Make / middleware
- Nenhuma — só dados
- Integração custom (código)
- Você pluga a sua
- Service Cloud Voice
- Amazon Connect (obrigatório)
- Interaflow nativo
- Asterisk + SIP próprio Interaflow
Autenticação
- Zapier / Make / middleware
- OAuth2 do middleware
- Integração custom (código)
- Você implementa
- Service Cloud Voice
- Salesforce + AWS
- Interaflow nativo
- OAuth2 direto Connected App
CTI no Lightning
- Zapier / Make / middleware
- Não existe
- Integração custom (código)
- Você constrói com Open CTI
- Service Cloud Voice
- Nativo (via SCV)
- Interaflow nativo
- Widget Open CTI (beta)
Latência típica
- Zapier / Make / middleware
- 15s–2min (fila do middleware)
- Integração custom (código)
- Depende
- Service Cloud Voice
- < 1s
- Interaflow nativo
- < 1s
Retry / DLQ
- Zapier / Make / middleware
- Parcial
- Integração custom (código)
- Você implementa
- Service Cloud Voice
- Nativo
- Interaflow nativo
- Nativo, 6 retries + DLQ
Governor limits Salesforce
- Zapier / Make / middleware
- Não respeita
- Integração custom (código)
- Você gerencia
- Service Cloud Voice
- Salesforce-side
- Interaflow nativo
- Gerenciado pelo outbox
Discador preditivo nativo
- Zapier / Make / middleware
- Não
- Integração custom (código)
- Você integra
- Service Cloud Voice
- Limitado (progressive)
- Interaflow nativo
- Sim — Asterisk + AMD
WhatsApp Business integrado
- Zapier / Make / middleware
- Via plugin terceiro
- Integração custom (código)
- Você integra
- Service Cloud Voice
- Não oficial
- Interaflow nativo
- Nativo
Speech Analytics + Monitoria IA
- Zapier / Make / middleware
- Não
- Integração custom (código)
- Você integra
- Service Cloud Voice
- Básico (real-time analytics)
- Interaflow nativo
- Nativo (add-on)
Volume suportado
- Zapier / Make / middleware
- Centenas de eventos/dia
- Integração custom (código)
- Depende
- Service Cloud Voice
- Ilimitado (paga Connect)
- Interaflow nativo
- Milhares de eventos/minuto
Custo por seat/mês
- Zapier / Make / middleware
- US$ 20–200 + tarifa de op
- Integração custom (código)
- Dev time contínuo
- Service Cloud Voice
- ~US$ 150/seat + Connect usage
- Interaflow nativo
- Incluso no plano Plus+
Tempo de go-live
- Zapier / Make / middleware
- 1 dia + N semanas (edge cases)
- Integração custom (código)
- 4–12 semanas
- Service Cloud Voice
- 2–6 semanas (SCV onboarding)
- Interaflow nativo
- ~1 dia útil
Comparação contra arquiteturas de integração típicas e contra Service Cloud Voice (produto Salesforce/AWS). Valores de latência, volume e custo são típicos; custo de SCV inclui estimativa de uso Amazon Connect — varia conforme volume. Pra quem quer mais controle via código cru, veja /api.
FAQ
Perguntas frequentes — Interaflow + Salesforce
Salesforce, mas com a conversa inteira rodando dentro dele.
Liga em 1 dia útil com apoio do nosso time. Roda em teste no seu sandbox com um Contact de exemplo antes de subir em produção. Se o test run não entregar 201 Created na Task do seu sandbox, a gente te ajuda a destravar — ou sai.
- Connected App OAuth2 · security review-friendly
- Setup em 1 dia útil · com apoio do time
- Rollback 1-click · revoga OAuth sem resíduo
Demo de verdade é assim: você traz um sandbox seu, a gente instala o widget no Utility Bar do Lightning, liga pra um Contact de teste, você vê o screenPop, a Task criada e a transcrição aparecendo. Não tem slide.