Atualização das configuração de mesagens do Zap

This commit is contained in:
2026-08-24 19:05:48 -03:00
parent 568f185d8c
commit 7e093f3af8
12 changed files with 376 additions and 18 deletions

View File

@@ -42,6 +42,12 @@ module Notificacao
post('/enviar', para: para, texto: texto)
end
# Grupos de que o número conectado participa. O id do grupo é opaco, então a
# tela precisa desta lista para o ADM escolher pelo nome.
def grupos
get('/grupos')
end
def desconectar
post('/logout')
end

View File

@@ -132,7 +132,8 @@ module Notificacao
# [[destino, contato, user], ...] sem repetir o mesmo número/e-mail — a mesma
# pessoa pode ser contato de um grupo E o envolvido no fato.
def destinos_whatsapp
lista = @evento.destinatarios('whatsapp').map { |c| [c.telefone, c, c.user] }
# `destino_whatsapp` resolve pessoa (número) ou grupo (JID) — ver Contato.
lista = @evento.destinatarios('whatsapp').map { |c| [c.destino_whatsapp, c, c.user] }
lista += envolvido_whatsapp
dedup(lista)
end

View File

@@ -11,6 +11,16 @@ module Notificacao
Resposta = ClienteWhatsapp::Resposta
def self.enviar(para:, texto:, config: ConfiguracaoNotificacao.instancia)
# Grupo do WhatsApp vem como JID pronto ("120363...@g.us") — não é
# telefone, não normaliza. Passa direto para a ponte, que aceita as duas
# formas.
if Contato::JID_GRUPO_RE.match?(para.to_s.strip)
return Resposta.new(ok: false, erro: 'O Twilio não envia para grupo do WhatsApp. ' \
'Troque o provedor para QR code.') unless config.baileys?
return via_baileys(para.to_s.strip, texto)
end
destino = ConfiguracaoNotificacao.normalizar_telefone(para)
return Resposta.new(ok: false, erro: 'Número inválido.') if destino.blank?