chatwoot-develop/enterprise/app/controllers/api/v1/accounts/captain/tools_controller.rb
2026-01-19 19:26:23 -03:00

57 lines
1.6 KiB
Ruby

class Api::V1::Accounts::Captain::ToolsController < Api::V1::Accounts::BaseController
before_action :current_account
before_action :set_assistant
def index
# List all available tools and their config for this assistant
# We first get the static definitions, then merge with DB configs
available_definitions = Captain::Tools::Definitions::ALL
db_configs = Captain::ToolConfig.where(captain_assistant_id: @assistant.id).index_by(&:tool_key)
@tools = available_definitions.map do |key, defn|
config = db_configs[key]
{
key: key,
name: defn[:name],
description: defn[:description],
enabled: config&.is_enabled || false,
webhook_url: config&.webhook_url,
plug_play_id: config&.plug_play_id,
plug_play_token: config&.plug_play_token,
fallback_message: config&.fallback_message
}
end
render json: @tools
end
def update
tool_key = params[:id]
config = Captain::ToolConfig.find_or_initialize_by(
account_id: current_account.id,
captain_assistant_id: @assistant.id,
tool_key: tool_key
)
config.is_enabled = params[:enabled]
config.webhook_url = params[:webhook_url]
config.plug_play_id = params[:plug_play_id]
config.plug_play_token = params[:plug_play_token]
config.fallback_message = params[:fallback_message]
if config.save
render json: config
else
render_error_response(config.errors.full_messages.join(','), :unprocessable_entity)
end
end
private
def set_assistant
@assistant = Captain::Assistant.find(params[:assistant_id])
end
end