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
- Channel Detection: Let the system auto-detect channels when possible
- Fallback Channels: Always have a fallback communication method
- Rate Limiting: Use WAIT between bulk operations
- Error Recovery: Implement try-catch for external operations
- Logging: Log all cross-channel communications
- User Preferences: Store and respect user channel preferences
- Business Hours: Check business hours before routing to human agents
- Message Templates: Use templates for consistent multi-channel messaging
- Testing: Test each channel individually before broadcasting
- 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:
- GitHub: https://github.com/GeneralBots/BotServer
- Documentation: https://docs.generalbots.com
- Community: https://community.generalbots.com