botserver/templates/sales/crm.gbai/crm.gbdialog/case-management.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

338 lines
10 KiB
QBasic

PARAM action AS STRING
PARAM case_data AS OBJECT
user_id = GET "session.user_id"
case_id = GET "session.case_id"
contact_id = GET "session.contact_id"
current_time = FORMAT NOW() AS "YYYY-MM-DD HH:mm:ss"
IF action = "create" THEN
subject = GET "case_data.subject"
description = GET "case_data.description"
priority = GET "case_data.priority"
IF subject = "" THEN
TALK "What is the issue you're experiencing?"
subject = HEAR
END IF
IF description = "" THEN
TALK "Please describe the issue in detail:"
description = HEAR
END IF
IF priority = "" THEN
TALK "How urgent is this? (low/medium/high/critical)"
priority = HEAR
END IF
case_number = "CS-" + FORMAT NOW() AS "YYYYMMDD" + "-" + FORMAT RANDOM(1000, 9999)
new_case = CREATE OBJECT
SET new_case.id = FORMAT GUID()
SET new_case.case_number = case_number
SET new_case.subject = subject
SET new_case.description = description
SET new_case.status = "new"
SET new_case.priority = priority
SET new_case.contact_id = contact_id
SET new_case.created_at = current_time
SET new_case.assigned_to = user_id
SAVE_FROM_UNSTRUCTURED "cases", FORMAT new_case AS JSON
SET "session.case_id" = new_case.id
REMEMBER "case_" + new_case.id = new_case
TALK "Case " + case_number + " created successfully."
IF priority = "critical" OR priority = "high" THEN
notification = "URGENT: New " + priority + " priority case: " + case_number + " - " + subject
SEND MAIL "support-manager@company.com", "Urgent Case", notification
CREATE_TASK "Resolve case " + case_number + " immediately", "critical", user_id
ELSE
CREATE_TASK "Review case " + case_number, priority, user_id
END IF
activity = CREATE OBJECT
SET activity.type = "case_created"
SET activity.case_id = new_case.id
SET activity.description = "Case created: " + subject
SET activity.created_at = current_time
SAVE_FROM_UNSTRUCTURED "activities", FORMAT activity AS JSON
END IF
IF action = "update_status" THEN
IF case_id = "" THEN
TALK "Enter case number:"
case_number = HEAR
case = FIND "cases", "case_number = '" + case_number + "'"
IF case != NULL THEN
case_id = case.id
ELSE
TALK "Case not found."
EXIT
END IF
END IF
case = FIND "cases", "id = '" + case_id + "'"
IF case = NULL THEN
TALK "Case not found."
EXIT
END IF
TALK "Current status: " + case.status
TALK "Select new status:"
TALK "1. New"
TALK "2. In Progress"
TALK "3. Waiting on Customer"
TALK "4. Waiting on Vendor"
TALK "5. Escalated"
TALK "6. Resolved"
TALK "7. Closed"
status_choice = HEAR
new_status = ""
IF status_choice = "1" THEN
new_status = "new"
ELSE IF status_choice = "2" THEN
new_status = "in_progress"
ELSE IF status_choice = "3" THEN
new_status = "waiting_customer"
ELSE IF status_choice = "4" THEN
new_status = "waiting_vendor"
ELSE IF status_choice = "5" THEN
new_status = "escalated"
ELSE IF status_choice = "6" THEN
new_status = "resolved"
ELSE IF status_choice = "7" THEN
new_status = "closed"
END IF
old_status = case.status
case.status = new_status
case.updated_at = current_time
IF new_status = "resolved" OR new_status = "closed" THEN
case.resolved_at = current_time
TALK "Please provide resolution details:"
resolution = HEAR
case.resolution = resolution
END IF
IF new_status = "escalated" THEN
TALK "Reason for escalation:"
escalation_reason = HEAR
case.escalation_reason = escalation_reason
notification = "Case Escalated: " + case.case_number + " - " + case.subject + "\nReason: " + escalation_reason
SEND MAIL "support-manager@company.com", "Case Escalation", notification
END IF
SAVE_FROM_UNSTRUCTURED "cases", FORMAT case AS JSON
activity = CREATE OBJECT
SET activity.type = "status_change"
SET activity.case_id = case_id
SET activity.description = "Status changed from " + old_status + " to " + new_status
SET activity.created_at = current_time
SAVE_FROM_UNSTRUCTURED "activities", FORMAT activity AS JSON
TALK "Case status updated to " + new_status
IF new_status = "resolved" THEN
contact = FIND "contacts", "id = '" + case.contact_id + "'"
IF contact != NULL AND contact.email != "" THEN
subject = "Case " + case.case_number + " Resolved"
message = "Your case has been resolved.\n\nResolution: " + resolution + "\n\nThank you for your patience."
SEND MAIL contact.email, subject, message
END IF
END IF
END IF
IF action = "add_note" THEN
IF case_id = "" THEN
TALK "Enter case number:"
case_number = HEAR
case = FIND "cases", "case_number = '" + case_number + "'"
IF case != NULL THEN
case_id = case.id
ELSE
TALK "Case not found."
EXIT
END IF
END IF
TALK "Enter your note:"
note_text = HEAR
note = CREATE OBJECT
SET note.id = FORMAT GUID()
SET note.entity_type = "case"
SET note.entity_id = case_id
SET note.body = note_text
SET note.created_by = user_id
SET note.created_at = current_time
SAVE_FROM_UNSTRUCTURED "notes", FORMAT note AS JSON
TALK "Note added to case."
END IF
IF action = "search" THEN
TALK "Search by:"
TALK "1. Case Number"
TALK "2. Subject"
TALK "3. Contact Email"
TALK "4. Status"
search_type = HEAR
IF search_type = "1" THEN
TALK "Enter case number:"
search_term = HEAR
cases = FIND "cases", "case_number = '" + search_term + "'"
ELSE IF search_type = "2" THEN
TALK "Enter subject keywords:"
search_term = HEAR
cases = FIND "cases", "subject LIKE '%" + search_term + "%'"
ELSE IF search_type = "3" THEN
TALK "Enter contact email:"
search_term = HEAR
contact = FIND "contacts", "email = '" + search_term + "'"
IF contact != NULL THEN
cases = FIND "cases", "contact_id = '" + contact.id + "'"
END IF
ELSE IF search_type = "4" THEN
TALK "Enter status (new/in_progress/resolved/closed):"
search_term = HEAR
cases = FIND "cases", "status = '" + search_term + "'"
END IF
IF cases = NULL THEN
TALK "No cases found."
ELSE
TALK "Found cases:"
FOR EACH case IN cases DO
TALK case.case_number + " - " + case.subject + " (" + case.status + ")"
END FOR
END IF
END IF
IF action = "sla_check" THEN
cases = FIND "cases", "status != 'closed' AND status != 'resolved'"
breached_count = 0
warning_count = 0
FOR EACH case IN cases DO
hours_open = HOURS_BETWEEN(case.created_at, current_time)
sla_hours = 24
IF case.priority = "critical" THEN
sla_hours = 2
ELSE IF case.priority = "high" THEN
sla_hours = 4
ELSE IF case.priority = "medium" THEN
sla_hours = 8
END IF
IF hours_open > sla_hours THEN
breached_count = breached_count + 1
notification = "SLA BREACH: Case " + case.case_number + " - Open for " + hours_open + " hours"
SEND MAIL "support-manager@company.com", "SLA Breach Alert", notification
case.sla_breached = true
SAVE_FROM_UNSTRUCTURED "cases", FORMAT case AS JSON
ELSE IF hours_open > sla_hours * 0.8 THEN
warning_count = warning_count + 1
END IF
END FOR
TALK "SLA Status:"
TALK "Breached: " + breached_count + " cases"
TALK "Warning: " + warning_count + " cases"
IF breached_count > 0 THEN
CREATE_TASK "Review SLA breached cases immediately", "critical", user_id
END IF
END IF
IF action = "daily_report" THEN
new_cases = FIND "cases", "DATE(created_at) = DATE('" + current_time + "')"
resolved_cases = FIND "cases", "DATE(resolved_at) = DATE('" + current_time + "')"
open_cases = FIND "cases", "status != 'closed' AND status != 'resolved'"
new_count = 0
resolved_count = 0
open_count = 0
FOR EACH case IN new_cases DO
new_count = new_count + 1
END FOR
FOR EACH case IN resolved_cases DO
resolved_count = resolved_count + 1
END FOR
FOR EACH case IN open_cases DO
open_count = open_count + 1
END FOR
report = "DAILY CASE REPORT - " + current_time + "\n"
report = report + "================================\n"
report = report + "New Cases Today: " + new_count + "\n"
report = report + "Resolved Today: " + resolved_count + "\n"
report = report + "Currently Open: " + open_count + "\n\n"
report = report + "Open Cases by Priority:\n"
critical_cases = FIND "cases", "status != 'closed' AND status != 'resolved' AND priority = 'critical'"
high_cases = FIND "cases", "status != 'closed' AND status != 'resolved' AND priority = 'high'"
medium_cases = FIND "cases", "status != 'closed' AND status != 'resolved' AND priority = 'medium'"
low_cases = FIND "cases", "status != 'closed' AND status != 'resolved' AND priority = 'low'"
critical_count = 0
high_count = 0
medium_count = 0
low_count = 0
FOR EACH case IN critical_cases DO
critical_count = critical_count + 1
END FOR
FOR EACH case IN high_cases DO
high_count = high_count + 1
END FOR
FOR EACH case IN medium_cases DO
medium_count = medium_count + 1
END FOR
FOR EACH case IN low_cases DO
low_count = low_count + 1
END FOR
report = report + "Critical: " + critical_count + "\n"
report = report + "High: " + high_count + "\n"
report = report + "Medium: " + medium_count + "\n"
report = report + "Low: " + low_count + "\n"
SEND MAIL "support-manager@company.com", "Daily Case Report", report
TALK "Daily report sent to management."
END IF