From ed21722dc4cac784289d87f450730f2469c1a368 Mon Sep 17 00:00:00 2001 From: Rodribm10 Date: Sat, 2 May 2026 13:53:12 -0300 Subject: [PATCH] =?UTF-8?q?fix(captain/hermes):=20callback=20aceita=20=3Fs?= =?UTF-8?q?lug=3D=20al=C3=A9m=20de=20=3Finbox=5Fid=3D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hermes daemon faz POST /webhooks/captain/hermes_callback?slug= mas controller só conhecia ?inbox_id. 404 → resposta do LLM nunca chegava ao Captain. Cliente via só auto-react. Fix: fetch_inbox resolve via Captain::Assistant.find_by(hermes_profile_name) quando slug está presente. Inbox é a primeira CaptainInbox associada a esse assistant. Suporta o pattern admin de re-apontar uma inbox de teste (ex: Angelina) entre vários agentes Hermes. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../webhooks/captain/hermes_callback_controller.rb | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/controllers/webhooks/captain/hermes_callback_controller.rb b/app/controllers/webhooks/captain/hermes_callback_controller.rb index 901b00ed3..e3cefb0ef 100644 --- a/app/controllers/webhooks/captain/hermes_callback_controller.rb +++ b/app/controllers/webhooks/captain/hermes_callback_controller.rb @@ -44,7 +44,15 @@ class Webhooks::Captain::HermesCallbackController < ApplicationController def fetch_inbox inbox_id = params[:inbox_id].presence || params.dig(:metadata, :inbox_id).presence - @inbox = Inbox.find_by(id: inbox_id) + if inbox_id.present? + @inbox = Inbox.find_by(id: inbox_id) + elsif (slug = params[:slug].presence) + # Resolve via slug (hermes_profile_name) — admin pode re-apontar a + # inbox pra qualquer agente Hermes sem mexer em URL de callback. + asst = Captain::Assistant.find_by(hermes_profile_name: slug, engine: 'hermes') + ci = asst&.captain_inboxes&.first + @inbox = ci&.inbox + end head :not_found if @inbox.blank? end