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>
unique_id antes do loader. Callers configurados como “Até responder (unique_id)” ficam ocultos enquanto a disponibilidade é verificada e não aparecem sem esse campo.Métodos da API atual
| Método | Retorno | Uso |
|---|---|---|
Tolv.identify(identity) | Tolv | Define ou atualiza a identidade do visitante. |
Tolv.setFields(fields) | Tolv | Define campos para preenchimento de formulários e enriquecimento operacional. |
Tolv.setContext(context) | Tolv | Define metadados livres, roteamento e contexto de negócio. |
Tolv.clearIdentity() | Tolv | Remove a identidade informada nesta página e atualiza iframes carregados. |
Tolv.open() | boolean | Abre o caller padrão disponível. |
Tolv.close() | boolean | Fecha ou minimiza o caller ativo. |
Tolv.load(callback) | Tolv | Executa o callback quando a API estiver pronta. |
Tolv.on(event, callback) | Tolv | Registra um callback para um evento público. |
Tolv.getContext() | object | Retorna identity, fields, context, runtime e opções conhecidas. |
Tolv.deptos(callback) | Tolv | Entrega departamentos públicos no formato compatível { id: { n, s } }. |
Tolv(command, value) | Tolv | Forma funcional equivalente aos métodos nomeados. |
Tolv.push([command, value]) | Tolv | Forma 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
| Campo | Tipo | Descrição |
|---|---|---|
name | string | Nome do visitante. |
email | string | E-mail válido, normalizado para minúsculas. |
phones | string[] | Até cinco telefones. phone singular também é aceito e convertido para array. |
external_id | string | ID do visitante no sistema do cliente, usado em contexto operacional e relatórios. |
unique_id | string | ID estável e opaco usado exclusivamente para limitar uma resposta por conta + formulário. |
display | string | Identificaçã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
| Chave | Uso |
|---|---|
| Qualquer chave válida | Metadado livre para automações, relatórios e contexto de atendimento. |
preferred_agent | Agente preferencial quando o fluxo suportar essa seleção. |
chat_department_preselect | Pré-seleciona departamento por ObjectId ou identificador legado. |
chat_departments_restrict | Lista ou texto separado por vírgula com os departamentos permitidos. |
chat_auth_token, legacy_auth_token, token | Compatibilidade de autenticação/roteamento. Nunca são copiados para metadados dos relatórios. |
Runtime coletado automaticamente
| Campo | Origem |
|---|---|
page_url, page_title, referrer | Página hospedeira. |
language, timezone | Navegador. |
| IP e user-agent parseado | Requisição HTTP no backend; não são confiados ao JavaScript da página. |
Visibilidade e resposta única
- Configure um caller de formulário com visibilidade Até responder (unique_id).
- Informe
Tolv.identify({ unique_id })antes do loader. - O tracker consulta a disponibilidade em lote e só renderiza callers ainda não respondidos.
- O backend mantém um Set Redis por conta + formulário e protege a gravação com índice único no MongoDB.
- Após a submissão, o caller mostra sucesso por 5 segundos, fecha e desaparece na página atual.
unique_id pode responder formulários diferentes, mas só uma vez o mesmo formulário dentro da mesma conta, mesmo que ele esteja ligado a callers ou widgets diferentes.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
| Evento | Payload principal | Quando 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
| Item | Regra |
|---|---|
| Payload de contexto | Até 16 KB. |
name | Até 160 caracteres. |
email | Até 254 caracteres e formato válido. |
phones | Até 5 itens; cada telefone possui de 6 a 20 dígitos. |
external_id | Até 120 caracteres; letras, números e _.:@-. |
unique_id | Até 254 caracteres; texto opaco comparado exatamente após limpeza de controles/espaços externos. |
display | Até 180 caracteres. |
| Chaves livres | Até 80 caracteres; letras, números e _.:-. __proto__, prototype e constructor são rejeitadas. |
setFields/setContext | Até 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 antigo | Comportamento atual |
|---|---|
_setAccount / account | Define a chave usada para carregar o widget de compatibilidade. |
_setAction / action | Define a ação antiga; padrão track-view. |
_monitoring | Ativa ou desativa tracking de visualização. |
_setMainIcon | Sobrescreve o ícone dos callers. |
_setMessageOnline, _setMessageOffline | Textos acessíveis/title conforme disponibilidade. |
_setName, _setEmail | Convertidos para Tolv.identify. |
_forceIdentification | Preserva a opção de identificação obrigatória. |
_addTag(chave, valor) | Convertido para Tolv.setFields. |
_setUserIdentification | Convertido para identify.display. |
_setHideCallerAfter | Oculta o widget após a quantidade configurada de dias. |
_setSocialDisabled | Preserva a opção de desativação social. |
_setCallerCloseable, _setShowHideOption | Exibe controle para ocultar/fechar o caller. |
_setAudioEnabled | Ativa ou desativa avisos de áudio. |
_setPreferredAgent | Convertido para context.preferred_agent. |
_setDepto | Convertido para context.chat_department_preselect. |
_allowedDepts | Convertido 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>