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)
24 lines
816 B
Ruby
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
|