fix(captain/hermes): callback aceita ?slug= além de ?inbox_id=
Hermes daemon faz POST /webhooks/captain/hermes_callback?slug=<profile> 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) <noreply@anthropic.com>
This commit is contained in:
parent
88a5adb65e
commit
ed21722dc4
@ -44,7 +44,15 @@ class Webhooks::Captain::HermesCallbackController < ApplicationController
|
|||||||
|
|
||||||
def fetch_inbox
|
def fetch_inbox
|
||||||
inbox_id = params[:inbox_id].presence || params.dig(:metadata, :inbox_id).presence
|
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?
|
head :not_found if @inbox.blank?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user