O que é
O Chat Autenticado (Intranet) é uma forma de publicar o agente dentro de uma plataforma em que os usuários já estão logados, como uma intranet, uma área do cliente, um sistema web ou um ERP.
O chat reconhece automaticamente quem é o usuário, sem pedir login de novo, e mantém o histórico de conversa de cada pessoa separado e seguro.
1. Quando usar
| Forma de publicação | Quando usar |
|---|---|
| Pública (link ou site) | Sites abertos e landing pages. Qualquer visitante pode falar com o agente. |
| Intranet (acesso autenticado) | Sistemas em que o usuário já fez login na sua plataforma. O chat herda a identidade dele (nome, e-mail e ID do seu sistema). |
| Login e senha compartilhados | Sites restritos em que você quer proteger o chat com uma senha compartilhada. |
Use o modo Intranet quando você quer que:
- O atendimento já comece sabendo quem é o usuário (sem formulário de identificação);
- O histórico de conversas fique vinculado ao ID do usuário no seu sistema;
- Ninguém consiga se passar por outro usuário ou ver a conversa de terceiros.
2. Criando a conexão
- Entre no projeto, clique em Robôs Agentes de IA no menu lateral e abra o agente.
- Clique na aba Canais.
- Clique em Adicionar canal. Se o agente ainda não tem nenhuma conexão, a lista de canais já aparece direto.
- No grupo Web, escolha Web autenticada (intranet) e clique em Selecionar.
- Em Destino e acesso, clique em Continuar. A plataforma avisa que uma conexão de intranet será criada.
- Em Configuração, preencha:
- Nome da conexão: um nome interno para você reconhecer depois, como “Portal do Cliente”;
- Domínios permitidos (opcional): os sites em que o chat pode rodar, um por linha.
- Clique em Criar conexão.
Na tela “Conexão criada”, clique em Gerenciar conexão e instruções completas. Diferente dos outros modos, a intranet não tem um código pronto para colar: as credenciais e os exemplos ficam na página da conexão.
⚠️ Atenção: criar a conexão não publica uma versão do agente. Enquanto nenhuma versão for publicada, o chat atende com o rascunho atual. Veja como publicar em Seu Primeiro Agente.
3. O que a plataforma mostra na conexão
Para voltar à conexão depois, abra a aba Canais, encontre a conexão em Suas conexões e clique em Gerenciar.
3.1 Exemplos de código
Em Instalação, escolha o que copiar:
- Backend (seu servidor): a chamada que o seu servidor faz para autenticar cada usuário;
- Frontend (navegador): o código que abre o chat na página com o token devolvido pelo seu backend.
Os dois já vêm com o Project ID do seu projeto. Eles correspondem ao Modo A de integração. Existem duas formas de colocar o chat na sua plataforma, explicadas na seção 5.
3.2 Segredo da integração
Em Credenciais e ações, o bloco Segredo da integração (intranet) guarda a chave secreta da conexão. É ela que o servidor da sua plataforma usa para autenticar os usuários no chat. O segredo fica oculto: clique em Revelar segredo para ver e copiar, e em Ocultar quando terminar. Nos exemplos de código, ele aparece como SEU_SECRET_TOKEN.
⚠️ Nunca coloque o segredo no código do navegador (HTML ou JavaScript). Ele deve ficar só no backend da sua aplicação. Se vazar, qualquer pessoa poderá gerar acessos em nome dos seus usuários.
4. Como tudo se conecta
┌─────────────────────┐ 1. usuário logado ┌──────────────────────┐
│ Usuário na sua │ ─────────────────────▶ │ Backend da sua │
│ plataforma │ │ plataforma │
└─────────────────────┘ └──────────┬───────────┘
│ 2. POST /intranet-auth
│ (segredo + dados do usuário)
▼
┌──────────────────────┐
│ API Caramelo │
│ → valida o segredo │
│ → cria/identifica │
│ o contato │
│ → devolve o token │
└──────────┬───────────┘
│ 3. real_time_access_token (24h)
▼
┌──────────────────────┐
│ Sua página HTML │
│ recebe o token e │
│ carrega o script │
└──────────┬───────────┘
│ 4. chat abre já identificado
▼
┌──────────────────────┐
│ Chatbot com o │
│ histórico daquele │
│ usuário │
└──────────────────────┘
Em resumo:
- O usuário faz login normalmente na sua plataforma;
- O seu backend chama a API da Caramelo com o segredo da integração e os dados do usuário;
- A API devolve um token temporário exclusivo daquele usuário (campo
real_time_access_token); - Sua página recebe esse token e o passa ao script do chat (parâmetro
secure_connection_token); - O chat abre já identificado, com o histórico de conversas daquela pessoa.
📌 Atenção: um mesmo token, dois nomes.
Onde ele aparece Nome usado Na resposta da API (seu backend recebe) real_time_access_tokenNo script do chat (sua página envia) secure_connection_tokenÉ o mesmo valor: o seu backend recebe
real_time_access_tokene a sua página o repassa ao script comosecure_connection_token. Ao longo deste guia, sempre que você virsecure_connection_token, leia-se: “oreal_time_access_tokenque a API devolveu”.
💡 Dica: gere o token a cada carregamento de página, porque ele expira em 24 horas. Não reutilize tokens antigos nem compartilhe o mesmo token entre usuários diferentes.
5. As duas formas de integração
Existem dois modos de colocar o chat autenticado na sua plataforma. Os dois usam o mesmo script (sdk/latest/client.js) e a mesma chamada intranet-auth no backend. O que muda é como o token chega até o chat:
| Modo A: token injetado (SSR) | Modo B: sob demanda (async) | |
|---|---|---|
| Quem busca o token | Seu backend, ao renderizar a página | O próprio script do chat, chamando um endpoint do seu backend |
| Quando o chat abre | Automaticamente, ao carregar a página | Quando a página chamar .start() |
| Token aparece no HTML? | Sim, injetado na página | Não, ele trafega só na resposta do seu endpoint |
| Ideal para | Sites renderizados no servidor (PHP, WordPress, templates, Next.js SSR) | Aplicações React ou SPA, páginas com cache ou CDN, abrir o chat só ao clicar num botão |
🤔 Não sabe qual escolher? Se a sua página é gerada no servidor a cada acesso, use o Modo A (mais simples). Se a sua aplicação roda no navegador (React, Vue, Angular) ou você quer controlar o momento de abertura do chat, use o Modo B.
5.1 Modo A: token injetado pelo servidor (SSR)
Passo 1 (backend): ao renderizar a página, seu servidor chama a API da Caramelo com os dados do usuário logado:
curl -X POST https://api.carameloai.com/api/chatbox/project/SEU_PROJECT_ID/intranet-auth \
-H "Authorization: Bearer SEU_SECRET_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"external_customer_id": "user-123",
"name": "Nome do Usuário",
"email": "usuario@exemplo.com"
}'
| Campo | Descrição |
|---|---|
external_customer_id | Obrigatório. O ID único do usuário no seu sistema. É ele que vincula o histórico de conversas. |
name | Nome do usuário (exibido para os atendentes). |
email | E-mail do usuário. |
Passo 2 (frontend): seu servidor injeta o token retornado no HTML da página, junto com o script do chat:
<!-- Caramelo AI chatbot (intranet) -->
<script src="https://static.carameloai.com/sdk/latest/client.js"></script>
<script>
window.CarameloChatbot
.create({
secure_connection_token: 'TOKEN_RETORNADO_PELO_SEU_BACKEND',
project_id: 'SEU_PROJECT_ID'
})
.start();
</script>
O script carrega e abre o chat automaticamente, já identificado.
📌 Já instalou com o código antigo? O formato anterior, com
var carameloaiChatbote o scriptprod/index.js, continua funcionando.
5.2 Modo B: sob demanda (async)
┌──────────────────┐ 1. abre a página ┌───────────────────────────┐
│ Usuário logado │ ──────────────────▶ │ Página carrega client.js │
└──────────────────┘ │ (nada aparece ainda) │
└────────────┬──────────────┘
│ 2. chat.start()
▼
┌───────────────────────────┐
│ SDK faz POST no SEU │
│ endpoint (mesma origem) │
└────────────┬──────────────┘
│ 3. seu backend chama o
│ intranet-auth (com o Secret)
▼
┌───────────────────────────┐
│ Token volta ao navegador │
│ → chat abre identificado │
└───────────────────────────┘
Passo 1 (backend): crie um endpoint no seu domínio, como /api/chatbot-token. Ele identifica o usuário logado pela sessão, chama o intranet-auth e devolve o token:
// Exemplo em Node.js / Express
app.post('/api/chatbot-token', async (req, res) => {
const user = req.user; // usuário já autenticado na SUA plataforma
if (!user) {
return res.status(401).json({ error: 'unauthenticated' });
}
const response = await fetch(
'https://api.carameloai.com/api/chatbox/project/SEU_PROJECT_ID/intranet-auth',
{
method: 'POST',
headers: {
'Authorization': 'Bearer SEU_SECRET_TOKEN', // nunca exposto ao navegador
'Content-Type': 'application/json'
},
body: JSON.stringify({
external_customer_id: user.id,
name: user.name,
email: user.email
})
}
);
const data = await response.json();
res.json({ real_time_access_token: data.real_time_access_token });
});
Passo 2 (frontend): crie o chat apontando para o seu endpoint, com autoStart: false, e inicie quando quiser:
<script src="https://static.carameloai.com/sdk/latest/client.js"></script>
<script>
var chat = window.CarameloChatbot.create(
{
project_id: 'SEU_PROJECT_ID',
auth_endpoint: '/api/chatbot-token', // endpoint no SEU domínio
on_error: function (err) {
console.error('Falha ao iniciar o chat', err);
}
},
{ autoStart: false }
);
// O chat só abre quando você mandar, por exemplo ao clicar num botão:
document.getElementById('abrir-chat').addEventListener('click', function () {
chat.start();
});
</script>
Se você já usa o formato antigo, com var carameloaiChatbot e CarameloChatbotClient.start(), ele continua funcionando.
| Direção | Detalhes |
|---|---|
| SDK → seu endpoint | POST <auth_endpoint>, sem body. O usuário é identificado pela sessão do seu sistema |
| Seu endpoint → API Caramelo | POST /api/chatbox/project/{PROJECT_ID}/intranet-auth com Bearer + dados do usuário |
| Seu endpoint → SDK | JSON com pelo menos { "real_time_access_token": "..." } |
6. Ajustando a aparência
Em Gerenciar, as seções Configurações e Avançado têm as mesmas opções do Chat Público: posição do balão, modo compacto, manter chat aberto, container fixo, temporização e domínios permitidos. Veja o que cada uma faz no guia do Chat Público. Clique em Salvar depois de mudar.
7. Perguntas frequentes
O usuário precisa fazer login de novo no chat?
Não. A identidade dele é transmitida de forma segura pelo seu backend, e o chat já abre sabendo quem ele é.
Minha aplicação é React/SPA. Qual modo usar?
O Modo B. No navegador não dá para esconder o segredo da integração, então o chat chama um endpoint do seu próprio backend, que faz a autenticação com segurança.
Posso abrir o chat só quando o usuário clicar em um botão?
Sim. Use o Modo B e chame chat.start() no clique.
O que acontece se o token expirar?
O token dura 24 horas. Basta gerar um novo no próximo carregamento da página (Modo A) ou na próxima chamada do start() (Modo B).
Posso usar a mesma conexão em vários sistemas?
Sim, mas o recomendado é criar uma conexão, com o seu próprio segredo, para cada sistema ou ambiente. Assim fica mais fácil controlar e revogar o acesso.
E se o segredo vazar?
Exclua a conexão em Gerenciar > Zona de risco > Excluir conexão e crie uma nova. A conexão nova vem com outro segredo.