Skip to main content

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. Abrir configurações do agente Etapa 2: Role até a seção Add to Website e clique em Configure Widget. Ir para Add to Website Etapa 3: Ative a incorporação, adicione o domínio do seu site em Allowed Domains, escolha um Widget Type (Voice ou Chat) e um modo de incorporação (Floating Widget, Inline Component ou Headless (Bring Your Own UI)), personalize o botão (posição, cor, texto) se aplicável e clique em Save Configurations. Salvar configurações Etapa 4: Copie o código de incorporação gerado e cole-o na sua página web para testar seu agente. Copiar código de implantação

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 ou file://. 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 carrega tig-widget.js assincronamente. O widget se inicializa automaticamente quando carrega e expõe window.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.
Os nomes de chaves de Contexto não podem conter pontos, espaços, barras verticais ou chaves, pois esses caracteres têm significado estrutural nas expressões de template. Entradas inválidas são descartadas sem impedir que a conversa comece.
O trecho de código que você copia do painel carrega um atributo data-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):
Como isso é construído em JavaScript no carregamento da página, você pode colocar qualquer coisa que sua página saiba — o nome de um cliente logado, seu plano, o conteúdo do carrinho. Substitua o objeto dentro de JSON.stringify(...) no trecho gerado, por exemplo:
Cada chave fica então disponível em qualquer prompt de nó como {{initial_context.<name>}}:
Os valores podem ser strings, números, booleanos ou objetos aninhados. Isso funciona tanto para widgets de voz quanto de chat, e os valores são registrados na conversa para que você possa ver o que foi dado ao agente.

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, chame setContext():
Cada chamada mescla os dados no contexto já coletado, então você pode adicionar detalhes conforme eles chegam e reenviar um nome para corrigi-lo. 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.
Use o que for adequado: 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.
O contexto vem da página, então um visitante pode tanto lê-lo quanto alterá-lo antes que ele chegue ao seu agente. Nunca passe segredos e não deixe que isso controle o que o agente fará ou divulgará — trate plan: "pro" como uma dica de tom, não como prova de direito. Para dados que o agente deve confiar, passe um id opaco como customer_id e deixe a Tig.ai buscar os detalhes reais na sua API com Pre-Call Data Fetch.
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

Widget flutuante mostrado no canto de uma página host Renderiza um botão em formato de pílula ancorado a um canto da página.
  • 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.
Configure Button Text, Button Color e Position (cima/baixo + esquerda/direita) a partir do painel. Todas as outras palavras que um visitante vê também são editáveis, em uma seção recolhível do mesmo diálogo, para que você possa rodar o widget no idioma do seu site: Chat Panel Text para widgets de chat (botão de encerrar chat, mensagem de conversa encerrada, botões de iniciar novo chat e tentar novamente, placeholder de mensagem e rótulos de leitor de tela de enviar/fechar), ou Voice Call Text para widgets de voz. Deixe um campo em branco para manter o padrão em inglês. A página host não escreve nenhum JavaScript — colar o trecho de incorporação é a integração inteira. Se você quiser assinar os eventos do ciclo de vida da chamada (por exemplo, para análise), veja Lifecycle callbacks abaixo.

Inline Component

Widget inline renderizado dentro de uma seção da página Renderiza um painel dentro de uma <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.
Configure Button Text, Button Color e Call to Action Text a partir do painel, além da seção Chat Panel Text / Voice Call Text descrita em Floating Widget. Os widgets de voz inline mostram mais texto do que qualquer outro modo — um título e um subtítulo para cada estado: ready, connecting, connected, ended, failed e lost — então essa seção carrega o conjunto completo aqui.

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 via initInline na primeira montagem e refresh na remontagem. Conte com polling de window.TigWidget para lidar com o carregamento assíncrono do script.

Modo Headless

Widget headless controlado pela UI da página host No modo Headless, o widget não injeta nenhuma UI própria. Você renderiza os botões, banners ou interfaces de chat que quiser e controla o agente por meio da API JavaScript.

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 se document.readyState === 'complete'; caso contrário, adicione um listener window.load de 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 callbacks on* 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.