Skip to main content
scheduling_embed renders your Calendly booking page inside the conversation. The user books a slot in the real widget, and the confirmed booking is reported to the PAL and delivered to your webhook as a canvas.interaction event. See Enabling and configuring components for skill attachment and general component settings.

Configuration

Attaching the skill alone does not activate scheduling_embed. It stays inactive (no action is compiled, no error) until a valid scheduling_url is saved in the skill config.
scheduling_url is validated on save: it must start with https://, be at most 2048 characters, and not point at localhost, cloud metadata hostnames, or private, loopback, link-local, or reserved IPs. No DNS resolution is performed, so other non-public hostnames can pass. The renderer also requires a calendly.com or *.calendly.com host; otherwise the card renders a “Scheduling not configured” panel.

Arguments

The PAL invokes canvas_show_scheduling_embed when the user should book a meeting and a scheduling link is configured. The booking link itself is never an argument.
scheduling_embed renders inline in a side rail (default safe-area-right); placement is handled client-side.
There is no url, link, or scheduling_url argument. The link comes from your PAL config, delivered directly to the sandboxed renderer, bypassing the model entirely.

Interactions

The built-in card emits exactly one interaction type: submit, sent when the user completes a booking. There is no close control, so closing the card without booking produces no interaction. Renderer failures surface as an in-card “Scheduling unavailable” panel, not as webhooks.
The interactions API also accepts skip, dismiss, clear, error, and heartbeat for this component, for custom clients that post their own interactions; these are not shape-validated by Tavus.

submit

The value object accepts only these keys: Example webhook for a completed booking:
created_at is a naive ISO-8601 timestamp with microsecond precision and no timezone suffix. The canvas.interaction webhook follows the interaction delivery guarantees. Fetch the full history at any time, except on Zero Data Retention conversations, which record no interactions:

When to Use

Use scheduling_embed when booking a meeting is a goal of the conversation. The user books in your real Calendly page, so availability, routing, and confirmation emails work as they do on your website. For a date or time preference without a real booking, use calendar instead.