Notificacoes de Clientes
O Levy Fleets usa notificacoes push para manter os clientes informados sobre suas viagens, status da conta, promocoes e atualizacoes importantes. Este guia aborda tipos de notificacao, como enviar notificacoes manuais, notificacoes automaticas do sistema e solucao de problemas de entrega.
Visao Geral
O sistema de notificacao usa Expo Push Notifications para entregar mensagens aos dispositivos moveis dos clientes. Notificacoes sao enviadas para:
- Eventos relacionados a viagens (inicio, fim, problemas)
- Alertas de zona (entrando/saindo de zonas)
- Notificacoes de pagamento (cobranças bem-sucedidas, pagamentos falhos)
- Atualizacoes de carteira (creditos adicionados)
- Mensagens promocionais (promocoes, anuncios)
- Alertas do sistema (manutencao, atualizacoes)
- Verificacao de identidade (necessaria, removida)
Tipos de Notificacao
Notificacoes Geradas pelo Sistema
Estas sao automaticamente acionadas por eventos no sistema:
| Tipo | Gatilho | Exemplo de Mensagem |
|---|---|---|
ride | Eventos de viagem | "Sua viagem foi encerrada. Total: R$ 25,00" |
zone | Limite de zona cruzado | "Voce esta saindo da area de servico" |
payment | Pagamento processado | "Pagamento de R$ 50,00 bem-sucedido" |
wallet | Saldo alterado | "Voce recebeu R$ 25,00 de credito" |
identity | Status de verificacao | "Verificacao de identidade necessaria" |
system | Alertas da plataforma | "Manutencao programada hoje a noite" |
Notificacoes Manuais
Operadores podem enviar notificacoes personalizadas para clientes individuais ou grupos:
| Caso de Uso | Quando Usar |
|---|---|
| Atualizacoes de servico | Informar sobre mudancas locais |
| Ofertas promocionais | Anunciar descontos ou eventos |
| Problemas de conta | Solicitar acao do cliente |
| Contato pessoal | Acompanhamento de atendimento ao cliente |
Enviando Notificacoes Manuais
Para Cliente Individual
- Navegue ate Painel > Clientes
- Clique no cliente para abrir a pagina de detalhes
- Clique em Acoes (menu de tres pontos)
- Selecione Enviar Notificacao
- Preencha o formulario de notificacao:
- Titulo: Cabecalho da notificacao (exibido em negrito)
- Corpo: Texto principal da mensagem
- Tipo: Categoria da notificacao
- Clique em Enviar
Campos do Formulario de Notificacao
| Campo | Obrigatorio | Descricao |
|---|---|---|
| Titulo | Sim | Cabecalho curto, maximo 50 caracteres |
| Corpo | Sim | Conteudo da mensagem, maximo 200 caracteres |
| Tipo | Nao | Categoria da notificacao (afeta icone/tratamento) |
| Dados | Nao | Dados JSON personalizados para deep linking |
Opcoes de Tipo
| Tipo | Icone | Usar Para |
|---|---|---|
promo | Presente | Ofertas promocionais, descontos |
system | Sino | Anuncios gerais |
ride | Patinete | Mensagens relacionadas a viagem |
wallet | Carteira | Atualizacoes de pagamento/credito |
payment | Cartao | Problemas com metodo de pagamento |
identity | Escudo | Mensagens de verificacao |
Referencia da API
Endpoint de Envio de Notificacao
Endpoint: POST /api/customers/notify
Corpo da Requisicao:
{
"customerId": "customer-uuid-here",
"title": "Oferta Especial!",
"body": "Ganhe 20% de desconto na sua proxima viagem com o codigo ECONOMIZE20",
"type": "promo"
}
Resposta (Sucesso):
{
"success": true,
"ticketId": "XXXX-XXXX-XXXX-XXXX"
}
Resposta (Falha):
{
"success": false,
"error": "Cliente nao tem token push"
}
Parametros Obrigatorios
| Parametro | Tipo | Descricao |
|---|---|---|
customerId | string | UUID do cliente |
title | string | Titulo da notificacao |
body | string | Texto do corpo da notificacao |
Parametros Opcionais
| Parametro | Tipo | Descricao |
|---|---|---|
type | string | Tipo de notificacao (veja tipos acima) |
data | object | Dados personalizados para deep linking |
sound | string | Som a tocar (padrao/personalizado) |
badge | number | Contagem de badge do aplicativo |
Deep Linking
Notificacoes podem incluir dados que abrem telas especificas no aplicativo:
Detalhe da Viagem
{
"customerId": "xxx",
"title": "Viagem Concluida",
"body": "Veja o resumo da sua viagem",
"data": {
"screen": "ride",
"rideId": "ride-uuid"
}
}
Carteira
{
"customerId": "xxx",
"title": "Credito Adicionado",
"body": "Confira seu novo saldo",
"data": {
"screen": "wallet"
}
}
Verificacao de Identidade
{
"customerId": "xxx",
"title": "Verifique Sua Identidade",
"body": "Complete a verificacao para continuar andando",
"data": {
"screen": "identity_verification"
}
}
Notificacoes Automaticas
Notificacoes de Viagem
| Evento | Titulo | Exemplo de Corpo |
|---|---|---|
| Viagem Iniciada | "Viagem Iniciada" | "Aproveite sua viagem no [ID do Veiculo]" |
| Viagem Encerrada | "Viagem Concluida" | "Sua viagem: R$ 25,00 por 15 minutos" |
| Viagem Pausada | "Viagem Pausada" | "Sua viagem esta pausada" |
| Aviso de Bateria Baixa | "Bateria Baixa" | "A bateria do veiculo esta baixa, encerre em breve" |
| Fora da Zona | "Saindo da Area de Servico" | "Voce esta prestes a sair da zona de servico" |
| Aviso de Encerramento Automatico | "Viagem Encerrando em Breve" | "Sua viagem sera encerrada automaticamente em 5 minutos" |
Notificacoes de Pagamento
| Evento | Titulo | Exemplo de Corpo |
|---|---|---|
| Cobranca Bem-sucedida | "Pagamento Bem-sucedido" | "Pagamento de R$ 50,00 processado" |
| Cobranca Falhou | "Pagamento Falhou" | "Nao conseguimos processar seu pagamento" |
| Cartao Expirando | "Cartao Expirando" | "Seu cartao expira no proximo mes" |
| Assinatura Renovada | "Assinatura Renovada" | "Seu plano mensal foi renovado" |
Notificacoes de Carteira
| Evento | Titulo | Exemplo de Corpo |
|---|---|---|
| Credito Adicionado | "Credito Adicionado" | "Voce recebeu R$ 25,00 de credito" |
| Bonus Aplicado | "Credito de Bonus" | "R$ 15,00 de bonus adicionado a sua conta" |
| Saldo Baixo | "Saldo Baixo" | "Adicione fundos para continuar andando" |
| Reembolso Emitido | "Reembolso Processado" | "R$ 12,50 foi reembolsado" |
| Saldo Negativo | "Saldo da carteira negativo" | "Uma cobranca de R$ 125,00 foi aplicada..." |
| Recarga Automatica | "Carteira Recarregada" | "R$ 75,00 foi adicionado a sua carteira" |
Notificacao de Saldo Negativo
Alerta Automatico
Quando um operador usa "Cobrar Taxa" e o saldo do cliente cruza de positivo para negativo, uma notificacao automatica e enviada para garantir que os clientes estejam cientes da divida.
Condicoes de Gatilho:
- Saldo da carteira era R$ 0 ou positivo antes da cobranca
- Saldo se torna negativo apos a cobranca
- Apenas acionado pela acao "Cobrar Taxa", nao "Reduzir Saldo"
Conteudo da Notificacao:
- Titulo: "Saldo da carteira negativo"
- Corpo: "Uma cobranca de R$ X,XX foi aplicada a sua conta. Seu saldo da carteira agora e -R$ Y,YY."
- Tipo:
wallet
Notificacoes de Identidade
| Evento | Titulo | Exemplo de Corpo |
|---|---|---|
| Verificacao Necessaria | "Verifique Sua Identidade" | "Complete a verificacao para andar" |
| Verificacao Removida | "Tudo Certo!" | "Sua conta foi verificada" |
| Verificacao Falhou | "Problema na Verificacao" | "Por favor, tente a verificacao novamente" |
Configuracoes de Notificacao
Preferencias do Cliente
Os clientes podem controlar notificacoes no aplicativo movel:
- Todas as Notificacoes: Botao principal
- Atualizacoes de Viagem: Inicio, fim, alertas
- Promocoes: Mensagens de marketing
- Alertas de Pagamento: Confirmacoes de transacao
Configuracao da Subconta
Operadores podem configurar o comportamento de notificacao:
| Configuracao | Descricao |
|---|---|
notifications_enabled | Botao principal para subconta |
promo_notifications | Permitir mensagens promocionais |
marketing_frequency | Limitar notificacoes de marketing |
Gerenciamento de Token Push
Como os Tokens Funcionam
- Cliente instala o aplicativo e concede permissao de notificacao
- Aplicativo recebe token push do Expo/APNs/FCM
- Token e armazenado no registro do cliente (
expo_push_token) - Notificacoes enviadas para este token
- Token pode mudar (reinstalacao, troca de dispositivo)
Status do Token
| Status | Significado | Acao |
|---|---|---|
| Token valido | Cliente pode receber notificacoes | Nenhuma necessaria |
| Sem token | Aplicativo nao instalado ou permissoes negadas | Nao pode enviar |
| Token invalido | Token expirado ou revogado | Token sera atualizado |
Quando Tokens Se Tornam Invalidos
- Cliente desinstalou o aplicativo
- Cliente revogou permissao de notificacao
- Dispositivo foi resetado ou substituido
- Token expirou (raro)
Status de Entrega
Recibos Push do Expo
Quando uma notificacao e enviada, o Expo fornece:
- Ticket ID: Confirmacao imediata do envio
- Recibo: Status eventual de entrega
Valores de Status do Recibo
| Status | Significado |
|---|---|
ok | Entregue com sucesso |
error | Entrega falhou |
DeviceNotRegistered | Token nao mais valido |
MessageTooBig | Payload excedeu limite |
MessageRateExceeded | Muitas mensagens enviadas |
Tratamento de Erros
Erros comuns e resolucoes:
| Erro | Causa | Resolucao |
|---|---|---|
DeviceNotRegistered | Aplicativo desinstalado | Remover token do cliente |
InvalidCredentials | Problema de configuracao Expo | Verificar credenciais push |
MessageTooBig | Payload > 4KB | Encurtar mensagem |
TooManyRequests | Limite de taxa | Reduzir frequencia |
Melhores Praticas
Conteudo da Mensagem
- Mantenha titulos curtos: Maximo de 30-50 caracteres
- Seja especifico: Diga ao cliente o que aconteceu ou o que fazer
- Inclua valor: Por que devem se importar?
- Use personalizacao: Inclua nome ou detalhes relevantes
- Chamada para acao: O que devem fazer em seguida?
Frequencia
- Nao exagere nas notificacoes: Limite mensagens promocionais
- Agrupe quando possivel: Combine atualizacoes relacionadas
- Respeite fusos horarios: Envie durante horas acordadas
- Apenas emergencias: Reserve para alertas realmente importantes
Horario
| Tipo de Notificacao | Melhor Horario | Evitar |
|---|---|---|
| Promocional | 10h-20h local | Antes das 9h, depois das 21h |
| Transacional | Imediatamente | N/A |
| Alertas de viagem | Imediatamente | N/A |
| Resumo semanal | Manha de fim de semana | Segunda-feira |
Tom
- Amigavel: "Sua viagem foi concluida!"
- Claro: "Pagamento de R$ 25,00 processado"
- Acionavel: "Verifique sua identidade para continuar andando"
- Evitar: MAIUSCULAS, pontuacao excessiva, excesso de emojis
Notificacoes em Massa
Limitacoes Atuais
O painel atualmente suporta apenas notificacoes individuais. Para notificacoes em massa:
- Use a API com um loop
- Implemente limite de taxa (max 400/minuto para Expo)
- Considere uma ferramenta separada de campanha de notificacao
Padrao de API em Massa
// Exemplo: Enviar para varios clientes
const customerIds = ['cust1', 'cust2', 'cust3'];
const message = {
title: 'Oferta Especial',
body: 'Ganhe 20% de desconto neste fim de semana!'
};
for (const customerId of customerIds) {
await fetch('/api/customers/notify', {
method: 'POST',
body: JSON.stringify({ customerId, ...message })
});
// Limite de taxa: espere 150ms entre envios
await new Promise(r => setTimeout(r, 150));
}
Solucao de Problemas
Notificacao nao recebida
Verifique nesta ordem:
-
Cliente tem token push?
- Visualize a pagina de detalhes do cliente
- Verifique o campo
expo_push_token - Se vazio, cliente nao concedeu permissao
-
Permissao habilitada?
- Cliente deve conceder permissao de notificacao nas configuracoes iOS/Android
- Podem ter desabilitado apos concessao inicial
-
Aplicativo instalado?
- Token se torna invalido se aplicativo for desinstalado
- Cliente precisa reinstalar e conceder permissao novamente
-
Cliente correto?
- Verifique se o customerId corresponde ao destinatario pretendido
- Verifique contas duplicadas
-
Mensagem entregue?
- Verifique status do recibo push do Expo
- Procure erros de entrega nos logs
-
Problemas de dispositivo?
- Modo Nao Perturbe no dispositivo
- Modo Foco bloqueando notificacoes
- Modo de economia de energia limitando atividade em segundo plano
Cliente diz que recebe "muitas" notificacoes
- Revise gatilhos de notificacao automatica
- Verifique envios duplicados nos logs
- Verifique se as preferencias de notificacao estao sendo respeitadas
- Considere configuracao de limite
Notificacao aparece mas com conteudo errado
- Verifique problemas de codificacao no titulo/corpo
- Verifique se os dados nao estao truncados
- Procure caracteres especiais sendo escapados
- Teste com texto ASCII simples
Notificacoes atrasadas
- Expo usa agrupamento, pode atrasar alguns segundos
- APNs/FCM podem atrasar com base no dispositivo/rede
- Verifique se o dispositivo esta em modo de economia de energia
- Verifique conectividade de rede no dispositivo
Erros "DeviceNotRegistered"
Isso e normal quando:
- Cliente desinstalou o aplicativo
- Cliente trocou de dispositivo
- Token expirou (raro)
Resolucao: Remova token invalido do registro do cliente. Token sera atualizado quando cliente abrir o aplicativo novamente.
Integracao com Outros Sistemas
Sistema de Viagem
O motor de viagem envia notificacoes para:
- Confirmacao de inicio de viagem
- Eventos de pausar/retomar
- Avisos de bateria/zona
- Conclusao de viagem com resumo
- Notificacoes de encerramento automatico
Sistema de Pagamento
Processamento de pagamento aciona:
- Confirmacao de cobranca bem-sucedida
- Alertas de pagamento falho
- Notificacoes de reembolso
- Avisos de expiracao de cartao
Sistema de Identidade
Verificacao de identidade aciona:
- Prompt de verificacao necessaria
- Confirmacao de verificacao bem-sucedida
- Notificacao de requisito removido
- Notificacao de tentativa falha