PRIMEIROS PASSOS
Comece por aqui
Da sessão autenticada à primeira conversa com contexto.
01 · Prepare seu projeto
Confirme o tenant do seu projeto com o operador. No painel, abra Widget integration e instale a credencial de integração no ambiente privado do seu backend. Cadastre as origens web usadas pela integração.
O ID do tenant identifica seu projeto na plataforma. Ele não substitui a organização ou loja do usuário dentro do seu aplicativo.
02 · Solicite a sessão
Seu backend autentica a pessoa e confere vínculo e permissões atuais antes de chamar o emissor. A credencial determina o tenant; a requisição não aceita um tenant livre.
# Somente no backend. Use variáveis do ambiente privado.
curl --fail-with-body \
https://support-ai.pontes.uk/api/widget/sessions \
-H "Authorization: Bearer $SUPPORT_INTEGRATION_CREDENTIAL" \
-H "Content-Type: application/json" \
-d '{"userId":"usr_exemplo","userEmail":"","userRoles":["member"],"plan":"standard"}' 03 · Prepare o contexto
Colete userState, userHistory e userLogs para a mesma pessoa. Devolva sessão e contexto pelo endpoint autenticado do seu aplicativo, com Cache-Control: no-store. Esse endpoint de bootstrap pertence ao seu backend.
- Use o schema oficial e dados sintéticos no primeiro teste.
- Não envie credenciais, headers ou registros de outra pessoa.
- Uma coleta que falhou deve retornar erro; não invente uma lista vazia.
04 · Monte e confira o widget
Carregue o SDK fixado 0.2.2, implemente renovação e destruição da instância. Confirme uma resposta real e o snapshot correspondente antes de liberar.
// Depois de autenticar e revalidar a pessoa no seu backend.
// Estes callbacks são implementados pelo seu aplicativo.
const data = await fetchAuthenticatedBootstrap();
const widget = AISupportWidget.init({
apiUrl: 'https://support-ai.pontes.uk',
tenantKey: data.tenantKey,
jwt: data.jwt,
context: data.context,
locale: 'pt-BR',
theme: 'light',
position: 'bottom-right',
onTokenRefresh: async () =>
(await fetchAuthenticatedBootstrap()).jwt,
onOpen: async () =>
widget.updateContext(await fetchAuthorizedContext()),
});
// No logout, troca de pessoa/organização/papel e unmount:
// widget.destroy();