# HEAR Keyword The `HEAR` keyword pauses script execution and waits for user input. With optional type validation, it automatically verifies and normalizes input, retrying with helpful error messages when validation fails. General Bots ## Basic Syntax ```basic HEAR variable_name HEAR variable_name AS TYPE HEAR variable_name AS "Option1", "Option2", "Option3" ``` The simplest form accepts any input. Adding `AS TYPE` enables automatic validation with user-friendly retry prompts. ## Simple HEAR ```basic TALK "What would you like to know?" HEAR question TALK "You asked: " + question ``` The script waits for any user message and stores it in the variable. ## Validated Input Types When using `HEAR AS `, the system validates input automatically, retries up to 3 times with helpful messages, and returns normalized values. ### Text Types **EMAIL** validates email format and normalizes to lowercase: ```basic TALK "What's your email address?" HEAR email AS EMAIL TALK "We'll send confirmation to: " + email ``` Accepts: `User@Example.COM` → Returns: `user@example.com` **NAME** validates name format with proper capitalization: ```basic TALK "What's your full name?" HEAR name AS NAME ``` Accepts letters, spaces, hyphens, apostrophes. Auto-capitalizes: `john doe` → `John Doe` **URL** validates and normalizes URLs: ```basic TALK "Enter your website:" HEAR website AS URL ``` Auto-adds `https://` if protocol missing. **PASSWORD** validates minimum strength: ```basic TALK "Create a password (minimum 8 characters):" HEAR password AS PASSWORD ``` Requires 8+ characters. Never echoes the actual password back. **COLOR** accepts color names or hex values: ```basic HEAR color AS COLOR ``` Accepts: `red`, `#FF0000`, `rgb(255, 0, 0)` → Returns: `#FF0000` ### Numeric Types **INTEGER** validates whole numbers: ```basic TALK "How many items?" HEAR quantity AS INTEGER ``` Removes formatting (commas, spaces). Returns numeric value. **FLOAT** / **DECIMAL** validates decimal numbers: ```basic TALK "Enter the temperature:" HEAR temperature AS FLOAT ``` Handles both `.` and `,` as decimal separators. **MONEY** / **CURRENCY** / **AMOUNT** validates monetary values: ```basic TALK "How much to transfer?" HEAR amount AS MONEY ``` Accepts: `100`, `1,234.56`, `R$ 100,00`, `$100.00` → Returns: `1234.56` **CREDITCARD** / **CARD** validates card numbers with Luhn algorithm: ```basic TALK "Enter your card number:" HEAR card AS CREDITCARD ``` Returns masked format: `4111 **** **** 1111` ### Date and Time Types **DATE** validates and parses dates: ```basic TALK "When is your birthday?" HEAR birthday AS DATE ``` Accepts: `25/12/2024`, `12/25/2024`, `2024-12-25`, `December 25, 2024`, `today`, `tomorrow`, `hoje`, `amanhã` Returns: ISO format `YYYY-MM-DD` **HOUR** / **TIME** validates time input: ```basic TALK "What time for the meeting?" HEAR meeting_time AS HOUR ``` Accepts: `14:30`, `2:30 PM` → Returns: `14:30` ### Brazilian Document Types **CPF** validates Brazilian individual taxpayer ID: ```basic TALK "Enter your CPF:" HEAR cpf AS CPF ``` Validates 11 digits with mod 11 check. Returns: `123.456.789-09` **CNPJ** validates Brazilian company taxpayer ID: ```basic TALK "Enter your company's CNPJ:" HEAR cnpj AS CNPJ ``` Validates 14 digits. Returns: `12.345.678/0001-95` ### Contact Types **MOBILE** / **PHONE** validates phone numbers: ```basic TALK "What's your phone number?" HEAR phone AS MOBILE ``` Accepts 10-15 digits, auto-formats based on detected country. **ZIPCODE** / **CEP** / **POSTALCODE** validates postal codes: ```basic HEAR cep AS ZIPCODE ``` Supports Brazilian CEP, US ZIP, UK postcode formats. ### Menu Selection Provide options directly in the HEAR statement: ```basic TALK "Choose your fruit:" HEAR fruit AS "Apple", "Banana", "Orange", "Mango" ``` Accepts exact match, case-insensitive match, numeric selection (`1`, `2`, `3`), or partial match if unique. **BOOLEAN** validates yes/no responses: ```basic TALK "Do you agree to the terms?" HEAR agreed AS BOOLEAN IF agreed THEN TALK "Thank you!" END IF ``` True: `yes`, `y`, `sim`, `ok`, `sure`, `confirm` False: `no`, `n`, `não`, `cancel`, `deny` **LANGUAGE** validates language codes: ```basic HEAR language AS LANGUAGE ``` Accepts: `en`, `pt`, `English`, `Português` → Returns: ISO 639-1 code ### Media Types **IMAGE** / **PHOTO** waits for image upload: ```basic TALK "Send a photo of your document:" HEAR document_photo AS IMAGE ``` Returns URL to uploaded image. **QRCODE** waits for image and decodes QR: ```basic TALK "Send me the QR code:" HEAR qr_data AS QRCODE ``` Uses vision API to decode. Returns decoded data. **AUDIO** / **VOICE** transcribes audio input: ```basic TALK "Send a voice message:" HEAR transcription AS AUDIO ``` Uses Whisper for transcription. Returns text. **VIDEO** analyzes video content: ```basic TALK "Send a video of the issue:" HEAR video_description AS VIDEO ``` Uses vision API to describe. Returns description. **FILE** / **DOCUMENT** waits for file upload: ```basic TALK "Upload your contract:" HEAR contract AS DOCUMENT ``` Accepts PDF, DOC, DOCX, XLS, XLSX, PPT, PPTX, TXT, CSV. Returns URL. ### Authentication **LOGIN** waits for OAuth completion: ```basic TALK "Click the link to authenticate:" HEAR user AS LOGIN ``` Returns user object with tokens after OAuth callback. ## Complete Examples ### Registration Flow ```basic TALK "Let's create your account!" TALK "What's your full name?" HEAR name AS NAME TALK "Enter your email address:" HEAR email AS EMAIL TALK "Enter your CPF:" HEAR cpf AS CPF TALK "What's your phone number?" HEAR phone AS MOBILE TALK "Choose a password:" HEAR password AS PASSWORD TALK "What's your birth date?" HEAR birthdate AS DATE TALK "Select your gender:" HEAR gender AS "Male", "Female", "Other", "Prefer not to say" SAVE "users.csv", name, email, cpf, phone, birthdate, gender, NOW() TALK "Account created for " + name + "!" ``` ### Payment Flow ```basic TALK "Enter the amount:" HEAR amount AS MONEY IF amount < 1 THEN TALK "Minimum payment is R$ 1.00" RETURN END IF TALK "How would you like to pay?" HEAR method AS "Credit Card", "Debit Card", "PIX", "Boleto" TALK "Confirm payment of R$ " + FORMAT(amount, "#,##0.00") + "?" HEAR confirm AS BOOLEAN IF confirm THEN TALK "Processing payment..." ELSE TALK "Payment cancelled." END IF ``` ## Validation Behavior When validation fails, the system automatically prompts for correction: ``` User: my email Bot: Please enter a valid email address (e.g., user@example.com) User: test@example.com Bot: Email confirmed! ``` After 3 failed attempts, execution continues with an empty value. Check for this: ```basic HEAR email AS EMAIL IF email = "" THEN TALK "Unable to validate email. Please contact support." RETURN END IF ``` ## Best Practices **Always use appropriate types** — automatic validation is safer than manual checking: ```basic ' Good HEAR email AS EMAIL ' Avoid HEAR email IF NOT email CONTAINS "@" THEN ... ``` **Provide context before HEAR** — users should know what to enter: ```basic TALK "Enter the transfer amount (minimum R$ 1.00):" HEAR amount AS MONEY ``` **Use menus for limited options**: ```basic HEAR method AS "Credit Card", "Debit Card", "PIX" ``` **Combine with SET CONTEXT** for AI-enhanced input handling: ```basic SET CONTEXT "You are a banking assistant. Confirm amounts before processing." HEAR amount AS MONEY ``` ## Validation Summary | Type | Example Input | Normalized Output | |------|---------------|-------------------| | EMAIL | `User@Example.COM` | `user@example.com` | | NAME | `john DOE` | `John Doe` | | INTEGER | `1,234` | `1234` | | MONEY | `R$ 1.234,56` | `1234.56` | | DATE | `25/12/2024` | `2024-12-25` | | HOUR | `2:30 PM` | `14:30` | | BOOLEAN | `yes` / `sim` | `true` | | CPF | `12345678909` | `123.456.789-09` | | MOBILE | `11999998888` | `(11) 99999-8888` | | CREDITCARD | `4111111111111111` | `4111 **** **** 1111` | | QRCODE | [image] | decoded data | | AUDIO | [audio file] | transcribed text | ## See Also - [TALK Keyword](./keyword-talk.md) - Output messages - [Dialog Basics](./basics.md) - Conversation patterns - [Template Variables](./template-variables.md) - Variable substitution