SDK de Web Push 3.0
Integração
Anchor link toExemplo de integração no GitHub
Obtenha o SDK de Web Push da Pushwoosh e descompacte-o. Você deve ter os seguintes arquivos:
Anchor link to- pushwoosh-service-worker.js
Coloque todos esses arquivos no diretório raiz de nível superior do seu site.
Anchor link toInicialize o SDK:
Anchor link to- Inclua o SDK do nosso CDN de forma assíncrona.
<script type="text/javascript" src="//cdn.pushwoosh.com/webpush/v3/pushwoosh-web-notifications.js" async></script>- Inicialize o SDK de Web Push e certifique-se de enfileirar a inicialização até o momento em que o SDK esteja totalmente carregado.
<script type="text/javascript">var Pushwoosh = Pushwoosh || [];Pushwoosh.push(['init', { logLevel: 'info', // valores possíveis: error, info, debug applicationCode: 'XXXXX-XXXXX', // o código da sua aplicação do Painel de Controle da Pushwoosh apiToken: 'XXXXXXX', // Token de API do Dispositivo safariWebsitePushID: 'web.com.example.domain', // string de domínio reverso única, obtida no seu Portal de Desenvolvedor da Apple. Necessário apenas se você enviar notificações push para o navegador Safari defaultNotificationTitle: 'Pushwoosh', // define um título padrão para notificações push defaultNotificationImage: 'https://seusite.com/img/logo-medium.png', // URL para uma imagem de notificação personalizada autoSubscribe: false, // ou true. Se for true, solicita que o usuário se inscreva para pushes na inicialização do SDK subscribeWidget: { enable: true }, userId: 'user_id', // opcional, defina um ID de usuário personalizado tags: { 'Name': 'John Smith' // opcional, defina Tags personalizadas }}]);</script>Pop-ups da Web
Anchor link toAdicione webPopups ao seu objeto init para habilitar campanhas de pop-up da Web em seu site.
webPopups: { enable: true,},As campanhas de pop-up da Web exibem sobreposições que você configura no Painel de Controle, como promoções, anúncios ou formulários de captura de leads. Diferente do pop-up de inscrição personalizado (subscribePopup), que lida apenas com a adesão a pushes da web, as campanhas de pop-up da Web podem exibir qualquer conteúdo que você configurar.
Para configuração no Painel de Controle, veja Entendendo os pop-ups da Web.
Botão de inscrição para push
Anchor link toPara solicitar que seus usuários se inscrevam para notificações push, recomendamos implementar um botão de inscrição para push em seu site. Melhore a experiência do usuário e obtenha mais inscritos!
Configuração
Anchor link toPara finalizar a implementação de notificações push em seu site, você precisa configurar as plataformas web em seu Painel de Controle Pushwoosh seguindo nossos guias passo a passo:
Registrando o service worker em um escopo diferente
Anchor link toÀs vezes, você não pode colocar o arquivo do service worker em um diretório raiz de um site, mas em um subdiretório.
Neste caso, modifique a configuração (passo 4.3) adicionando um parâmetro
serviceWorkerUrl: “/push-notifications/pushwoosh-service-worker.js”
onde /push-notifications/pushwoosh-service-worker.js é o caminho para o arquivo pushwoosh-service-worker.js.
Manipuladores de eventos
Anchor link toNo SDK Web da Pushwoosh 3.0, você pode se inscrever em certos eventos para rastreá-los**,** ou cancelar a inscrição de eventos se não precisar mais rastreá-los.
Para rastrear o carregamento do SDK Web 3.0, dispare o evento onLoad da seguinte forma:
// Evento de CarregamentoPushwoosh.push(['onLoad', (api) => { console.log('Pushwoosh carregado!');}]);Para rastrear a inicialização correta do SDK Web, dispare o evento onReady:
// Evento de ProntoPushwoosh.push((api) => { console.log('Pushwoosh pronto!');});Para se inscrever ou cancelar a inscrição de qualquer um dos eventos do SDK, use os manipuladores após o carregamento do SDK:
Pushwoosh.push(['onLoad', (api) => { function onEventNameHandler() { console.log('Evento acionado: event-name!'); }
// Para se inscrever em um evento: Pushwoosh.addEventHandler('event-name', onEventNameHandler)
// Para cancelar a inscrição de um evento: Pushwoosh.removeEventHandler('event-name', onEventNameHandler)}]);Eventos do SDK
Anchor link toEvento de inscrição
Anchor link toExecutado depois que um usuário concorda em receber notificações push.
Pushwoosh.push(['onLoad', (api) => { Pushwoosh.addEventHandler('subscribe', (payload) => { console.log('Evento acionado: subscribe'); });}]);Evento de cancelamento de inscrição
Anchor link toExecutado depois que um dispositivo é desregistrado das notificações.
Pushwoosh.push(['onLoad', (api) => { Pushwoosh.addEventHandler('unsubscribe', (payload) => { console.log('Evento acionado: unsubscribe'); });}]);Eventos do widget de inscrição
Anchor link toRastreia a exibição de um widget de Solicitação de Inscrição.
Pushwoosh.push(['onLoad', (api) => { // Executado na exibição do widget de Solicitação de Inscrição Pushwoosh.addEventHandler('show-subscription-widget', (payload) => { console.log('Evento acionado: show-subscription-widget'); });
// Executado ao ocultar o widget de Solicitação de Inscrição Pushwoosh.addEventHandler('hide-subscription-widget', (payload) => { console.log('Evento acionado: hide-subscription-widget'); });}]);Eventos do diálogo de permissão de notificação
Anchor link toRastreia a exibição do diálogo de inscrição nativo.
Pushwoosh.push(['onLoad', function (api) { // Executado na exibição do diálogo de permissão Pushwoosh.addEventHandler('show-notification-permission-dialog', (payload) => { console.log('Evento acionado: show-notification-permission-dialog'); });
// Executado ao ocultar o diálogo de permissão com um dos três status possíveis: // 1. default - o diálogo é fechado // 2. granted - a permissão é concedida // 3. denied - a permissão é negada Pushwoosh.addEventHandler('hide-notification-permission-dialog', (payload) => { console.log('Evento acionado: hide-notification-permission-dialog', payload.permission); });}]);Eventos de permissão
Anchor link toVerifica o status da permissão de notificações push na inicialização do SDK; rastreia a atualização deste status sempre que ocorrer.
Pushwoosh.push(['onLoad', (api) => { // Executado durante a inicialização do SDK se 'autoSubscribe: false' ou/e se um usuário ignorar uma solicitação de notificação push. Pushwoosh.addEventHandler('permission-default', (payload) => { console.log('Evento acionado: permission-default'); });
// Executado durante a inicialização do SDK se as notificações estiverem bloqueadas ou uma vez que um usuário bloqueie as notificações push. Pushwoosh.addEventHandler('permission-denied', (payload) => { console.log('Evento acionado: permission-denied'); });
// Executado durante a inicialização do SDK se as notificações forem permitidas ou uma vez que um usuário permita as notificações push. Pushwoosh.addEventHandler('permission-granted', (payload) => { console.log('Evento acionado: permission-granted'); });}]);Evento de recebimento de push
Anchor link toRastreia a entrega de push para um dispositivo.
Pushwoosh.push(['onLoad', (api) => { // Executado quando uma notificação push é exibida. Pushwoosh.addEventHandler('receive-push', (payload) => { console.log('Evento acionado: receive-push', payload.notification); });}]);Eventos de notificação
Anchor link toRastreia se uma notificação push é aberta ou fechada por um usuário.
Pushwoosh.push(['onLoad', (api) => { // Executado quando um usuário clica na notificação. Pushwoosh.addEventHandler('open-notification', (payload) => { console.log('Evento acionado: open-notification', payload.notification); });
// Executado quando um usuário fecha uma notificação push. Pushwoosh.addEventHandler('hide-notification', (payload) => { console.log('Evento acionado: hide-notification', payload.notification); });}]);Eventos da Caixa de Entrada
Anchor link toRastreia notificações enviadas para a Caixa de Entrada.
Pushwoosh.push(['onLoad', (api) => { // Executado pelo ServiceWorker após a Mensagem da Caixa de Entrada ser recebida e salva no indexedDB. Pushwoosh.addEventHandler('receive-inbox-message', (payload) => { console.log('Evento acionado: receive-inbox-message', payload.message); });
// Executado após a Caixa de Entrada ser atualizada automaticamente enquanto a página está carregando. Pushwoosh.addEventHandler('update-inbox-messages', (payload) => { console.log('Evento acionado: receive-inbox-message', payload.messages); });}]);Eventos de pop-up de inscrição personalizada
Anchor link toPara detalhes sobre como lidar com eventos de pop-up de inscrição personalizada, consulte o Guia de Eventos de Pop-up de Inscrição Personalizada.
Após a inicialização do SDK de Web Push, você pode fazer as seguintes chamadas para a API da Pushwoosh. Todos os métodos retornam objetos Promise.
Pushwoosh.push((api) => { // Definir tags para um usuário api.setTags({ 'Tag Name 1': 'value1', 'Tag Name 2': 'value2' });
// Obter tags para um usuário do servidor api.getTags();
// Registrar ID de usuário api.registerUser('user123');
// Registrar e-mail do usuário api.registerEmail('user@example.com');
// Registrar número de SMS api.registerSmsNumber('+15551234567');
// Registrar número de WhatsApp api.registerWhatsappNumber('+1234567890');
// Postar um Evento api.postEvent('myEventName', {attributeName: 'attributeValue'});
//Cancelar o registro de notificações api.unregisterDevice();
// Definir o idioma do dispositivo (substitui o valor na Tag "Language") api.setLanguage('es');
// Alternativamente, multi-registro de usuário com dispositivos e canais api.multiRegisterDevice({ user_id: 'user123', email: 'user@example.com', sms_phone_number: '+1234567890', tags: { 'UserType': { operation: TTagOperationSet, value: 'Premium' }, 'Interests': { operation: TTagOperationAppend, values: ['sports', 'technology'] } } });});multiRegisterDevice
Anchor link toMétodo de registro aprimorado que permite registrar um perfil de usuário com múltiplos dispositivos e canais de mensagens em uma única chamada de API. Este método é particularmente útil para aplicações multiplataforma ou ao implementar estratégias de mensagens omnichannel.
Pushwoosh.push((api) => { api.multiRegisterDevice({ user_id: 'user123', // Opcional: Identificador do usuário email: 'user@example.com', // Opcional: E-mail para mensagens de e-mail sms_phone_number: '+1234567890', // Opcional: Número de telefone SMS (formato E.164) whatsapp_phone_number: '+1234567890', // Opcional: Número do WhatsApp (formato E.164) kakao_phone_number: '+1234567890', // Opcional: Número do KakaoTalk (formato E.164) language: 'en', // Opcional: Código do idioma (ISO 639-1) timezone: 'America/New_York', // Opcional: Identificador de fuso horário city: 'New York', // Opcional: Cidade para segmentação country: 'US', // Opcional: País para segmentação state: 'NY', // Opcional: Estado para segmentação tags: { // Opcional: Valores de tag com operações 'UserType': { operation: TTagOperationSet, // Definir valor da tag (0) value: 'Premium' }, 'Interests': { operation: TTagOperationAppend, // Anexar ao valor da tag (1) values: ['sports', 'technology'] }, 'LoginCount': { operation: TTagOperationIncrement, // Incrementar valor da tag (3) value: '1' } }, push_devices: [ // Opcional: Array de dispositivos de push { hwid: 'web-device-456', platform: TPlatformChrome, // Plataforma Chrome (11) push_token: 'fcm-token-here', app_version: '2.1.0', platformData: { public_key: 'web-push-public-key', auth_token: 'web-push-auth-token', browser: 'chrome' } } ] }) .then((response) => { console.log('Multi-registro bem-sucedido:', response); }) .catch((error) => { console.error('Falha no multi-registro:', error); });});Tipos de Plataforma:
TPlatformSafari(10): Plataforma SafariTPlatformChrome(11): Plataforma ChromeTPlatformFirefox(12): Plataforma Firefox
Tipos de Operação de Tag:
TTagOperationSet(0): Definir valor da tag (substituir valor existente)TTagOperationAppend(1): Anexar ao valor da tag (adicionar à lista)TTagOperationRemove(2): Remover valor da tag (remover da lista)TTagOperationIncrement(3): Incrementar valor da tag (incremento numérico)
Benefícios:
- Chamada de API única: Registre múltiplos dispositivos e canais de uma vez
- Operação atômica: Todos os registros são bem-sucedidos ou falham juntos
- Centrado no usuário: Associa todos os dispositivos a um único perfil de usuário
- Marcação avançada: Suporta operações complexas de tags
- Multiplataforma: Lida com múltiplas plataformas simultaneamente
Exemplo de envio de Tags para a Pushwoosh:
Pushwoosh.push((api) => { var myCustomTags = { 'Tag 1': 123, 'Tag 2': 'some string' }; api.setTags(myCustomTags) .then((res) => { var skipped = res && res.skipped || []; if (!skipped.length) { console.log('sucesso'); } else { console.warn('tags ignoradas:', skipped); } }) .catch((err) => { console.error('erro em setTags:', err); });});Incrementar valor da Tag
Anchor link toPara incrementar um valor de uma Tag Numérica, use o parâmetro operation com o valor ‘increment’ da seguinte forma:
Pushwoosh.push((api) => { api.setTags({ 'Tag 1': { operation: 'increment', value: 1 } })});Anexar valores de Tag
Anchor link toPara anexar novos valores à Tag de Lista existente, use o parâmetro operation com o valor ‘append’ da seguinte forma:
Pushwoosh.push((api) => { api.setTags({ 'Tag 3': { operation: 'append', value: ['Value3'] } })});Remover valor da Tag
Anchor link toPara remover um valor de uma Tag de Lista, use o parâmetro operation com o valor ‘remove’ da seguinte forma:
Pushwoosh.push((api) =>{ api.setTags({ 'Tag 3': { operation: 'remove', value: ['Value2'] } })});Métodos públicos
Anchor link toPushwoosh.subscribe()
Este método é usado para solicitar a permissão de um usuário para notificações push. Se um usuário já estiver inscrito, o método interromperá a execução.
Se um usuário ainda não se inscreveu para pushes:
1. A permissão para notificações push é solicitada.

2. Se um usuário permitir notificações, o evento onSubscribe é acionado.
Pushwoosh.subscribe() é executado automaticamente se autoSubscribe: true. for definido durante a inicialização do SDK.
Chame este método se você optou por solicitar manualmente a um usuário que se inscreva para pushes usando o parâmetro autoSubscribe: false durante a inicialização:
<button onclick="Pushwoosh.subscribe()">Inscrever-se</button><script> Pushwoosh.push(['onSubscribe', (api) => { console.log('Usuário inscrito com sucesso'); }]);</script>Pushwoosh.unsubscribe()
- O método
/unregisterDeviceé executado. - O evento
onUnsubscribeé acionado.
<button onclick="Pushwoosh.unsubscribe()">Cancelar inscrição</button><script type="text/javascript"> Pushwoosh.push(['onUnsubscribe', (api) => { console.log('Usuário cancelou a inscrição com sucesso'); }]);</script>Pushwoosh.isSubscribed()
Verifica se um usuário está inscrito e retorna um flag true/false.
Pushwoosh.isSubscribed().then((isSubscribed) => { console.log('isSubscribed', isSubscribed);});Pushwoosh.getHWID()
Retorna o HWID da Pushwoosh.
Pushwoosh.getHWID().then((hwid) => { console.log('hwid:', hwid);});Pushwoosh.getPushToken()
Retorna o token de push se estiver disponível.
Pushwoosh.getPushToken().then((pushToken) => { console.log('pushToken:', pushToken);});Pushwoosh.getUserId()
Retorna o ID de Usuário se disponível.
Pushwoosh.getUserId().then((userId) => { console.log('userId:', userId);});Pushwoosh.getParams()
Retorna uma lista dos seguintes parâmetros:
Pushwoosh.getParams().then((params) => { params = params || {}; var hwid = params.hwid; var pushToken = params.pushToken; var userId = params.userId;});Pushwoosh.isAvailableNotifications()
Verifica se um navegador suporta o WebSDK 3.0 da Pushwoosh, retorna ‘true’ ou ‘false’.
Pushwoosh.isAvailableNotifications() // true/falseMétodos InboxMessages
Anchor link tomessagesWithNoActionPerformedCount(): Promise<number>
Retorna o número de mensagens abertas.
Pushwoosh.pwinbox.messagesWithNoActionPerformedCount() .then((count) => { console.log(`${count} mensagens abertas`); });unreadMessagesCount()
Retorna o número de mensagens não lidas.
Pushwoosh.pwinbox.unreadMessagesCount() .then((count) => { console.log(`${count} mensagens não lidas`); });messagesCount(): Promise<number>
Retorna o número total de mensagens.
Pushwoosh.pwinbox.messagesCount() .then((count) => { console.log(`${count} mensagens`); });loadMessages(): Promise<Array>
Carrega a lista de mensagens não excluídas.
Pushwoosh.pwinbox.loadMessages() .then(() => { console.log('As mensagens foram carregadas'); });readMessagesWithCodes(codes: Array<string>): Promise<void>
Marca as mensagens como lidas por Inbox_Ids.
Pushwoosh.pwinbox.readMessagesWithCodes(codes) .then(() => { console.log('As mensagens foram lidas'); });performActionForMessageWithCode(code: string): Promise<void>
Executa a ação atribuída a uma mensagem e marca a mensagem como lida.
Pushwoosh.pwinbox.performActionForMessageWithCode(code) .then(() => { console.log('A ação foi executada'); });deleteMessagesWithCodes(codes: Array<string>): Promise<void>
Marca as mensagens como excluídas.
Pushwoosh.pwinbox.deleteMessagesWithCodes([code]) .then(() => { console.log('As mensagens foram excluídas'); });syncMessages(): Promise<void>
Sincroniza as mensagens com o servidor.
Pushwoosh.pwinbox.syncMessages() .then(() => { console.log('As mensagens foram sincronizadas'); });Suporte a Progressive Web App
Anchor link toPara integrar a Pushwoosh em sua Progressive Web Application (PWA), siga os passos descritos abaixo.
1. Copie o caminho para o seu arquivo de Service Worker:
if ('serviceWorker' in navigator) { window.addEventListener('load', () => { navigator.serviceWorker.register('/service-worker.js') // <- url do seu service worker });}Em seguida, use o parâmetro serviceWorkerUrl ao inicializar o WebSDK da seguinte forma:
var Pushwoosh = Pushwoosh || [];Pushwoosh.push(['init', { logLevel: 'error', applicationCode: 'XXXXX-XXXXX', safariWebsitePushID: 'web.com.example.domain', defaultNotificationTitle: 'Pushwoosh', defaultNotificationImage: 'https://seusite.com/img/logo-medium.png', serviceWorkerUrl: '/service-worker.js', // <- url do seu service worker}]);O WebSDK não registra o novo Service Worker imediatamente; um Service Worker é registrado quando é necessário:
- quando um dispositivo recebe um token de push (no registro do dispositivo ou re-inscrição),
- quando um token de push é excluído (ao remover um dispositivo da base de usuários).
Isso acelera o carregamento de suas páginas, diminuindo o número de solicitações ao servidor.
Os navegadores não permitem que dois Service Workers diferentes sejam registrados ao mesmo tempo (leia mais: https://github.com/w3c/ServiceWorker/issues/921), então para que sua PWA funcione corretamente, um Service Worker comum deve ser registrado para sua base de código e a base de código da Pushwoosh.
2. Adicione a seguinte string ao seu Service Worker (no início ou no final, não importa):
importScripts('https://cdn.pushwoosh.com/webpush/v3/pushwoosh-service-worker.js' + self.location.search);Assim, você habilita o recebimento e o processamento de notificações push enviadas através dos serviços da Pushwoosh para o seu Service Worker.
Instalando a partir do Google Tag Manager
Anchor link toUse o seguinte código em seu Google Tag Manager para inicializar o SDK da Pushwoosh. Crie uma Tag HTML Personalizada e cole o código abaixo. Certifique-se de alterar o Código de Aplicação da Pushwoosh, o ID do Site Safari e a URL da imagem de notificação padrão.
Também defina uma prioridade alta de Disparo de Tag (ex: 100) e acione-a em Todas as Páginas. Veja abaixo uma captura de tela.Copiar
<script type="text/javascript" src="//cdn.pushwoosh.com/webpush/v3/pushwoosh-web-notifications.js" async></script><script type="text/javascript"> var Pushwoosh = Pushwoosh || []; Pushwoosh.push(['init', { logLevel: 'error', applicationCode: 'XXXXX-XXXXX', safariWebsitePushID: 'web.com.example.domain', defaultNotificationTitle: 'Pushwoosh', defaultNotificationImage: 'https://yoursite.com/img/logo-medium.png', autoSubscribe: true, subscribeWidget: { enable: false }, userId: 'user_id' }]);</script>