Widget Javascript API

Referência completa para identificar visitantes, enviar campos e metadados, controlar o widget, acompanhar eventos e manter integrações antigas.

Instalação e ordem de carregamento

Inicialize a fila window.Tolv, envie os dados conhecidos e só então inclua o script assíncrono do widget.

<script>
  window.Tolv = window.Tolv || [];

  Tolv.push(["identify", {
    name: "João Silva",
    email: "joao@example.com",
    phones: ["+55 51 99999-9999"],
    external_id: "customer-123",
    unique_id: "customer-123",
    display: "João Silva [Plano Pro]"
  }]);

  Tolv.push(["setFields", {
    company: "Empresa Exemplo",
    plan: "Pro"
  }]);

  Tolv.push(["setContext", {
    source: "logged_area",
    page_type: "account"
  }]);
</script>
<script async src="https://widget.tolv.io/widget/WIDGET_UUID"></script>

Métodos da API atual

MétodoRetornoUso
Tolv.identify(identity)TolvDefine ou atualiza a identidade do visitante.
Tolv.setFields(fields)TolvDefine campos para preenchimento de formulários e enriquecimento operacional.
Tolv.setContext(context)TolvDefine metadados livres, roteamento e contexto de negócio.
Tolv.clearIdentity()TolvRemove a identidade informada nesta página e atualiza iframes carregados.
Tolv.open()booleanAbre o caller padrão disponível.
Tolv.close()booleanFecha ou minimiza o caller ativo.
Tolv.load(callback)TolvExecuta o callback quando a API estiver pronta.
Tolv.on(event, callback)TolvRegistra um callback para um evento público.
Tolv.getContext()objectRetorna identity, fields, context, runtime e opções conhecidas.
Tolv.deptos(callback)TolvEntrega departamentos públicos no formato compatível { id: { n, s } }.
Tolv(command, value)TolvForma funcional equivalente aos métodos nomeados.
Tolv.push([command, value])TolvForma em fila, indicada antes do carregamento do script.
Tolv.identify({ name: "Maria", unique_id: "usr-456" })
  .setFields({ company: "Empresa Exemplo" })
  .setContext({ source: "checkout" });

Campos de identify

CampoTipoDescrição
namestringNome do visitante.
emailstringE-mail válido, normalizado para minúsculas.
phonesstring[]Até cinco telefones. phone singular também é aceito e convertido para array.
external_idstringID do visitante no sistema do cliente, usado em contexto operacional e relatórios.
unique_idstringID estável e opaco usado exclusivamente para limitar uma resposta por conta + formulário.
displaystringIdentificação visual alternativa apresentada no atendimento.

external_id e unique_id podem ter o mesmo valor, mas possuem responsabilidades diferentes. O primeiro descreve o visitante; o segundo participa da restrição de resposta única.


setFields, setContext e dados automáticos

Campos livres

Tolv.setFields({
  document: "00000000000",
  company: "Empresa Exemplo",
  plan: "Enterprise"
});

Campos podem preencher perguntas equivalentes e aparecer em dados operacionais ou analíticos.

Metadados e roteamento

ChaveUso
Qualquer chave válidaMetadado livre para automações, relatórios e contexto de atendimento.
preferred_agentAgente preferencial quando o fluxo suportar essa seleção.
chat_department_preselectPré-seleciona departamento por ObjectId ou identificador legado.
chat_departments_restrictLista ou texto separado por vírgula com os departamentos permitidos.
chat_auth_token, legacy_auth_token, tokenCompatibilidade de autenticação/roteamento. Nunca são copiados para metadados dos relatórios.

Runtime coletado automaticamente

CampoOrigem
page_url, page_title, referrerPágina hospedeira.
language, timezoneNavegador.
IP e user-agent parseadoRequisição HTTP no backend; não são confiados ao JavaScript da página.

Visibilidade e resposta única

  1. Configure um caller de formulário com visibilidade Até responder (unique_id).
  2. Informe Tolv.identify({ unique_id }) antes do loader.
  3. O tracker consulta a disponibilidade em lote e só renderiza callers ainda não respondidos.
  4. O backend mantém um Set Redis por conta + formulário e protege a gravação com índice único no MongoDB.
  5. Após a submissão, o caller mostra sucesso por 5 segundos, fecha e desaparece na página atual.

O Redis armazena apenas o hash SHA-256 do identificador. O valor original permanece associado à resposta para identificação autorizada no produto.


Eventos públicos

EventoPayload principalQuando ocorre
load{ status }O runtime terminou de inicializar.
open{ status }Um caller foi aberto.
close{ status }O widget foi minimizado ou fechado.
form-submitted{ widgetid, callerid, submission_id }O backend confirmou uma resposta. Respostas e metadados não trafegam no evento.
Tolv.on("load", (event, api) => console.log(event.status));
Tolv.on("open", () => console.log("aberto"));
Tolv.on("close", () => console.log("fechado"));
Tolv.on("form-submitted", (event) => {
  console.log("Resposta confirmada", event.submission_id);
});

Validação e limites

ItemRegra
Payload de contextoAté 16 KB.
nameAté 160 caracteres.
emailAté 254 caracteres e formato válido.
phonesAté 5 itens; cada telefone possui de 6 a 20 dígitos.
external_idAté 120 caracteres; letras, números e _.:@-.
unique_idAté 254 caracteres; texto opaco comparado exatamente após limpeza de controles/espaços externos.
displayAté 180 caracteres.
Chaves livresAté 80 caracteres; letras, números e _.:-. __proto__, prototype e constructor são rejeitadas.
setFields/setContextAté 50 chaves em cada objeto; valores de até 500 caracteres.

API legada e retrocompatibilidade

A fila antiga window._tn continua aceita. A fachada window._tno expõe load, open, close, deptos e a propriedade status.

Comando antigoComportamento atual
_setAccount / accountDefine a chave usada para carregar o widget de compatibilidade.
_setAction / actionDefine a ação antiga; padrão track-view.
_monitoringAtiva ou desativa tracking de visualização.
_setMainIconSobrescreve o ícone dos callers.
_setMessageOnline, _setMessageOfflineTextos acessíveis/title conforme disponibilidade.
_setName, _setEmailConvertidos para Tolv.identify.
_forceIdentificationPreserva a opção de identificação obrigatória.
_addTag(chave, valor)Convertido para Tolv.setFields.
_setUserIdentificationConvertido para identify.display.
_setHideCallerAfterOculta o widget após a quantidade configurada de dias.
_setSocialDisabledPreserva a opção de desativação social.
_setCallerCloseable, _setShowHideOptionExibe controle para ocultar/fechar o caller.
_setAudioEnabledAtiva ou desativa avisos de áudio.
_setPreferredAgentConvertido para context.preferred_agent.
_setDeptoConvertido para context.chat_department_preselect.
_allowedDeptsConvertido para context.chat_departments_restrict.

Comandos obsoletos aceitos e ignorados: _setChatMode, _setCallMode, _setTheme, _setEyeCatcher e _addAgentLink.


Exemplo completo

<script>
  window.Tolv = window.Tolv || [];

  Tolv.push(["identify", {
    name: currentUser.name,
    email: currentUser.email,
    phones: currentUser.phones,
    external_id: currentUser.customerId,
    unique_id: currentUser.id,
    display: currentUser.name + " [" + currentUser.plan + "]"
  }]);

  Tolv.push(["setFields", {
    company: currentUser.company,
    plan: currentUser.plan
  }]);

  Tolv.push(["setContext", {
    source: "logged_area",
    page_type: "dashboard"
  }]);

  Tolv.push(["on", "form-submitted", function (event) {
    console.log("Pesquisa respondida", event.submission_id);
  }]);
</script>
<script async src="https://widget.tolv.io/widget/WIDGET_UUID"></script>