Este guia explica como publicar o arquivo sw.js da Inngage em uma loja VTEX FastStore, usando um escopo dedicado que não interfere em outros service workers já existentes na loja (como o do Partytown, usado nativamente pelo FastStore).
Tempo estimado: 15 minutos de desenvolvimento + tempo de build do WebOps.
Perfil necessário: desenvolvedor com acesso ao repositório FastStore da loja.
Antes de começar
Confirme que:
- A tag
inngage.jsjá está instalada no site e carregando no main thread (semtype="text/partytown"). Se a tag estiver rodando dentro do Partytown, o registro do service worker não funciona. - Você tem acesso ao repositório Git do projeto FastStore e permissão para abrir Pull Requests.
- Você tem acesso à plataforma Inngage em Plataformas → Web Push.
Passo 1 — Gerar o arquivo na plataforma Inngage
- Acesse Plataformas → Web Push → Instalação do SW.js.
- Preencha os campos com os valores recomendados abaixo:
| Campo | Valor recomendado |
|---|---|
| Caminho do Arquivo | /inngage/ |
| Nome do Arquivo | sw.js |
| Escopo do Arquivo | /inngage/ |
- Clique em Download. Você receberá o arquivo
sw.js.
Por que esses valores: o service worker fica isolado na pasta /inngage/ do seu domínio. O escopo /inngage/ garante que ele nunca dispute controle da loja com outros service workers (Partytown, PWA, outros fornecedores). Notificações push não precisam de controle sobre as páginas — precisam apenas de um registro válido, e esse isolamento é o que evita conflitos e notificações duplicadas.
O arquivo final ficará acessível em: https://www.sualoja.com.br/inngage/sw.js
Não altere o conteúdo do arquivo. Ele contém apenas uma importação do código mantido pela Inngage, o que permite atualizações sem novo deploy da sua parte.
Passo 2 — Adicionar o arquivo ao projeto FastStore
O FastStore é baseado em Next.js. Tudo que está na pasta
publicdo projeto é servido a partir da raiz do domínio.
- No repositório da loja, localize a pasta
publicna raiz do projeto FastStore.
- Em projetos monorepo, ela fica dentro do pacote da loja (por exemplo,
packages/store/public).- Crie a subpasta
inngage.- Copie o arquivo baixado para
public/inngage/sw.js.Estrutura resultante:
public/
└── inngage/
└── sw.js
- Faça o commit e abra um Pull Request:
git checkout -b feat/inngage-service-worker git add public/inngage/sw.js git commit -m "feat: adiciona service worker da Inngage em escopo dedicado" git push origin feat/inngage-service-worker
Apenas arquivos presentes em
publicno momento do build são publicados. Não existe forma de subir esse arquivo pelo painel VTEX ou pelo Headless CMS — é obrigatório passar pelo repositório.
Passo 3 — Publicar
- Aguarde o build do FastStore WebOps no Pull Request.
- Abra a URL de preview gerada pelo WebOps e valide conforme o Passo 4.
- Aprove e faça o merge do PR. O WebOps publica automaticamente em produção.
Nenhuma alteração adicional é necessária: a tag
inngage.jsdetecta o arquivo e realiza o registro do service worker sozinha.
Passo 4 — Validar a instalação
4.1 O arquivo está acessível
Abra no navegador:
https://www.sualoja.com.br/inngage/sw.jsResultado esperado: status
200e conteúdo JavaScript (uma linha comimportScripts). Se aparecer uma página HTML ou erro 404, o arquivo não foi publicado no caminho correto.4.2 O service worker está registrado
- Abra a loja no Chrome e pressione
F12.- Vá em Application → Service Workers.
- Localize a entrada com origem
/inngage/sw.js. O status deve ser activated and is running.Outros service workers (como
/~partytown/partytown-sw.js) podem aparecer na lista normalmente — isso é esperado.4.3 A assinatura está no service worker correto
No console do navegador (
F12 → Console), execute:
navigator.serviceWorker.getRegistrations().then(rs => rs.forEach(async r => console.log(r.scope, r.active?.scriptURL, !!(await r.pushManager.getSubscription())) ));
Resultado esperado após aceitar as notificações:
https://www.sualoja.com.br/inngage/ .../inngage/sw.js true https://www.sualoja.com.br/~partytown/ .../partytown-sw.js false
A linha /inngage/ deve ser a única com true.
4.4 Teste ponta a ponta
- Em uma janela anônima, acesse a loja, aceite o pré-permission da Inngage e depois a permissão do navegador.
- Na plataforma Inngage, envie uma notificação de teste para o seu dispositivo.
- A notificação deve aparecer na tela mesmo com a aba fechada.
Problemas comuns
| Sintoma | Causa provável | Solução |
|---|---|---|
/inngage/sw.js retorna 404 | Arquivo fora da pasta public ou build antigo | Confirme o caminho public/inngage/sw.js e aguarde novo build |
/inngage/sw.js retorna HTML | Next.js devolveu página de 404 | Mesmo caso acima — o arquivo não está sendo servido |
Erro no console: The script has an unsupported MIME type | Arquivo retornando HTML em vez de JavaScript | Mesmo caso acima |
Erro no console: The path of the provided scope is not under the max scope allowed | Escopo configurado diferente da pasta do arquivo | Escopo e caminho precisam ser iguais (/inngage/) |
| Permissão aceita, mas nenhuma notificação chega | Assinatura criada em outro service worker antes da instalação do sw.js | Verifique com o script do item 4.3 e entre em contato com o suporte Inngage |
| Pré-permission não aparece | Tag inngage.js rodando via Partytown ou não carregada | Mova a tag para o main thread |
Resumo da instalação
Ao final do processo, sua loja terá:
- O arquivo
sw.jsda Inngage publicado emhttps://www.sualoja.com.br/inngage/sw.js - Um service worker registrado no escopo
/inngage/, isolado do Partytown e de qualquer outro service worker da loja - Assinaturas de web push criadas exclusivamente nesse service worker, o que garante entrega correta e sem notificações duplicadas
A partir daí, a Inngage cuida do restante: atualizações no código do service worker são publicadas pelo nosso CDN e chegam à loja sem novo deploy do seu lado. Você só precisa voltar a esse guia se mudar a estrutura do projeto FastStore ou migrar de plataforma.
Checklist final
- Arquivo gerado na plataforma com caminho
/inngage/, nomesw.jse escopo/inngage/ - Arquivo commitado em
public/inngage/sw.jse PR aprovado -
https://www.sualoja.com.br/inngage/sw.jsretorna200com conteúdo JavaScript - Service worker
/inngage/sw.jsaparece como ativo em DevTools → Application - Script do item 4.3 mostra
trueapenas na linha/inngage/ - Notificação de teste recebida com a aba fechada
Suporte
Se algum item do checklist não passar, abra um chamado com o suporte da Inngage enviando:
- A URL da loja
- O resultado do script do item 4.3 (print ou texto do console)
- O print da aba Application → Service Workers do DevTools
Com essas três informações conseguimos identificar a causa na primeira resposta, sem idas e vindas.

