generalbots/botbook/src/04-basic-scripting/keyword-start-meet.md
Rodrigo Rodriguez (Pragmatismo) 037db5c381 feat: Major workspace reorganization and documentation update
- Add comprehensive documentation in botbook/ with 12 chapters
- Add botapp/ Tauri desktop application
- Add botdevice/ IoT device support
- Add botlib/ shared library crate
- Add botmodels/ Python ML models service
- Add botplugin/ browser extension
- Add botserver/ reorganized server code
- Add bottemplates/ bot templates
- Add bottest/ integration tests
- Add botui/ web UI server
- Add CI/CD workflows in .forgejo/workflows/
- Add AGENTS.md and PROD.md documentation
- Add dependency management scripts (DEPENDENCIES.sh/ps1)
- Remove legacy src/ structure and migrations
- Clean up temporary and backup files
2026-04-19 08:14:25 -03:00

9 KiB

START MEET / JOIN MEET Keywords

The START MEET and JOIN MEET keywords enable bots to create and participate in video meetings, bringing AI capabilities directly into video conferencing.

Keywords

Keyword Purpose
START MEET Create a new meeting room and get join link
JOIN MEET Add the bot to an existing meeting
LEAVE MEET Remove the bot from a meeting
INVITE TO MEET Send meeting invitations to participants

START MEET

Creates a new video meeting room and optionally adds the bot as a participant.

Syntax

room = START MEET "room-name"
room = START MEET "room-name" WITH BOT
room = START MEET "room-name" WITH OPTIONS options

Parameters

Parameter Type Description
room-name String Display name for the meeting room
WITH BOT Flag Automatically add the bot to the meeting
options JSON Meeting configuration options

Options Object

' Options can be set as a JSON string
options = '{"recording": true, "transcription": true, "max_participants": 50}'

Example

' Create a simple meeting
room = START MEET "Team Sync"
TALK "Meeting created! Join here: " + room.url

' Create meeting with bot participant
room = START MEET "AI-Assisted Workshop" WITH BOT
TALK "I've joined the meeting and I'm ready to help!"
TALK "Join link: " + room.url

' Create meeting with full options
options = '{"recording": true, "transcription": true, "bot_persona": "note-taker"}'
room = START MEET "Project Review" WITH OPTIONS options

Return Value

Returns a room object with:

Property Description
room.id Unique room identifier
room.url Join URL for participants
room.name Room display name
room.created Creation timestamp
room.host_token Host access token

JOIN MEET

Adds the bot to an existing meeting room.

Syntax

JOIN MEET room_id
JOIN MEET room_id AS "persona"
JOIN MEET room_url

Parameters

Parameter Type Description
room_id String Meeting room ID
room_url String Meeting join URL
persona String Bot's display name in the meeting

Example

' Join by room ID
JOIN MEET "room-abc123"

' Join with custom persona
JOIN MEET "room-abc123" AS "Meeting Assistant"

' Join by URL
JOIN MEET "https://meet.gb/abc-123"

' Join and announce
JOIN MEET meeting_room AS "AI Note Taker"
TALK TO MEET "Hello everyone! I'm here to take notes. Just say 'note that' followed by anything important."

LEAVE MEET

Removes the bot from the current meeting.

Syntax

LEAVE MEET
LEAVE MEET room_id

Example

' Leave current meeting
LEAVE MEET

' Leave specific meeting (when bot is in multiple)
LEAVE MEET "room-abc123"

' Graceful exit
TALK TO MEET "Thanks everyone! I'll send the meeting notes shortly."
WAIT 2
LEAVE MEET

INVITE TO MEET

Sends meeting invitations to participants.

Syntax

INVITE TO MEET room, participants
INVITE TO MEET room, participants, message

Parameters

Parameter Type Description
room Object/String Room object or room ID
participants Array List of email addresses
message String Optional custom invitation message

Example

' Create room and invite team
room = START MEET "Sprint Planning" WITH BOT
participants = ["alice@company.com", "bob@company.com", "carol@company.com"]
INVITE TO MEET room, participants

TALK "Invitations sent to " + LEN(participants) + " participants"

' With custom message
INVITE TO MEET room, participants, "Join us for sprint planning! The AI assistant will be taking notes."

TALK TO MEET

Sends a message to all meeting participants (text-to-speech or chat).

Syntax

TALK TO MEET "message"
TALK TO MEET "message" AS CHAT
TALK TO MEET "message" AS VOICE

Example

' Send as both chat and voice (default)
TALK TO MEET "Let's start with the agenda review."

' Chat only (no voice)
TALK TO MEET "Here's the link to the document: https://..." AS CHAT

' Voice only (no chat message)
TALK TO MEET "I've noted that action item." AS VOICE

HEAR FROM MEET

Listens for speech or chat messages from meeting participants.

Syntax

HEAR FROM MEET INTO variable
HEAR FROM MEET INTO variable TIMEOUT seconds

Example

' Listen for meeting input
HEAR FROM MEET INTO participant_message

IF INSTR(participant_message, "note that") > 0 THEN
    note = REPLACE(participant_message, "note that", "")
    notes = notes + "\n- " + note
    TALK TO MEET "Got it! I've noted: " + note
END IF

Complete Example: AI Meeting Assistant

' AI Meeting Assistant Bot
' Joins meetings, takes notes, and provides summaries

TALK "Would you like me to join your meeting? Share the room ID or say 'create new'."
HEAR user_input

IF user_input = "create new" THEN
    TALK "What should we call this meeting?"
    HEAR meeting_name
    
    room = START MEET meeting_name WITH BOT
    TALK "Meeting created! Share this link: " + room.url
    
    TALK "Who should I invite? (comma-separated emails, or 'skip')"
    HEAR invites
    
    IF invites <> "skip" THEN
        participants = SPLIT(invites, ",")
        INVITE TO MEET room, participants
        TALK "Invitations sent!"
    END IF
ELSE
    room_id = user_input
    JOIN MEET room_id AS "AI Assistant"
    TALK "I've joined the meeting!"
END IF

' Initialize notes
notes = "# Meeting Notes\n\n"
notes = notes + "**Date:** " + FORMAT(NOW(), "YYYY-MM-DD HH:mm") + "\n\n"
notes = notes + "## Key Points\n\n"

TALK TO MEET "Hello! I'm your AI assistant. Say 'note that' to capture important points, or 'summarize' when you're done."

' Meeting loop
meeting_active = true

WHILE meeting_active
    HEAR FROM MEET INTO message TIMEOUT 300
    
    IF message = "" THEN
        ' Timeout - check if meeting still active
        CONTINUE
    END IF
    
    ' Process commands
    IF INSTR(LOWER(message), "note that") > 0 THEN
        note_content = REPLACE(LOWER(message), "note that", "")
        notes = notes + "- " + TRIM(note_content) + "\n"
        TALK TO MEET "Noted!" AS VOICE
        
    ELSE IF INSTR(LOWER(message), "action item") > 0 THEN
        action = REPLACE(LOWER(message), "action item", "")
        notes = notes + "- **ACTION:** " + TRIM(action) + "\n"
        TALK TO MEET "Action item recorded!" AS VOICE
        
    ELSE IF INSTR(LOWER(message), "summarize") > 0 THEN
        ' Generate AI summary
        summary = LLM "Summarize these meeting notes concisely:\n\n" + notes
        TALK TO MEET "Here's the summary: " + summary
        
    ELSE IF INSTR(LOWER(message), "end meeting") > 0 THEN
        meeting_active = false
    END IF
WEND

' Save and share notes
filename = "meeting-notes-" + FORMAT(NOW(), "YYYYMMDD-HHmm") + ".md"
SAVE notes TO filename

TALK TO MEET "Meeting ended. I'll send the notes to all participants."
LEAVE MEET

' Email notes to participants
SEND MAIL participants, "Meeting Notes: " + meeting_name, notes
TALK "Notes saved and sent to all participants!"

Example: Quick Standup Bot

' Daily Standup Bot
room = START MEET "Daily Standup" WITH BOT

team = ["dev1@company.com", "dev2@company.com", "dev3@company.com"]
INVITE TO MEET room, team, "Time for standup! Join now."

TALK TO MEET "Good morning team! Let's do a quick round. I'll call on each person."

updates = ""

FOR EACH member IN team
    TALK TO MEET member + ", what did you work on yesterday and what's planned for today?"
    HEAR FROM MEET INTO update TIMEOUT 120
    updates = updates + "**" + member + ":** " + update + "\n\n"
NEXT

TALK TO MEET "Great standup everyone! I'll post the summary to Slack."

' Post to Slack
POST "https://slack.com/api/chat.postMessage" WITH
    channel = "#dev-standup",
    text = "📋 **Standup Summary**\n\n" + updates

LEAVE MEET

Configuration

Configure Meet integration in config.csv:

name,value
meet-provider,livekit
meet-server-url,wss://localhost:7880
meet-api-key,vault:gbo/meet/api_key
meet-api-secret,vault:gbo/meet/api_secret
meet-bot-default-persona,AI Assistant
meet-recording-enabled,true
meet-transcription-enabled,true
meet-max-participants,50

Bot Capabilities in Meetings

When a bot joins a meeting, it can:

Capability Description
Listen Transcribe speech from participants
Speak Text-to-speech announcements
Chat Send text messages to meeting chat
Record Capture meeting recording
Screen Share Display content (dashboards, docs)
React Send emoji reactions

See Also