Como adicionar
Adicione seu agente a qualquer site usando o diálogo Configure Widget nas configurações do seu agente. Etapa 1: Abra as configurações do agente clicando no ícone de engrenagem no canto superior direito do editor do agente.



Tipos de widget
Cada widget incorporado é um widget de voz ou um widget de chat — escolha o tipo no diálogo Configure Widget. Ambos os tipos suportam os três modos de incorporação.
Como as conversas de chat se comportam:
- A conversa começa quando o visitante abre o chat (clica no botão de chat) — o agente cumprimenta primeiro. Apenas carregar a página nunca inicia uma conversa.
- Uma sessão de chat dura até 1 hora. Quando ela expira, é oferecido ao visitante um botão Start new chat, que inicia uma nova conversa.
- Recarregar a página inicia uma nova conversa na próxima abertura — o histórico do chat não é levado entre carregamentos de página.
- Cada conversa conta uma vez no limite de uso do token de incorporação, o mesmo que uma chamada de voz.
- As conversas de chat aparecem no histórico de chamadas do seu agente com transcrição completa.
Modos de incorporação
Pré-requisitos
Estes se aplicam aos três modos:- Widgets de voz: sirva sua página por HTTPS ou a partir de
http://localhost. Os navegadores recusam acesso ao microfone em origens HTTP simples oufile://. Os widgets de chat não exigem microfone, embora HTTPS ainda seja recomendado. - Se você definir Allowed Domains no painel, inclua sua origem de teste (por exemplo,
localhost) — caso contrário, as requisições do widget são rejeitadas. Deixe a lista vazia para permitir todos os domínios. - O trecho de código que você copia do painel é uma única tag
<script>que carregatig-widget.jsassincronamente. O widget se inicializa automaticamente quando carrega e expõewindow.TigWidget. O código que registra callbacks deve aguardar o widget estar disponível.
Passar contexto para o agente
Sua página geralmente sabe algo sobre o visitante — o nome, o plano, o valor do carrinho, o artigo que ele estava lendo. Passe essas informações e seu agente poderá usá-las desde a primeira palavra. O trecho de código que você copia do painel carrega um atributodata-tig-context — um objeto JSON com detalhes do visitante. O trecho é uma pequena função de bootstrap: js é o elemento <script> do widget que ela cria, e o contexto é anexado a esse elemento antes de ser adicionado à página. A parte relevante do trecho gerado se parece com isto (mantenha o valor js.src gerado, que contém seu token de incorporação):
JSON.stringify(...) no trecho gerado, por exemplo:
{{initial_context.<name>}}:
Atualizar o contexto depois que a página carrega
O atributo é fixo no carregamento da página, o que não se adapta a uma aplicação de página única — o visitante faz login, muda de rota ou preenche um carrinho muito depois de o trecho rodar. Para isso, chamesetContext():
getContext() retorna o conjunto atual.
O contexto é lido quando uma conversa começa, então setContext() se aplica à próxima conversa — chamá-lo no meio de uma chamada ou chat não altera a conversa em andamento (o widget registra um aviso no console se você fizer isso). Para widgets de chat, “próxima” inclui a nova conversa iniciada por Start new chat depois que uma sessão expira.
O script do widget carrega assincronamente, então
window.TigWidget pode ainda não existir quando o código do seu aplicativo rodar pela primeira vez. Chame setContext() a partir de um evento que dispara após o carregamento — um listener de window.load ou uma ação do usuário, como clicar no seu próprio botão “Fale conosco”. Consulte Lifecycle callbacks para a mesma regra de temporização.data-tig-context para o que a página sabe na renderização, setContext() para o que ela aprende depois. Eles se mesclam, e setContext() vence em um nome repetido.
Limites, aplicados por conversa: até 50 variáveis, 64 caracteres por nome, 2000 caracteres por valor e 8 KB no total. Qualquer coisa além do limite é descartada e a conversa ainda começa. Os nomes provider e runtime_configuration são reservados e ignorados.
Floating Widget

- Voz: clicar no botão (ícone de microfone + texto) inicia uma chamada; clicar novamente a encerra. O botão atualiza automaticamente o rótulo e a cor ao longo do ciclo de vida da chamada: texto configurado → “Connecting…” → “End Call” → “Retry” em caso de falha.
- Chat: clicar no botão (ícone de chat + texto) abre um painel de chat ancorado ao mesmo canto; o agente cumprimenta o visitante e a conversa acontece no painel. Clicar no botão (ou no × do painel) fecha o painel sem encerrar a conversa — reabrir mostra a mesma transcrição.
Inline Component

<div> que você coloca na sua página.
- Voz: um painel de status (ícone de status + texto de status + botão de CTA). As mudanças de status atualizam o painel no lugar.
- Chat: uma tela de chamada para ação primeiro; clicar no botão a substitui por um painel de chat que preenche o contêiner. Nenhum JavaScript extra é necessário.
HTML simples
Coloque uma<div> de contêiner onde você quer que o widget seja renderizado. O widget se anexa automaticamente a ela.
React
Como o React monta depois que o script do widget pode já ter carregado, integre viainitInline na primeira montagem e refresh na remontagem. Conte com polling de window.TigWidget para lidar com o carregamento assíncrono do script.
Modo Headless

API JavaScript (widgets de voz)
Todos os setters
on* são de listener único — chamar o mesmo novamente substitui o manipulador anterior.
API JavaScript (widgets de chat)
No modo chat,
start() é um alias de startChat() e end() é um teardown no-op (sessões de chat não precisam de um), para que trechos genéricos continuem funcionando. Os envios são serializados — sendMessage enquanto uma resposta está pendente (waiting) resolve para null.
Sobre a temporização. O script do widget carrega assincronamente, então
window.TigWidget pode não existir no momento em que seu <script> inline roda pela primeira vez. Os exemplos abaixo assumem que window.TigWidget já está disponível quando o registro roda. Para garantir isso:- Vanilla JS: envolva seu código de registro em
window.addEventListener('load', () => { /* registrar aqui */ }). - React: dentro de
useEffect, registre imediatamente sedocument.readyState === 'complete'; caso contrário, adicione um listenerwindow.loadde uso único que registra ao disparar. - Manipuladores de clique que chamam
start()/end()não precisam de guarda — quando o usuário clica, o widget já carregou há muito tempo.
Vanilla JS
React + TypeScript
start() deve rodar dentro de um manipulador de gesto do usuário real (click, touchend etc.). Os navegadores recusam conceder acesso ao microfone aos scripts que o solicitam fora de um — chamar start() a partir de um setTimeout ou no carregamento da página falhará com um erro de permissão.Lifecycle callbacks (todos os modos)
Os callbackson* da API JavaScript Headless funcionam em todos os três modos de incorporação, não apenas no Headless. Use-os para análise ou para disparar UI na página host mesmo quando o widget estiver renderizando sua própria UI (Floating ou Inline). Os callbacks de chamada (onCall*) disparam para widgets de voz; para widgets de chat, use onMessage e onChatStateChange da mesma forma.
onCallConnected e onCallDisconnected só disparam quando a chamada realmente estabelece uma conexão de mídia — tentativas que falharam ao conectar (por exemplo, microfone negado, falha de rede) não os acionam, então a análise permanece limpa.