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)
94 lines
2.9 KiB
YAML
94 lines
2.9 KiB
YAML
# https://github.com/ondrejbartas/sidekiq-cron
|
|
# use https://crontab.guru/ to validate
|
|
# validations for this file exist in /spec/configs/schedule_spec.rb
|
|
|
|
# executed daily at 0000 UTC
|
|
# schedules daily deferred jobs at stable times for each installation
|
|
internal_check_new_versions_job:
|
|
cron: '0 0 * * *'
|
|
class: 'Internal::TriggerDailyScheduledItemsJob'
|
|
queue: scheduled_jobs
|
|
# # executed At every 5th minute..
|
|
trigger_scheduled_items_job:
|
|
cron: '*/5 * * * *'
|
|
class: 'TriggerScheduledItemsJob'
|
|
queue: scheduled_jobs
|
|
|
|
# executed hourly for scheduled jobs that do not need minute-level cadence
|
|
trigger_hourly_scheduled_items_job:
|
|
cron: '0 * * * *'
|
|
class: 'Internal::TriggerHourlyScheduledItemsJob'
|
|
queue: scheduled_jobs
|
|
|
|
# executed At every minute..
|
|
trigger_imap_email_inboxes_job:
|
|
cron: '*/1 * * * *'
|
|
class: 'Inboxes::FetchImapEmailInboxesJob'
|
|
queue: scheduled_jobs
|
|
|
|
# executed daily at 2230 UTC
|
|
# which is our lowest traffic time
|
|
remove_stale_contact_inboxes_job.rb:
|
|
cron: '30 22 * * *'
|
|
class: 'Internal::RemoveStaleContactInboxesJob'
|
|
queue: scheduled_jobs
|
|
|
|
# executed daily at 2230 UTC
|
|
# which is our lowest traffic time
|
|
remove_stale_redis_keys_job.rb:
|
|
cron: '30 22 * * *'
|
|
class: 'Internal::RemoveStaleRedisKeysJob'
|
|
queue: scheduled_jobs
|
|
|
|
# DISABLED: investigating if this job is the source of orphan conversations
|
|
# #executed daily at 0430 UTC
|
|
# # which will be IST 10:00 AM
|
|
# process_stale_contacts_job:
|
|
# cron: '30 04 * * *'
|
|
# class: 'Internal::ProcessStaleContactsJob'
|
|
# queue: housekeeping
|
|
|
|
# executed daily at 0100 UTC
|
|
# to delete accounts marked for deletion
|
|
delete_accounts_job:
|
|
cron: '0 1 * * *'
|
|
class: 'Internal::DeleteAccountsJob'
|
|
queue: scheduled_jobs
|
|
|
|
# executed every 30 minutes for assignment_v2
|
|
periodic_assignment_job:
|
|
cron: '*/30 * * * *'
|
|
class: 'AutoAssignment::PeriodicAssignmentJob'
|
|
queue: scheduled_jobs
|
|
|
|
# executed daily at 2230 UTC
|
|
# removes old notifications (>1 month) and trims to 300 per user
|
|
remove_old_notification_job:
|
|
cron: '30 22 * * *'
|
|
class: 'Notification::RemoveOldNotificationJob'
|
|
queue: purgable
|
|
|
|
# executed every 12 hours
|
|
# to remove orphan conversations without contact
|
|
remove_orphan_conversations_job:
|
|
cron: '0 */12 * * *'
|
|
class: 'Internal::RemoveOrphanConversationsJob'
|
|
queue: housekeeping
|
|
|
|
# M2 analytics: runs once daily at 02:30 in the installation (super admin) timezone.
|
|
# Single TZ, no hourly-check — single pass over all accounts' closed days.
|
|
# Note: cron is interpreted in the given timezone (sidekiq-cron `timezone`).
|
|
analytics_daily_metrics_job:
|
|
cron: '30 2 * * *'
|
|
timezone: 'Asia/Bangkok'
|
|
class: 'Analytics::DailyMetricsJob'
|
|
queue: scheduled_jobs
|
|
|
|
# M2 analytics: weekly persona evaluation every Monday 10:00 (Asia/Bangkok).
|
|
# Evaluates the last 7 days and delivers the recommendation via Analytics::PersonaApprovalService.
|
|
analytics_weekly_persona_evaluation_job:
|
|
cron: '0 10 * * 1'
|
|
timezone: 'Asia/Bangkok'
|
|
class: 'Analytics::WeeklyPersonaEvaluationJob'
|
|
queue: scheduled_jobs
|