iachat/app/javascript/dashboard
Rodribm10 4b0e8c314e feat(aggressive-alert): escalada amarelo/laranja/vermelho + toggles
Banner agressivo passa de uma notificação só ("status→open") pra
um sistema de escalada baseado em inatividade quando o cliente é
o último a falar.

Níveis:
- 5 min sem resposta  → AMARELO, sem som
- 15 min sem resposta → LARANJA, beep 1x + notificação do SO
- 28 min sem resposta → VERMELHO pulsante + som em loop infinito
- status→open (reabertura) → VERMELHO imediato

Por conversa, o banner mostra um item com nome do contato, inbox
e contexto ("reabriu agora" / "15 min sem resposta"). Headline
grande e explicação clara sobre como limpa.

Comportamento do × dismiss:
- Antes: apagava o alerta de vez. Agente podia "fingir que viu".
- Agora: esconde temporariamente. Volta quando escalar (próximo
  threshold) ou nova mensagem. A única forma de LIMPAR de vez é
  responder o cliente (tracker detecta msg outgoing do User ou
  AgentBot e chama dismissForReply).

Permissões:
- account.settings.aggressive_alert_enabled (master switch admin)
- user.ui_settings.aggressive_alert_enabled (toggle do próprio agente)
- Default true pros dois; um false em qualquer bloqueia alertas.

Settings UI:
- Conta → General: novo card "Alerta agressivo (master switch)"
- Perfil do usuário: novo card "Receber alertas agressivos"

Arquivos:
- helper/aggressiveAlert.js: multi-level state, hide vs dismiss-for-reply
- helper/inactivityAlertTracker.js: timer único, thresholds declarativos
- helper/actionCable.js: hook em onMessageCreated (feed tracker) +
  isAggressiveAlertEnabled() + limpa tracker em status_changed != open
- components/app/AggressiveConversationBanner.vue: variantes de cor,
  headline grande, explanation, × temp-hide
- account.rb + accounts_controller.rb: store_accessor + permitted
- settings UI components (account + profile): switches auto-persist

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 20:49:24 -03:00
..
api feat: remove Notificações Automáticas + ajusta assinatura WhatsApp 2026-04-23 15:34:45 -03:00
assets Merge branch 'main' into chore/merge-upstream-4.11.0 2026-02-17 23:05:26 -03:00
components feat(aggressive-alert): escalada amarelo/laranja/vermelho + toggles 2026-04-23 20:49:24 -03:00
components-next feat: remove Notificações Automáticas + ajusta assinatura WhatsApp 2026-04-23 15:34:45 -03:00
composables feat(captain-memory): wire Contact Memories section into conversation sidebar 2026-04-19 07:30:30 -03:00
constants chore: Improve signup flow, reduce the number of inputs (#13350) 2026-01-22 18:47:42 -08:00
helper feat(aggressive-alert): escalada amarelo/laranja/vermelho + toggles 2026-04-23 20:49:24 -03:00
i18n feat(aggressive-alert): escalada amarelo/laranja/vermelho + toggles 2026-04-23 20:49:24 -03:00
mixins Chore/merge upstream 4.8.0 (#150) 2025-11-19 16:25:58 -03:00
modules feat: Adiciona a opção "Criar FAQ" no menu de contexto da mensagem, permitindo criar uma resposta com seleção de assistente. 2026-02-28 22:20:43 -03:00
routes feat(aggressive-alert): escalada amarelo/laranja/vermelho + toggles 2026-04-23 20:49:24 -03:00
store feat: remove Notificações Automáticas + ajusta assinatura WhatsApp 2026-04-23 15:34:45 -03:00
stores feat: Voice Channel (#11602) 2025-12-19 12:41:33 -08:00
App.vue feat(dashboard): aggressive alert on conversation reopening 2026-04-23 18:03:26 -03:00
featureFlags.js chore(style): fix rubocop offenses and update typing indicators 2026-02-25 15:06:58 -03:00