Principal Conexões com canais externos (caixas de entrada)
📲

Conexões com canais externos (caixas de entrada)

Como conectar e configurar novas caixas de entradas no Cloud Chat
Ian Kraskoff
Fabrício Rissetto
Por Ian Kraskoff and 3 outros
6 artigos

Como conectar o Instagram ao Cloud Chat

Quando usar - Você quer atender DMs do Instagram dentro do Cloud Chat - Você quer responder a respostas de Stories sem alternar entre Instagram e Cloud Chat - Você está montando uma caixa para integração com a página do Facebook + Instagram Pré-requisitos - Estar logado como administrador no Cloud Chat - Conta do Facebook Business vinculada à conta do Instagram - Permissão para administrar a página do Facebook ligada ao Instagram Sobre este tutorial Neste artigo você aprende a conectar a caixa do Instagram ao Cloud Chat. Como o Instagram é integrado - DMs e respostas a Stories — capturados normalmente e aparecem no feed de conversas - Menções em Stories (quando alguém marca o perfil da empresa) — não são consideradas como conversa e não aparecem no feed Passo a passo Etapa 1 — Acessar Configurações de caixa 1. Vá em Configurações 2. Selecione Caixa de entrada 3. Clique em Adicionar caixa de entrada Etapa 2 — Escolher Messenger e autenticar 1. Escolha Messenger 2. Clique em Continue with Facebook (se necessário, faça login com sua conta do Facebook) Etapa 3 — Selecionar a página do Facebook 1. Selecione Edit previous settings 2. Escolha Opt in to current pages only e selecione a página que deseja conectar :::warning Em caso de multi-conta, garanta que você não vai desmarcar as contas conectadas anteriormente nas configurações subsequentes. ::: 3. Selecione o seu negócio 4. Selecione a conta do Instagram que deseja conectar 5. Aceite os termos da Meta / Instagram Etapa 4 — Configurar a caixa no Cloud Chat 1. No Cloud Chat, selecione a caixa do Instagram que deseja habilitar 2. Defina o nome da caixa e clique em Criar caixa de entrada 3. Escolha os agentes que vão atender essa caixa 4. Clique em Adicionar agentes :::success Pronto! A caixa do Instagram está conectada ao Cloud Chat. ::: Caso já tenha outra integração — Configurar destinatário principal :::warning Se você possui (ou já possuiu) outra integração no Messenger/Instagram, garanta que o destinatário principal das mensagens está configurado para o Cloud Chat. ::: Etapa 1 — Acessar configurações avançadas 1. Acesse Configurações → Configurações da Página → Configurações avançadas de mensagens Etapa 2 — Configurar destinatário do Messenger Vá em Destinatário do Messenger → Configurar → Destinatário principal do protocolo de transferência e selecione CloudHumans. Etapa 3 — Configurar destinatário do Instagram Vá em Destinatário do Instagram → Configurar → Destinatário principal do protocolo de transferência e selecione CloudHumans. Observações - Para conectar WhatsApp (também Meta): Guia Mestre — Como conectar seu número de WhatsApp ao Cloud Chat - Para conectar Web Widget ao site: Como instalar o Web Widget do Cloud Chat no site e passar dados do contato - Para entender quais perfis atendem a caixa: Tipos de permissões e perfis de usuários no Cloud Chat

Última atualização em May 21, 2026

Como conectar o WhatsApp ao Cloud Chat via Twilio

Quando usar - Você já usa o Twilio como provedor da API do WhatsApp e quer integrar ao Cloud Chat - Você não pode/não quer usar a integração nativa via API oficial da Meta - Você precisa do passo a passo de configuração via Twilio Sandbox ou número Twilio Pré-requisitos - Estar logado como administrador no Cloud Chat - Conta no Twilio com número de WhatsApp já configurado - Account SID e Auth Token do Twilio (disponíveis no Dashboard) :::warning Algumas funcionalidades nativas do WhatsApp (como botões e formulários interativos) não estão disponíveis via Twilio — só na integração direta com a Meta (Embedded Signup). Se essas funcionalidades forem importantes pra você, considere a integração nativa: Guia Mestre — Como conectar seu número de WhatsApp ao Cloud Chat. ::: Passo a passo Etapa 1 — Acessar Configurações de caixa 1. Vá em Configurações 1. Selecione Caixa de Entrada (Inboxes) 1. Clique em Adicionar Caixa de Entrada 1. Selecione WhatsApp Etapa 2 — Selecionar Twilio como provedor 1. No campo API Provider, selecione Twilio 2. Defina o nome da inbox e o número de telefone que será integrado Etapa 3 — Pegar Account SID e Auth Token no Twilio 1. Acesse o Twilio Account Dashboard 1. Localize o Account SID e clique no botão lateral para copiar 1. Cole no campo Account SID do Cloud Chat 2. Faça o mesmo com o Auth Token 1. Clique em Create Twilio Channel Etapa 4 — Adicionar agentes Adicione os agentes que vão atender a nova inbox. Etapa 5 — Configurar webhook no Twilio 1. Copie a URL do callback gerada e volte ao Twilio 1. No Twilio, vá em Senders → WhatsApp Senders 1. Selecione o número que vai usar na nova inbox 1. Messaging Service = None (importante) 2. Cole a URL do callback no campo Webhook URL for incoming messages 1. Clique em Update WhatsApp Sender Etapa 6 — Garantir ClaudIA na caixa (opcional) Se você quer que a ClaudIA atenda essa inbox: 1. Vá na aba Collaborators 1. Confirme que a ClaudIA está atribuída à inbox Etapa 7 — Adicionar a inbox às automações da ClaudIA 1. Acesse Automation 1. Encontre Assign to ClaudIA e clique em Edit 1. Adicione a nova inbox na lista de inboxes da automação 1. Repita para a automação Message Created :::success A inbox Twilio está pronta para enviar e receber mensagens no Cloud Chat usando o número configurado. ::: Observações - Para integração nativa com a Meta (com botões e formulários interativos): Guia Mestre — Como conectar seu número de WhatsApp ao Cloud Chat - Para entender melhor as automações da ClaudIA: Como integrar a ClaudIA ao Cloud Chat e adicionar canais - Para enviar mensagem proativa via Twilio: Como enviar mensagens proativas unitárias no Cloud Chat - Para evitar bloqueio do número (mesmas regras valem via Twilio): Como evitar bloqueios e banimentos no WhatsApp

Última atualização em May 21, 2026

Como instalar o Web Widget do Cloud Chat: público, com dados ou em área logada (HMAC)

Quando usar - Você quer adicionar o chat do Cloud Chat em qualquer página do seu site - Você quer passar dados do contato automaticamente (nome, e-mail, telefone, atributos) sem o cliente digitar - Você quer validar a identidade do usuário (HMAC) para impedir que alguém se passe por outra pessoa - Você quer permitir múltiplas conversas simultâneas e dar acesso ao histórico dentro do widget - Você quer restringir o widget a domínios específicos (ex: produção apenas) Pré-requisitos - Estar logado como administrador no Cloud Chat - Acesso ao código fonte do site onde o widget vai ser instalado - Para Cenário 3 (área logada com HMAC): backend próprio para gerar o identifier_hash — não pode ser feito no frontend (expõe a chave secreta) Sobre este tutorial Esse artigo cobre o ciclo completo de instalação do Web Widget do Cloud Chat. Antes de seguir o passo a passo de código, você precisa decidir qual dos 3 cenários se encaixa no seu uso — eles têm requisitos e complexidade muito diferentes. Qual cenário é o seu? | Cenário | Quando usar | Passa dados do cliente? | Precisa de HMAC? | | --- | --- | --- | --- | | 1. Widget público (sem dados) | Site público / landing page / blog. O cliente digita o próprio nome e e-mail ao iniciar a conversa. | ❌ Não | ❌ Não | | 2. Widget com dados, fora de área logada | Páginas que já conhecem o contato mas não exigem autenticação forte (ex: link único enviado por e-mail/CRM, formulário pós-cadastro). | ✅ Sim | ❌ Não | | 3. Widget em área logada (com HMAC) | Portal do cliente, dashboard interno, app autenticado. Qualquer cenário onde o usuário precisa fazer login pra acessar. | ✅ Sim | ✅ Obrigatório | :::warning Se o seu caso é o Cenário 3 (área logada), você precisa configurar o HMAC. Sem ele a conversa não será criada. ::: :::info O atributo personalizado do contato deve ser criado previamente — ver Como criar campos customizados de contatos e conversas. ::: Etapa comum a todos os cenários — Criar a caixa de entrada do tipo Web Widget Antes de configurar qualquer cenário, você precisa criar uma caixa de entrada do tipo Website no Cloud Chat. O caminho é o mesmo para os 3 cenários. 1. Acessar a tela de Caixas de Entrada No painel do Cloud Chat, vá em Configurações → Caixas de Entrada e clique no botão Adicionar Caixa de Entrada (canto superior direito). 2. Escolher o canal Website Selecione o card Website na grade de canais disponíveis. 3. Configurar o canal do website Preencha os campos: - Nome do site — nome exibido pro cliente (ex: "Cloud Humans") - Domínio do website — domínio onde o widget vai rodar (ex: cloudhumans.com) - Cor do Widget — cor primária do botão e cabeçalho - Seja bem-vindo — título inicial do widget (ex: "Olá!") - Bem-vindo, saudação — mensagem de boas-vindas - Ativar saudação do canal — se quer enviar mensagem automática ao iniciar conversa Clique em Criar caixa de entrada. 4. Adicionar agentes Selecione os agentes que terão acesso a essa caixa de entrada. Como administrador, adicione-se a si mesmo se quiser visualizar todas as conversas. Clique em Adicionar agentes. 5. Configuração do script Na tela final (“Sua caixa de entrada está pronta!”), o Cloud Chat exibe o script básico de instalação do widget. Porém, existem outras opções de configuração que podem ser utilizadas dependendo do seu cenário. Clique em Mais configurações. Nessa seção, você verá as três opções de script disponíveis para instalação, que explicaremos abaixo. :::success Pronto. Agora vá pro cenário que se aplica ao seu caso (1, 2 ou 3 abaixo) e siga as instruções específicas de cada um. ::: Cenário 1 — Web Widget público (sem passar dados do cliente) Use quando o widget fica numa página pública (landing, blog, site institucional). O cliente digita o próprio nome / e-mail / telefone ao iniciar a conversa. Como instalar Cole o script copiado na Etapa Comum (Passo 5) logo antes do fechamento da tag </body> no HTML da página: :::info É só isso. Esse cenário não exige nada além do script base. Não chame setUser(), não passe identifier_hash. O cliente preenche os próprios dados no formulário inicial do widget. ::: Cenário 2 — Web Widget passando dados do cliente, fora de área logada Use quando você já conhece o contato mas a página não exige login. Exemplos: - Link único enviado por e-mail ou WhatsApp com o identifier na URL - Página pós-cadastro (o cliente acabou de preencher um formulário) - Página acessada via deep link de campanha de CRM Aqui você quer pré-preencher nome, e-mail, telefone e atributos personalizados sem o cliente digitar. Como instalar :::error ⚠️ O primeiro argumento de setUser(...) é o identifier — precisa ser único por usuário (ID interno, UUID do banco, etc). Se você deixar o identifier chumbado (valor fixo, copiado do exemplo, ou um placeholder), o Cloud Chat mescla todos os acessos como o mesmo contato — funde tickets de pessoas diferentes na mesma conversa e quebra o histórico irreversivelmente. Antes de subir pra produção, confirme com seu time de engenharia que o identifier está sendo populado dinamicamente com o ID real do usuário. ::: :::info Você precisa passar pelo menos o e-mail ou o telefone — são os identificadores que o Cloud Chat usa para fazer match com o contato. ::: Cenário 3 — Web Widget em área logada (com HMAC + opcionalmente múltiplas conversas) Use quando o widget fica dentro de área logada (portal do cliente, dashboard, app autenticado). Aqui o HMAC é obrigatório. Esse cenário também é o único onde faz sentido habilitar múltiplas conversas + histórico. 3.1 — Como funciona o HMAC A validação usa HMAC SHA-256: um código gerado a partir do identifier do usuário combinado com uma chave secreta (token) da caixa de entrada. :::warning A geração do identifier_hash é responsabilidade do cliente. O cálculo precisa acontecer no backend (servidor), nunca no navegador, se a chave secreta vazar no front-end, a proteção deixa de existir. A Cloud Humans fornece o token por caixa de entrada; implementar o cálculo e a entrega do hash ao widget é responsabilidade da equipe técnica do cliente. ::: 3.2 — Copiar o token da caixa de entrada Em Configurações → Caixas de Entrada → (sua inbox Website) → Configurações avançadas → Validação de Identidade do Usuário → Copiar. Esse token é secreto — guarde apenas no backend, nunca no frontend. 3.3 — Calcular o identifier_hash no backend Quando o usuário se autentica no seu sistema, o backend calcula: identifier_hash = HMAC_SHA256(token_da_inbox, identifier) Onde identifier é o ID único do usuário (UUID interno, e-mail corporativo, etc). Exemplos server-side: // Node.js const crypto = require('crypto'); const hash = crypto .createHmac('sha256', '<token-da-inbox>') .update('<identifier>') .digest('hex'); # Python import hashlib, hmac hash = hmac.new(b'<token-da-inbox>', b'<identifier>', hashlib.sha256).hexdigest() // PHP $identifier_hash = hash_hmac('sha256', '<identifier>', '<token-da-inbox>'); 3.4 — Enviar o hash no widget via setUser <script> (function(d,t) { var BASE_URL="https://cloudchat2.cloudhumans.com"; var g=d.createElement(t),s=d.getElementsByTagName(t)[0]; g.src=BASE_URL+"/packs/js/sdk.js"; g.defer = true; g.async = true; s.parentNode.insertBefore(g,s); g.onload=function(){ window.cloudchatSDK.run({ websiteToken: 'SEU_TOKEN_AQUI', baseUrl: BASE_URL }); window.addEventListener('cloudchat:ready', function() { window.$cloudchat.setUser('<identifier-do-usuario>', { identifier_hash: '<hash-gerado-no-backend>', email: '[email protected]', name: 'João da Silva', phone_number: '+5511999999999' }); }); } })(document,"script"); </script> 3.5 — Forçar a validação na caixa de entrada Ainda em Configurações avançadas, marque "Forçar validação de identidade do usuário" → Habilitado. A partir daí, requisições sem um identifier_hash válido são rejeitadas. :::error Ative o "Forçar validação" somente depois que o backend já estiver enviando o identifier_hash correto. Se ativar antes, todas as conversas que não enviam o hash passam a ser rejeitadas e o chat para de funcionar. Teste primeiro numa caixa de entrada de homologação. ::: :::success Boas práticas: - Use um identifier estável — nunca mude o identificador de um usuário existente - Não exponha o token HMAC no frontend - Gere o hash sempre no backend e envie ao cliente apenas no momento de inicializar o widget - Regenere o identifier_hash toda vez que o widget for carregado para um usuário autenticado ::: 3.6 — (Opcional) Habilitar múltiplas conversas e histórico Com o HMAC já funcionando, você pode habilitar a feature de múltiplas conversas + histórico: o mesmo usuário consegue manter vários atendimentos abertos em paralelo e ver o histórico de conversas já encerradas dentro do próprio widget. Útil para SaaS, B2B ou e-commerce com alta recompra/recontato. Como o usuário vê: o widget passa a exibir duas abas — Conversas ativas (em aberto) e Histórico de conversas (encerradas, com busca por data inicial, data final e ID do ticket; carrega 5 por vez). Vídeos demonstrativos: https://www.loom.com/share/5e1ffa9996814752b4e745191d5059f7 https://www.loom.com/share/184de48c78c440dfaf6169c14b244f94 Como ativar: 1. No painel do Cloud Chat, vá em Caixas de Entrada → (sua inbox Website) → Configuração 2. Ative a flag Múltiplas conversas por usuário 3. Copie o novo script exibido após a ativação — ele já vem com user_id e identifier_hash no formato correto 4. Substitua o script atual da página pelo novo :::error A feature de múltiplas conversas e histórico depende do HMAC estar ativo e funcionando. Não habilite em widget público (Cenário 1) nem em widget sem área logada (Cenário 2) — sem validação de identidade, qualquer um consegue acessar o histórico de outro usuário. ::: Validação de Domínio (opcional, todos os cenários) Configure os domínios onde o widget pode funcionar — útil para evitar uso fora dos domínios autorizados (staging, terceiros não autorizados). Em Caixas de Entrada → (sua inbox) → Configuração, na seção Validação de Domínio: | Configuração | Comportamento | | --- | --- | | Campo vazio | Sem restrições — funciona em qualquer domínio | | example.com | Permite uso apenas nesse domínio | | *.example.com | Permite uso em todos os subdomínios (ex: app.example.com, login.example.com) | Como testar 1. Abra a página com o widget instalado 2. Verifique se o widget aparece no canto da tela 3. Cenário 2 e 3: confirme que nome, e-mail, telefone e atributos já aparecem preenchidos sem o cliente digitar 4. Cenário 2 e 3: teste com pelo menos 2 usuários diferentes — abra o widget com um, depois com outro, confira no painel se aparecem como contatos separados (não mesclados num só). Se aparecerem mesclados, o identifier está fixo — corrija antes de subir pra produção 5. Cenário 3: teste com um identifier_hash inválido e confirme que o widget rejeita a requisição quando "Forçar validação" está habilitado 6. Cenário 3 com múltiplas conversas: abra dois tickets em paralelo e confirme que aparecem como conversas separadas dentro do widget Perguntas frequentes O que acontece se já existir uma informação anterior do contato? A nova informação enviada via script sobrescreve os dados antigos. O dado mais recente prevalece. E se eu errar o nome de algum campo personalizado? Nenhum erro é lançado. O campo incorreto é ignorado silenciosamente. Apenas os campos existentes são atualizados. Posso passar atributos da conversa também? :::warning Não por enquanto. A passagem de atributos personalizados da conversa não foi lançada na versão atual (v0) por limitações técnicas. Use o formulário no início da conversa como alternativa. ::: Que tipos de formatação o widget aceita? O Widget aceita a maioria dos formatos do Markdown: - Negrito / Tachado / Itálico - Bloco de código - Links - Imagens - Bullet points Posso usar HMAC sem ativar múltiplas conversas? Sim. HMAC é uma camada de segurança independente — você pode ativar só o HMAC (Cenário 3, passos 3.1 a 3.5) sem habilitar múltiplas conversas (passo 3.6). O contrário não é recomendado. Posso usar tudo isso em apps mobile? Sim, via WebView. Veja Como integrar o Web Widget em aplicativos mobile. Observações - Para compartilhar a sessão do widget entre abas do navegador: Como compartilhar a sessão do Web Widget entre abas do navegador - Para usar o widget em apps mobile via WebView: Como integrar o Web Widget em aplicativos mobile - Para criar atributos personalizados antes de passar via script: Como criar campos customizados de contatos e conversas - Para ativar continuidade de conversa por e-mail: Como habilitar continuidade de conversas por e-mail - Para ativar o widget no Portal de Ajuda: Como ativar o Web Widget no Portal de Ajuda

Última atualização em May 26, 2026

Como conectar uma caixa de e-mail ao Cloud Chat (Google, Microsoft, IMAP/SMTP)

Quando usar - Você quer conectar uma caixa de e-mail ao Cloud Chat para receber e responder e-mails de clientes na mesma inbox que chat e WhatsApp - Sua caixa é Gmail / Google Workspace, Outlook / Microsoft 365 ou de outro provedor (Zimbra, Yahoo, provedor próprio, etc.) - Você precisa reconectar uma caixa existente que está com erro Pré-requisitos :::error Desligue a ClaudIA para a caixa que está criando antes da conexão. Quando um e-mail novo é conectado, o Cloud Chat puxa o histórico de e-mails como novas conversas — se a ClaudIA estiver ligada, ela passará a respondê-los. ::: - Estar logado como administrador no Cloud Chat - O e-mail deve ser uma caixa de usuário (login + senha) — não pode ser grupo - Para Microsoft: o e-mail precisa ser a conta principal da conta Microsoft - Para IMAP/SMTP: acesso às configurações do provedor para ativar IMAP e obter endereço/porta dos servidores Sobre este tutorial O Cloud Chat suporta três caminhos para conectar uma caixa de e-mail: - Google (OAuth) — para Gmail e Google Workspace, via Sign in with Google - Microsoft (OAuth) — para Outlook.com e Microsoft 365, via Sign in with Microsoft - Outros provedores (IMAP/SMTP) — para qualquer outro provedor, com configuração manual :::info Google e Microsoft deprecaram suporte a integrações via IMAP — para esses dois, usamos integrações nativas (OAuth). Para todos os outros provedores, IMAP/SMTP é o caminho. ::: Pule direto para a etapa do seu provedor: - Caminho A — Google (Gmail / Workspace) - Caminho B — Microsoft (Outlook / 365) - Caminho C — Outros provedores via IMAP/SMTP Vídeos de referência: https://www.loom.com/embed/f97da4387d464ce998ca54a6c271dcc9 https://www.loom.com/embed/c28480dab2b5482c93f2801b4c9355a9 https://www.loom.com/embed/1114432b7f2a4c8b99f592b9dd002a3f Passo a passo Etapa 1 — Acessar Configurações de caixa 1. Acesse Configurações no Cloud Chat 1. Vá em Caixa de Entrada → Adicionar Caixa de Entrada 1. Selecione o canal E-mail — em seguida escolha o provedor (Google, Microsoft ou Outros provedores) Caminho A — Google (Gmail / Workspace) Use quando a caixa for Gmail ou Google Workspace — integração via OAuth (Sign in with Google). :::info O aplicativo de conexão nativa com o Gmail está em fase beta aguardando aprovação do Google, mas está funcional. ::: 1. Selecione Google como provedor Após selecionar E-mail, clique em Google. 2. Faça o login Google 1. Insira o endereço de e-mail que deseja conectar 1. Clique em Sign in with Google e siga o login Google 2. Selecione a conta e aceite as permissões solicitadas 3. Adicione os agentes Selecione os agentes que terão acesso à caixa. :::success Pronto! A caixa Gmail está integrada ao Cloud Chat. ::: Limitações de sincronização (Google): - Apenas mensagens da Caixa de Entrada são sincronizadas para o Cloud Chat - Mensagens em outras pastas ou em spam não são sincronizadas automaticamente Para mover mensagens de spam automaticamente, crie uma regra no Gmail: https://www.loom.com/share/4dde1712265c411c841c37d7a1e264df Caminho B — Microsoft (Outlook / 365) Use quando a caixa for Outlook.com ou Microsoft 365 — integração via OAuth (Sign in with Microsoft). 1. Habilite POP/IMAP no Outlook 1. Acesse Settings → Mail → Forwarding and IMAP em outlook.live.com 1. No bloco POP and IMAP, ative Let devices and apps use IMAP 1. Clique em Save 2. Confirme que o e-mail é o principal 1. Acesse Minha Conta Microsoft → Suas Informações → Editar Informações da Conta 2. Verifique que o e-mail a conectar é a conta principal :::warning Se o e-mail não for o principal, marque-o como tal clicando em Tornar o principal. Caixas secundárias não conseguem conectar. ::: 3. Faça o login Microsoft no Cloud Chat Após selecionar E-mail e escolher Microsoft: 1. Informe o endereço de e-mail 2. Clique em Sign in with Microsoft — você será redirecionado ao login Microsoft :::warning Se você tem outras contas Microsoft na mesma máquina, uma delas pode vir preenchida automaticamente. Faça logout da conta Microsoft anterior antes ou — recomendado — faça a configuração em aba anônima. ::: 4. Adicione os agentes Após o redirecionamento de volta ao Cloud Chat, selecione os agentes que terão acesso e clique em Adicionar agentes. :::success Pronto! Sua caixa Outlook/Microsoft 365 está integrada ao Cloud Chat. ::: Caminho C — Outros provedores via IMAP/SMTP Use quando a caixa for de qualquer outro provedor (Zimbra, Yahoo, provedor próprio etc.) — configuração manual via IMAP/SMTP. 1. Ative IMAP no provedor 1. Acesse as configurações do seu e-mail 2. Ative o encaminhamento IMAP 3. Copie as informações de conexão (endereço, porta) 2. Nomeie a caixa no Cloud Chat Após selecionar E-mail e escolher Outros provedores: 1. Nomeie a caixa e insira o e-mail 1. Clique em Criar canal de e-mail 3. Adicione agentes Selecione os agentes que vão atuar na caixa e clique em Adicionar agentes. 4. Configure o IMAP 1. Clique em Mais configurações 1. Vá em Configuração e ative o IMAP 1. Insira endereço, porta, login e senha :::warning Se o provedor tem autenticação de dois fatores, use a senha de app gerada — não a senha pessoal. ::: Endereço e porta padrão (exemplos): | Provedor | Endereço IMAP | Porta | | --- | --- | --- | | Google | imap.gmail.com | 993 | 1. Clique em Atualizar as configurações de IMAP 5. Configure o SMTP 1. Ative o SMTP 1. Insira endereço, porta, login e senha (autenticação de dois fatores: use a senha de app) Endereço e porta padrão (exemplos): | Provedor | Endereço SMTP | Porta | | --- | --- | --- | | Google | smtp.gmail.com | 587 | 1. No campo Domínio, insira o mesmo do endereço do SMTP :::info Para a maioria dos casos, mantenha as opções de criptografia, SSL e autenticação no padrão (STARTTLS, none, login). ::: 1. Clique em Atualizar a configuração de SMTP :::success Pronto! Sua caixa de e-mail está conectada ao Cloud Chat. ::: Reconectar em caso de erro Vale para caixas Google e Microsoft (caminhos A e B). Em caso de erro, a caixa de entrada exibe um alerta em vermelho. Para reconectar: 1. Acesse Configurações → Caixas de Entrada → Configurações 2. Na faixa vermelha, clique em Clique aqui para reconectar 3. Faça o login Google ou Microsoft novamente conforme o caminho original :::info Não é necessário excluir a caixa para reconectar. ::: Observações - Para enviar disparo proativo via e-mail: Como enviar mensagens proativas unitárias no Cloud Chat - Para habilitar continuidade de conversa entre canais (chat → e-mail): Como habilitar continuidade de conversas por e-mail - Erro 550 5.7.515 em Google Workspace: Como corrigir o erro 550 5.7.515 — Autenticação de e-mail via Google Workspace

Última atualização em May 26, 2026

Como integrar o Web Widget do Cloud Chat em aplicativos mobile

Quando usar - Você quer adicionar o Cloud Chat dentro de um app mobile (Flutter, React Native, iOS, Android) - Você não tem SDK nativo disponível ainda e quer uma solução funcional já - Você quer reaproveitar o Web Widget já configurado no painel do Cloud Chat Pré-requisitos - Ter uma caixa de entrada do tipo Web Widget já configurada — ver Como instalar o Web Widget do Cloud Chat no site - Acesso ao código fonte do app mobile pra adicionar uma WebView Sobre este artigo Atualmente, o Cloud Chat pode ser integrado em apps mobile por meio do Web Widget usando o componente WebView de cada plataforma. Como funciona O Web Widget do Cloud Chat é distribuído como um script JavaScript, gerado automaticamente durante a configuração de uma caixa de entrada do tipo Web Widget no painel. Esse script pode ser incorporado em uma WebView dentro do app mobile (Flutter, React Native, Android nativo, iOS nativo). Permite que o chat seja renderizado dentro do app, com experiência próxima à do Web Widget original. :::info Exemplo: em React Native, embute o widget num <WebView> apontando para a URL onde o script foi inserido — garantindo a comunicação completa com o Cloud Chat. ::: SDKs nativos :::warning Ainda não disponibilizamos SDKs nativos oficiais para Flutter, React Native, Android ou iOS. Temos planos de lançar SDKs no futuro, mas sem data definida. Enquanto isso, o uso via WebView é a única forma recomendada e suportada oficialmente. ::: Vantagens e limitações | Aspecto | WebView | | --- | --- | | Compatibilidade | Funciona em qualquer app com suporte a WebView | | Esforço de implementação | Baixo — basta incluir o script gerado pelo Cloud Chat | | Experiência de uso | Similar ao Web Widget | | Limitação | Menor flexibilidade de personalização e performance que um SDK nativo | Passo a passo Etapa 1 — Criar inbox Web Widget no Cloud Chat Crie uma nova caixa de entrada do tipo Web Widget no painel do Cloud Chat. Etapa 2 — Copiar o script Copie o script gerado na etapa de configuração da inbox. Etapa 3 — Hospedar uma página HTML simples Insira o script em uma página HTML simples hospedada pelo seu app (ou em servidor próprio). Etapa 4 — Carregar dentro da WebView Aponte a WebView do seu app para essa página HTML. Etapa 5 — Testar Valide a comunicação e a aparência do widget dentro do aplicativo. Roadmap :::info Estamos avaliando o desenvolvimento de SDKs nativos para Flutter e React Native, com recursos avançados como notificações push e controle de sessão nativo. No momento, sem data definida para lançamento. ::: Observações - Para o passo a passo completo de instalação do Web Widget no site (com passagem de dados do contato): Como instalar o Web Widget do Cloud Chat no site - Para sessão compartilhada entre abas/contextos: Como compartilhar a sessão do Web Widget entre abas do navegador - Para múltiplas conversas e histórico (área logada): Como ativar múltiplas conversas e histórico no Web Widget

Última atualização em May 21, 2026

Como compartilhar a sessão do Web Widget entre abas do navegador

Quando usar - O usuário abre o seu site em múltiplas abas e você quer que o widget reconheça a mesma identidade em todas - Sua aplicação permite múltiplas abas abertas simultaneamente - Você já usa (ou quer usar) Validação de Identidade do widget e quer evitar exigir login em cada aba Pré-requisitos - Web Widget já configurado com Validação de Identidade (Identity Validation) habilitada - user_id único por usuário no seu sistema - Backend disponível para gerar identifier_hash (opção recomendada) - Web Widget instalado — ver Como instalar o Web Widget do Cloud Chat no site Sobre este artigo Este guia explica como manter a mesma sessão de usuário do Web Widget Cloud Chat em duas ou mais abas, sem exigir que cada aba esteja autenticada. Cenário típico: o usuário abre o site em duas abas e inicia uma conversa pelo widget em uma delas. Na segunda aba, o widget deve reconhecer o mesmo usuário e exibir o mesmo histórico de conversas. Como funciona (explicação simplificada) 1. user_id = "nome no crachá" — identifica quem é o usuário 2. identifier_hash = "carimbo de autenticidade" — prova que o crachá é verdadeiro 3. O Cloud Chat confere o carimbo (usando uma chave secreta que só o servidor conhece) antes de liberar acesso ao histórico Fluxo entre abas :::info Ponto-chave: cada aba precisa chamar setUser() independentemente. O cookie cw_user_* é compartilhado automaticamente entre abas (mesmo domínio), mas o authToken interno do widget é por instância (por aba). Por isso, ambas as abas precisam ter acesso ao user_id e identifier_hash para inicializar corretamente. ::: Opção recomendada: Endpoint server-side Esta é a opção mais segura. O identifier_hash nunca é armazenado no navegador — é obtido sob demanda a partir de um endpoint protegido pela autenticação da sua aplicação. Backend (Node.js / Express) const crypto = require('crypto'); app.get('/api/widget-identity', authMiddleware, (req, res) => { const userId = String(req.user.id); const hmacToken = process.env.CLOUDCHAT_HMAC_TOKEN; const identifierHash = crypto .createHmac('sha256', hmacToken) .update(userId) .digest('hex'); res.json({ user_id: userId, identifier_hash: identifierHash, name: req.user.name, email: req.user.email, }); }); Backend (Ruby on Rails) class Api::WidgetIdentityController < ApplicationController before_action :authenticate_user! def show user_id = current_user.id.to_s hmac_token = ENV['CLOUDCHAT_HMAC_TOKEN'] identifier_hash = OpenSSL::HMAC.hexdigest('sha256', hmac_token, user_id) render json: { user_id: user_id, identifier_hash: identifier_hash, name: current_user.name, email: current_user.email } end end Backend (Python / Django) import hmac import hashlib from django.http import JsonResponse from django.contrib.auth.decorators import login_required from django.conf import settings @login_required def widget_identity(request): user_id = str(request.user.id) identifier_hash = hmac.new( settings.CLOUDCHAT_HMAC_TOKEN.encode(), user_id.encode(), hashlib.sha256 ).hexdigest() return JsonResponse({ 'user_id': user_id, 'identifier_hash': identifier_hash, 'name': request.user.get_full_name(), 'email': request.user.email, }) Frontend (qualquer aba) <script> window.cloudchatSettings = { // ... configurações do widget }; window.addEventListener('cloudchat:ready', async function () { try { const response = await fetch('/api/widget-identity', { credentials: 'include', }); if (!response.ok) { console.error('Falha ao obter identidade do widget'); return; } const { user_id, identifier_hash, name, email } = await response.json(); window.$cloudchat.setUser(user_id, { identifier_hash: identifier_hash, name: name, email: email, }); } catch (error) { console.error('Erro ao configurar usuário do widget:', error); } }); </script> :::success Vantagens: - O hmac_token nunca sai do servidor - O identifier_hash nunca é persistido no navegador - Cada aba obtém dados frescos, garantindo consistência - Logout retorna 401, e o widget não é identificado ::: Opção alternativa: localStorage (com ressalvas) Use somente se sua aplicação não tem backend disponível para fornecer o identifier_hash (SPAs puramente estáticas). :::warning Aviso de segurança: o localStorage é acessível por qualquer script JavaScript no mesmo domínio. Se o site for vulnerável a XSS, um atacante pode ler o identifier_hash armazenado. ::: Aba que gera os dados (ex: página de login) const userData = { user_id: '12345', identifier_hash: 'abc123def456...', name: 'Maria Silva', email: '[email protected]', }; localStorage.setItem('cloudchat_user', JSON.stringify(userData)); Qualquer aba que carrega o widget window.addEventListener('cloudchat:ready', function () { const stored = localStorage.getItem('cloudchat_user'); if (!stored) return; try { const { user_id, identifier_hash, name, email } = JSON.parse(stored); window.$cloudchat.setUser(user_id, { identifier_hash, name, email, }); } catch (e) { console.error('Dados do widget inválidos no localStorage'); localStorage.removeItem('cloudchat_user'); } }); Ao fazer logout localStorage.removeItem('cloudchat_user'); window.$cloudchat.reset(); Opção avançada: sessionStorage + BroadcastChannel Combina a não persistência do sessionStorage com sincronização entre abas via BroadcastChannel API. Os dados existem apenas enquanto pelo menos uma aba está aberta. Inicialização (em todas as abas) const CHANNEL_NAME = 'cloudchat-session'; const STORAGE_KEY = 'cloudchat_user'; const channel = new BroadcastChannel(CHANNEL_NAME); channel.onmessage = (event) => { if (event.data.type === 'session-data') { sessionStorage.setItem(STORAGE_KEY, JSON.stringify(event.data.payload)); initWidget(event.data.payload); } if (event.data.type === 'session-request') { const stored = sessionStorage.getItem(STORAGE_KEY); if (stored) { channel.postMessage({ type: 'session-data', payload: JSON.parse(stored) }); } } if (event.data.type === 'session-clear') { sessionStorage.removeItem(STORAGE_KEY); window.$cloudchat.reset(); } }; function initWidget(userData) { window.$cloudchat.setUser(userData.user_id, { identifier_hash: userData.identifier_hash, name: userData.name, email: userData.email, }); } window.addEventListener('cloudchat:ready', function () { const stored = sessionStorage.getItem(STORAGE_KEY); if (stored) { initWidget(JSON.parse(stored)); return; } channel.postMessage({ type: 'session-request' }); // Timeout: se nenhuma aba responder em 2s, esta é a primeira aba }); Ao autenticar (aba principal) const userData = { user_id, identifier_hash, name, email }; sessionStorage.setItem(STORAGE_KEY, JSON.stringify(userData)); channel.postMessage({ type: 'session-data', payload: userData }); initWidget(userData); Ao fazer logout sessionStorage.removeItem(STORAGE_KEY); channel.postMessage({ type: 'session-clear' }); window.$cloudchat.reset(); :::success Vantagens: - Dados não persistem após fechar todas as abas - Sincronização em tempo real entre abas - Sem dependência de cookies acessíveis por JS ::: :::warning Limitações: - BroadcastChannel não é suportado no IE11 (mas funciona em todos os navegadores modernos) - Se o usuário fechar todas as abas, precisa autenticar novamente ::: Segurança O que NUNCA fazer :::error Nunca exponha o hmac_token (chave secreta) no frontend. É a chave que o servidor usa para gerar o identifier_hash. Se um atacante a obtém, pode personificar qualquer usuário. // ❌ ERRADO const hmacToken = 'sua-chave-secreta-aqui'; const hash = CryptoJS.HmacSHA256(userId, hmacToken).toString(); ::: Riscos de armazenar identifier_hash no localStorage Contextualização do risco O identifier_hash por si só não é um segredo de alto valor: - É uma assinatura (HMAC) do user_id, não um token de acesso - Um atacante precisa do user_id correspondente E da validação HMAC ativa para personificar alguém - Não concede acesso a sistemas além do widget de chat - O impacto de vazamento é limitado: o atacante poderia, no máximo, abrir conversas no widget como aquele usuário Ainda assim, a opção server-side é preferível por eliminar a exposição. Tabela comparativa de armazenamento Boas práticas :::success 1. Proteja-se contra XSS — é a ameaça nº 1 para qualquer dado no navegador. Use Content Security Policy (CSP), sanitize inputs, mantenha dependências atualizadas 2. Gere identifier_hash no servidor, nunca no frontend 3. Use HTTPS sempre — sem exceções 4. Limite a superfície de ataque — carregue o widget apenas em páginas necessárias 5. Limpe dados ao fazer logout — remova localStorage/sessionStorage e chame $cloudchat.reset() ::: Referências: - OWASP HTML5 Security Cheat Sheet - Auth0 — Secure Browser Storage Reset de sessão Use window.$cloudchat.reset() para limpar a sessão. Internamente: 1. Fecha o chat se estiver aberto 2. Remove o cookie cw_conversation (token de sessão da conversa) 3. Remove o cookie cw_user_{websiteToken} (identidade do usuário) 4. Recarrega o iframe do widget, iniciando sessão limpa Quando usar Exemplo: logout completo function onLogout() { // 1. Limpar dados armazenados (se localStorage) localStorage.removeItem('cloudchat_user'); // 2. Resetar o widget if (window.$cloudchat) { window.$cloudchat.reset(); } // 3. Redirecionar para página de login window.location.href = '/login'; } Troubleshooting Problema: Widget mostra "Iniciar nova conversa" em vez do histórico Causa provável: setUser() não foi chamado, ou foi chamado com identifier_hash inválido. Solução: 1. Verifique no console se há erros de rede (HTTP 401 no endpoint /widget/contact) 2. Confirme que o identifier_hash foi gerado com o hmac_token correto 3. Confirme que o user_id passado para setUser() é o mesmo usado para gerar o hash Problema: Abas mostram usuários diferentes Causa provável: cada aba está chamando setUser() com dados diferentes. Solução: 1. Endpoint server-side: confirme que ambas as abas chamam o mesmo endpoint e usuário logado 2. localStorage: verifique se os dados foram gravados antes da segunda aba ler Problema: Após logout, widget ainda mostra dados do usuário anterior Causa provável: $cloudchat.reset() não foi chamado, ou os cookies não foram limpos. Solução: 1. Chame window.$cloudchat.reset() antes ou durante o logout 2. Limpe localStorage/sessionStorage se estiver armazenando dados lá 3. Verifique se o cookie cw_user_* foi removido (DevTools → Application → Cookies) Problema: setUser() lança erro "Identifier should be a string or a number" Causa: o user_id está como undefined, null ou objeto. Solução: garanta que é string ou número: window.$cloudchat.setUser(String(userData.user_id), { ... }); Problema: setUser() lança erro "User object should have one of the keys..." Causa: o objeto não contém nenhuma das chaves obrigatórias. Solução: inclua ao menos uma de name, email ou avatar_url: window.$cloudchat.setUser(userId, { identifier_hash: hash, name: 'Nome do Usuário', }); Problema: BroadcastChannel não sincroniza entre abas Causa provável: abas em domínios diferentes (ex: app.exemplo.com vs www.exemplo.com). Solução: BroadcastChannel só funciona entre páginas do mesmo domínio (same-origin). Garanta que todas as abas usam exatamente a mesma URL base. Observações - Para a instalação básica do Web Widget: Como instalar o Web Widget do Cloud Chat no site - Para múltiplas conversas e histórico (que essa feature pressupõe): Como ativar múltiplas conversas e histórico no Web Widget - Para uso em apps mobile via WebView: Como integrar o Web Widget em aplicativos mobile

Última atualização em May 21, 2026