botserver/templates/platform/analytics.gbai/analytics.gbdialog/custom-report.bas
Rodrigo Rodriguez (Pragmatismo) 48c1ae0b51 , dt.month, dt.hour, dt.is_weekend, etc.)
- Add startup wizard module for first-run configuration
- Add white-label branding system with .product file support
- Add bot manager for lifecycle, MinIO buckets, and templates
- Add version tracking registry for component updates
- Create comparison doc: BASIC vs n8n/Zapier/Make/Copilot
- Add WhatsApp-style sample dialogs to template documentation
- Add data traceability SVG diagram ```
2025-11-30 15:07:29 -03:00

257 lines
8 KiB
QBasic

' =============================================================================
' Custom Report Generator Dialog
' General Bots Analytics Template
' =============================================================================
' This dialog allows users to create custom reports from platform metrics
' =============================================================================
TALK "Custom Report Generator"
TALK "I will help you create a custom analytics report."
HEAR report_name AS TEXT WITH "What would you like to name this report?"
TALK "Select the time range for your report:"
TALK "1. Last Hour"
TALK "2. Last 24 Hours"
TALK "3. Last 7 Days"
TALK "4. Last 30 Days"
TALK "5. Last 90 Days"
TALK "6. Custom Range"
HEAR time_choice AS INTEGER
SELECT CASE time_choice
CASE 1
time_range = "1h"
time_label = "Last Hour"
CASE 2
time_range = "24h"
time_label = "Last 24 Hours"
CASE 3
time_range = "7d"
time_label = "Last 7 Days"
CASE 4
time_range = "30d"
time_label = "Last 30 Days"
CASE 5
time_range = "90d"
time_label = "Last 90 Days"
CASE 6
HEAR start_date AS DATE WITH "Enter start date (YYYY-MM-DD):"
HEAR end_date AS DATE WITH "Enter end date (YYYY-MM-DD):"
time_range = "custom"
time_label = FORMAT(start_date, "YYYY-MM-DD") + " to " + FORMAT(end_date, "YYYY-MM-DD")
CASE ELSE
time_range = "7d"
time_label = "Last 7 Days"
END SELECT
TALK "Select metrics to include (enter numbers separated by commas):"
TALK "1. Message Volume"
TALK "2. Active Sessions"
TALK "3. Response Time"
TALK "4. LLM Token Usage"
TALK "5. Error Rate"
TALK "6. Storage Usage"
TALK "7. API Calls"
TALK "8. User Activity"
TALK "9. Bot Performance"
TALK "10. All Metrics"
HEAR metrics_choice AS TEXT
metrics_list = SPLIT(metrics_choice, ",")
include_messages = CONTAINS(metrics_list, "1") OR CONTAINS(metrics_list, "10")
include_sessions = CONTAINS(metrics_list, "2") OR CONTAINS(metrics_list, "10")
include_response = CONTAINS(metrics_list, "3") OR CONTAINS(metrics_list, "10")
include_tokens = CONTAINS(metrics_list, "4") OR CONTAINS(metrics_list, "10")
include_errors = CONTAINS(metrics_list, "5") OR CONTAINS(metrics_list, "10")
include_storage = CONTAINS(metrics_list, "6") OR CONTAINS(metrics_list, "10")
include_api = CONTAINS(metrics_list, "7") OR CONTAINS(metrics_list, "10")
include_users = CONTAINS(metrics_list, "8") OR CONTAINS(metrics_list, "10")
include_bots = CONTAINS(metrics_list, "9") OR CONTAINS(metrics_list, "10")
TALK "Select grouping interval:"
TALK "1. Hourly"
TALK "2. Daily"
TALK "3. Weekly"
TALK "4. Monthly"
HEAR group_choice AS INTEGER
SELECT CASE group_choice
CASE 1
group_interval = "1h"
CASE 2
group_interval = "1d"
CASE 3
group_interval = "1w"
CASE 4
group_interval = "1mo"
CASE ELSE
group_interval = "1d"
END SELECT
TALK "Generating your custom report..."
report_data = {}
report_data.name = report_name
report_data.time_range = time_label
report_data.generated_at = NOW()
report_data.generated_by = GET SESSION "user_email"
IF include_messages THEN
messages = QUERY METRICS "messages" FOR time_range BY group_interval
report_data.messages = messages
report_data.total_messages = SUM(messages, "count")
END IF
IF include_sessions THEN
sessions = QUERY METRICS "active_sessions" FOR time_range BY group_interval
report_data.sessions = sessions
report_data.peak_sessions = MAX(sessions, "count")
END IF
IF include_response THEN
response_times = QUERY METRICS "response_time" FOR time_range BY group_interval
report_data.response_times = response_times
report_data.avg_response_ms = AVG(response_times, "duration_ms")
END IF
IF include_tokens THEN
tokens = QUERY METRICS "llm_tokens" FOR time_range BY group_interval
report_data.tokens = tokens
report_data.total_tokens = SUM(tokens, "total_tokens")
END IF
IF include_errors THEN
errors = QUERY METRICS "errors" FOR time_range BY group_interval
report_data.errors = errors
report_data.total_errors = SUM(errors, "count")
END IF
IF include_storage THEN
storage = QUERY METRICS "storage_usage" FOR time_range BY group_interval
report_data.storage = storage
report_data.current_storage_gb = LAST(storage, "bytes_used") / 1073741824
END IF
IF include_api THEN
api_calls = QUERY METRICS "api_requests" FOR time_range BY group_interval
report_data.api_calls = api_calls
report_data.total_api_calls = SUM(api_calls, "count")
END IF
IF include_users THEN
users = FIND "users" WHERE last_login >= DATEADD(NOW(), -30, "day")
report_data.active_users_30d = COUNT(users)
END IF
IF include_bots THEN
bots = FIND "bots" WHERE status = "active"
report_data.active_bots = COUNT(bots)
END IF
SET CONTEXT "You are an analytics expert. Generate executive insights from this report data."
insights = LLM "Analyze this platform data and provide 3-5 key insights for executives: " + JSON(report_data)
report_data.ai_insights = insights
TALK "Select export format:"
TALK "1. PDF Report"
TALK "2. Excel Spreadsheet"
TALK "3. CSV Data"
TALK "4. JSON Data"
TALK "5. All Formats"
HEAR format_choice AS INTEGER
timestamp = FORMAT(NOW(), "YYYYMMDD_HHmmss")
base_filename = "report_" + REPLACE(report_name, " ", "_") + "_" + timestamp
SELECT CASE format_choice
CASE 1
filename = base_filename + ".pdf"
GENERATE PDF filename WITH TEMPLATE "analytics_report" DATA report_data
CASE 2
filename = base_filename + ".xlsx"
WRITE filename, report_data
CASE 3
filename = base_filename + ".csv"
WRITE filename, CSV(report_data)
CASE 4
filename = base_filename + ".json"
WRITE filename, JSON(report_data)
CASE 5
GENERATE PDF base_filename + ".pdf" WITH TEMPLATE "analytics_report" DATA report_data
WRITE base_filename + ".xlsx", report_data
WRITE base_filename + ".csv", CSV(report_data)
WRITE base_filename + ".json", JSON(report_data)
filename = base_filename + ".zip"
COMPRESS filename, base_filename + ".*"
CASE ELSE
filename = base_filename + ".pdf"
GENERATE PDF filename WITH TEMPLATE "analytics_report" DATA report_data
END SELECT
UPLOAD filename TO "/reports/custom/"
download_link = GENERATE SECURE LINK "/reports/custom/" + filename EXPIRES 7 DAYS
TALK "Report generated successfully."
TALK "Report Name: " + report_name
TALK "Time Range: " + time_label
TALK "Download: " + download_link
HEAR send_email AS BOOLEAN WITH "Would you like to receive this report via email?"
IF send_email THEN
user_email = GET SESSION "user_email"
SEND MAIL user_email, "Custom Analytics Report: " + report_name, "Your custom analytics report is ready. Download link: " + download_link + " (expires in 7 days)", ATTACHMENT filename
TALK "Report sent to " + user_email
END IF
INSERT INTO "report_history" VALUES {
"id": "RPT-" + timestamp,
"name": report_name,
"generated_by": GET SESSION "user_email",
"generated_at": NOW(),
"time_range": time_label,
"metrics_included": metrics_choice,
"filename": filename
}
TALK "Would you like to schedule this report to run automatically?"
HEAR schedule_report AS BOOLEAN
IF schedule_report THEN
TALK "Select schedule frequency:"
TALK "1. Daily"
TALK "2. Weekly"
TALK "3. Monthly"
HEAR freq_choice AS INTEGER
SELECT CASE freq_choice
CASE 1
schedule = "0 8 * * *"
freq_label = "Daily at 8:00 AM"
CASE 2
schedule = "0 8 * * 1"
freq_label = "Weekly on Monday at 8:00 AM"
CASE 3
schedule = "0 8 1 * *"
freq_label = "Monthly on 1st at 8:00 AM"
CASE ELSE
schedule = "0 8 * * 1"
freq_label = "Weekly on Monday at 8:00 AM"
END SELECT
SET BOT MEMORY "scheduled_report_" + report_name, JSON(report_data)
SET SCHEDULE schedule, "generate-scheduled-report.bas"
TALK "Report scheduled: " + freq_label
END IF
TALK "Thank you for using the Custom Report Generator."