🚀 Chat Widget CDN

Widget de chat moderno e responsivo para qualquer website

🔐 Valide suas credenciais
Informe um token de acesso e nome do usuário para simular o funcionamento do chat.
✨ Recursos Principais
💾
Multiplas instâncias
Gerencie várias instâncias do chat rodando ao mesmo tempo em seu sistema
📱
Design Responsivo
O design responsivo permite a utilização em desktop, tablets e celulares
🎨
Customizável
Temas, posições, modelos de IA e textos completamente configuráveis
Zero Dependências
CSS e JavaScript incorporados, funciona em qualquer framework
🔌
Sistema de Eventos
Inputs e métodos para interação, customização e controle do chat widget.
🚀
Performance
Carregamento rápido com Web Components nativos
💬
Canais de atendimento
Permite filtrar os temas de acordo com a tela que chat foi aberto.
⭐ Dicas na incorporação da tag chat-widget
A tag chat-widget pode ser incorporada em qualquer lugar do seu HTML, mas é recomendado colocar no final do body no index.html do seu projeto para garantir que o chat apareceça em todas as páginas. Caso queira incorporar o chat em uma seção específica do seu sistema, você pode colocar a tag dentro da propria tela mas em alguns frameworks como Angular pode ser necessário adicionar a flag schemas: [CUSTOM_ELEMENTS_SCHEMA].
Quando se trata dos scripts de incorporação do chat deve ser feito de forma global, ou seja, em um local que seja carregado em todas as páginas do seu sistema.
💬 Chat Flutuante (Padrão)
Widget de chat flutuante que aparece no canto da tela. Ideal para suporte ao cliente e atendimento.
<chat-widget instance-id="floating" bot-name="Assistente Digital" placeholder="Digite sua mensagem..." position="bottom-right"> </chat-widget>

👆 Veja o chat flutuante no canto inferior direito desta página!

O widget flutuante aparece como um botão azul redondo que você pode clicar para abrir o chat.

É possivel controlar o chat flutuante via JavaScript utilizando os métodos publicos do ChatWidget.
📱 Chat Incorporado (Fullscreen)
Chat incorporado diretamente em uma seção da página. Perfeito para páginas de contato ou áreas dedicadas de suporte.
<div style="height: 400px; padding: 15px;">
  <chat-widget 
    instance-id="fullscreen" 
    bot-name="Assistente Digital" 
    placeholder="Digite sua mensagem..." 
    fullscreen
  >
  </chat-widget>
</div>

            
🌐 Obtenha o link de acesso ao chat
O link é obtido através de uma requisição GET para a API de autenticação, passando o token de acesso do seu sistema no cabeçalho
Utilize a função a baixo para injetar a url do retorno em uma tag script no header do seu projeto.
this.assistenteDigitalService.obterLinkChat().subscribe({
  next: (data) => {
    const script = document.createElement('script');
    script.src = data.url;
    script.async = true;
    script.type = 'module';
    document.head.appendChild(script);
  },
});
            
A função this.assistenteDigitalService.obterLinkChat() precisa ser criada em um serviço que faça a requisição GET para a API.
Você deve fazer uma requisição GET utilizando link abaixo, passando o token de acesso do seu sistema no cabeçalho.
https://assistentedigital-api.br/componente/assistente-digital
Ao fazer a requisição GET você receberá uma resposta no seguinte formato:
{ "url": "string" }
📕 TypeScript
Caso use TypeScript em sua aplicação vamos te dar alguns exemplos de facilitações que pode melhorar sua experiancia ao integrar o nosso chat.
Crie um tipo global que permite acessar o ChatWidget através do window.ChatWidget e crie uma classe dedicada aos métodos publicos do chat para facilitar o acesso em todo o sistema
//chat-widget.ts
declare global {
  interface ChatWidgetInstanceFacade {
    open(): void;
    close(): void;
    showToggle(): void;
    hiddenToggle(): void;
  }

  interface ChatWidgetGlobal {
    getInstance(id: string): ChatWidgetInstanceFacade | null;
    listInstances(): string[];
    setUserName(name: string): void;
    setCanalAtendimento(canal: string): void;
    clearCanalAtendimento(): void;
    setAccessToken(token: string): void;
  }

  interface Window {
    ChatWidget?: ChatWidgetGlobal;
  }
}

export class ChatWidget {
  private async readyInstance(instance: string): Promise<ChatWidgetInstanceFacade | undefined> {
    await customElements.whenDefined('chat-widget');

    const instanceChat = window.ChatWidget?.getInstance(instance);
    return instanceChat ?? undefined;
  }

  private async ready(): Promise<ChatWidgetGlobal | undefined> {
    await customElements.whenDefined('chat-widget');
    return window.ChatWidget;
  }

  isDisponivel(instanceId: string) {
    return !!window.ChatWidget?.getInstance(instanceId);
  }

  async setUserName(nome: string): Promise<void> {
    (await this.ready())?.setUserName(nome);
  }

  async setCanalAtendimento(token: string): Promise<void> {
    (await this.ready())?.setCanalAtendimento(token);
  }

  async clearCanalAtendimento(): Promise<void> {
    (await this.ready())?.clearCanalAtendimento();
  }

  async setAccessToken(token: string): Promise<void> {
    (await this.ready())?.setAccessToken(token);
  }

  async open(instance: string): Promise<void> {
    (await this.readyInstance(instance))?.open();
  }

  async close(instance: string): Promise<void> {
    (await this.readyInstance(instance))?.close();
  }

  async showToggle(instance: string): Promise<void> {
    (await this.readyInstance(instance))?.showToggle();
  }

  async hiddenToggle(instance: string): Promise<void> {
    (await this.readyInstance(instance))?.hiddenToggle();
  }
}
            
Acesse a classe de qualquer lugar, manipulando o ChatWidget
chatWidget: ChatWidget = new ChatWidget();
esconderChat() {
  this.chatWidget.hiddenToggle('floating');
}

mostrarChat() {
  this.chatWidget.showToggle('floating');
}
            
Caso escolha não criar a classe ChatWidget você ainda pode acessar os metodos publicos do chat de forma direta
esconderChat() {
  window.ChatWidget?.getInstance('fullscreen')?.hiddenToggle();
}

mostrarChat() {
  window.ChatWidget?.getInstance('fullscreen')?.showToggle();
}
          
⚠️ Os codigos fornecidos são apenas exemplos de como você pode estruturar seu código para facilitar o uso do ChatWidget em um projeto TypeScript. Eles não são obrigatórios e você pode adaptar conforme suas necessidades.
🔐 Setar token de acesso e nome de usuário via código
Você deve setar o token de acesso e nome do usuário na inicialização do projeto, mesmo após o chat já ter sido carregado na página, utilizando os métodos públicos do ChatWidget.
chatWidget: ChatWidget = new ChatWidget();

setarTokenAssistenteDigital() {
  let token = this.authService.obterToken();
  this.chatWidget.setAccessToken(token);
  
  //caso não tenha criado a classe chatWidget
  //window.ChatWidget?.setAccessToken(token);
}

setarNomeUsuarioAssistenteDigital() {
  const dadosUsuario = this.authService.obterDadosDoToken();
  const nome = dadosUsuario?.name ?? 'Usuário';

  this.chatWidget.setUserName(nome);
  
  //caso não tenha criado a classe chatWidget
  //window.ChatWidget?.setUserName(nome);
}
            
⚙️ API
Inputs e métodos para interação, customização e controle do chat widget. Utilizando os métodos publicos do chat widget é possivel controlar o comportamento do chat e setar informações importantes para o funcionanmento do chat.
Inputs Tipos Padrão Descrição
instance-id string "default" ID único para identificar a instância do chat widget.
bot-name string "Chat Bot" Nome do bot que aparecerá no cabeçalho do chat.
placeholder string "Digite sua mensagem..." Texto placeholder do input de mensagem.
position string "bottom-right" Posição do chat na tela. Opções: "bottom-right", "bottom-left".
fullscreen boolean false Se true, o chat ocupa toda a largura disponível na seção onde está inserido.
Método Descrição
ChatWidget.setUserName(name: string) Define o nome do usuário que aparecerá no chat.
ChatWidget.setAccessToken(token: string) Define o token de acesso para autenticação com a API.
ChatWidget.getInstance(instanceId: string) Retorna a instância do chat widget pelo ID fornecido.
ChatWidget.setCanalAtendimento(canal: string) Define o canal de atendimento usado para filtrar os temas. (Valido sómente para a versão Flutuante)
ChatWidget.clearCanalAtendimento() Limpa os canais de atendimento que filtrava os temas. (Valido sómente para a versão Flutuante)
ChatWidget.listInstances() Lista as instâncias do chat ativa no sistema.
instance.open() Abre o chat widget. (Valido sómente para a versão Flutuante)
instance.close() Fecha o chat widget. (Valido sómente para a versão Flutuante)
instance.showToggle() Mostra o botão de toggle do chat widget. (Valido sómente para a versão Flutuante)
instance.hiddenToggle() Esconde o botão de toggle do chat widget. (Valido sómente para a versão Flutuante)
Multiplas instâncias
O chat permite multiplas instâncias rodando ao mesmo tempo em seu site, oque permite ter a versão flutuante (Padrão) e a versão tela cheia (fullscreen) rodando ao mesmo tempo, mas para isso temos que gerenciar essas instâncias de formas independentes atravez de seus IDs (instance-id).
Caso precise abrir o chat

Canais de atendimento
Os canais de atendimento permitem filtrar os temas que o usuário pode escolher ao iniciar uma conversa. Isso é útil para direcionar o usuário ao atendimento correto com base na tela do sistema que ele esta navegando, por isso o filtro por canal de atenidmento não funciona no modo fullscreen.