botserver/templates/crm/sales-pipeline.gbai/sales-pipeline.gbdialog/pipeline-jobs.bas
Rodrigo Rodriguez (Pragmatismo) 50eae38d36 Looking at this diff, I can see it's a comprehensive documentation
update and code refactoring focused on:

1. Adding new documentation pages to the table of contents
2. Restructuring the bot templates documentation
3. Changing keyword syntax from underscore format to space format (e.g.,
   `SET_BOT_MEMORY` → `SET BOT MEMORY`)
4. Updating compiler and keyword registration to support the new
   space-based syntax
5. Adding new keyword modules (social media, lead scoring, templates,
   etc.)

Refactor BASIC keywords to use spaces instead of underscores

Change keyword syntax from underscore format (SET_BOT_MEMORY) to more
natural space-separated format (SET BOT MEMORY) throughout the codebase.

Key changes:
- Update Rhai custom syntax registration to use space tokens
- Simplify compiler preprocessing (fewer replacements needed)
- Update all template .bas files to use new syntax
- Expand documentation with consolidated examples and new sections
- Add new keyword modules: social_media, lead_scoring, send_template,
  core_functions, qrcode, sms, procedures, import_export, llm_macros,
  on_form_submit
2025-11-30 10:53:59 -03:00

176 lines
7.6 KiB
QBasic

PARAM jobname AS STRING DESCRIPTION "Name of the scheduled job to execute"
DESCRIPTION "Scheduled jobs for pipeline maintenance, reminders, and reporting. Run automatically based on configured schedules."
' ============================================================================
' DAILY PIPELINE REPORT - Runs at 8:00 AM every day
' ============================================================================
IF jobname = "daily report" THEN
SET SCHEDULE "0 8 * * *"
' Get pipeline summary
let deals = FIND "deals.csv"
let opendeals = FILTER deals, "stage!=Closed Won AND stage!=Closed Lost"
' Calculate metrics
let totalvalue = AGGREGATE "SUM", opendeals, "dealvalue"
let weightedvalue = AGGREGATE "SUM", opendeals, "weightedvalue"
let dealcount = AGGREGATE "COUNT", opendeals, "dealid"
' Count by stage
let leads = FILTER opendeals, "stage=Lead"
let qualified = FILTER opendeals, "stage=Qualified"
let proposals = FILTER opendeals, "stage=Proposal"
let negotiations = FILTER opendeals, "stage=Negotiation"
let leadcount = AGGREGATE "COUNT", leads, "dealid"
let qualifiedcount = AGGREGATE "COUNT", qualified, "dealid"
let proposalcount = AGGREGATE "COUNT", proposals, "dealid"
let negotiationcount = AGGREGATE "COUNT", negotiations, "dealid"
' Build report
let reportdate = FORMAT TODAY() AS "MMMM DD, YYYY"
let subject = "Daily Pipeline Report - " + reportdate
let message = "Good morning!\n\n"
message = message + "Here is your daily pipeline summary:\n\n"
message = message + "PIPELINE OVERVIEW\n"
message = message + "================\n"
message = message + "Total Open Deals: " + dealcount + "\n"
message = message + "Total Pipeline Value: $" + FORMAT totalvalue AS "#,##0" + "\n"
message = message + "Weighted Value: $" + FORMAT weightedvalue AS "#,##0" + "\n\n"
message = message + "BY STAGE\n"
message = message + "========\n"
message = message + "Lead: " + leadcount + " deals\n"
message = message + "Qualified: " + qualifiedcount + " deals\n"
message = message + "Proposal: " + proposalcount + " deals\n"
message = message + "Negotiation: " + negotiationcount + " deals\n\n"
message = message + "Have a great selling day!\n"
message = message + "- Sales Pipeline Bot"
SEND MAIL "sales-team@company.com", subject, message
TALK "Daily pipeline report sent"
END IF
' ============================================================================
' STALE DEAL ALERTS - Runs at 9:00 AM every day
' ============================================================================
IF jobname = "stale alerts" THEN
SET SCHEDULE "0 9 * * *"
' Find deals not updated in 7+ days
let cutoffdate = FORMAT DATEADD(TODAY(), -7, "day") AS "YYYY-MM-DD"
let deals = FIND "deals.csv"
let staledeals = FILTER deals, "updatedat<" + cutoffdate + " AND stage!=Closed Won AND stage!=Closed Lost"
let stalecount = AGGREGATE "COUNT", staledeals, "dealid"
IF stalecount > 0 THEN
FOR EACH deal IN staledeals
let stalealert = "Your deal '" + deal.dealname + "' has not been updated in over 7 days.\n"
stalealert = stalealert + "Deal ID: " + deal.dealid + "\n"
stalealert = stalealert + "Current Stage: " + deal.stage + "\n"
stalealert = stalealert + "Value: $" + FORMAT deal.dealvalue AS "#,##0" + "\n\n"
stalealert = stalealert + "Please review and update this deal or mark it as closed."
SEND MAIL deal.owneremail, "Action Required: Stale Deal Alert", stalealert
NEXT deal
TALK "Sent " + stalecount + " stale deal alerts"
ELSE
TALK "No stale deals found"
END IF
END IF
' ============================================================================
' CLOSE DATE REMINDERS - Runs at 8:30 AM every day
' ============================================================================
IF jobname = "close reminders" THEN
SET SCHEDULE "30 8 * * *"
' Find deals closing in next 7 days
let today = FORMAT TODAY() AS "YYYY-MM-DD"
let nextweek = FORMAT DATEADD(TODAY(), 7, "day") AS "YYYY-MM-DD"
let deals = FIND "deals.csv"
let upcoming = FILTER deals, "closedate>=" + today + " AND closedate<=" + nextweek + " AND stage!=Closed Won AND stage!=Closed Lost"
let upcomingcount = AGGREGATE "COUNT", upcoming, "dealid"
IF upcomingcount > 0 THEN
FOR EACH deal IN upcoming
let daysuntil = DATEDIFF(TODAY(), deal.closedate, "day")
let reminder = "Deal Closing Soon!\n\n"
reminder = reminder + "Your deal '" + deal.dealname + "' is expected to close in " + daysuntil + " days.\n\n"
reminder = reminder + "Deal Details:\n"
reminder = reminder + "- Company: " + deal.companyname + "\n"
reminder = reminder + "- Value: $" + FORMAT deal.dealvalue AS "#,##0" + "\n"
reminder = reminder + "- Stage: " + deal.stage + "\n"
reminder = reminder + "- Close Date: " + deal.closedate + "\n\n"
reminder = reminder + "Make sure to follow up and push for the close!"
SEND MAIL deal.owneremail, "Reminder: Deal Closing in " + daysuntil + " Days", reminder
NEXT deal
TALK "Sent " + upcomingcount + " close date reminders"
ELSE
TALK "No deals closing in the next 7 days"
END IF
END IF
' ============================================================================
' WEEKLY FORECAST REPORT - Runs at 9:00 AM every Monday
' ============================================================================
IF jobname = "weekly forecast" THEN
SET SCHEDULE "0 9 * * 1"
' Get this month's deals
let monthstart = FORMAT DATEADD(TODAY(), 0, "month") AS "YYYY-MM-01"
let monthend = FORMAT DATEADD(TODAY(), 1, "month") AS "YYYY-MM-01"
let deals = FIND "deals.csv"
let monthdeals = FILTER deals, "closedate>=" + monthstart + " AND closedate<" + monthend
' Calculate forecast
let totalforecast = AGGREGATE "SUM", monthdeals, "weightedvalue"
let wondeals = FILTER monthdeals, "stage=Closed Won"
let closedvalue = AGGREGATE "SUM", wondeals, "dealvalue"
' Build forecast report
let reportdate = FORMAT TODAY() AS "MMMM DD, YYYY"
let monthname = FORMAT TODAY() AS "MMMM YYYY"
let subject = "Weekly Sales Forecast - " + reportdate
let message = "Weekly Forecast Report\n"
message = message + "======================\n\n"
message = message + "Month: " + monthname + "\n\n"
message = message + "Forecast Summary:\n"
message = message + "- Weighted Forecast: $" + FORMAT totalforecast AS "#,##0" + "\n"
message = message + "- Already Closed: $" + FORMAT closedvalue AS "#,##0" + "\n"
message = message + "- Remaining to Close: $" + FORMAT (totalforecast - closedvalue) AS "#,##0" + "\n\n"
message = message + "Keep pushing to hit your targets!\n"
message = message + "- Sales Pipeline Bot"
SEND MAIL "sales-team@company.com", subject, message
TALK "Weekly forecast report sent"
END IF
' ============================================================================
' SETUP SCHEDULES - Run once to configure all jobs
' ============================================================================
IF jobname = "setup schedules" THEN
TALK "Configuring pipeline scheduled jobs..."
TALK ""
TALK "📅 **Scheduled Jobs:**"
TALK "• Daily Pipeline Report: 8:00 AM daily"
TALK "• Stale Deal Alerts: 9:00 AM daily"
TALK "• Close Date Reminders: 8:30 AM daily"
TALK "• Weekly Forecast: 9:00 AM Mondays"
TALK ""
TALK "✅ All pipeline schedules configured!"
END IF