Awesome-omni-skill digital-samba
Build video conferencing integrations using Digital Samba's API and SDK. Use when creating meeting rooms, embedding video calls, generating participant tokens, managing recordings, or integrating real-time collaboration features. Triggers include "Digital Samba", "video conferencing API", "embed video calls", "meeting room integration", "WebRTC iframe", "participant tokens".
git clone https://github.com/diegosouzapw/awesome-omni-skill
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/development/digital-samba" ~/.claude/skills/diegosouzapw-awesome-omni-skill-digital-samba && rm -rf "$T"
skills/development/digital-samba/SKILL.mdDigital Samba Integration
Build video conferencing into your applications using Digital Samba's prebuilt infrastructure. No WebRTC/Janus/TURN setup required.
Two Integration Approaches
- REST API - Server-side room/session/participant management
- Embedded SDK - Client-side iframe control and event handling
Quick Start
1. Create a Room (Server-side)
curl -X POST https://api.digitalsamba.com/api/v1/rooms \ -H "Authorization: Bearer {DEVELOPER_KEY}" \ -H "Content-Type: application/json" \ -d '{"friendly_url": "my-meeting", "privacy": "public"}'
2. Generate Access Token (Server-side)
const jwt = require('jsonwebtoken'); const token = jwt.sign({ td: "team-uuid", // Your team ID rd: "room-uuid", // Room ID from step 1 u: "John Doe", // User display name role: "moderator" // Optional: user role }, DEVELOPER_KEY, { algorithm: 'HS256' });
3. Embed the Room (Client-side)
Option A: Plain iframe — simplest, no SDK needed:
<iframe id="video-frame" allow="camera; microphone; display-capture; autoplay;" src="https://yourteam.digitalsamba.com/my-meeting?token={jwt}" style="width: 100%; height: 100vh; border: none;" allowfullscreen="true"> </iframe>
Option B: SDK creates the iframe — lets you add event listeners before loading:
import DigitalSambaEmbedded from '@digitalsamba/embedded-sdk'; // SDK injects an iframe into this container element const sambaFrame = DigitalSambaEmbedded.createControl({ url: 'https://yourteam.digitalsamba.com/my-meeting?token={jwt}', root: document.getElementById('video-container') // Container div, not an iframe }); // Set up events before the iframe loads sambaFrame.on('userJoined', (e) => console.log(`${e.data.name} joined`)); sambaFrame.on('connectionFailure', (e) => console.error('Failed:', e.data)); sambaFrame.load(); // Now create and load the iframe
Option C: SDK wraps an existing iframe — control an iframe you already placed in HTML:
import DigitalSambaEmbedded from '@digitalsamba/embedded-sdk'; // Wrap the iframe from Option A to add SDK control const sambaFrame = DigitalSambaEmbedded.createControl({ frame: document.getElementById('video-frame') // Existing iframe element }); sambaFrame.on('userJoined', (e) => console.log(`${e.data.name} joined`));
Important: The SDK iframe container must have explicit CSS dimensions (width + height). The iframe does not auto-size. See Iframe Sizing in patterns.md.
When to Use What
| Need | Use |
|---|---|
| Create/delete rooms | REST API |
| User authentication | JWT tokens |
| Embed video UI | iframe + SDK |
| Start/stop recording | REST API or SDK |
| React to events | SDK events |
| Manage participants | REST API |
| Customize UI | Room settings API |
Pre-Built Integration Patterns
The skill includes ready-to-use code patterns for common use cases. Ask your AI assistant for a pattern by describing your use case (e.g., "build a virtual classroom", "add video to my booking system", "set up a webinar page").
| Pattern | Best For | Key Features |
|---|---|---|
| Simple Public Room | Quick demos, open meetings | Minimal setup, public access, no auth required |
| Authenticated Users | SaaS integrations, known users | JWT tokens, role-based access, error handling |
| SDK-Controlled Room | Custom UIs, programmatic control | Event handling, mute/unmute, custom buttons |
| Scheduled Meetings | Calendar integrations, booking systems | Time constraints, invite tokens, email invites |
| Webinar Mode | One-to-many broadcasts | Presenter/attendee roles, Q&A, raise hand |
| Recording & Playback | Content archiving, compliance | Start/stop recording, download, playback |
| Online Learning Platform | LMS, virtual classrooms, tutoring | Instructor/student roles, attendance tracking, lesson recordings, per-course rooms |
| Playwright E2E Testing | Automated testing, CI/CD | Iframe testing, SDK events, demo recordings |
Each pattern includes complete server-side and client-side code. See patterns.md for full implementations.
Reference Documentation
For detailed information, see these reference files:
- api-reference.md - Complete REST API endpoints
- sdk-reference.md - SDK methods, events, properties
- patterns.md - Pre-built integration patterns with full code examples
- jwt-tokens.md - Authentication deep-dive
Key Concepts
Room Types
- Public: Anyone with URL can join (enters name on join screen)
- Private: Requires JWT token to join
Roles & Permissions
Assign roles via JWT
role field. Common roles:
- Full control (mute others, recording, etc.)moderator
- Can present and speakspeaker
- View/listen only (configurable)attendee
Authentication Flow
- Developer key → Server-side API calls only (find it in Dashboard → Team Settings → Developer)
- JWT tokens → Client-side room access (signed with the developer key using HS256)
- Never expose developer key to browsers — use it only on your server
Common Errors
API Errors
| Code | Meaning | Solution |
|---|---|---|
| 401 | Invalid/missing key | Check Authorization header |
| 403 | Insufficient permissions | Verify role/permissions |
| 404 | Room not found | Check room UUID/URL |
| 422 | Validation error | Check request body; see field for per-field details |
| 429 | Rate limited | Back off and retry with exponential delay |
SDK / Client Errors
| Issue | Cause | Solution |
|---|---|---|
| SDK won't load | Not a secure context | Serve over HTTPS (localhost exempt) — check |
event | Invalid room URL, network error, or room deleted | Verify room exists and URL is correct |
event | Runtime error (e.g., media permission denied) | Check and for details |
| iframe blank / no video | Missing attribute | Add to iframe |
For detailed troubleshooting steps, diagnostic code examples, and API error breakdowns, see the Troubleshooting & Diagnostics section in patterns.md.
Check for Updates
To check if your installed skill is up to date:
- Local version:
cat .claude/skills/digital-samba/VERSION - Latest version:
curl -s https://api.github.com/repos/digitalsamba/digital-samba-skill/releases/latest | grep '"tag_name"'
To update (submodule install):
git submodule update --remote .claude/skills/digital-samba
To update (manual install): Re-clone and copy skill files from https://github.com/digitalsamba/digital-samba-skill
Resources
- API Reference: https://developer.digitalsamba.com/rest-api/
- SDK NPM: https://www.npmjs.com/package/@digitalsamba/embedded-sdk
- Dashboard: https://dashboard.digitalsamba.com
- Skill Releases: https://github.com/digitalsamba/digital-samba-skill/releases