From cb067e1f174d41059b98c5d8e7cb202f108b27ff Mon Sep 17 00:00:00 2001 From: Rodribm10 Date: Fri, 1 May 2026 22:21:43 -0300 Subject: [PATCH] feat(captain/hermes): auto-react cobre saudacoes e despedidas MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Estende AutoReactService com 2 padroes novos: - GREETING_REGEX (bom dia, boa noite, oi, ola, hello) -> 👋 apenas na PRIMEIRA mensagem da conversa pra nao ficar forcado - FAREWELL_REGEX (tchau, ate logo, abraço, bjs, flw) -> ❤️ Co-Authored-By: Claude Opus 4.7 (1M context) --- .../services/captain/hermes/auto_react_service.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/enterprise/app/services/captain/hermes/auto_react_service.rb b/enterprise/app/services/captain/hermes/auto_react_service.rb index 54f90045a..dd693d4ac 100644 --- a/enterprise/app/services/captain/hermes/auto_react_service.rb +++ b/enterprise/app/services/captain/hermes/auto_react_service.rb @@ -19,6 +19,8 @@ class Captain::Hermes::AutoReactService THANKS_REGEX = /\A(obrigad[oa]|valeu|vlw|thanks|brigad[oa]|grat[oa])[\s.!,]*\z/i CONFIRMATION_REGEX = /\A(ok|okay|fechado|perfeit[oa]|blz|beleza|combinado|certo|ótim[oa]|legal|pode\s*ser|isso\s*mesmo)[\s.!,]*\z/i + GREETING_REGEX = /\A(bom\s*dia|boa\s*tarde|boa\s*noite|oi|olá|ola|e\s*aí|hey|hi|hello)[\s.!,]*\z/i + FAREWELL_REGEX = /\A(tchau|até\s*(mais|logo|breve)|valeu\s*flw|flw|abraço|abraços|bjs|beijos)[\s.!,]*\z/i def self.maybe_react!(message) new(message).maybe_react! @@ -58,10 +60,21 @@ class Captain::Hermes::AutoReactService return audio_emoji if audio_attachment? && text.length < 10 return '🙏' if THANKS_REGEX.match?(text) return '👍' if CONFIRMATION_REGEX.match?(text) + return '👋' if GREETING_REGEX.match?(text) && first_incoming_in_conversation? + return '❤️' if FAREWELL_REGEX.match?(text) nil end + # Saudação só reage na PRIMEIRA mensagem da conversa pra não ficar + # forçado em conversa longa que retoma com "oi". + def first_incoming_in_conversation? + @conversation.messages + .where(message_type: :incoming) + .where('created_at <= ?', @message.created_at) + .count <= 1 + end + def image_attachment? @message.attachments.exists?(file_type: :image) end