PLANO_PUSH.md 9.8 KB

Plano de Implementação — Push Notifications Marketing

Visão Geral

Sistema de push notifications de marketing para os apps Prestador e Cliente, usando Firebase Cloud Messaging (FCM) via kreait/laravel-firebase. Scheduler dispara 3x/dia (08h, 13h, 19h), cada notificação tem sua própria condição de elegibilidade e cooldown controlado por log no banco.


1. Condições de Elegibilidade

PROVIDER

Label Condição Intervalo
provider_reforco_educativo_1 approval_status = accepted + nunca recebeu nenhum reforço educativo OU o último foi o #2 há ≥3 semanas Alterna com #2 a cada 3 semanas
provider_reforco_educativo_2 approval_status = accepted + último reforço recebido foi o #1 há ≥3 semanas Alterna com #1 a cada 3 semanas
provider_motivacional_1 approval_status = accepted + não recebeu esta msg há ≥7 dias Semanal

CLIENT

Label Condição Cooldown categoria Cooldown msg
cliente_marketing_1..4 registration_complete = true 7 dias 28 dias
cliente_recorrencia_1..3 ≥1 agendamento status = finished + sem agendamento finished nos últimos 30 dias 7 dias 28 dias
cliente_educativo_1..4 registration_complete = true (todos) 7 dias 28 dias
cliente_educ_conversao_1..2 Nunca agendou com schedule_type = custom OU último foi há >30 dias 14 dias 28 dias
cliente_social_proof_1..2 Nunca teve agendamento status = finished OU último foi há >30 dias 14 dias 28 dias
cliente_motivacional_1..3 registration_complete = true (todos) 7 dias 28 dias
cliente_contextual_sexta registration_complete = true + hoje é sexta-feira 7 dias
cliente_contextual_segunda registration_complete = true + hoje é segunda-feira 7 dias
cliente_contextual_visita registration_complete = true (broadcast geral) 7 dias 28 dias

2. Conteúdo das Notificações

PROVIDER — Reforço Educativo

Label Título Corpo
provider_reforco_educativo_1 Como funcionam os pedidos Sob Medida Eles são enviados para várias diaristas ao mesmo tempo. Aceite rápido para garantir.
provider_reforco_educativo_2 Dica importante Pedidos Sob Medida são compartilhados. A confirmação acontece por ordem de aceite.

PROVIDER — Motivacional

Label Título Corpo
provider_motivacional_1 Fique de olho 👀 Novos pedidos Sob Medida surgem o tempo todo no app.

CLIENT — Marketing

Label Título Corpo
cliente_marketing_1 Casa limpa sem esforço Encontre uma diarista disponível em poucos minutos.
cliente_marketing_2 Precisando de ajuda hoje? Veja diaristas disponíveis perto de você.
cliente_marketing_3 Menos preocupação, mais tempo Agende sua próxima diária agora mesmo.
cliente_marketing_4 Agenda cheia? Uma diarista pode resolver isso hoje.

CLIENT — Recorrência

Label Título Corpo
cliente_recorrencia_1 Hora da próxima diária? Faz um tempo desde sua última limpeza 😊
cliente_recorrencia_2 Rotina em dia Que tal agendar sua próxima diária?
cliente_recorrencia_3 Casa limpa dura pouco Garanta sua próxima diária no app.

CLIENT — Educativo

Label Título Corpo
cliente_educativo_1 Você sabia? No Diária, o pagamento só é liberado após o serviço concluído.
cliente_educativo_2 Mais segurança Você acompanha todo o serviço direto pelo app.
cliente_educativo_3 Dica importante Avaliações ajudam a manter a qualidade das diaristas.
cliente_educativo_4 Transparência Você vê perfil, avaliações e valores antes de contratar.

CLIENT — Educativo + Conversão

Label Título Corpo
cliente_educ_conversao_1 Sob Medida funciona assim Seu pedido é enviado para várias diaristas disponíveis.
cliente_educ_conversao_2 Quer mais chances de aceite? Pedidos Sob Medida aumentam a rapidez na confirmação.

CLIENT — Social Proof

Label Título Corpo
cliente_social_proof_1 Clientes como você Já estão usando o Diária para facilitar a rotina.
cliente_social_proof_2 Diaristas bem avaliadas Veja profissionais recomendadas perto de você.

CLIENT — Motivacional

Label Título Corpo
cliente_motivacional_1 Sua casa merece cuidado E você merece tempo livre.
cliente_motivacional_2 Chegue em casa e relaxe A limpeza fica por nossa conta.
cliente_motivacional_3 Menos bagunça, mais bem-estar Agende sua diária quando quiser.

CLIENT — Contextual

Label Título Corpo
cliente_contextual_sexta Sexta chegando Que tal deixar a casa pronta pro fim de semana?
cliente_contextual_segunda Segunda organizada Comece a semana com a casa limpa.
cliente_contextual_visita Visita marcada? Uma diarista pode ajudar hoje.

3. Estrutura de Arquivos — Backend

app/
├── Enums/
│   ├── PushNotificationTargetEnum.php
│   └── PushNotificationCategoryEnum.php
│
├── Models/
│   ├── DeviceToken.php
│   └── PushNotificationLog.php
│
├── Services/
│   ├── PushNotificationService.php       # envia via FCM (kreait)
│   └── PushNotificationDispatcher.php    # orquestra o ciclo completo de envio
│
├── Notifications/
│   └── Push/
│       ├── BasePushNotification.php      # abstract com LABEL, CATEGORY, TARGET, title(), body(), eligibleUsers()
│       │
│       ├── Prestador/
│       │   ├── ReforcoEducativo/
│       │   │   ├── ReforcoEducativo1Push.php
│       │   │   └── ReforcoEducativo2Push.php
│       │   └── Motivacional/
│       │       └── Motivacional1Push.php
│       │
│       └── Cliente/
│           ├── Marketing/
│           │   ├── Marketing1Push.php
│           │   ├── Marketing2Push.php
│           │   ├── Marketing3Push.php
│           │   └── Marketing4Push.php
│           ├── Recorrencia/
│           │   ├── Recorrencia1Push.php
│           │   ├── Recorrencia2Push.php
│           │   └── Recorrencia3Push.php
│           ├── Educativo/
│           │   ├── Educativo1Push.php
│           │   ├── Educativo2Push.php
│           │   ├── Educativo3Push.php
│           │   └── Educativo4Push.php
│           ├── EducativoConversao/
│           │   ├── EducativoConversao1Push.php
│           │   └── EducativoConversao2Push.php
│           ├── SocialProof/
│           │   ├── SocialProof1Push.php
│           │   └── SocialProof2Push.php
│           ├── Motivacional/
│           │   ├── Motivacional1Push.php
│           │   ├── Motivacional2Push.php
│           │   └── Motivacional3Push.php
│           └── Contextual/
│               ├── ContextualSextaPush.php
│               ├── ContextualSegundaPush.php
│               └── ContextualVisitaPush.php
│
├── Tasks/
│   └── SendPushNotificationsTask.php
│
└── Http/Controllers/Api/
    └── DeviceTokenController.php

4. Banco de Dados

device_tokens

id                  bigint unsigned PK
user_id             FK → users.id
token               string (FCM device token)
platform            enum: android | ios
app_type            enum: prestador | cliente
active              boolean default true
created_at / updated_at

push_notification_logs

id                  bigint unsigned PK
label               string (ex: 'cliente_marketing_1')
user_id             FK → users.id
target              string (prestador | cliente)
category            string (marketing | recorrencia | educativo | ...)
sent_at             timestamp
created_at / updated_at

5. Rotas de API

POST   /api/device-tokens            → registra token (login / abertura do app)
DELETE /api/device-tokens/{token}    → remove token (logout)

6. Scheduler

Em bootstrap/app.php:

$schedule->call(new SendPushNotificationsTask)->dailyAt('08:00');
$schedule->call(new SendPushNotificationsTask)->dailyAt('13:00');
$schedule->call(new SendPushNotificationsTask)->dailyAt('19:00');

7. Frontend — Ambos os Apps

Instalações necessárias (prestador e cliente)

@capacitor/push-notifications

Arquivos a criar em cada app

src/boot/push-notifications.ts          → solicita permissão, captura token, registra via API
src/services/pushNotificationService.ts → abstrai chamadas à API de tokens

Firebase

  • Criar projeto Firebase (ou dois projetos separados)
  • Registrar app Android e iOS de cada um
  • Baixar google-services.json (Android) e GoogleService-Info.plist (iOS) para cada app
  • Configurar capacitor.config.ts de cada app

8. Ordem de Implementação

  1. Instalar kreait/laravel-firebase no backend
  2. Criar migrations (device_tokens e push_notification_logs)
  3. Criar Enums (PushNotificationTargetEnum, PushNotificationCategoryEnum)
  4. Criar Models (DeviceToken, PushNotificationLog)
  5. Criar DeviceTokenController + rotas
  6. Criar PushNotificationService (integração FCM)
  7. Criar BasePushNotification (classe abstrata)
  8. Criar todas as 24 classes de push notifications
  9. Criar PushNotificationDispatcher (lógica de cooldown + orquestração)
  10. Criar SendPushNotificationsTask + registrar no scheduler
  11. Frontend Prestador: instalar lib + boot + service
  12. Frontend Cliente: instalar lib + boot + service