Encantra Care — Autoatendimento (módulo Portal)

Base de conhecimento, central de ajuda pública, portal do cliente, widget de chat com a Lumi e conversas ao vivo.
Código em app/Modules/Portal, tabelas em database/migrations/110_portal.sql.

Para o time (workspace)

Rota O que faz
/app/support/kb Artigos e categorias, filtros, lacunas de conteúdo (Lumi)
/app/support/kb/new, /kb/{id}/edit Editor Markdown com pré-visualização ao vivo; Lumi gera rascunhos e revisa textos
/app/support/kb/insights Deflexão, buscas sem resultado, artigos mais/menos úteis
/app/support/chats Fila de conversas (aguardando/minhas/com a Lumi/encerradas), assumir, transferir, virar ticket, sugestão da Lumi
/app/support/portal-settings Título da central, saudação, cor, posição, horário humano, tempo de espera, snippet de instalação

Publicar um artigo o envia ao índice Knowledge (source_type = kb_article); despublicar ou excluir remove.
Artigos internos ficam fora da central e do chat, mas continuam disponíveis para a Lumi copiloto dos agentes.

Para o cliente final

  • Central de ajuda: https://suporte.inspire4u.com.br/h/{slug} — busca, categorias, artigos com "Este artigo ajudou?", Pergunte à Lumi (RAG com fontes citadas) e Abrir solicitação (vira ticket no canal portal).
  • Meus chamados: /h/{slug}/entrar — login sem senha por link mágico (30 min, uso único); lista, detalhe e resposta dos chamados.

Instalando o widget de chat

Cole antes de </body> em todas as páginas do site/produto:

<script src="https://suporte.inspire4u.com.br/widget/SEU-SLUG.js" async></script>

Atributos opcionais: data-color="#6C3BFF", data-position="left", data-greeting="Olá!", data-label="Fale com a gente".
API JavaScript: EncantraChat.open() e EncantraChat.close().

Fluxo da conversa

  1. A Lumi responde primeiro com base nos artigos públicos (e conteúdo público de conectores), mostrando as fontes.
  2. O cliente pode marcar Resolveu 👍 (conta como deflexão) ou Falar com um humano (pede nome e e-mail).
  3. Dentro do horário e com agentes online → fila aguardando e notificação aos agentes. Se ninguém assumir em N minutos (padrão 5), o job portal.chat_timeout converte a conversa em ticket.
  4. Fora do horário → ticket imediato com a transcrição; o cliente é avisado de que a resposta vai por e-mail.

A API do widget (/widget/{slug}/api/*) é autenticada pelo token da conversa (o iframe roda em contexto de terceiro, sem cookies) e tem limite de taxa por IP/conversa.

Integrações com outros módulos

  • Support: usa TicketService::create|addMessage|findOrCreateContact|listForContact|getForContact.
  • Eventos emitidos: chat.started, chat.handoff. Ouve: tenant.created (cria 3 categorias e um artigo de boas-vindas).
  • Hooks: search (artigos), app.home (painel de autoatendimento), usage.meters (kb_articles), settings.sections.
  • IA: portal.answer, portal.chat_suggest, kb.draft, kb.improve, kb.gaps. Sem IA configurada, tudo continua funcionando: a busca mostra os artigos encontrados e oferece abrir solicitação.

Encontrou algo para melhorar? Escreva para master@inspire4u.com.br.