Pular para o conteúdo principal

Identificar o usuário logado

3 min de leituraAtualizado em 26 out. 2026

Sem identificação, cada aparelho é um visitante anônimo: o histórico fica só naquele aparelho. Com o usuário identificado, ele vê as conversas em qualquer aparelho (e no site), e o atendente sabe com quem está falando.

É o mesmo mecanismo do webchat no site: o seu backend assina um JWT dizendo quem é o usuário, e o app entrega esse token à Atalia.

O caminho do token
login no app → seu backend assina o JWT → app chama identify(jwt) → a Atalia confere a assinatura
O segredo nunca vai no app

O JWT é assinado no seu backend com o segredo do canal. Um segredo dentro do app pode ser extraído, e com ele qualquer pessoa se passa por qualquer usuário.

1. Gerar o JWT no seu backend​

O segredo, as regras do token (sub, exp de no máximo 1 hora, name, email) e exemplos em Node e PHP estão em Identificação de usuários no Webchat. O app só recebe o token pronto, numa rota sua que exige login.

Duas regras pesam mais no app:

  • Gere um token novo a cada identificação. Ele vale no máximo 1 hora, e um token com jti já usado é recusado (REPLAYED).
  • Ao abrir o app já logado, confira isIdentified. O SDK guarda a sessão identificada entre aberturas do app, então normalmente não há o que fazer. Se estiver falso (a sessão identificada expira depois de 30 dias sem uso), identifique de novo.

2. Identificar depois do login​

Kotlin
lifecycleScope.launch {
try {
val contact = Atalia.identify(jwtDoSeuBackend)
// contact.externalId, contact.contactId, contact.name
} catch (error: AtaliaException) {
Log.w("Atalia", "identify falhou: ${error.code}")
}
}

De Java, use a versão com callback, que responde na thread principal:

Java
Atalia.identify(jwtDoSeuBackend, new AtaliaCallback<AtaliaContact>() {
@Override public void onSuccess(AtaliaContact contact) { }
@Override public void onError(AtaliaException error) { }
});

Funciona com o chat aberto ou fechado. Com o chat na tela, a conversa recarrega já com o histórico do usuário.

3. Sair no logout do app​

Kotlin
lifecycleScope.launch { Atalia.logout() }

O logout encerra a sessão identificada na Atalia e o aparelho volta a ser um visitante anônimo, sem o histórico de quem saiu. Quem usar o app depois no mesmo aparelho não vê as conversas do usuário anterior e não recebe as notificações dele.

Códigos de erro​

O identify falha com o mesmo código que a Atalia devolve, em AtaliaException.code (Android) ou AtaliaError.code (iOS).

CódigoO que aconteceu
NO_SECRET_CONFIGUREDO canal não tem segredo de identificação. Gere no painel: Editar canal › Instalação › Identificação de usuários.
INVALID_SIGNATUREO token foi assinado com outro segredo (ou o segredo foi regenerado).
EXPIREDO token passou do exp. Confira o relógio do servidor que assina.
INVALID_TOKENToken malformado, sem sub ou exp, com validade acima de 1 hora, ou vazio.
REPLAYEDUm token com o mesmo jti já foi usado. Gere um novo a cada chamada.
TIMEOUTCom o chat aberto, ele não respondeu em 20 segundos (sem conexão, por exemplo).
NOT_CONFIGUREDO configure ainda não foi chamado.

Falha de rede chega como o erro da própria plataforma (IOException no Android, URLError no iOS). Na versão com callback do Android, ela vira AtaliaException com a mensagem do erro, ou NETWORK_ERROR.