botserver/docs/BASIC_UNIVERSAL_MESSAGING.md

23 KiB

General Bots BASIC - Universal Messaging & Multi-Channel Documentation

Table of Contents


Universal Messaging Keywords

The universal messaging system allows seamless communication across multiple channels (WhatsApp, Instagram, Teams, Web, Email) using intelligent channel detection and routing.

TALK TO - Universal Message Sending

Send messages to any recipient across any supported channel.

Syntax

TALK TO recipient, message

Auto-Detection Examples

' WhatsApp - Auto-detected by phone number format
TALK TO "+5511999999999", "Hello via WhatsApp"
TALK TO "5511999999999", "Message to WhatsApp"

' Email - Auto-detected by email format
TALK TO "user@example.com", "Hello via Email"

' Teams - Auto-detected by domain
TALK TO "user@teams.ms", "Hello via Teams"
TALK TO "user@microsoft.com", "Teams message"

' Web Session - For logged-in users
TALK TO user.id, "Welcome back!"

Explicit Channel Specification

' Format: "channel:recipient"
TALK TO "whatsapp:+5511999999999", "WhatsApp message"
TALK TO "teams:user@company.com", "Teams message"
TALK TO "instagram:username", "Instagram DM"
TALK TO "web:session_id", "Web notification"
TALK TO "email:user@example.com", "Email message"

SEND FILE TO - Universal File Sharing

Send files to any recipient across channels with automatic media handling.

Syntax

SEND FILE TO recipient, file
SEND FILE TO recipient, file, caption

Examples

' Send file with auto-detection
SEND FILE TO "+5511999999999", document
SEND FILE TO "user@example.com", report_pdf

' Send with caption
SEND FILE TO "+5511999999999", image, "Product photo"
SEND FILE TO "teams:project-channel", spreadsheet, "Monthly report"

' From file path
file = "reports/monthly.pdf"
SEND FILE TO "email:manager@company.com", file, "Monthly Report Attached"

' From generated content
data = FIND "sales.xlsx"
pdf = data AS PDF
SEND FILE TO "+5511999999999", pdf, "Sales Report"

BROADCAST - Multi-Recipient Messaging

Send messages to multiple recipients simultaneously.

Syntax

BROADCAST message TO recipient_list

Examples

' Broadcast to contact list
contacts = FIND "contacts.csv"
BROADCAST "Newsletter: New features available!" TO contacts

' Broadcast with filtering
customers = FIND "customers.xlsx", "status='active'"
BROADCAST "Special offer for active customers" TO customers

' Mixed channel broadcast
recipients = ["+5511999999999", "user@email.com", "teams:channel-id"]
BROADCAST "Important announcement" TO recipients

SEND TO - Explicit Channel Routing

Direct channel specification for advanced routing scenarios.

Syntax

SEND TO "channel:recipient", message

Examples

' Force specific channel
SEND TO "whatsapp:+5511999999999", "WhatsApp only message"
SEND TO "email:user@example.com", "Email notification"

' Conditional channel selection
IF urgent THEN
    SEND TO "whatsapp:" + customer.phone, alert_message
ELSE
    SEND TO "email:" + customer.email, notification
END IF

Channel Configuration

Configuration Files Location

All channel configurations are stored in the bot configuration database and can be managed via config.csv:

.gbot/
├── config.csv       # Main configuration
├── ura.csv         # URA routing rules
└── menu.csv        # Interactive menus

WhatsApp Configuration

Add to config.csv:

whatsapp-access-token,YOUR_FACEBOOK_ACCESS_TOKEN
whatsapp-phone-id,YOUR_PHONE_NUMBER_ID
whatsapp-verify-token,YOUR_WEBHOOK_VERIFY_TOKEN

Instagram Configuration

Add to config.csv:

instagram-access-token,YOUR_INSTAGRAM_ACCESS_TOKEN
instagram-page-id,YOUR_PAGE_ID
instagram-verify-token,YOUR_WEBHOOK_VERIFY_TOKEN
instagram-admin-id,ADMIN_USER_ID

Teams Configuration

Add to config.csv:

teams-app-id,YOUR_TEAMS_APP_ID
teams-app-password,YOUR_TEAMS_APP_PASSWORD
teams-service-url,https://smba.trafficmanager.net/br/
teams-tenant-id,YOUR_TENANT_ID
teams-support-channel,SUPPORT_CHANNEL_ID

Email Configuration

Add to config.csv:

email-smtp-host,smtp.gmail.com
email-smtp-port,587
email-smtp-user,your-email@gmail.com
email-smtp-password,YOUR_APP_PASSWORD
email-from-address,your-email@gmail.com
email-from-name,Your Bot Name

URA System

The URA (Unidade de Resposta Audível) system provides intelligent message routing and automatic responses.

URA Configuration (ura.csv)

Format: rule_type,condition,action_type,action_value

Examples

keyword,ajuda;help;suporte,transfer,teams
keyword,vendas;orçamento,transfer,sales
time,08:00-18:00,continue,
time,18:01-07:59,message,Estamos fora do horário de atendimento
channel,whatsapp,menu,main_menu
channel,instagram,message,Bem-vindo ao Instagram! Como posso ajudar?
keyword,urgente;emergência,transfer,priority_support

Menu Configuration (menu.csv)

Format: menu_id,option_key,option_label,action_type,action_value

Examples

main_menu,1,Suporte Técnico,transfer,technical
main_menu,2,Vendas,transfer,sales
main_menu,3,Financeiro,transfer,finance
main_menu,4,Falar com Atendente,transfer,human
main_menu,0,Encerrar,message,Obrigado por entrar em contato!

Central Attendance Flow

' Example attendance flow implementation
SET HEAR ON whatsapp

main:
HEAR user_message

' Check URA rules
IF user_message CONTAINS "urgente" THEN
    TALK TO "teams:emergency-support", "Urgent: " + user_message
    TALK "You've been transferred to priority support"
    GOTO main
END IF

' Business hours check
IF TIME() < "08:00" OR TIME() > "18:00" THEN
    TALK "We're currently closed. Business hours: 8AM-6PM"
    GOTO main
END IF

' Show menu
TALK "Choose an option:"
TALK "1 - Technical Support"
TALK "2 - Sales"
TALK "3 - Human Agent"

HEAR option

SELECT CASE option
    CASE "1"
        TALK TO "teams:tech-support", "New ticket from " + user.phone
    CASE "2"
        TALK TO "teams:sales", "Sales inquiry from " + user.phone
    CASE "3"
        TALK TO "teams:human-agents", "Transfer request from " + user.phone
        TALK "You're being transferred to a human agent..."
END SELECT

GOTO main

Complete BASIC Language Reference

User Interaction Commands

Command Description Example
HEAR variable Wait for user input HEAR name
TALK message Send message to current user TALK "Hello " + name
TALK TO recipient, message Send to specific recipient TALK TO "+5511999999999", "Hello"
WAIT seconds Pause execution WAIT 5

Input Validation

Command Description Example
HEAR var AS EMAIL Validate email input HEAR email AS EMAIL
HEAR var AS DATE Validate date input HEAR birthdate AS DATE
HEAR var AS NAME Validate name input HEAR fullname AS NAME
HEAR var AS INTEGER Validate integer HEAR age AS INTEGER
HEAR var AS BOOLEAN Validate true/false HEAR agree AS BOOLEAN
HEAR var AS HOUR Validate time HEAR appointment AS HOUR
HEAR var AS MONEY Validate currency HEAR amount AS MONEY
HEAR var AS MOBILE Validate phone HEAR phone AS MOBILE
HEAR var AS ZIPCODE Validate ZIP HEAR zip AS ZIPCODE
HEAR var AS "opt1", "opt2" Menu selection HEAR choice AS "Yes", "No", "Maybe"
HEAR var AS LANGUAGE Language code HEAR lang AS LANGUAGE
HEAR var AS QRCODE QR code scan HEAR code AS QRCODE
HEAR var AS FILE File upload HEAR document AS FILE
HEAR var AS AUDIO Audio upload HEAR recording AS AUDIO

Data Operations

Command Description Example
FIND file/table Query data FIND "customers.xlsx"
FIND file/table, filter Query with filter FIND "users", "age>18"
SAVE table, data Save to database SAVE "orders", order_data
GET url HTTP GET request data = GET "https://api.example.com"
POST url, data HTTP POST request POST "https://api.example.com", data
SELECT ... FROM ... SQL operations SELECT name, SUM(sales) FROM data GROUP BY name

File Operations

Command Description Example
SEND FILE TO recipient, file Send file SEND FILE TO "+5511999999999", report
SAVE file AS path Save to disk SAVE document AS "reports/monthly.pdf"
UPLOAD file Upload to cloud UPLOAD "report.pdf"
DOWNLOAD url Download file file = DOWNLOAD "https://example.com/file.pdf"
INCLUDE file Include script INCLUDE "functions.gbdialog"
DIR path List directory files = DIR "documents/"
FILL template, data Fill template doc = FILL "template.docx", customer_data

Data Conversion

Command Description Example
data AS IMAGE Convert to image chart = data AS IMAGE
data AS PDF Convert to PDF report = data AS PDF
CHART type, data, labels Create chart img = CHART "pie", [10,20,30], "A;B;C"
CHART PROMPT data, prompt AI chart generation chart = CHART PROMPT sales, "monthly bar chart"
QRCODE text Generate QR code qr = QRCODE "https://example.com"
FORMAT value, format Format value date = FORMAT today, "YYYY-MM-DD"
CONVERT file Convert file format html = CONVERT "design.ai"

Web Automation

Command Description Example
OPEN url Open webpage page = OPEN "https://example.com"
OPEN url AS session Named session page = OPEN "https://example.com" AS #login
GET page, selector Get element text = GET page, "#title"
SET page, selector, value Set field value SET page, "#username", "user123"
CLICK page, selector Click element CLICK page, "#submit"
SCREENSHOT selector Take screenshot img = SCREENSHOT "body"
PRESS ENTER ON page Press Enter key PRESS ENTER ON page

Advanced Operations

Command Description Example
TABLE name ON connection Define table TABLE "sales" ON "production_db"
NEW OBJECT Create object data = NEW OBJECT
NEW ARRAY Create array list = NEW ARRAY
ADD NOTE text Add to notes ADD NOTE "Customer requested callback"
ALLOW ROLE role Check authorization ALLOW ROLE "admin"
CONTINUATION TOKEN Get token token = CONTINUATION TOKEN
SET PARAM name AS value Store parameter SET PARAM last_contact AS today
GET PARAM name Retrieve parameter last = GET PARAM last_contact

Configuration Commands

Command Description Example
SET SCHEDULE cron Schedule execution SET SCHEDULE "0 9 * * *"
SET LANGUAGE code Set language SET LANGUAGE "pt-BR"
SET TRANSLATOR state Toggle translation SET TRANSLATOR ON
SET THEME theme Set visual theme SET THEME "dark"
SET MAX LINES n Limit output SET MAX LINES 100
SET OPERATOR op Set default operator SET OPERATOR OR
SET FILTER TYPE types Set filter types SET FILTER TYPE date, string
SET PAGED mode Set pagination SET PAGED "auto"
SET WHOLE WORD bool Word matching SET WHOLE WORD TRUE
SET HEAR ON channel Switch input channel SET HEAR ON "+5511999999999"

HTTP Configuration

Command Description Example
SET HTTP HEADER key = value Set header SET HTTP HEADER Authorization = "Bearer token"
SET HTTP USERNAME = value Set auth user SET HTTP USERNAME = "api_user"
SET HTTP PASSWORD = value Set auth pass SET HTTP PASSWORD = "secret"

Control Flow

Command Description Example
IF condition THEN Conditional IF age > 18 THEN TALK "Adult" END IF
FOR EACH item IN list Loop through list FOR EACH customer IN customers
DO WHILE condition While loop DO WHILE count < 10
SELECT CASE variable Switch statement SELECT CASE option
EXIT Exit script EXIT
EXIT FOR Exit loop EXIT FOR
GOTO label Jump to label GOTO menu

Database Connections

Configure external databases in config.csv:

# PostgreSQL
mydb-driver,postgres
mydb-host,localhost
mydb-port,5432
mydb-database,production
mydb-username,dbuser
mydb-password,dbpass

# MySQL/MariaDB
mysql-driver,mysql
mysql-host,localhost
mysql-port,3306
mysql-database,myapp
mysql-username,root
mysql-password,pass

# SQL Server
mssql-driver,mssql
mssql-host,server.database.windows.net
mssql-port,1433
mssql-database,mydb
mssql-username,sa
mssql-password,pass

Then use in BASIC:

TABLE customers ON mydb
    id AS integer PRIMARY KEY
    name AS string(100)
    email AS string(255)
    created_at AS datetime

' Use the table
SAVE customers, customer_data
results = FIND customers, "created_at > '2024-01-01'"

Complete Examples

Multi-Channel Customer Service Bot

' Customer service bot with channel routing
SET SCHEDULE "0 9-18 * * 1-5"  ' Business hours only

' Main entry point
main:
SET HEAR ON whatsapp  ' Default to WhatsApp

HEAR initial_message AS TEXT

' Detect urgency
IF initial_message CONTAINS "urgent" OR initial_message CONTAINS "emergency" THEN
    ' Route to priority support
    TALK TO "teams:priority-support", "URGENT from " + user.channel + ": " + initial_message
    TALK "Your request has been marked as urgent. An agent will contact you shortly."
    
    ' Send notification to multiple channels
    SEND TO "email:manager@company.com", "Urgent request received"
    SEND TO "whatsapp:+5511999999999", "Urgent support needed"
END IF

' Show menu based on channel
IF user.channel == "whatsapp" THEN
    TALK "Welcome! Please select an option:"
    HEAR choice AS "1-Support", "2-Sales", "3-Agent", "0-Exit"
ELSE IF user.channel == "instagram" THEN
    TALK "Hi! How can we help you today?"
    HEAR choice AS "Support", "Sales", "Human Agent"
ELSE
    TALK "Hello! Type 'help' for options."
    HEAR choice
END IF

' Process choice
SELECT CASE choice
    CASE "1-Support", "Support", "help"
        GOTO technical_support
    
    CASE "2-Sales", "Sales"
        GOTO sales_inquiry
    
    CASE "3-Agent", "Human Agent", "agent"
        GOTO human_transfer
    
    CASE "0-Exit", "Exit", "bye"
        TALK "Thank you for contacting us!"
        EXIT
        
    CASE ELSE
        TALK "Invalid option. Please try again."
        GOTO main
END SELECT

' Technical support flow
technical_support:
    TALK "Please describe your technical issue:"
    HEAR issue AS TEXT
    
    ' Log to database
    ticket = NEW OBJECT
    ticket.customer = user.id
    ticket.channel = user.channel
    ticket.issue = issue
    ticket.timestamp = NOW()
    
    SAVE "support_tickets", ticket
    
    ' Notify support team
    TALK TO "teams:tech-support", "New ticket from " + user.channel + ": " + issue
    
    TALK "Ticket created. Our team will contact you within 24 hours."
    
    ' Send confirmation
    IF user.channel == "whatsapp" THEN
        SEND FILE TO user.id, ticket AS PDF, "Your support ticket"
    ELSE IF user.channel == "email" THEN
        SEND TO user.id, "Ticket #" + ticket.id + " created: " + issue
    END IF
    
    GOTO main

' Sales inquiry flow
sales_inquiry:
    TALK "What product are you interested in?"
    HEAR product AS TEXT
    
    ' Get product information
    products = FIND "products.xlsx", "name LIKE '" + product + "'"
    
    IF products.length > 0 THEN
        ' Send product catalog
        catalog = products AS PDF
        SEND FILE TO user.id, catalog, "Product Information"
        
        TALK "I've sent you our product catalog. Would you like to speak with sales?"
        HEAR confirm AS BOOLEAN
        
        IF confirm THEN
            GOTO human_transfer
        END IF
    ELSE
        TALK "Product not found. Let me connect you with sales."
        GOTO human_transfer
    END IF
    
    GOTO main

' Human transfer flow
human_transfer:
    TALK "Connecting you to a human agent..."
    
    ' Find available agent based on channel
    agent = GET "https://api.company.com/next-available-agent"
    
    IF agent.available THEN
        ' Create bridge between customer and agent
        TALK TO agent.channel + ":" + agent.id, "New customer from " + user.channel
        TALK TO agent.channel + ":" + agent.id, "Customer: " + user.id
        TALK TO agent.channel + ":" + agent.id, "Initial message: " + initial_message
        
        TALK "You've been connected to " + agent.name
        
        ' Bridge messages
        bridge_loop:
            HEAR customer_msg
            
            IF customer_msg == "end chat" THEN
                TALK "Chat ended. Thank you!"
                GOTO main
            END IF
            
            TALK TO agent.channel + ":" + agent.id, customer_msg
            GOTO bridge_loop
    ELSE
        TALK "All agents are busy. We'll contact you within 1 hour."
        
        ' Queue for callback
        callback = NEW OBJECT
        callback.customer = user.id
        callback.channel = user.channel
        callback.requested_at = NOW()
        
        SAVE "callback_queue", callback
    END IF
    
    GOTO main

Broadcasting Campaign System

' Marketing campaign broadcaster
SET MAX LINES 1000

' Load campaign data
campaign = FIND "campaign.xlsx"
customers = FIND "customers.csv", "opt_in=true"

' Segment customers by channel preference
whatsapp_list = SELECT * FROM customers WHERE preferred_channel = 'whatsapp'
email_list = SELECT * FROM customers WHERE preferred_channel = 'email'
teams_list = SELECT * FROM customers WHERE preferred_channel = 'teams'

' Prepare personalized messages
FOR EACH customer IN customers
    message = "Hi " + customer.name + "! " + campaign.message
    
    ' Add personalized offer
    IF customer.tier == "gold" THEN
        message = message + " As a Gold member, you get 20% extra discount!"
    END IF
    
    ' Send via preferred channel
    IF customer.preferred_channel == "whatsapp" AND customer.phone != "" THEN
        SEND FILE TO customer.phone, campaign.image, message
    ELSE IF customer.preferred_channel == "email" AND customer.email != "" THEN
        SEND TO "email:" + customer.email, message
    ELSE IF customer.preferred_channel == "teams" AND customer.teams_id != "" THEN
        SEND TO "teams:" + customer.teams_id, message
    END IF
    
    ' Log delivery
    log = NEW OBJECT
    log.customer_id = customer.id
    log.campaign_id = campaign.id
    log.channel = customer.preferred_channel
    log.sent_at = NOW()
    
    SAVE "campaign_log", log
    
    ' Rate limiting
    WAIT 1
NEXT

' Generate report
report = SELECT 
    channel,
    COUNT(*) as total_sent,
    SUM(CASE WHEN status='delivered' THEN 1 ELSE 0 END) as delivered
FROM campaign_log
GROUP BY channel

' Send report to management
report_pdf = report AS PDF
SEND FILE TO "email:marketing@company.com", report_pdf, "Campaign Report"
TALK TO "teams:marketing-channel", "Campaign completed. " + customers.length + " messages sent."

Web Automation with Multi-Channel Notifications

' Price monitoring with notifications
SET SCHEDULE "0 */6 * * *"  ' Every 6 hours

products = FIND "monitor_products.csv"

FOR EACH product IN products
    ' Open product page
    page = OPEN product.url AS #monitor
    
    ' Get current price
    current_price = GET page, product.price_selector
    current_price = PARSE_NUMBER(current_price)
    
    ' Check for price change
    IF current_price < product.last_price THEN
        discount = ((product.last_price - current_price) / product.last_price) * 100
        
        message = "PRICE DROP! " + product.name + " is now $" + current_price
        message = message + " (" + discount + "% off)"
        
        ' Notify via multiple channels based on discount level
        IF discount > 20 THEN
            ' Big discount - notify everywhere
            BROADCAST message TO product.watchers
            
            ' Send to Telegram group
            TALK TO "telegram:price-alerts", message
            
            ' Send to WhatsApp broadcast list
            FOR EACH watcher IN product.whatsapp_watchers
                TALK TO watcher, message
                SEND FILE TO watcher, SCREENSHOT product.price_selector, "Price proof"
            NEXT
        ELSE
            ' Small discount - email only
            FOR EACH watcher IN product.email_watchers
                SEND TO "email:" + watcher, message
            NEXT
        END IF
        
        ' Update database
        product.last_price = current_price
        product.last_check = NOW()
        SAVE "monitor_products", product
    END IF
    
    WAIT 5  ' Rate limiting between checks
NEXT

TALK TO "teams:monitoring", "Price check completed at " + NOW()

Error Handling

' Robust error handling example
TRY
    result = GET "https://api.example.com/data"
    
    IF result.error THEN
        THROW "API returned error: " + result.error
    END IF
    
    SAVE "api_data", result
    
CATCH error
    ' Log error
    error_log = NEW OBJECT
    error_log.message = error
    error_log.timestamp = NOW()
    error_log.user = user.id
    
    SAVE "error_log", error_log
    
    ' Notify administrators
    TALK TO "teams:tech-support", "Error occurred: " + error
    TALK TO "email:admin@company.com", "System error logged"
    
    ' Inform user
    TALK "An error occurred. Our team has been notified."
    
FINALLY
    ' Cleanup
    CLOSE page
END TRY

Best Practices

  1. Channel Detection: Let the system auto-detect channels when possible
  2. Fallback Channels: Always have a fallback communication method
  3. Rate Limiting: Use WAIT between bulk operations
  4. Error Recovery: Implement try-catch for external operations
  5. Logging: Log all cross-channel communications
  6. User Preferences: Store and respect user channel preferences
  7. Business Hours: Check business hours before routing to human agents
  8. Message Templates: Use templates for consistent multi-channel messaging
  9. Testing: Test each channel individually before broadcasting
  10. Compliance: Ensure opt-in consent for each communication channel

Webhook Endpoints

After configuration, set up these webhook endpoints in each platform:

  • WhatsApp: https://your-domain/api/channels/whatsapp/webhook
  • Instagram: https://your-domain/api/channels/instagram/webhook
  • Teams: https://your-domain/api/channels/teams/messages

Support

For additional support and updates, visit: