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
195 lines
6.8 KiB
QBasic
195 lines
6.8 KiB
QBasic
' Data Sync Bot - Demonstrates new data operations keywords
|
|
' This template shows how to use MERGE, FILTER, AGGREGATE, JOIN, and other data keywords
|
|
|
|
' ============================================================================
|
|
' WEBHOOK: External systems can trigger this sync via HTTP POST
|
|
' Endpoint: /api/office/webhook/data-sync
|
|
' ============================================================================
|
|
WEBHOOK "data-sync"
|
|
|
|
TALK "Starting data synchronization..."
|
|
|
|
' ============================================================================
|
|
' EXAMPLE 1: Fetch and merge external data
|
|
' ============================================================================
|
|
|
|
' Fetch customers from external CRM API
|
|
SET HEADER "Authorization", "Bearer " + GET BOT MEMORY("crm_api_key")
|
|
SET HEADER "Content-Type", "application/json"
|
|
|
|
external_customers = GET "https://api.crm.example.com/customers"
|
|
|
|
' Merge external data with local database using email as the key
|
|
merge_result = MERGE "customers", external_customers, "email"
|
|
|
|
TALK "Customer sync complete: " + merge_result.inserted + " new, " + merge_result.updated + " updated"
|
|
|
|
CLEAR HEADERS
|
|
|
|
' ============================================================================
|
|
' EXAMPLE 2: Data transformation with MAP and FILL
|
|
' ============================================================================
|
|
|
|
' Read raw order data
|
|
orders = FIND "orders.xlsx", "status=pending"
|
|
|
|
' Map field names to match our internal format
|
|
mapped_orders = MAP orders, "customerName->customer, orderDate->date, totalAmount->amount"
|
|
|
|
' Fill a report template with the data
|
|
report_template = #{
|
|
"title": "Order Report for {{customer}}",
|
|
"summary": "Order placed on {{date}} for ${{amount}}",
|
|
"processed_at": NOW()
|
|
}
|
|
|
|
report_data = FILL mapped_orders, report_template
|
|
|
|
' ============================================================================
|
|
' EXAMPLE 3: Filtering and aggregation
|
|
' ============================================================================
|
|
|
|
' Get all sales data
|
|
sales = FIND "sales.xlsx"
|
|
|
|
' Filter for this month's sales
|
|
this_month = FILTER sales, "date>=" + FORMAT(DATEADD(TODAY(), "month", -1), "yyyy-MM-dd")
|
|
|
|
' Filter high-value transactions
|
|
high_value = FILTER this_month, "amount>1000"
|
|
|
|
' Calculate aggregates
|
|
total_sales = AGGREGATE "SUM", this_month, "amount"
|
|
average_sale = AGGREGATE "AVG", this_month, "amount"
|
|
sale_count = AGGREGATE "COUNT", this_month, "id"
|
|
max_sale = AGGREGATE "MAX", this_month, "amount"
|
|
min_sale = AGGREGATE "MIN", this_month, "amount"
|
|
|
|
TALK "This month's statistics:"
|
|
TALK "- Total sales: $" + total_sales
|
|
TALK "- Average sale: $" + average_sale
|
|
TALK "- Number of sales: " + sale_count
|
|
TALK "- Largest sale: $" + max_sale
|
|
TALK "- Smallest sale: $" + min_sale
|
|
|
|
' ============================================================================
|
|
' EXAMPLE 4: Joining datasets
|
|
' ============================================================================
|
|
|
|
' Load related data
|
|
customers = FIND "customers.xlsx"
|
|
orders = FIND "orders.xlsx"
|
|
products = FIND "products.xlsx"
|
|
|
|
' Join orders with customer information
|
|
orders_with_customers = JOIN orders, customers, "customer_id"
|
|
|
|
' Now join with product data
|
|
complete_orders = JOIN orders_with_customers, products, "product_id"
|
|
|
|
' ============================================================================
|
|
' EXAMPLE 5: Grouping and pivoting
|
|
' ============================================================================
|
|
|
|
' Group sales by salesperson
|
|
sales_by_rep = GROUP_BY sales, "salesperson"
|
|
|
|
' Create pivot table: sales by month
|
|
monthly_pivot = PIVOT sales, "month", "amount"
|
|
|
|
TALK "Monthly sales pivot created with " + UBOUND(monthly_pivot) + " rows"
|
|
|
|
' ============================================================================
|
|
' EXAMPLE 6: Database CRUD operations
|
|
' ============================================================================
|
|
|
|
' Insert a new sync log entry
|
|
log_entry = #{
|
|
"sync_type": "full",
|
|
"started_at": NOW(),
|
|
"records_processed": sale_count,
|
|
"status": "completed"
|
|
}
|
|
insert_result = INSERT "sync_logs", log_entry
|
|
TALK "Created sync log: " + insert_result.id
|
|
|
|
' Update existing records
|
|
rows_updated = UPDATE "customers", "last_sync<" + FORMAT(DATEADD(TODAY(), "day", -7), "yyyy-MM-dd"), #{
|
|
"needs_refresh": true,
|
|
"updated_at": NOW()
|
|
}
|
|
TALK "Marked " + rows_updated + " customers for refresh"
|
|
|
|
' Save with upsert (insert or update)
|
|
summary = #{
|
|
"date": TODAY(),
|
|
"total_sales": total_sales,
|
|
"order_count": sale_count,
|
|
"sync_status": "complete"
|
|
}
|
|
SAVE "daily_summaries", FORMAT(TODAY(), "yyyy-MM-dd"), summary
|
|
|
|
' ============================================================================
|
|
' EXAMPLE 7: File operations for reporting
|
|
' ============================================================================
|
|
|
|
' Generate a report
|
|
report_content = "Daily Sales Report - " + TODAY() + "\n\n"
|
|
report_content = report_content + "Total Sales: $" + total_sales + "\n"
|
|
report_content = report_content + "Transactions: " + sale_count + "\n"
|
|
report_content = report_content + "Average: $" + average_sale + "\n"
|
|
|
|
' Write report to file
|
|
WRITE "reports/daily/" + FORMAT(TODAY(), "yyyy-MM-dd") + ".txt", report_content
|
|
|
|
' List all reports
|
|
all_reports = LIST "reports/daily/"
|
|
TALK "Total reports in archive: " + UBOUND(all_reports)
|
|
|
|
' ============================================================================
|
|
' EXAMPLE 8: HTTP POST to external system
|
|
' ============================================================================
|
|
|
|
' Send summary to analytics platform
|
|
analytics_payload = #{
|
|
"event": "daily_sync_complete",
|
|
"data": #{
|
|
"date": TODAY(),
|
|
"total_sales": total_sales,
|
|
"transaction_count": sale_count,
|
|
"new_customers": merge_result.inserted
|
|
}
|
|
}
|
|
|
|
SET HEADER "X-API-Key", GET BOT MEMORY("analytics_api_key")
|
|
analytics_response = POST "https://analytics.example.com/events", analytics_payload
|
|
CLEAR HEADERS
|
|
|
|
' ============================================================================
|
|
' EXAMPLE 9: Cleanup old data
|
|
' ============================================================================
|
|
|
|
' Delete old sync logs (older than 30 days)
|
|
cutoff_date = FORMAT(DATEADD(TODAY(), "day", -30), "yyyy-MM-dd")
|
|
deleted_logs = DELETE "sync_logs", "created_at<" + cutoff_date
|
|
|
|
IF deleted_logs > 0 THEN
|
|
TALK "Cleaned up " + deleted_logs + " old sync log entries"
|
|
END IF
|
|
|
|
' ============================================================================
|
|
' Return webhook response
|
|
' ============================================================================
|
|
|
|
result = #{
|
|
"status": "success",
|
|
"timestamp": NOW(),
|
|
"summary": #{
|
|
"customers_synced": merge_result.inserted + merge_result.updated,
|
|
"sales_processed": sale_count,
|
|
"total_revenue": total_sales,
|
|
"logs_cleaned": deleted_logs
|
|
}
|
|
}
|
|
|
|
TALK "Data synchronization complete!"
|