381 lines
9 KiB
Markdown
381 lines
9 KiB
Markdown
|
|
# 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
|
||
|
|
|
||
|
|
```basic
|
||
|
|
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
|
||
|
|
|
||
|
|
```basic
|
||
|
|
' Options can be set as a JSON string
|
||
|
|
options = '{"recording": true, "transcription": true, "max_participants": 50}'
|
||
|
|
```
|
||
|
|
|
||
|
|
### Example
|
||
|
|
|
||
|
|
```basic
|
||
|
|
' 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
|
||
|
|
|
||
|
|
```basic
|
||
|
|
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
|
||
|
|
|
||
|
|
```basic
|
||
|
|
' 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
|
||
|
|
|
||
|
|
```basic
|
||
|
|
LEAVE MEET
|
||
|
|
LEAVE MEET room_id
|
||
|
|
```
|
||
|
|
|
||
|
|
### Example
|
||
|
|
|
||
|
|
```basic
|
||
|
|
' 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
|
||
|
|
|
||
|
|
```basic
|
||
|
|
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
|
||
|
|
|
||
|
|
```basic
|
||
|
|
' 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
|
||
|
|
|
||
|
|
```basic
|
||
|
|
TALK TO MEET "message"
|
||
|
|
TALK TO MEET "message" AS CHAT
|
||
|
|
TALK TO MEET "message" AS VOICE
|
||
|
|
```
|
||
|
|
|
||
|
|
### Example
|
||
|
|
|
||
|
|
```basic
|
||
|
|
' 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
|
||
|
|
|
||
|
|
```basic
|
||
|
|
HEAR FROM MEET INTO variable
|
||
|
|
HEAR FROM MEET INTO variable TIMEOUT seconds
|
||
|
|
```
|
||
|
|
|
||
|
|
### Example
|
||
|
|
|
||
|
|
```basic
|
||
|
|
' 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
|
||
|
|
|
||
|
|
```basic
|
||
|
|
' 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
|
||
|
|
|
||
|
|
```basic
|
||
|
|
' 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`:
|
||
|
|
|
||
|
|
```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
|
||
|
|
|
||
|
|
- [Meet App](../07-user-interface/apps/meet.md) - User interface for Meet
|
||
|
|
- [BOOK_MEETING](./keyword-book.md) - Schedule meetings with calendar integration
|
||
|
|
- [Calls API](../08-rest-api-tools/calls-api.md) - API reference for video calls
|
||
|
|
- [Multi-Agent Keywords](./keywords-multi-agent.md) - Bot collaboration features
|