Implantação da geração de mensagem de forma livre e mudança na engine de mensagem

This commit is contained in:
2026-08-24 17:32:16 -03:00
parent 94bbe7556f
commit 88f19dd8f5
77 changed files with 4650 additions and 25 deletions

View File

@@ -111,6 +111,38 @@ Rails.application.routes.draw do
resource :planilha_simpli_route, only: [:show], controller: 'planilhas_simpli_route' do
get :baixar
end
# ── Notificações: quem recebe, o quê e por qual canal ──────────────────
# Grupos e contatos são a lista de destinatários cadastrada à mão; eventos
# ligam um gatilho aos grupos; a sessão do WhatsApp é o pareamento por QR.
#
# ⚠️ Os nomes das rotas (`grupos`, `eventos`, `envios`) NÃO são os nomes dos
# controllers de propósito: `grupos_contato` e `eventos_notificacao` têm
# singular igual ao plural para o Inflector (que não fala português), e aí
# o Rails sufixa o helper de index com `_index` — pegadinha silenciosa.
resources :grupos, except: [:show], controller: 'grupos_contato'
resources :contatos, except: [:show]
resources :eventos, except: [:show], controller: 'eventos_notificacao' do
member do
post :disparar # gatilho `manual` — manda mensagem de verdade
# Editor de blocos. O template é identificado pelo CANAL, não por id:
# existe no máximo um por evento+canal (índice único), então uma URL com
# id seria um identificador a mais para o mesmo par.
get 'template/:canal', to: 'mensagem_templates#edit', as: :template
patch 'template/:canal', to: 'mensagem_templates#update'
post 'template/:canal/preview', to: 'mensagem_templates#preview', as: :preview_template
end
end
resources :envios, only: [:index], controller: 'notificacao_envios'
# Pareamento do WhatsApp por QR code (ponte Baileys). `show` faz polling do
# status via JSON enquanto o QR não é lido.
resource :whatsapp_sessao, only: [:show], controller: 'whatsapp_sessoes' do
get :status # JSON { conectado, numero, qr }
post :testar # envia uma mensagem de teste
delete :desconectar
end
end
# API interna — Dashboard métricas

View File

@@ -19,3 +19,22 @@ end
every "0 1 * * *" do
rake "simpli_route:series"
end
# De hora em hora — dispara os eventos de notificação com gatilho `agendado`
# que venceram (resumo diário/semanal da operação).
#
# POR QUE varredura horária e não uma linha por evento: hora e frequência são
# escolhidas na TELA e mudam a qualquer momento; reler o crontab a cada edição
# acoplaria a UI ao cron do sistema. `EventoNotificacao#vencido?` garante um
# disparo por dia (grava ultimo_disparo_em). Ver DispararEventosAgendadosJob.
every '0 * * * *' do
rake 'notificacao:agendados'
end
# A cada 2h, das 07h às 21h — compara os números de cada operação com o retrato
# anterior e avisa o que mudou (NF que entrou/saiu, entrega que trocou de
# status). A maioria dessas mudanças acontece no SimpliRoute e chega pelo sync
# do espelho, então só uma varredura as detecta. Ver DetectarMudancasOperacaoJob.
every '0 7-21/2 * * *' do
rake 'notificacao:mudancas_operacao'
end