botserver/templates/productivity/office.gbai/office.gbdialog/document-processor.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

329 lines
11 KiB
QBasic

' Document Processor Bot - Demonstrates file operations keywords
' This template shows how to use READ, WRITE, COPY, MOVE, LIST, COMPRESS, EXTRACT, etc.
' ============================================================================
' WEBHOOK: External systems can trigger document processing via HTTP POST
' Endpoint: /api/office/webhook/process-documents
' ============================================================================
WEBHOOK "process-documents"
TALK "Document Processor initialized..."
' ============================================================================
' EXAMPLE 1: Reading and writing files
' ============================================================================
' Read a configuration file
config_content = READ "config/settings.json"
TALK "Loaded configuration file"
' Read a text report
daily_report = READ "reports/daily-summary.txt"
' Write processed data to a new file
processed_data = "Processed at: " + NOW() + "\n"
processed_data = processed_data + "Original content length: " + LEN(daily_report) + " characters\n"
processed_data = processed_data + "Status: Complete\n"
WRITE "reports/processed/" + FORMAT(TODAY(), "yyyy-MM-dd") + "-log.txt", processed_data
TALK "Processing log created"
' Write JSON data
summary_json = #{
"date": TODAY(),
"files_processed": 5,
"total_size_kb": 1250,
"status": "success"
}
WRITE "reports/summary.json", summary_json
' ============================================================================
' EXAMPLE 2: Listing directory contents
' ============================================================================
' List all files in the inbox folder
inbox_files = LIST "inbox/"
TALK "Found " + UBOUND(inbox_files) + " files in inbox"
' Process each file in the inbox
FOR EACH file IN inbox_files
TALK "Processing: " + file
NEXT file
' List reports folder
report_files = LIST "reports/"
TALK "Total reports in archive: " + UBOUND(report_files)
' List with subdirectory
template_files = LIST "templates/documents/"
' ============================================================================
' EXAMPLE 3: Copying files
' ============================================================================
' Copy a template for a new customer
customer_name = "acme-corp"
COPY "templates/invoice-template.docx", "customers/" + customer_name + "/invoice-draft.docx"
TALK "Invoice template copied for " + customer_name
' Copy to backup location
COPY "data/important-data.xlsx", "backups/" + FORMAT(TODAY(), "yyyy-MM-dd") + "-data-backup.xlsx"
TALK "Backup created"
' Copy multiple files using a loop
template_types = ["contract", "nda", "proposal"]
FOR EACH template_type IN template_types
COPY "templates/" + template_type + ".docx", "customers/" + customer_name + "/" + template_type + ".docx"
NEXT template_type
TALK "All templates copied for customer"
' ============================================================================
' EXAMPLE 4: Moving and renaming files
' ============================================================================
' Move processed files from inbox to processed folder
FOR EACH file IN inbox_files
' Extract just the filename from the path
filename = file
MOVE "inbox/" + filename, "processed/" + FORMAT(TODAY(), "yyyy-MM-dd") + "-" + filename
NEXT file
TALK "Inbox files moved to processed folder"
' Rename a file (move within same directory)
MOVE "drafts/report-v1.docx", "drafts/report-final.docx"
TALK "Report renamed to final version"
' Archive old files
old_reports = LIST "reports/2023/"
FOR EACH old_report IN old_reports
MOVE "reports/2023/" + old_report, "archive/2023/" + old_report
NEXT old_report
' ============================================================================
' EXAMPLE 5: Deleting files
' ============================================================================
' Delete temporary files
temp_files = LIST "temp/"
FOR EACH temp_file IN temp_files
DELETE_FILE "temp/" + temp_file
NEXT temp_file
TALK "Temporary files cleaned up"
' Delete a specific file
DELETE_FILE "cache/old-cache.dat"
' Delete processed inbox files older than 30 days
' (In real usage, you'd check file dates)
DELETE_FILE "processed/old-file.txt"
' ============================================================================
' EXAMPLE 6: Creating ZIP archives
' ============================================================================
' Compress monthly reports into a single archive
monthly_reports = [
"reports/week1.pdf",
"reports/week2.pdf",
"reports/week3.pdf",
"reports/week4.pdf",
"reports/summary.xlsx"
]
archive_name = "archives/monthly-" + FORMAT(TODAY(), "yyyy-MM") + ".zip"
COMPRESS monthly_reports, archive_name
TALK "Monthly reports compressed to: " + archive_name
' Compress customer documents
customer_docs = LIST "customers/" + customer_name + "/"
customer_archive = "archives/customers/" + customer_name + "-documents.zip"
COMPRESS customer_docs, customer_archive
TALK "Customer documents archived"
' ============================================================================
' EXAMPLE 7: Extracting archives
' ============================================================================
' Extract uploaded archive
uploaded_archive = "uploads/new-documents.zip"
extracted_files = EXTRACT uploaded_archive, "inbox/extracted/"
TALK "Extracted " + UBOUND(extracted_files) + " files from archive"
' Process extracted files
FOR EACH extracted_file IN extracted_files
TALK "Extracted: " + extracted_file
NEXT extracted_file
' Extract to specific destination
EXTRACT "imports/data-import.zip", "data/imported/"
' ============================================================================
' EXAMPLE 8: Upload and download operations
' ============================================================================
' Download a file from external URL
external_url = "https://example.com/reports/external-report.pdf"
local_path = "downloads/external-report-" + FORMAT(TODAY(), "yyyy-MM-dd") + ".pdf"
downloaded_path = DOWNLOAD external_url, local_path
TALK "Downloaded external report to: " + downloaded_path
' Download multiple files
download_urls = [
"https://api.example.com/exports/data1.csv",
"https://api.example.com/exports/data2.csv",
"https://api.example.com/exports/data3.csv"
]
counter = 1
FOR EACH url IN download_urls
DOWNLOAD url, "imports/data-" + counter + ".csv"
counter = counter + 1
NEXT url
TALK "Downloaded " + UBOUND(download_urls) + " data files"
' Upload a file to storage
HEAR attachment AS FILE
IF attachment != "" THEN
upload_destination = "uploads/" + attachment.filename
upload_url = UPLOAD attachment, upload_destination
TALK "File uploaded to: " + upload_url
END IF
' ============================================================================
' EXAMPLE 9: PDF Generation
' ============================================================================
' Generate an invoice PDF from template
invoice_data = #{
"invoice_number": "INV-2024-001",
"customer_name": "Acme Corporation",
"customer_address": "123 Business Ave, Suite 100",
"date": FORMAT(TODAY(), "MMMM dd, yyyy"),
"due_date": FORMAT(DATEADD(TODAY(), "day", 30), "MMMM dd, yyyy"),
"items": [
#{ "description": "Consulting Services", "quantity": 10, "rate": 150, "amount": 1500 },
#{ "description": "Software License", "quantity": 1, "rate": 500, "amount": 500 },
#{ "description": "Support Package", "quantity": 1, "rate": 200, "amount": 200 }
],
"subtotal": 2200,
"tax": 176,
"total": 2376
}
invoice_pdf = GENERATE_PDF "templates/invoice.html", invoice_data, "invoices/INV-2024-001.pdf"
TALK "Invoice PDF generated: " + invoice_pdf.url
' Generate a report PDF
report_data = #{
"title": "Monthly Performance Report",
"period": FORMAT(TODAY(), "MMMM yyyy"),
"author": "Office Bot",
"generated_at": NOW(),
"metrics": #{
"total_sales": 125000,
"new_customers": 45,
"satisfaction_score": 4.7
}
}
report_pdf = GENERATE_PDF "templates/report.html", report_data, "reports/monthly-" + FORMAT(TODAY(), "yyyy-MM") + ".pdf"
TALK "Report PDF generated: " + report_pdf.url
' ============================================================================
' EXAMPLE 10: Merging PDF files
' ============================================================================
' Merge multiple PDFs into a single document
pdfs_to_merge = [
"documents/cover-page.pdf",
"documents/table-of-contents.pdf",
"documents/chapter1.pdf",
"documents/chapter2.pdf",
"documents/chapter3.pdf",
"documents/appendix.pdf"
]
merged_pdf = MERGE_PDF pdfs_to_merge, "publications/complete-manual.pdf"
TALK "PDFs merged into: " + merged_pdf.url
' Merge customer documents for a single package
customer_pdfs = [
"customers/" + customer_name + "/contract.pdf",
"customers/" + customer_name + "/terms.pdf",
"customers/" + customer_name + "/invoice.pdf"
]
customer_package = MERGE_PDF customer_pdfs, "customers/" + customer_name + "/welcome-package.pdf"
TALK "Customer welcome package created"
' ============================================================================
' EXAMPLE 11: Document workflow automation
' ============================================================================
TALK "Starting document workflow..."
' Step 1: Check inbox for new documents
new_docs = LIST "inbox/"
doc_count = UBOUND(new_docs)
IF doc_count > 0 THEN
TALK "Processing " + doc_count + " new documents"
' Step 2: Copy originals to backup
FOR EACH doc IN new_docs
COPY "inbox/" + doc, "backups/inbox/" + FORMAT(TODAY(), "yyyy-MM-dd") + "-" + doc
NEXT doc
' Step 3: Move to processing folder
FOR EACH doc IN new_docs
MOVE "inbox/" + doc, "processing/" + doc
NEXT doc
' Step 4: Process documents (simplified)
processing_docs = LIST "processing/"
processed_list = []
FOR EACH doc IN processing_docs
' Read and process
content = READ "processing/" + doc
' Write processed version
WRITE "completed/" + doc, content
' Track processed file
processed_list = processed_list + [doc]
' Clean up processing folder
DELETE_FILE "processing/" + doc
NEXT doc
' Step 5: Archive completed documents
IF UBOUND(processed_list) > 0 THEN
COMPRESS processed_list, "archives/batch-" + FORMAT(NOW(), "yyyy-MM-dd-HHmm") + ".zip"
END IF
TALK "Workflow complete: " + UBOUND(processed_list) + " documents processed"
ELSE
TALK "No new documents to process"
END IF
' ============================================================================
' Return webhook response with summary
' ============================================================================
result = #{
"status": "success",
"timestamp": NOW(),
"documents_processed": doc_count,
"operations": #{
"files_read": 5,
"files_written": 8,
"files_copied": 6,
"files_moved": doc_count,
"archives_created": 2,
"pdfs_generated": 2,
"pdfs_merged": 2
}
}
TALK "Document processing complete!"