Skip to content
Vai integrar o Chat do SDK web com ajuda de IA? Copie a instrução que aponta o modelo para esta documentação.
Ver a instrução
Você vai integrar o Chat do SDK web. Use a documentação oficial como fonte da verdade.

- Página desta integração: https://developers.zarv.com/sdk/chat
- Contrato do SDK e instalação do loader: https://developers.zarv.com/sdk/
- Índice da documentação em markdown: https://developers.zarv.com/llms.txt
- Documentação completa em um arquivo: https://developers.zarv.com/llms-full.txt

O SDK é imperativo: carregue https://js.zarv.com/sdk.js e chame Zarv('chat', config) — um verbo e um objeto de config. Não crie um global novo nem outra tag de script. Chamadas feitas antes do bundle carregar são enfileiradas. O SDK não tem ambiente de desenvolvimento: use https://js.zarv.com/sdk.js também em localhost, e separe testes por chave pública.

Antes de escrever qualquer código, leia a página desta integração. Siga exatamente os nomes de campos, endpoints, callbacks e formatos que estiverem documentados — não invente parâmetros nem endpoints, e não deduza comportamento a partir de outras APIs que você conhece. Se algo de que você precisa não estiver na documentação, diga que não está em vez de supor.

Minha tarefa: [ex.: embutir o chat no meu site identificando o usuário logado]

Chat ​

O Chat é o widget de conversa do SDK Zarv. Sua configuração é imperativa, com a mesma estrutura do Smartflow: você chama Zarv('chat', config) e o widget inicia, exibindo um launcher no canto da página.

Configuração básica ​

html
<script async src="https://js.zarv.com/sdk.js"></script>
<script>
  Zarv("chat", {
    publicKey: "pk-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
    locale: "pt",
    alignment: "right",
  });
</script>

O campo publicKey é obrigatório: é a chave pública do bot (pk-…), obtida no admin Zarv. Chamadas feitas antes do bundle carregar são enfileiradas e reproduzidas — não é preciso esperar nenhum evento de "ready".

Alternativa declarativa (window.ZarvConfig)

A forma anterior continua suportada: defina window.ZarvConfig antes do loader e o widget auto-inicia. Um Zarv('chat', config) posterior mescla por cima do ZarvConfig.

html
<script>
  window.ZarvConfig = {
    publicKey: "pk-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
    locale: "pt",
  };
</script>
<script async src="https://js.zarv.com/sdk.js"></script>

Opções de configuração ​

O mesmo objeto de configuração vale para Zarv('chat', config) e para o window.ZarvConfig declarativo.

CampoTipoDescrição
publicKeystringObrigatório. Chave pública do bot (pk-…) do admin Zarv.
backendstringHost do backend de chat (REST). Por padrão, derivado do loader.
wsBackendstringHost do WebSocket do chat, separado do backend (REST). Por padrão usa o host oficial; defina apenas para um backend self-hosted/local.
locale'pt' | 'en'Idioma da interface. Aceita também tags regionais ('pt-BR', 'en-US'). Na ausência, ou com um idioma sem suporte, cai no locale configurado no bot.
alignment'right' | 'left'Canto onde o launcher aparece. Default: 'right'.
horizontalPaddingnumberOffset horizontal, em px, em relação à borda.
verticalPaddingnumberOffset vertical, em px, em relação à borda.
actionColorstringCor (hex) do launcher e do botão de enviar.
theme'auto' | 'light' | 'dark'Tema da interface.
launcher.iconstringÍcone exibido no launcher.
launcher.labelstringRótulo exibido no launcher.
containerstring | HTMLElementRenderiza o chat inline dentro do elemento informado (sem launcher flutuante).
debugbooleanHabilita afordances de diagnóstico. Nunca use em produção.

Métodos em runtime ​

Depois de carregado, o widget é controlado por chamadas à função global Zarv:

ChamadaEfeito
Zarv('chat', config)Inicia o widget com a configuração dada (mesma estrutura do Zarv('smartflow', config)). Não faz nada se esse publicKey já estiver iniciado.
Zarv('show')Abre o widget de chat.
Zarv('hide')Fecha o widget de chat.
Zarv('shutdown')Encerra a sessão e remove o widget (todos os chats, se não indicar um).
Zarv('start')Inicia (ou reinicia) o widget (todos os chats já iniciados, se não indicar um).
Zarv('setLocale', 'pt' | 'en')Troca o idioma da interface em runtime. Aceita tags regionais ('pt-BR'); um idioma sem suporte é ignorado.
Zarv('setTheme', 'auto' | 'light' | 'dark')Troca o tema em runtime.
Zarv('identify', { userId, traits })Identifica o usuário atual e anexa atributos (traits). Antes de o chat ser aberto pela primeira vez, a identificação fica guardada e é enviada quando o visitante abre o chat.
Zarv('sendMessage', text)Abre o painel e envia text como mensagem do usuário (o bot responde). Ideal para botões "falar com suporte" que já iniciam a conversa com um contexto.

Nota: chamadas feitas antes do bundle terminar de carregar são enfileiradas e reproduzidas assim que o widget estiver pronto. Você não precisa esperar por nenhum evento de "ready".

Desempenho da página: no carregamento, o widget faz uma única chamada à API (a configuração do bot). A sessão do visitante e o histórico da conversa só são buscados quando ele interage com o chat: ao passar o mouse, focar ou tocar no botão, ao abrir o painel ou ao enviar uma mensagem. Se o painel já estava aberto antes de um recarregamento, ou se o chat é inline, a sessão começa de imediato.

Com mais de um chat na página, cada método aceita { publicKey } como último argumento para escolher o chat. Veja Vários chats na mesma página.

Eventos ​

Inscreva-se em eventos do widget com Zarv('on', evento, handler) e cancele com Zarv('off', evento, handler). Você pode se inscrever a qualquer momento (antes ou depois do carregamento).

js
Zarv("on", "message", ({ role, text }) => {
  console.log(role, text); // 'user' | 'assistant' | 'system'
});

Zarv("on", "conversationStart", () => {
  // primeira mensagem do usuário — bom ponto para disparar analytics
});

Todo handler recebe um segundo argumento, { publicKey }, com o chat que emitiu o evento. Isso é útil quando a página tem vários chats:

js
Zarv("on", "message", ({ role, text }, { publicKey }) => {
  console.log(publicKey, role, text);
});
EventoQuando disparaPayload
readyo widget terminou de inicializar—
openo painel do chat foi aberto—
closeo painel do chat foi fechado—
messageuma mensagem entra na conversa (do usuário ou do bot){ role: 'user' | 'assistant' | 'system', text }
unreado contador de não-lidas mudacount (número)
identifya identificação é enviada (na primeira abertura do chat, se identify veio antes){ userId, traits }
conversationStarta primeira mensagem do usuário na sessão—

Os handlers são isolados: se um deles lançar erro, os demais continuam recebendo o evento. As inscrições persistem entre shutdown/start; o conversationStart volta a poder disparar após um shutdown.

Vários chats na mesma página ​

Chame Zarv('chat', …) uma vez por agente. Cada publicKey é um chat independente, com sua própria conversa. Chamar de novo com um publicKey já iniciado não faz nada.

js
Zarv("chat", { publicKey: "pk-vendas", alignment: "right" });
Zarv("chat", { publicKey: "pk-suporte", alignment: "left" });

Zarv("show", { publicKey: "pk-suporte" }); // abre só o de suporte
Zarv("sendMessage", "Oi", { publicKey: "pk-vendas" }); // envia só para vendas

Para escolher o chat, passe { publicKey } como último argumento de qualquer método da tabela acima. Sem ele:

  • identify, setLocale e setTheme valem para todos os chats, inclusive os iniciados depois.
  • shutdown encerra todos os chats e descarta essas configurações.
  • show, hide e sendMessage valem para o primeiro chat iniciado. Numa página com um chat só, nada muda.
  • start reinicia todos os chats que já foram iniciados.

Os launchers não se reposicionam sozinhos. Coloque cada chat flutuante num lado (alignment) ou afaste-os com horizontalPadding, senão um fica em cima do outro. Só um painel flutuante fica aberto por vez: abrir um fecha o outro. Chats inline (container) não seguem essa regra.

Se window.ZarvConfig declara um publicKey diferente, o Zarv('chat', …) não herda as opções dele.