botbook/src/06-gbdialog/keywords.md

442 lines
No EOL
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Keyword Reference
This section lists every BASIC keyword implemented in the GeneralBots engine. Each keyword page includes:
* **Syntax** Exact command format
* **Parameters** Expected arguments
* **Description** What the keyword does
* **Example** A short snippet showing usage
The source code for each keyword lives in `src/basic/keywords/`. Only the keywords listed here exist in the system.
## Important: Case Insensitivity
**All variables in General Bots BASIC are case-insensitive.** The preprocessor normalizes variable names to lowercase automatically.
```basic
' These all refer to the same variable
host = "https://api.example.com"
result = GET Host + "/endpoint"
TALK HOST
```
Keywords are also case-insensitive but conventionally written in UPPERCASE:
```basic
' Both work identically
TALK "Hello"
talk "Hello"
```
## Configuration Variables (param-*)
Variables defined with `param-` prefix in `config.csv` are automatically available in scripts without the prefix:
```csv
name,value
param-host,https://api.example.com
param-limit,100
param-pages,50
```
```basic
' Access directly (lowercase, no param- prefix)
result = GET host + "/items?limit=" + limit
```
See [Script Execution Flow](./script-execution-flow.md) for complete details.
---
## Complete Keyword List (Flat Reference)
| Keyword | Category | Description |
|---------|----------|-------------|
| `ADD BOT` | Multi-Agent | Add a bot to the current session with triggers |
| `ADD MEMBER` | Communication | Add member to a group |
| `ADD SUGGESTION` | UI | Add clickable suggestion button |
| `ADD TOOL` | Tools | Register a tool for the session |
| `AGGREGATE` | Data | Perform SUM, AVG, COUNT, MIN, MAX operations |
| `BOOK` | Special | Book an appointment |
| `BOT REFLECTION` | Multi-Agent | Enable agent self-analysis and improvement |
| `BROADCAST TO BOTS` | Multi-Agent | Send message to all bots in session |
| `CLEAR HEADERS` | HTTP | Clear all HTTP headers |
| `CLEAR KB` | Knowledge | Unload knowledge base from session |
| `CLEAR SUGGESTIONS` | UI | Remove all suggestion buttons |
| `CLEAR TOOLS` | Tools | Remove all registered tools |
| `COMPRESS` | Files | Create ZIP archive |
| `COPY` | Files | Copy a file |
| `CREATE DRAFT` | Communication | Create email draft |
| `CREATE SITE` | Tools | Generate a website |
| `CREATE TASK` | Tools | Create a task |
| `DELEGATE TO BOT` | Multi-Agent | Send task to another bot |
| `DELETE` | Data | Delete records from table |
| `DELETE FILE` | Files | Delete a file |
| `DELETE HTTP` | HTTP | Send HTTP DELETE request |
| `DOWNLOAD` | Files | Download file from URL |
| `EXIT FOR` | Control | Exit loop early |
| `EXTRACT` | Files | Extract ZIP archive |
| `FILL` | Data | Fill template with data |
| `FILTER` | Data | Filter records by condition |
| `FIND` | Data | Search in files or KB |
| `FIRST` | Data | Get first element |
| `FOR EACH ... NEXT` | Control | Loop through items |
| `FORMAT` | Data | Format strings and dates |
| `GENERATE PDF` | Files | Generate PDF from template |
| `GET` | Variables | Get variable or API data |
| `GOTO` | Control | Jump to label (⚠️ use ON instead) |
| `GET BOT MEMORY` | Memory | Retrieve bot-level persisted data |
| `GET USER MEMORY` | Memory | Retrieve user-level persisted data (cross-bot) |
| `GRAPHQL` | HTTP | Execute GraphQL query |
| `GROUP BY` | Data | Group data by field |
| `HEAR` | Dialog | Get input from user |
| `IF ... THEN ... ELSE ... END IF` | Control | Conditional logic |
| `INSERT` | Data | Insert new record |
| `INSTR` | String | Find position of substring |
| `IS NUMERIC` | String | Check if value is numeric |
| `JOIN` | Data | Join two datasets |
| `LAST` | Data | Get last element |
| `LIST` | Files | List directory contents |
| `LLM` | AI | Query language model |
| `MAP` | Data | Map field names |
| `MERGE` | Data | Merge data into table |
| `MERGE PDF` | Files | Merge multiple PDFs |
| `MOVE` | Files | Move or rename file |
| `ON` | Events | Event handler |
| `PATCH` | HTTP | Send HTTP PATCH request |
| `PIVOT` | Data | Create pivot table |
| `POST` | HTTP | Send HTTP POST request |
| `PRINT` | Debug | Debug output to console |
| `PUT` | HTTP | Send HTTP PUT request |
| `READ` | Files | Read file content |
| `REMEMBER` | Memory | Store user-specific memory |
| `RUN BASH` | Code Execution | Execute Bash script in sandbox |
| `RUN JAVASCRIPT` | Code Execution | Execute JavaScript in sandbox |
| `RUN PYTHON` | Code Execution | Execute Python code in sandbox |
| `SAVE` | Data | Save data to table (upsert) |
| `SAVE FROM UNSTRUCTURED` | Data | Extract structured data from text |
| `SEND MAIL` | Communication | Send email |
| `SET` | Variables | Set variable value |
| `SET BOT MEMORY` | Memory | Persist data at bot level |
| `SET CONTEXT` | AI | Add context for LLM |
| `SET HEADER` | HTTP | Set HTTP header |
| `SET SCHEDULE` | Events | Schedule script execution |
| `SET USER` | Session | Set user context |
| `SET USER FACT` | Memory | Store a fact about the user |
| `SET USER MEMORY` | Memory | Persist data at user level (cross-bot) |
| `SOAP` | HTTP | Execute SOAP API call |
| `SWITCH ... CASE ... END SWITCH` | Control | Switch statement |
| `SYNCHRONIZE` | Data | Sync API data to table (planned) |
| `TALK` | Dialog | Send message to user |
| `TRANSFER CONVERSATION` | Multi-Agent | Hand off conversation to another bot |
| `UPDATE` | Data | Update existing records |
| `USE MODEL` | AI | Switch LLM model for subsequent operations |
| `USER FACTS` | Memory | Get all stored user facts |
| `UPLOAD` | Files | Upload file to storage |
| `USE KB` | Knowledge | Load knowledge base |
| `USE TOOL` | Tools | Register tool definition |
| `USE WEBSITE` | Knowledge | Associate website with session |
| `WAIT` | Control | Pause execution |
| `WEATHER` | Special | Get weather information |
| `WEBHOOK` | Events | Create webhook endpoint |
| `WHILE ... WEND` | Control | While loop |
| `WRITE` | Files | Write content to file |
---
## Keywords by Category
### Core Dialog Keywords
| Keyword | Syntax | Description |
|---------|--------|-------------|
| TALK | `TALK "message"` | Send message to user |
| HEAR | `HEAR variable` or `HEAR variable AS TYPE` | Get input from user |
| WAIT | `WAIT seconds` | Pause execution |
| PRINT | `PRINT "debug message"` | Debug output to console |
### Variable & Memory
| Keyword | Syntax | Description |
|---------|--------|-------------|
| SET | `SET variable = value` or `let variable = value` | Set variable value |
| GET | `result = GET "path"` | Get variable or fetch data |
| SET BOT MEMORY | `SET BOT MEMORY "key", value` | Persist data at bot level |
| GET BOT MEMORY | `value = GET BOT MEMORY("key")` | Retrieve persisted data |
| SET USER MEMORY | `SET USER MEMORY "key", value` | Persist data at user level (cross-bot) |
| GET USER MEMORY | `value = GET USER MEMORY("key")` | Retrieve user-level data |
| SET USER FACT | `SET USER FACT "key", value` | Store fact about user |
| USER FACTS | `facts = USER FACTS()` | Get all user facts |
| REMEMBER | `REMEMBER "key", value` | Store user-specific memory |
### AI & Context
| Keyword | Syntax | Description |
|---------|--------|-------------|
| LLM | `result = LLM "prompt"` | Query language model |
| SET CONTEXT | `SET CONTEXT "name" AS "value"` | Add context for LLM |
| SET USER | `SET USER userid` | Set user context |
| USE MODEL | `USE MODEL "modelname"` | Switch LLM model (fast/quality/code/auto) |
### Multi-Agent Orchestration
| Keyword | Syntax | Description |
|---------|--------|-------------|
| ADD BOT | `ADD BOT "name" TRIGGER ON "keywords"` | Add bot with triggers |
| DELEGATE TO BOT | `result = DELEGATE "message" TO BOT "name"` | Send task to bot |
| BROADCAST TO BOTS | `BROADCAST "message" TO BOTS` | Message all bots |
| TRANSFER CONVERSATION | `TRANSFER CONVERSATION TO "botname"` | Hand off to bot |
| BOT REFLECTION | `BOT REFLECTION true` | Enable self-analysis |
| BOT REFLECTION INSIGHTS | `insights = BOT REFLECTION INSIGHTS()` | Get analysis results |
### Code Execution (Sandboxed)
| Keyword | Syntax | Description |
|---------|--------|-------------|
| RUN PYTHON | `result = RUN PYTHON "code"` | Execute Python in sandbox |
| RUN JAVASCRIPT | `result = RUN JAVASCRIPT "code"` | Execute JS in sandbox |
| RUN BASH | `result = RUN BASH "code"` | Execute Bash in sandbox |
| RUN ... WITH FILE | `result = RUN PYTHON WITH FILE "script.py"` | Run script file |
### Knowledge Base
| Keyword | Syntax | Description |
|---------|--------|-------------|
| USE KB | `USE KB "kbname"` | Load knowledge base |
| CLEAR KB | `CLEAR KB` or `CLEAR KB "kbname"` | Unload knowledge base |
| USE WEBSITE | `USE WEBSITE "url"` | Associate website with session |
| FIND | `result = FIND "file", "filter"` | Search in files or KB |
### Tools & Automation
| Keyword | Syntax | Description |
|---------|--------|-------------|
| ADD TOOL | `ADD TOOL "toolname"` | Register tool for session |
| USE TOOL | `USE TOOL "toolname"` | Load tool definition |
| CLEAR TOOLS | `CLEAR TOOLS` | Remove all registered tools |
| CREATE TASK | `CREATE TASK "title", "description"` | Create a task |
| CREATE SITE | `CREATE SITE "alias", "template", "prompt"` | Generate a website |
| CREATE DRAFT | `CREATE DRAFT "to", "subject", "body"` | Create email draft |
### UI & Interaction
| Keyword | Syntax | Description |
|---------|--------|-------------|
| ADD SUGGESTION | `ADD SUGGESTION "key" AS "display text"` | Add clickable button |
| CLEAR SUGGESTIONS | `CLEAR SUGGESTIONS` | Remove all buttons |
### Data Operations
| Keyword | Syntax | Description |
|---------|--------|-------------|
| SAVE | `SAVE "table", var1, var2, var3` | Save data (upsert) |
| INSERT | `result = INSERT "table", data` | Insert new record |
| UPDATE | `rows = UPDATE "table", "filter", data` | Update records |
| DELETE | `rows = DELETE "table", "filter"` | Delete records |
| MERGE | `result = MERGE "table", data, "key"` | Merge data into table |
| FILTER | `result = FILTER data, "condition"` | Filter records |
| AGGREGATE | `result = AGGREGATE "SUM", data, "field"` | Aggregate operations |
| JOIN | `result = JOIN left, right, "key"` | Join datasets |
| PIVOT | `result = PIVOT data, "row", "value"` | Create pivot table |
| GROUP BY | `result = GROUP BY data, "field"` | Group data |
| SYNCHRONIZE | `SYNCHRONIZE endpoint, table, key, pageVar, limitVar` | Sync API to table |
| MAP | `result = MAP data, "old->new"` | Map field names |
| FILL | `result = FILL data, template` | Fill template |
| FIRST | `result = FIRST collection` | Get first element |
| LAST | `result = LAST collection` | Get last element |
| FORMAT | `result = FORMAT value AS "pattern"` | Format strings/dates |
### File Operations
| Keyword | Syntax | Description |
|---------|--------|-------------|
| READ | `content = READ "path"` | Read file content |
| WRITE | `WRITE "path", content` | Write to file |
| DELETE FILE | `DELETE FILE "path"` | Delete a file |
| COPY | `COPY "source", "destination"` | Copy a file |
| MOVE | `MOVE "source", "destination"` | Move/rename file |
| LIST | `files = LIST "path/"` | List directory |
| UPLOAD | `url = UPLOAD file, "path"` | Upload file |
| DOWNLOAD | `path = DOWNLOAD "url", "local"` | Download file |
| COMPRESS | `archive = COMPRESS files, "name.zip"` | Create ZIP |
| EXTRACT | `files = EXTRACT "archive.zip", "dest/"` | Extract ZIP |
| GENERATE PDF | `result = GENERATE PDF "template", data, "output.pdf"` | Generate PDF |
| MERGE PDF | `result = MERGE PDF files, "merged.pdf"` | Merge PDFs |
### HTTP & API Operations
| Keyword | Syntax | Description |
|---------|--------|-------------|
| POST | `result = POST "url", data` | HTTP POST request |
| PUT | `result = PUT "url", data` | HTTP PUT request |
| PATCH | `result = PATCH "url", data` | HTTP PATCH request |
| DELETE HTTP | `result = DELETE HTTP "url"` | HTTP DELETE request |
| SET HEADER | `SET HEADER "name", "value"` | Set HTTP header |
| CLEAR HEADERS | `CLEAR HEADERS` | Clear all headers |
| GRAPHQL | `result = GRAPHQL "url", "query", vars` | GraphQL query |
| SOAP | `result = SOAP "wsdl", "operation", params` | SOAP call |
### Flow Control
| Keyword | Syntax | Description |
|---------|--------|-------------|
| IF...THEN...ELSE | `IF condition THEN ... ELSE ... END IF` | Conditional |
| FOR EACH...NEXT | `FOR EACH item IN collection ... NEXT item` | Loop |
| EXIT FOR | `EXIT FOR` | Exit loop early |
| `WHILE...WEND` | `WHILE condition ... WEND` | While loop |
| `SWITCH...CASE` | `SWITCH value CASE x ... END SWITCH` | Switch statement |
| `REPORT` | `SEND EMAIL admin, REPORT` | Access sync statistics |
| `RESET REPORT` | `RESET REPORT` | Clear sync statistics |
### Events & Scheduling
| Keyword | Syntax | Description |
|---------|--------|-------------|
| ON | `ON "event" CALL handler` | Event handler |
| SET SCHEDULE | `SET SCHEDULE "cron"` | Schedule execution |
| WEBHOOK | `WEBHOOK "endpoint"` | Create webhook |
### Communication
| Keyword | Syntax | Description |
|---------|--------|-------------|
| SEND MAIL | `SEND MAIL "to", "subject", "body"` | Send email |
| ADD MEMBER | `ADD MEMBER "email", "group"` | Add to group |
### Special Functions
| Keyword | Syntax | Description |
|---------|--------|-------------|
| BOOK | `BOOK "appointment"` | Book appointment |
| WEATHER | `weather = WEATHER "location"` | Get weather |
| INSTR | `pos = INSTR(string, search)` | Find substring |
| IS NUMERIC | `result = IS NUMERIC(value)` | Check if numeric |
| SAVE FROM UNSTRUCTURED | `data = SAVE FROM UNSTRUCTURED text, schema` | Extract structured data |
---
## Syntax Rules
### DO ✅
```basic
' Variable names (no underscores in names)
let ticketnumber = "TKT001"
let useremail = "user@example.com"
' SAVE with field names = variable names
SAVE "table.csv", ticketnumber, useremail, status
' Keywords with spaces
SET BOT MEMORY "last_ticket", ticketnumber
SET CONTEXT "name" AS "description"
ADD SUGGESTION "key" AS "Display text"
CLEAR SUGGESTIONS
USE KB "myknowledge"
USE TOOL "mytool"
' GET BOT MEMORY as function
let lastticket = GET BOT MEMORY("last_ticket")
```
### DON'T ❌
```basic
' NO: Complex object operations
SET object.field = value ' WRONG
SAVE "table", object.id, object ' WRONG
' NO: IF for input validation (use HEAR AS TYPE instead)
IF value = "" THEN ' OK for logic, but for input use:
HEAR value AS STRING ' Better - validates input type
```
---
## Prompt Blocks
Special multi-line blocks for AI configuration and formatted output:
| Block | Purpose | Documentation |
|-------|---------|---------------|
| `BEGIN SYSTEM PROMPT ... END SYSTEM PROMPT` | Define AI persona, rules, capabilities | [Prompt Blocks](./prompt-blocks.md) |
| `BEGIN TALK ... END TALK` | Formatted multi-line messages with Markdown | [Prompt Blocks](./prompt-blocks.md) |
```basic
BEGIN SYSTEM PROMPT
You are a helpful assistant for AcmeStore.
Rules:
1. Always be polite
2. Never discuss competitors
END SYSTEM PROMPT
BEGIN TALK
**Welcome!** 🎉
I can help you with:
Orders
Tracking
Returns
END TALK
```
---
## Script Structure
### No MAIN Function
Scripts execute from line 1 - no `MAIN` or entry point needed:
```basic
' ✅ CORRECT - Start directly
TALK "Hello!"
ADD TOOL "my-tool"
' ❌ WRONG - Don't use MAIN
SUB MAIN()
TALK "Hello"
END SUB
```
### SUB and FUNCTION for Reuse
Use for helper code within tools, not as entry points:
```basic
FUNCTION CalculateTotal(price, quantity)
RETURN price * quantity
END FUNCTION
SUB NotifyAdmin(message)
SEND EMAIL admin1, message
END SUB
' Execution starts here
total = CalculateTotal(19.99, 3)
CALL NotifyAdmin("Order processed")
```
See [Script Execution Flow](./script-execution-flow.md) for entry points and lifecycle.
---
## Notes
- Keywords are case-insensitive (TALK = talk = Talk)
- Variables are case-insensitive (host = HOST = Host)
- String parameters can use double quotes or single quotes
- Comments start with REM or '
- Line continuation uses underscore (_)
- Objects are created with `#{ key: value }` syntax
- Arrays use `[item1, item2, ...]` syntax
- param-* config values become global variables
---
## See Also
- [Script Execution Flow](./script-execution-flow.md) - Entry points and lifecycle
- [Prompt Blocks](./prompt-blocks.md) - BEGIN SYSTEM PROMPT & BEGIN TALK
- [Basics](./basics.md) - Core concepts
- [Examples](./examples-consolidated.md) - Real-world patterns