fix(captain/hermes): hermes-provision usa hermes_profile_name como chave

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) <noreply@anthropic.com>
This commit is contained in:
Rodribm10 2026-05-02 13:34:07 -03:00
parent 955cb824b3
commit ec50496d21

View File

@ -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']