Pular para o conteúdo principal

Referência do Android

5 min de leituraAtualizado em 25 out. 2026

Pacote ai.atalia.chat, artefato ai.atalia:chat:0.4.0. Tudo é chamado pelo objeto Atalia. Os métodos suspend têm uma versão com AtaliaCallback para quem chama de Java ou fora de uma corrotina.

Atalia​

Configuração​

MembroDescrição
configure(context: Context, channelToken: String, options: AtaliaOptions = AtaliaOptions())Inicia o SDK. Chame uma vez, no Application.onCreate. Chamar de novo troca o canal.
SDK_VERSION: StringVersão do SDK ("0.4.0").

Chat​

MembroDescrição
open(context: Context)Abre o chat numa activity do SDK: folha que sobe sobre o app ou tela cheia, conforme AtaliaOptions.presentation.
openConversation(context: Context, conversationId: Long)Abre direto numa conversa. Com o chat já aberto, só troca de conversa.

Identificação​

MembroDescrição
suspend identify(jwt: String): AtaliaContactLiga o visitante ao usuário logado. O JWT vem do seu backend. Lança AtaliaException.
identify(jwt: String, callback: AtaliaCallback<AtaliaContact>)O mesmo, com callback.
suspend logout()Encerra a sessão identificada; o aparelho volta a ser visitante anônimo.
logout(callback: AtaliaCallback<Unit>?)O mesmo, com callback (que pode ser null).

Não lidas e estado​

MembroDescrição
unreadCount: StateFlow<Int>Mensagens do atendente, da IA e do sistema ainda não lidas.
isIdentified: StateFlow<Boolean>A sessão pertence a um usuário identificado.
isChatOpen: StateFlow<Boolean>A tela do chat está aberta.
suspend refreshUnread(): IntConsulta as não lidas na Atalia e atualiza unreadCount. O SDK já consulta sozinho quando o app volta para a frente.
refreshUnread(callback: AtaliaCallback<Int>)O mesmo, com callback.

Eventos​

MembroDescrição
events: SharedFlow<AtaliaEvent>Eventos do chat, para coletar numa corrotina.
addListener(listener: AtaliaListener)Recebe os mesmos eventos por callback, na thread principal.
removeListener(listener: AtaliaListener)Para de receber.
Kotlin
lifecycleScope.launch {
Atalia.events.collect { event ->
when (event) {
is AtaliaEvent.MessageReceived -> Log.d("Atalia", "mensagem ${event.messageId}")
is AtaliaEvent.Error -> Log.w("Atalia", "erro ${event.code}")
else -> Unit
}
}
}

Notificações push​

MembroDescrição
setPushToken(token: String)Token do Firebase do aparelho. Pode chegar antes do configure: é aplicado quando ele vier.
clearPushToken()Tira o aparelho da Atalia.
isAtaliaNotification(data: Map<String, String>?): BooleanA notificação veio da Atalia?
handleNotification(context: Context, data: Map<String, String>?, title: String?, body: String?): BooleanPara o onMessageReceived. Atualiza as não lidas e mostra a notificação, a não ser que o chat esteja na tela. Devolve false quando não é da Atalia.
handleNotificationTap(activity: Activity, intent: Intent?): BooleanPara o onCreate e o onNewIntent da activity de entrada. Abre o chat na conversa da notificação. Devolve false quando não é da Atalia.

Botão flutuante​

MembroDescrição
showLauncher(activity: Activity, options: AtaliaLauncherOptions = AtaliaLauncherOptions()): AtaliaLauncherViewMostra o botão flutuante por cima da activity. Chamar de novo troca as opções.
hideLauncher(activity: Activity)Tira o botão.

AtaliaOptions​

Passadas no configure.

PropriedadeTipoPadrãoDescrição
baseUrlString"https://chat.atalia.ai"Origem do chat. Troque só para homologação ou para o domínio próprio do canal.
customDomainBooleanfalsetrue quando baseUrl é o domínio próprio vinculado ao canal.
closeButtonBooleantrueMostra o botão "Fechar". Desligue quando o chat for uma aba do app.
debugBooleanfalsePermite inspecionar o WebView pelo chrome://inspect. Nunca em produção.
urlHandler((Context, Uri) -> Boolean)?nullDecide como abrir os links tocados no chat. Devolva true se o app tratou; false abre pelo sistema.
notificationIconInt? (@DrawableRes)balão da AtaliaÍcone pequeno (monocromático) da notificação mostrada com o app aberto. Até a 0.2.0, o padrão era o ícone do app, que o sistema pode recusar.
presentationPresentationSHEETComo open mostra o chat: SHEET (folha que sobe sobre o app, com o fundo escurecido; arrastar a alça ou tocar fora fecha) ou FULL_SCREEN (tela cheia).

AtaliaEvent​

EventoQuando
ReadyO chat terminou de carregar.
Opened / ClosedA tela do chat abriu ou fechou.
Identified(externalId: String, contactId: Long)O visitante foi identificado.
LoggedOutA sessão identificada foi encerrada.
ConversationStarted(conversationId: Long)Uma conversa começou.
ConversationClosed(conversationId: Long)Uma conversa foi encerrada.
MessageReceived(conversationId: Long, messageId: Long)Chegou mensagem do atendente, da IA ou do sistema. Só os ids: o texto nunca sai do chat.
UnreadChanged(count: Int)O total de não lidas mudou.
Error(code: String, command: String?)Falha do chat (INIT_FAILED) ou de um comando (command = "identify", "open_conversation"...).

AtaliaContact​

Devolvido pelo identify.

PropriedadeTipoDescrição
externalIdStringO sub do JWT: o id do usuário no seu sistema.
contactIdLongO contato na Atalia.
nameString?Nome do contato, quando há.

AtaliaException​

Erro das chamadas do SDK. code é o mesmo código devolvido pela Atalia.

codeQuando
NO_SECRET_CONFIGURED, INVALID_SIGNATURE, EXPIRED, INVALID_TOKEN, REPLAYEDidentify recusado. Veja os códigos.
NOT_CONFIGURED (AtaliaException.NOT_CONFIGURED)O configure ainda não foi chamado.
TIMEOUT (AtaliaException.TIMEOUT)Com o chat aberto, ele não respondeu a tempo a um comando.
SESSION_FAILEDA Atalia não criou a sessão do visitante.
UNREAD_FAILEDA consulta de não lidas falhou.
NETWORK_ERRORSó nas versões com callback: falha de rede sem mensagem. Nas versões suspend, a falha de rede chega como IOException.

AtaliaListener e AtaliaCallback​

TipoMembros
fun interface AtaliaListeneronEvent(event: AtaliaEvent)
interface AtaliaCallback<T>onSuccess(value: T) e onError(error: AtaliaException), sempre na thread principal.

AtaliaLauncherView e AtaliaLauncherOptions​

AtaliaLauncherView(context: Context, attrs: AttributeSet? = null, options: AtaliaLauncherOptions = AtaliaLauncherOptions()): o botão flutuante como view, para posicionar você mesmo.

MembroDescrição
options: AtaliaLauncherOptionsTrocar mostra o botão aberto de novo, e ele recolhe do jeito novo.
remove()Tira o botão da tela.

As opções estão em Botão flutuante.

AtaliaChatView​

O chat como view, para embutir numa tela sua (uma aba, por exemplo), em vez da tela cheia do open. Quem hospeda implementa AtaliaChatView.Host e repassa o ciclo de vida.

MembroDescrição
host: AtaliaChatView.Host?Quem atende os pedidos da view.
load(conversationId: Long? = null)Carrega o chat; com conversationId, direto nessa conversa.
openConversation(conversationId: Long)Troca de conversa com o chat aberto.
onAppForeground() / onAppBackground()Chame no onStart e no onStop de quem hospeda. Em segundo plano o chat avisa a Atalia que o cliente saiu, o que libera as notificações push.
destroy()Chame no onDestroy de quem hospeda.
AtaliaChatView.HostDescrição
onCloseRequested()O cliente tocou em "Fechar".
showFileChooser(callback: ValueCallback<Array<Uri>>, params: WebChromeClient.FileChooserParams): BooleanAbrir o seletor de arquivos. Devolva false se não puder (o anexo é cancelado).
requestPermission(permission: String, onResult: (Boolean) -> Unit)Pedir uma permissão (o microfone, para a nota de voz).
onPrimaryColorChanged(color: String)Opcional. A cor do canal chegou com a tela já aberta.

Dados da notificação​

A notificação da Atalia traz estes dados, todos em texto: atalia ("1"), v, channel_token, conversation_id, message_id e sender_type. No teste do painel, type vale "test" e não há conversa. O canal de notificação do Android é atalia_chat, e a tag de cada notificação é atalia-conv-<conversation_id>.