botbook/src/06-gbdialog/keyword-play.md

315 lines
6.9 KiB
Markdown
Raw Normal View History

2025-12-03 19:56:35 -03:00
# PLAY
Open a content projector/player to display various media types including videos, images, documents, and presentations.
## Syntax
```basic
' Basic playback
PLAY file_or_url
' With options
PLAY file_or_url WITH OPTIONS options_string
```
## Parameters
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `file_or_url` | String | Yes | Path to file or URL to display |
| `options_string` | String | No | Comma-separated playback options |
## Supported Options
| Option | Description |
|--------|-------------|
| `autoplay` | Start playback automatically |
| `loop` | Loop content continuously |
| `fullscreen` | Open in fullscreen mode |
| `muted` | Start with audio muted |
| `controls` | Show playback controls |
| `nocontrols` | Hide playback controls |
## Supported Content Types
### Video
| Extension | Format |
|-----------|--------|
| `.mp4` | MPEG-4 Video |
| `.webm` | WebM Video |
| `.ogg` | Ogg Video |
| `.mov` | QuickTime |
| `.avi` | AVI Video |
| `.mkv` | Matroska |
| `.m4v` | M4V Video |
### Audio
| Extension | Format |
|-----------|--------|
| `.mp3` | MP3 Audio |
| `.wav` | WAV Audio |
| `.flac` | FLAC Audio |
| `.aac` | AAC Audio |
| `.m4a` | M4A Audio |
| `.ogg` | Ogg Audio |
### Images
| Extension | Format |
|-----------|--------|
| `.jpg` `.jpeg` | JPEG Image |
| `.png` | PNG Image |
| `.gif` | GIF (animated) |
| `.webp` | WebP Image |
| `.svg` | SVG Vector |
| `.bmp` | Bitmap |
### Documents
| Extension | Format |
|-----------|--------|
| `.pdf` | PDF Document |
| `.docx` `.doc` | Word Document |
| `.pptx` `.ppt` | PowerPoint |
| `.xlsx` `.xls` | Excel Spreadsheet |
| `.odt` | OpenDocument Text |
| `.odp` | OpenDocument Presentation |
### Code
| Extension | Language |
|-----------|----------|
| `.rs` | Rust |
| `.py` | Python |
| `.js` `.ts` | JavaScript/TypeScript |
| `.java` | Java |
| `.go` | Go |
| `.rb` | Ruby |
| `.md` | Markdown |
| `.html` | HTML |
## Examples
### Play a Video
```basic
' Play a video file
PLAY "training-video.mp4"
' Play with autoplay and loop
PLAY "background.mp4" WITH OPTIONS "autoplay,loop,muted"
' Play from URL
PLAY "https://example.com/videos/demo.mp4"
```
### Display an Image
```basic
' Show an image
PLAY "product-photo.jpg"
' Show image fullscreen
PLAY "banner.png" WITH OPTIONS "fullscreen"
```
### Show a Presentation
```basic
' Display PowerPoint presentation
PLAY "quarterly-report.pptx"
' Fullscreen presentation mode
PLAY "sales-deck.pptx" WITH OPTIONS "fullscreen"
```
### Display a Document
```basic
' Show PDF document
PLAY "contract.pdf"
' Show Word document
PLAY "proposal.docx"
```
### Interactive Training Module
```basic
TALK "Welcome to the training module!"
TALK "Let's start with an introduction video."
PLAY "intro-video.mp4" WITH OPTIONS "controls"
HEAR ready AS TEXT "Type 'continue' when you're ready to proceed:"
IF LOWER(ready) = "continue" THEN
TALK "Great! Now let's review the key concepts."
PLAY "concepts-slides.pptx"
HEAR understood AS TEXT "Did you understand the concepts? (yes/no)"
IF LOWER(understood) = "yes" THEN
TALK "Excellent! Here's your certificate."
PLAY "certificate.pdf"
ELSE
TALK "Let's review the material again."
PLAY "concepts-detailed.mp4"
END IF
END IF
```
### Product Showcase
```basic
' Show product images in sequence
products = FIND "products", "featured=true"
FOR EACH product IN products
TALK "Now showing: " + product.name
PLAY product.image_path
WAIT 3000 ' Wait 3 seconds between images
NEXT
```
### Code Review
```basic
' Display code for review
TALK "Let's review the implementation:"
PLAY "src/main.rs"
HEAR feedback AS TEXT "Any comments on this code?"
INSERT "code_reviews", file_path, feedback, NOW()
```
### Audio Playback
```basic
' Play audio message
TALK "Here's a voice message from your team:"
PLAY "team-message.mp3" WITH OPTIONS "controls"
' Play background music
PLAY "ambient.mp3" WITH OPTIONS "autoplay,loop,muted"
```
### Dynamic Content Display
```basic
' Display content based on file type
HEAR file_name AS TEXT "Enter the file name to display:"
file_ext = LOWER(RIGHT(file_name, 4))
IF file_ext = ".mp4" OR file_ext = "webm" THEN
PLAY file_name WITH OPTIONS "controls,autoplay"
ELSE IF file_ext = ".pdf" THEN
PLAY file_name
ELSE IF file_ext = ".jpg" OR file_ext = ".png" THEN
PLAY file_name WITH OPTIONS "fullscreen"
ELSE
TALK "Unsupported file type"
END IF
```
### Embedded Video from URL
```basic
' Play YouTube video (via embed URL)
PLAY "https://www.youtube.com/embed/dQw4w9WgXcQ"
' Play Vimeo video
PLAY "https://player.vimeo.com/video/123456789"
```
### Onboarding Flow
```basic
' Multi-step onboarding with media
TALK "Welcome to our platform! Let's get you started."
' Step 1: Welcome video
TALK "First, watch this quick introduction:"
PLAY "onboarding/welcome.mp4" WITH OPTIONS "controls"
HEAR step1_done AS TEXT "Press Enter when done..."
' Step 2: Feature overview
TALK "Here's an overview of our key features:"
PLAY "onboarding/features.pptx"
HEAR step2_done AS TEXT "Press Enter when done..."
' Step 3: Quick start guide
TALK "Finally, here's your quick start guide:"
PLAY "onboarding/quickstart.pdf"
TALK "You're all set! 🎉"
```
### Error Handling
```basic
' Check if file exists before playing
file_path = "presentation.pptx"
IF FILE_EXISTS(file_path) THEN
PLAY file_path
ELSE
TALK "Sorry, the file could not be found."
TALK "Please check the file path and try again."
END IF
```
## Player Behavior
### Web Interface
When used in the web interface, PLAY opens a modal overlay with:
- Appropriate player for the content type
- Close button to dismiss
- Optional playback controls
- Fullscreen toggle
### WhatsApp/Messaging Channels
On messaging channels, PLAY sends the file directly:
- Videos/images: Sent as media messages
- Documents: Sent as file attachments
- URLs: Sent as links with preview
### Desktop Application
In the desktop app, PLAY uses the native media player or viewer appropriate for the content type.
## File Locations
Files can be referenced from:
| Location | Example |
|----------|---------|
| Bot's .gbdrive | `documents/report.pdf` |
| User's folder | `users/john@email.com/uploads/photo.jpg` |
| Absolute URL | `https://cdn.example.com/video.mp4` |
| Relative path | `./assets/logo.png` |
## Limitations
- Maximum file size depends on channel (WhatsApp: 16MB for media, 100MB for documents)
- Some formats may require conversion for web playback
- Streaming large files requires adequate bandwidth
- Protected/DRM content is not supported
## See Also
- [SEND FILE](./keyword-send-mail.md) - Send files as attachments
- [TALK](./keyword-talk.md) - Display text messages
- [UPLOAD](./keyword-upload.md) - Upload files to storage
- [DOWNLOAD](./keyword-download.md) - Download files from URLs
## Implementation
The PLAY keyword is implemented in `src/basic/keywords/play.rs` with content type detection and appropriate player selection for each media format.