62 lines
1.9 KiB
Ruby
62 lines
1.9 KiB
Ruby
module Captain
|
|
module Tools
|
|
class StatusSuitesTool < BaseTool
|
|
def self.name
|
|
'status_suites'
|
|
end
|
|
|
|
description 'Check specific availability, status, and prices of suites/rooms. Returns a list of suites categorized by status (free, occupied, cleaning) and their types.'
|
|
|
|
def initialize(assistant, user: nil, conversation: nil)
|
|
@conversation = conversation
|
|
super(assistant, user: user)
|
|
end
|
|
|
|
def execute
|
|
config = find_tool_config
|
|
return { success: false, error: 'Tool not configured' }.to_json unless config&.is_enabled
|
|
|
|
uri = URI('https://oxpi.com.br/api/PlugPlay/api/SuitesStatus')
|
|
http = Net::HTTP.new(uri.host, uri.port)
|
|
http.use_ssl = true
|
|
http.read_timeout = 8
|
|
|
|
request = Net::HTTP::Get.new(uri)
|
|
request['PLUG-PLAY-ID'] = config.plug_play_id.to_s
|
|
request['PLUG-PLAY-TOKEN'] = config.plug_play_token.to_s
|
|
|
|
response = http.request(request)
|
|
|
|
if response.is_a?(Net::HTTPSuccess)
|
|
parsed = Captain::Tools::Parsers::StatusSuitesParser.parse(response.body)
|
|
parsed.to_json
|
|
else
|
|
{ success: false, error: "API Error: #{response.code}" }.to_json
|
|
end
|
|
rescue StandardError => e
|
|
Rails.logger.error "[StatusSuitesTool] Failed: #{e.message}"
|
|
{ success: false, error: e.message }.to_json
|
|
end
|
|
|
|
private
|
|
|
|
def find_tool_config
|
|
# 1. Try Assistant specific config
|
|
config = @assistant.tool_configs.find_by(tool_key: 'status_suites') if @assistant.respond_to?(:tool_configs)
|
|
return config if config.present?
|
|
|
|
# 2. Try Inbox specific config (if conversation exists)
|
|
if @conversation&.inbox.present?
|
|
config = Captain::ToolConfig.find_by(
|
|
inbox: @conversation.inbox,
|
|
tool_key: 'status_suites'
|
|
)
|
|
return config if config.present?
|
|
end
|
|
|
|
nil
|
|
end
|
|
end
|
|
end
|
|
end
|