in_app mostra notificações dentro do seu produto: um sino com o número de não lidas, uma lista com o histórico e um aviso na tela quando chega uma notificação nova. Não há credenciais de provedor para configurar — a infraestrutura fica do lado da OctaSend.
Para funcionar, três partes precisam usar o mesmo identificador de usuário:
- o widget, instalado no seu site e iniciado com o
userIddo usuário logado; - uma comunicação com o canal In-App, criada no painel;
- a chamada ao
send-messagecomrecipient.user_idigual aouserIddo widget.
Antes de começar
- Canal liberado: o canal In-App precisa estar liberado para a sua conta. Se ele não aparecer em Configurações → Canais, fale com a OctaSend.
- Guia no painel: em Configurações → Canais → In-app (dentro da aplicação) você encontra o guia de integração com o script já montado.
- Canal habilitado: na mesma página, a chave Canal habilitado precisa estar ligada. Com ela desligada, os envios In-App não são feitos: o canal volta como
skippede aparece em Logs com o motivoCanal in-app desabilitado. - OAuth Client: crie um em Configurações → OAuth Clients. O widget usa só o
client_id, que é público e pode ficar no código do seu site. Veja Autenticação.
Instalar o widget
1
Adicione o script
Cole no
<head> ou antes do fechamento do <body>:2
Inicialize depois do login
Chame
OctaSendInApp.init quando souber quem é o usuário logado:3
Desconecte no logout
Quando o usuário sair, remova o widget da página:
Opções do init
- Sem
clientIdou semuserId, o widget não é montado e registra[OctaSendInApp] clientId e userId são obrigatóriosno console do navegador. - Se o seletor de
targetnão existir na página, o widget não é montado e oinitfalha com o erroOctaSendInApp: target "..." não encontrado. - Chamar
initde novo (por exemplo, ao trocar de usuário) substitui a instância anterior.
Como o widget funciona
- Ao iniciar, carrega as notificações do usuário dos últimos 30 dias, até 100.
- Notificações novas chegam em tempo real, sem recarregar a página. Se a aba estiver visível, aparece um aviso no canto superior direito, que some sozinho depois de 5 segundos.
- O sino mostra quantas notificações não foram lidas; acima de 99, mostra
99+. - Clicar numa notificação marca como lida, chama o seu
onClick(se houver) e, se a notificação tiver link, abre o link na mesma aba. - Quando há não lidas, a lista mostra a opção Marcar todas como lidas.
- Se o usuário estiver offline no momento do envio, a notificação fica guardada e aparece como não lida na próxima vez que ele abrir o seu produto.
- A OctaSend guarda as 100 notificações mais recentes de cada usuário; as mais antigas são apagadas.
- O widget renova a própria autenticação sozinho antes de ela expirar — não é preciso chamar
initde novo. - O visual roda isolado (Shadow DOM): o CSS do seu site não interfere no widget, e o do widget não interfere no seu site.
Verificação de identidade
OclientId e o userId ficam no código do seu site. A verificação de identidade garante que o sino só mostre as notificações de um usuário quando o seu próprio sistema confirmou quem ele é: o seu servidor assina o userId com um segredo da conta, e o site envia essa assinatura, o userHash, junto com o userId.
O mesmo segredo e a mesma exigência valem para o registro de aparelhos do Web Push.
Só usuários MASTER da conta veem o segredo, geram um novo e ligam ou desligam a exigência. Um usuário PADRÃO vê na seção só um aviso para pedir a um usuário MASTER da conta. O papel de cada pessoa é definido em Configurações → Usuários.
1
Gere o segredo
Em Configurações → Canais → In-app (dentro da aplicação), na seção Verificação de identidade, clique em Gerar segredo. O segredo aparece mascarado, com um botão para copiar. Guarde-o só no seu servidor, por exemplo numa variável de ambiente.
2
Calcule o userHash no seu servidor
O
userHash é o HMAC-SHA256 do userId, com o segredo como chave, em hexadecimal. Calcule sobre o userId exatamente como o site vai enviar, sem espaços no início ou no fim:3
Envie o userHash para o site
Entregue o valor à página junto com o Com a tag única, passe no
userId do usuário logado e passe no init:identify:4
Ligue a exigência
Quando o seu site já estiver enviando o
userHash para todos os usuários, ligue Exigir verificação de identidade na mesma seção. A chave só fica disponível depois que o segredo é gerado.Como a verificação decide
- Um
userHashenviado é sempre conferido, mesmo com a exigência desligada. Enviado antes de existir um segredo, ele nunca confere. - Com
userHash, ouserIdé usado exatamente como veio. UmuserIdcom espaço no início ou no fim é recusado. - Gerar novo segredo invalida na hora todo
userHashcalculado com o anterior. Até o seu servidor usar o segredo novo, o sino fica vazio e o web push não registra aparelhos. O painel pede confirmação antes de trocar. - Quando a verificação recusa, o sino aparece sem notificações e nenhuma notificação daquele usuário é carregada. No script
in-app-widget, o console do navegador registra[OctaSendInApp] connect falhou:com o código do erro (tabela abaixo).
clientId no seu site.
Conteúdo da notificação
O conteúdo vem do template In-App da comunicação, no editor do painel. O envio usa sempre a versão publicada do template: alterações salvas com Salvar rascunho só valem depois de Publicar.
As
{{variáveis}} funcionam no título, no corpo e nas URLs.
Enviar uma notificação
Use osend-message com recipient.user_id. Para disparar só o In-App de uma comunicação multicanal, passe channels: ["in_app"]:
"status": "sent" para o canal in_app quando a notificação foi gravada. Se o usuário estiver com o seu produto aberto, ela aparece no widget na hora. Com a chave Canal habilitado desligada, o canal volta como skipped, com o erro Canal in-app desabilitado.
Endpoint de autenticação do widget
O widget chama sozinho o endpointPOST /in-app-auth — você só precisa dele se for construir uma interface própria. Ele troca client_id + user_id (e o user_hash, quando houver) por um token de 15 minutos, que só lê e marca como lidas as notificações daquele usuário.
Com a tag única (OctaTag)
Se o seu site usa a tag única da OctaSend, o sino de notificações também pode ser entregue por ela, sem o script acima — módulo opcional, fale com a OctaSend para ativar. Nesse caso:- o usuário vem do
identify:octasend('identify', { userId, userHash }). OuserHashsegue as mesmas regras da seção Verificação de identidade; - as opções ficam em Configurações → Canais → In-app (dentro da aplicação), no card Configuração da tag: tema, idioma e Intervalo de atualização (ms), de 10.000 a 120.000 (padrão 20.000);
- a tag busca novidades nesse intervalo, em vez de receber em tempo real;
- se a conta tem domínios autorizados cadastrados na tag, o sino só carrega nos sites da lista;
- enquanto o script antigo (
in-app-widget) estiver na página, é ele que mostra as notificações e a tag não desenha um segundo sino. Retire o script antigo depois de instalar a tag.
{"ok": false, "error": "..."} com o motivo: