87 lines
3.5 KiB
Ruby
87 lines
3.5 KiB
Ruby
# Usage: bundle exec rails runner bin/seed_hospitality.rb <ACCOUNT_ID>
|
|
|
|
account_id = ARGV[0] || Account.first.id
|
|
account = Account.find(account_id)
|
|
|
|
puts "Seeding hospitality data for Account: #{account.name} (ID: #{account.id})"
|
|
|
|
# 1. Create Assistant
|
|
assistant = Captain::Assistant.find_or_initialize_by(
|
|
account: account,
|
|
name: "Jasmine (Gerente)"
|
|
)
|
|
assistant.description = "Gerente virtual especializada em hospitalidade (Hotéis/Motéis)."
|
|
assistant.llm_provider = "openai"
|
|
assistant.llm_model = "gpt-3.5-turbo-0125"
|
|
assistant.config = (assistant.config || {}).merge({
|
|
instructions: "Você é Jasmine, a gerente virtual do Hotel 1001 Noites Prime. Sua missão é ser extremamente gentil, eficiente e ajudar os hóspedes com reservas, dúvidas sobre serviços e procedimentos do hotel.",
|
|
playbook: "Script de Vendas SDR:\n1. Saudação calorosa.\n2. Se o cliente perguntar preço, ofereça a Suíte Standard (R$ 39,90) mas destaque os benefícios da Suíte Prime.\n3. Tratamento de Objeções: Se acharem caro, enfatize a limpeza impecável e a hidromassagem.",
|
|
temperature: 0.7,
|
|
distance_threshold: 0.35,
|
|
max_rag_results: 3,
|
|
handoff_message: "Entendi. Vou chamar um atendente humano para te ajudar com isso agora mesmo.",
|
|
resolution_message: "Espero ter ajudado! Se precisar de mais alguma coisa, estarei aqui."
|
|
})
|
|
assistant.save!
|
|
|
|
puts "Assistant '#{assistant.name}' created/updated."
|
|
|
|
# 2. Create FAQs/Documents
|
|
docs_data = [
|
|
{
|
|
content: "O horário de check-in padrão é às 14:00 e o check-out deve ser realizado até as 12:00. Late check-out está sujeito a disponibilidade e cobrança adicional.",
|
|
description: "Horários de Check-in e Check-out"
|
|
},
|
|
{
|
|
content: "O café da manhã é servido diariamente no restaurante principal das 07:00 às 10:30. Para hóspedes das suítes Prime, o café pode ser servido no quarto sem custo adicional.",
|
|
description: "Informações sobre Café da Manhã"
|
|
},
|
|
{
|
|
content: "Aceitamos animais de estimação de pequeno porte (até 10kg) mediante taxa de higienização de R$ 50,00 por estadia. É necessário apresentar carteira de vacinação.",
|
|
description: "Política Pet Friendly"
|
|
},
|
|
{
|
|
content: "Nossa Suíte Standard custa R$ 39,90 por hora ou R$ 150,00 o pernoite. Já a Suíte 1001 Noites (Presidencial) custa R$ 89,90 a hora com sauna e hidro privativa.",
|
|
description: "Tabela de Preços e Suítes"
|
|
}
|
|
]
|
|
|
|
docs_data.each do |doc|
|
|
begin
|
|
external_link = "FAQ:#{doc[:description].parameterize}"
|
|
d = Captain::Document.find_or_initialize_by(
|
|
assistant: assistant,
|
|
account: account,
|
|
external_link: external_link
|
|
)
|
|
d.content = doc[:content]
|
|
d.name = doc[:description]
|
|
d.status = :available
|
|
d.save!
|
|
puts "Document seeded: #{doc[:description]}"
|
|
rescue => e
|
|
puts "Error seeding document '#{doc[:description]}': #{e.message}"
|
|
end
|
|
end
|
|
|
|
# 3. Create Scenarios (Common questions)
|
|
scenarios = [
|
|
{ title: "Reserva de Quarto", description: "O cliente deseja saber disponibilidade ou fazer uma reserva." },
|
|
{ title: "Reclamação de Limpeza", description: "O cliente reporta problemas com a limpeza do quarto." },
|
|
{ title: "Pedido de Room Service", description: "O cliente quer pedir comida ou bebida." }
|
|
]
|
|
|
|
scenarios.each do |s|
|
|
sc = Captain::Scenario.find_or_initialize_by(
|
|
assistant: assistant,
|
|
account: account,
|
|
title: s[:title]
|
|
)
|
|
sc.description = s[:description]
|
|
sc.instruction = s[:description] # Use description as base instruction
|
|
sc.save!
|
|
puts "Scenario seeded: #{s[:title]}"
|
|
end
|
|
|
|
puts "Hospitality seeding complete! 🚀"
|