Visão geral
O editor de fluxos incorporado usa um fluxo de autenticação em 3 etapas que mantém seu client secret seguro no seu backend enquanto fornece ao iframe tokens de acesso de curta duração.
Pré-requisito: Criar um Client OAuth
Antes de iniciar a integração, você precisa criar um Client OAuth vinculado ao espaço de trabalho que será incorporado.
- Acesse o Dashboard do WhataBot
- Vá até a tela de Workspaces
- Clique em Editar no espaço de trabalho desejado
- Navegue até a aba Embed
- Clique em Criar Client e copie o
clientId e clientSecret
Guarde o clientSecret em local seguro. Ele só é exibido uma vez e deve ser armazenado apenas no seu backend.
Fluxo de autenticação
┌─────────────┐ ┌──────────────┐ ┌──────────────┐
│ Seu App │ │ Seu Backend │ │ WhataBot API│
│ (Frontend) │ │ │ │ │
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘
│ │ │
│ 1. Solicitar OTT │ │
│───────────────────>│ │
│ │ 2. POST /auth/ │
│ │ iframe-token │
│ │ (Basic Auth) │
│ │───────────────────>│
│ │ │
│ │ 3. Retorna OTT │
│ │<───────────────────│
│ │ │
│ 4. Retorna OTT │ │
│<───────────────────│ │
│ │ │
│ 5. POST /auth/exchange (ott) │
│────────────────────────────────────────>│
│ │ │
│ 6. access_token + refresh_token │
│<────────────────────────────────────────│
│ │ │
│ 7. Chamadas API com access_token │
│────────────────────────────────────────>│
Etapa 1: Obter um token de uso único (OTT)
Seu backend chama a API do WhataBot com Basic Auth usando as credenciais de cliente. Isso retorna um token de uso único válido por 60 segundos.
curl -X POST https://api.whatabot.app/api/auth/iframe-token \
-H "Authorization: Basic $(echo -n 'clientId:clientSecret' | base64)" \
-H "Content-Type: application/json"
Resposta:
{
"ott": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
O OTT expira após 60 segundos. Seu frontend deve trocá-lo antes que expire. Cada OTT só pode ser usado uma vez.
Por que usar um token de uso único?
O padrão OTT garante que o clientSecret nunca seja exposto em código frontend. Seu backend armazena o secret e gera tokens de curta duração e uso único que o frontend pode passar com segurança para o iframe.
Exemplo de integração
Aqui está um exemplo completo mostrando como integrar o editor incorporado em uma aplicação web:
Backend (Node.js)
// Endpoint do seu backend que o frontend chama para obter um OTT
app.post('/api/whatabot/ott', async (req, res) => {
const clientId = process.env.WHATABOT_CLIENT_ID;
const clientSecret = process.env.WHATABOT_CLIENT_SECRET;
const credentials = Buffer.from(`${clientId}:${clientSecret}`).toString('base64');
const response = await fetch('https://api.whatabot.app/api/auth/iframe-token', {
method: 'POST',
headers: {
'Authorization': `Basic ${credentials}`,
'Content-Type': 'application/json',
},
});
const { ott } = await response.json();
res.json({ ott });
});
Frontend (HTML/JavaScript)
<iframe id="whatabot-editor" src="https://flow.whatabot.app" style="width: 100%; height: 600px; border: none;"></iframe>
<script>
async function initEditor() {
// 1. Obter OTT do seu backend
const response = await fetch('/api/whatabot/ott', { method: 'POST' });
const { ott } = await response.json();
// 2. Passar OTT para o iframe via postMessage
const iframe = document.getElementById('whatabot-editor');
iframe.addEventListener('load', () => {
iframe.contentWindow.postMessage({ type: 'auth', ott }, 'https://flow.whatabot.app');
});
}
initEditor();
</script>