Este documento descreve o passo a passo para testar a conexão de uma conta WhatsApp com o backend usando o fluxo Hosted Auth do Unipile.
Validar que o backend consegue:
integrationO fluxo implementado no código é este:
POST /v1/integrations/unipile/whatsapp/hosted-linkPOST /v1/webhooks/unipile/hosted-authintegrationGET /v1/integrations/unipile/whatsapp/accountsAntes de testar, confirme estes pontos.
No arquivo .env, deixe configurado pelo menos:
UNIPILE_DSN=https://SEU-DOMINIO-UNIPILE
UNIPILE_API_KEY=SUA_API_KEY
UNIPILE_NOTIFY_SECRET=UM_SECRET_FORTE
JWT_SECRET=SEU_JWT_SECRET
APP_PUBLIC_URL=https://SUA-URL-PUBLICA-DO-BACKEND
Opcionalmente, você também pode configurar:
UNIPILE_SUCCESS_REDIRECT_URL=https://SUA-URL-PUBLICA-DO-BACKEND/v1/integrations/unipile/whatsapp/success
UNIPILE_FAILURE_REDIRECT_URL=https://SUA-URL-PUBLICA-DO-BACKEND/v1/integrations/unipile/whatsapp/failure
O callback do Unipile precisa alcançar o backend em uma URL pública.
Sem isso, o Unipile não conseguirá chamar:
POST /v1/webhooks/unipile/hosted-auth
Se estiver rodando localmente, use um túnel HTTPS, por exemplo:
ngrokcloudflared tunnelGaranta que a API PHP esteja no ar e acessível na URL pública configurada em APP_PUBLIC_URL.
A rota que gera o link Hosted Auth exige JWT.
O backend tenta resolver o operador pelo e-mail do usuário autenticado.
Idealmente, deve existir um registro em operator com:
company_id do usuáriooperator_email igual ao user_emailFaça login normalmente para obter o token.
Exemplo:
curl -X POST "http://localhost:8080/v1/login" \
-H "Content-Type: application/json" \
-d '{
"email": "admin@mixtech.com",
"password": "admin123"
}'
Copie o token retornado e use-o nos próximos requests.
Faça a chamada abaixo com o JWT:
curl -X POST "http://localhost:8080/v1/integrations/unipile/whatsapp/hosted-link" \
-H "Authorization: Bearer SEU_JWT" \
-H "Content-Type: application/json" \
-d '{"type":"create"}'
O backend deve responder com uma URL:
{
"status": "ok",
"code": "S_OK",
"message": "Request ok.",
"data": {
"url": "https://..."
}
}
Verifique:
UNIPILE_DSNUNIPILE_API_KEYUNIPILE_NOTIFY_SECRETErros comuns:
Unipile is not configuredUNIPILE_NOTIFY_SECRET is not configuredUnauthorizedFailed to create hosted auth linkAbra no navegador a URL recebida em data.url.
Complete o fluxo de conexão da conta WhatsApp dentro da página hospedada do Unipile.
Ao concluir a conexão, o Unipile deve chamar o backend em:
POST /v1/webhooks/unipile/hosted-auth
Esse callback é o que cria ou atualiza a integração da conta conectada.
APP_PUBLIC_URL corretaUNIPILE_NOTIFY_SECRET corretaJWT_SECRET consistenteDepois de concluir o fluxo, consulte as integrações cadastradas:
curl -H "Authorization: Bearer SEU_JWT" \
"http://localhost:8080/v1/integrations/unipile/whatsapp/accounts"
A resposta deve conter um item em items com campos como:
provideraccountIdaccountNamestatusisConnectedSe quiser confirmar direto no PostgreSQL, rode:
SELECT
integration_id,
company_id,
user_id,
operator_id,
integration_provider,
integration_account_id,
integration_account_name,
integration_status,
integration_is_connected,
integration_last_sync_at
FROM integration
WHERE integration_provider = 'whatsapp'
AND integration_deleted_at = 'infinity'
ORDER BY integration_id DESC;
Considere o teste bem-sucedido quando:
hosted-link retornar uma URLintegrationGET /v1/integrations/unipile/whatsapp/accounts listar a contaCausa provável:
hosted-auth não conseguiu alcançar o backendAPP_PUBLIC_URL inválidaUNIPILE_NOTIFY_SECRET incorretaInvalid callback identityCausa provável:
JWT_SECRET usada para assinar e validar o campo name não está consistenteUnauthorized no callbackCausa provável:
UNIPILE_NOTIFY_SECRET não bate com a usada no notify_urlCausa provável:
operator.operator_emailSe já existir uma integração e você quiser testar reconexão, use:
curl -X POST "http://localhost:8080/v1/integrations/unipile/whatsapp/hosted-link" \
-H "Authorization: Bearer SEU_JWT" \
-H "Content-Type: application/json" \
-d '{"type":"reconnect","integration_id":1}'
Este documento cobre apenas o teste de conexão da conta WhatsApp.
Depois que a conta estiver conectada, o próximo teste natural é validar o recebimento de mensagens em:
POST /v1/webhooks/unipilewebhook_event, client, conversation e message