Files
moreminimore-chat/app/jobs/analytics/weekly_persona_evaluation_job.rb
Moreminimore b86b0c59f6 feat(analytics): M2 self-improving chatbot analytics
Daily LLM classification of every chat (topics + product tags + deal
won/lost/undecided) aggregated into immutable daily metrics, with a
filterable admin report dashboard, product-catalog import (text/CSV/XLSX),
weekly persona summary, and an approval flow (LINE -> Telegram -> webhook)
for applying persona recommendations.

- Llm::AnalyticsClassifier: per-account openai -> Captain fallback cascade
- AccountDailyProcessor + Conversation/CustomerDailyMetric aggregation
- ReportService + DrilldownService (summary + deep filterable drilldown)
- AnalyticsReports.vue + productCatalog import UI (admin-only)
- WeeklyPersonaEvaluator + PersonaApprovalService (LINE/Telegram/webhook)
- Weekly cron (Mon 10:00) + daily cron (02:30)
2026-08-25 15:56:11 +07:00

24 lines
816 B
Ruby

# Weekly driver: evaluates the persona for every account and delivers the summary
# via Analytics::PersonaApprovalService (LINE primary, webhook fallback). Runs each
# Monday 10:00 (see config/schedule.yml). Per-account failures are contained.
class Analytics::WeeklyPersonaEvaluationJob < ApplicationJob
queue_as :default
def perform
Account.find_each do |account|
evaluate_and_deliver(account)
rescue StandardError => e
Rails.logger.error("[WeeklyPersonaEvaluation] account=#{account.id} #{e.class}: #{e.message}")
end
end
private
def evaluate_and_deliver(account)
evaluation = Analytics::WeeklyPersonaEvaluator.evaluate(account: account)
return if evaluation.disabled?
Analytics::PersonaApprovalService.deliver(account: account, evaluation: evaluation)
end
end