SunchatPlus
StatusEm breveSuporteAcessar plataforma
Comece aquiGuia da plataformaAPI PúblicaAjudaNovidades
    • Visão geral da API
    • Autenticação e autorização
    • Primeira chamada
    • Recursos da API
    • Paginação, filtros e ordenação
    • Erros
    • Enumerações
    • Limites e boas práticas
    • Servidor MCP
    • Plugins
    • getListar anotações do negócio
    • postCriar anotação no negócio
    • getObter anotação do negócio
    • putSubstituir anotação do negócio
    • deleteExcluir anotação do negócio
    • getObter cálculo de imposto
    • putSubstituir cálculo de imposto
    • getListar cálculos de impostos
    • postCriar cálculo de imposto
    • getListar campos personalizados
    • postCriar campo personalizado
    • getObter campo personalizado
    • putSubstituir campo personalizado
    • deleteExcluir campo personalizado
    • getListar canais
    • getObter canal
    • getListar departamentos
    • postCriar departamento
    • getObter departamento
    • putSubstituir departamento
    • deleteExcluir departamento
    • getListar etiquetas
    • postCriar etiqueta
    • getObter etiqueta
    • putSubstituir etiqueta
    • deleteExcluir etiqueta
    • getObter grade de produto
    • putSubstituir grade de produto
    • postCriar grade de produto
    • postCriar variação e opção da grade
    • getListar grupos de produto
    • postCriar grupo de produto
    • getListar listas de contato
    • postCriar lista de contato
    • getObter lista de contato
    • putSubstituir lista de contato
    • deleteExcluir lista de contato
    • postEnviar mensagem de texto
    • postEnviar mensagem por template
    • postEnviar mensagem com mídia
    • postEnviar mensagem de áudio
    • getListar motivos de venda
    • postCriar motivo de venda
    • getObter motivo de venda
    • putSubstituir motivo de venda
    • deleteExcluir motivo de venda
    • getObter operação
    • putSubstituir operação
    • getListar operações
    • postCriar operação
    • getListar origens do negócio
    • postCriar origem do negócio
    • getObter origem do negócio
    • putSubstituir origem do negócio
    • deleteExcluir origem do negócio
    • postCriar solicitação de pagamento
    • getObter pessoa
    • putSubstituir pessoa
    • getListar pessoas
    • postCriar pessoa
    • putSubstituir endereço da pessoa
    • postCriar endereço da pessoa
    • getObter produto
    • putSubstituir produto
    • patchAtualizar produto parcialmente
    • getListar produtos
    • postCriar produto
    • getListar reuniões
    • postCriar reunião
    • getObter reunião
    • putAtualizar reunião
    • deleteExcluir reunião
    • postCancelar reunião
    • getObter script
    • putSubstituir script
    • deleteExcluir script
    • getListar scripts
    • postCriar script
    • getObter tabela de preço
    • putSubstituir tabela de preço
    • getListar tabelas de preço
    • postCriar tabela de preço
    • patchInativar tabelas de preço em lote
    • getObter ticket
    • getListar tickets
    • getObter ticket pelo código
    • postIncluir interação no ticket
    • patchAtualizar ticket parcialmente
    • putAlterar campo personalizado do ticket
    • getListar tipos de atividade
    • postCriar tipo de atividade
    • getObter tipo de atividade
    • putSubstituir tipo de atividade
    • deleteExcluir tipo de atividade
    • getListar vendas

Plugins

Onde um plugin pode aparecer, quais comandos ele pode chamar e casos de uso reais para cada superfície do protocolo.

AnteriorServidor MCPPróximo Listar ações agendadas
SunchatPlus

© 2026 SunchatPlus. Todos os direitos reservados.

Um plugin é uma página web sua, hospedada onde você quiser, que roda dentro de um iframe do SunchatPlus. Ela conversa com a plataforma por um protocolo baseado em postMessage. Se registra dizendo o que quer expor, e o SunchatPlus chama de volta quando o usuário interage com aquilo.

O plugin não recebe token de autenticação e não acessa o banco de dados da conta diretamente. Toda chamada de API passa por um proxy que roda no servidor do SunchatPlus. Esse proxy decide o que é permitido e resolve qualquer segredo necessário, sem expor esse valor ao código do plugin.

Repositório de exemplo

Implementação completa de um plugin, com README explicando cada peça do protocolo. É o jeito mais rápido de ver isso funcionando.

Onde um plugin pode aparecer

Um plugin se registra chamando initialize com um objeto descrevendo o que ele expõe. Cada chave do registro é opcional, e um plugin pode combinar quantas quiser.

Botões no atendimento (buttons)

Um botão aparece em um dos três grupos abaixo, dependendo de onde ele precisa ficar visível. O grupo escolhido também define o que chega no callback quando o atendente clica.

GrupoOnde aparecePayload do clique
lista-contatosMenu de ações de cada contato na lista de contatosO contato clicado
atendimento-chatHeader do atendimento de chat abertoO atendimento atual
atendimento-chat-menuMenu "⋮" do atendimento (aceita também o nome legado atendimento-page)O atendimento atual

Itens de menu (navbar)

Um item de navbar aparece no menu principal do SunchatPlus. O tipo group só organiza outros itens e não dispara nada ao clicar. O tipo item dispara o callback registrado, e o SunchatPlus abre o plugin de acordo com o modo definido no cadastro, modal ou rota.

Painel lateral (widgetbar)

Um item de widgetbar vira um ícone na barra lateral direita. Sem callback, clicar nele abre o próprio painel do plugin, o mesmo efeito do comando openWidget. Com callback, o clique roda lógica dentro do iframe em vez de abrir o painel.

Itens de configurações (options)

Um item de options aparece dentro de Configurações, na área de Plugins. Um item do tipo item abre o plugin dentro da tela de configurações ao ser clicado, o lugar certo para uma tela de preferências que só um administrador precisa acessar.

Eventos de atendimento (events)

Os sete eventos abaixo cobrem o ciclo de vida de um atendimento. Um plugin escuta quantos quiser, e não existe obrigação de implementar todos.

EventoQuando dispara
aoAbrirAtendimentoO atendente abre um atendimento
aoFocarAtendimentoO atendente volta o foco para um atendimento já aberto
aoFecharAtendimentoO atendente fecha o atendimento
aoAbrirHistoricoAtendimentoO atendente abre, em modo leitura, um atendimento já encerrado
aoFecharHistoricoAtendimentoO atendente fecha esse histórico
aoAcessarPaginaChatO atendente entra na tela geral do Chat, sem um atendimento específico aberto
aoAcessarPaginaHistoricoO atendente entra na tela geral do histórico

O protocolo também aceita um nome em inglês para cada um desses sete eventos, mantido por compatibilidade com plugins escritos para outras plataformas de atendimento. Registrar um nome ou o outro tem o mesmo efeito.

Comandos disponíveis

Depois de registrado, um plugin chama os comandos abaixo para interagir com o SunchatPlus. A maioria devolve uma resposta. load e openWidget são fire-and-forget, sem retorno.

ComandoO que faz
initializeRegistra o plugin e o que ele expõe
apiRequestChama uma API interna ou externa pelo proxy do servidor
getInfoUserConsulta dados de quem está logado
getInfoChannelsConsulta os canais de atendimento conectados na conta
openModalAbre um modal customizado, com um canal aberto para o host devolver dados
closeModalPede ao host para fechar o modal aberto
openConfirmDialogAbre um diálogo de confirmação (sim/não) antes de uma ação
openAlertMostra um aviso ou toast renderizado pelo host
openPagePede ao host para navegar (rota interna) ou abrir uma URL
openWidgetAbre o painel do plugin na barra lateral direita
loadAvisa que o plugin terminou de carregar

Modal ou rota

O campo modo, definido no cadastro do plugin, decide como uma página do plugin abre quando ativada por um item de navbar ou de options. modal sobrepõe a tela atual, e rota ocupa a tela inteira em /extensao/{id}. O widgetbar não usa esse campo. O painel lateral sempre abre do mesmo jeito, independente do modo cadastrado.

Chamando uma API externa (apiRequest)

Um plugin que precisa chamar um sistema externo não pode apontar para qualquer URL. O host de destino precisa estar liberado antecipadamente, e qualquer chave de API fica guardada como segredo no SunchatPlus, nunca no código do plugin. Isso é combinado com o suporte técnico do SunchatPlus antes da publicação.

const pedido = await WlExtension.apiRequest({
  host: "meuerp",
  method: "GET",
  endpoint: "pedidos/por-telefone",
  query: { telefone },
  secretRefs: {
    "X-Api-Key": { secret: "meuErpApiKey", in: "header" },
  },
});

O plugin manda só o nome do segredo (meuErpApiKey, no exemplo). O SunchatPlus resolve esse nome para o valor real do lado do servidor e injeta no cabeçalho, na query ou no corpo da requisição, conforme indicado em in. O código do plugin, rodando no navegador de quem atende, nunca recebe esse valor.

Peça a liberação do host

Informe ao suporte técnico do SunchatPlus o nome, o endereço e os endpoints e métodos que o seu plugin precisa chamar no sistema externo.

Cadastre o segredo

A chave de API do sistema externo é cadastrada como segredo no SunchatPlus, com o nome que o seu plugin vai referenciar em secretRefs.

Publique e cadastre o plugin

Hospede o plugin no seu próprio domínio com HTTPS e cadastre-o na plataforma, como descrito em Plugins.

Sem os dois primeiros passos, uma chamada apiRequest para um host ainda não liberado falha com erro de host ou endpoint não permitido. É o comportamento esperado, não um bug do seu plugin.

Um host pode dispensar secretRefs. A API pública do SunchatPlus (host publica) já resolve a própria autenticação a partir da chave da sua conta, sem o plugin precisar referenciar segredo nenhum. O catálogo abaixo mostra os dois casos lado a lado.

Catálogo de casos de uso reais

Os seis exemplos abaixo são cenários reais, não hipotéticos. Cada um combina uma superfície do protocolo com os comandos que fazem sentido ali, e dois deles usam endpoints que já existem na API do SunchatPlus.

Ver isso funcionando

Para ver o protocolo funcionando de ponta a ponta, incluindo o pedido de liberação de host externo e o uso de segredo, use o repositório de exemplo. Ele implementa um plugin completo sem depender de nada além do protocolo público.

Edit with