---
title: "Webinars Module"
module_id: "webinars"
version: "1.1.0"
category: "communication"
autonomy: "config-required"
generated: true
generated_at: "2026-05-04"
---

# Webinars

> Plan, promote, run and follow up webinars — lifecycle automation + lead-loop integration

Ships with **7 agent skills**, **2 database tables**, an **admin UI**.

## Quick Facts

| Property | Value |
|----------|-------|
| **Module ID** | `webinars` |
| **Version** | 1.1.0 |
| **Category** | communication |
| **Autonomy** | config-required |
| **Core** | No |
| **Capabilities** | `content:receive`, `data:write` |
| **MCP-exposed skills** | 7 |
| **Owns tables** | 2 |

## Integrations

**Optional:** `resend`

## Skills

These skills are seeded into `agent_skills` when the module is enabled and exposed via MCP.
External operators (FlowPilot, OpenClaw, Claude Desktop, custom MCP clients) can call them directly.

| Skill | Scope | Description |
|-------|-------|-------------|
| `manage_webinar` | internal | Manage webinars and registrations. Use when: setting up a new webinar; updating webinar details; reviewing registered attendees. NOT for: managing bookings (manage_bookings); creating events (N/A). |
| `register_webinar` | external | Register a visitor for an upcoming webinar. Auto-links to existing lead by email or creates a new lead with source=webinar (+15 score). Use when: visitor wants to sign up for a webinar. NOT for: ma… |
| `publish_webinar` | internal | Publish a draft webinar so it becomes visible and registrable. Emits webinar.published event. |
| `start_webinar` | internal | Manually flip a webinar to live status. Normally automatic via cron when date passes. |
| `complete_webinar` | internal | Close a webinar after it has run. Optionally attach the recording URL. Emits webinar.completed event. |
| `cancel_webinar` | internal | Cancel a webinar. Emits webinar.cancelled event so automations can notify registrants. |
| `mark_webinar_attendance` | internal | Flag a registration as attended (or not). Boosts lead score +10 on attended=true. Emits webinar.attended event. |

## Data Model

Tables created by this module (from migrations):

- `public.webinar_registrations`
- `public.webinars`

All tables ship with Row-Level Security policies. See migration files for the exact rules.

## File Map

| Purpose | Path |
|---------|------|
| Module definition | `src/lib/modules/webinars-module.ts` |
| Hook | `src/hooks/useWebinars.ts` |
| Admin page | `src/pages/admin/WebinarsPage.tsx` |
| Migration | `supabase/migrations/20260208173000_create_webinars.sql` |

## Contributing

To enhance this module, see [Contributing Guide](../contributing/contributing.md).

Key rules:
- Follow `ModuleDefinition<I, O>` contract pattern
- All schema changes require idempotent migrations
- Skills must be self-describing ([Law 2](../concepts/openclaw-law.md))
- Blocks are interfaces, not pipelines ([Law 3](../concepts/openclaw-law.md))
- New skills must pass the [Agent Contract Integrity](../architecture/agent-contract-integrity.md) checklist (`bun run lint:skills`)

---

*This file is auto-generated by `scripts/generate-module-docs.ts`. Do not edit manually — re-run the script after changing the module definition.*