From ec50496d215d6ccd933ea2b53aefe670671591b7 Mon Sep 17 00:00:00 2001 From: Rodribm10 Date: Sat, 2 May 2026 13:34:07 -0300 Subject: [PATCH] fix(captain/hermes): hermes-provision usa hermes_profile_name como chave MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: find_or_initialize_by(name: ...) batia em captain_interno existente com mesmo nome (ex: 'Juliana') e SOBRESCREVIA engine='hermes'. Resultado: Juliana captain_interno virou Hermes, atendimento legado quebrou. Fix: chave passa a ser (account_id, hermes_profile_name=slug). Auto-sufixa nome com ' · Hermes' se colidir com captain_interno do mesmo nome (a não ser que já tenha 'Hermes' no nome). Também grava captain_unit_id no record (relação direta agora que existe a coluna). Reverti manualmente Juliana id=1 + criei id=10 'Juliana · Hermes' fix in DB. Future provisionamentos pelo Construtor usam o caminho corrigido. Co-Authored-By: Claude Opus 4.7 (1M context) --- bin/hermes-provision | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/bin/hermes-provision b/bin/hermes-provision index 65398aad6..1cf4ffe89 100755 --- a/bin/hermes-provision +++ b/bin/hermes-provision @@ -216,14 +216,25 @@ DB_RESULT=$(docker exec "$CID" bundle exec rails runner " end end - asst = Captain::Assistant.find_or_initialize_by(account_id: account_id, name: spec['name']) - asst.description ||= 'Atendente Hermes ' + spec['name'] + # CHAVE = hermes_profile_name (slug). Nome é cosmético e PODE colidir com + # captain_interno do mesmo nome — nesse caso auto-renomeamos com sufixo + # ' · Hermes' pra evitar sobrescrever. + asst = Captain::Assistant.find_or_initialize_by(account_id: account_id, hermes_profile_name: spec['slug']) + + desired_name = spec['name'].to_s.strip + if asst.new_record? + collision = Captain::Assistant.where(account_id: account_id, name: desired_name).where.not(hermes_profile_name: spec['slug']).exists? + desired_name = desired_name + ' · Hermes' if collision && !desired_name.include?('Hermes') + end + asst.name = desired_name + asst.description ||= 'Atendente Hermes ' + desired_name asst.engine = 'hermes' asst.hermes_profile_name = spec['slug'] asst.hermes_webhook_base_url = 'http://172.17.0.1:' + $PORT.to_s asst.hermes_subscription_secret = '$SECRET' asst.hermes_port = $PORT asst.parent_assistant_id = spec['parent_assistant_id'] + asst.captain_unit_id = unit.id if spec['humanization'] asst.config['response_delay'] = spec['humanization']