Logica do SistemaWhatsApp
Secao 6
WhatsAppMessageService
Arquivo: cargo_fleet.Application/WhatsAppMessage/WhatsAppMessageService.cs
Configuracao carregada do appsettings:
WhatsAppApi:BaseUrl— URL da Meta Graph API.WhatsAppApi:BusinessNumberId— ID do numero de negocio.WhatsAppApi:AccessToken— token de acesso permanente da Meta (exposto no repositorio — CRIT-01).
SendMessageAllAsync(templateName, data) (metodo legado):
- Carrega
WhatsAppContactdo tenant atual (primeiro registro). - Extrai numeros validos (1-5), filtra nulos/vazios.
- Para cada numero: chama
SendMessageAsync.
SendMessageAsync(number, templateName, templateData):
- Monta payload para
POST {BaseUrl}/{businessNumberId}/messages. - Tipo: "template", linguagem "pt_BR".
PublishWhatsAppNotificationAsync(WhatsAppTemplateMessage) (metodo novo, pipeline de atualizacao):
- Mesma logica via
WhatsAppMessageMapper.Map(message).
Templates Ativos
| Template | Quando disparado | Parametros |
|---|---|---|
util_carga_aceita | Oferta aceita (legado) | tipo_oferta, origem, destino, veiculo, data, codigo |
util_carga_adicional_aceita | Carga adicional aceita (legado) | mesmo que acima |
alteracao_data_coleta | Data de coleta mudou | original_data, nova_data, origem, destino, codigo |
alteracao_status_carga | Status CANCELADO ou DECLINADA | status, origem, destino, veiculo, data, codigo_b100 |
util_credencial_galileu_limpa | Credencial Galileu deletada/invalida | (nenhum parametro) |
Incoerencias Identificadas
Nenhuma incoerencia critica. Observacao: o fluxo legado de notificacao WhatsApp de aceite (templates util_carga_aceita e util_carga_adicional_aceita) e acionado pelo RegistrarOfertasWorker, que esta com bug de autenticacao. Se o worker for desativado, esses templates deixam de ser enviados.
WhatsAppContact
Arquivo:
cargo_fleet.Domain/WhatsAppContacts/WhatsAppContact.csEntidade com ate 5 numeros de telefone por tenant (
Contato1aContato5). O sistema espera apenas um registro por tenant (busca comFirstOrDefault()).