Use custom content when a platform exposes a shape that does not map cleanly to text, attachments, or the standard builders.

WhatsApp Business escape hatch

Pass a fully-formed Cloud API interactive object when you need a menu the typed builders do not cover:
import { wa } from "skyline-ts";

await space.send(
  wa.interactive({
    type: "list",
    body: { text: "Choose a department" },
    action: {
      button: "View options",
      sections: [
        {
          title: "Support",
          rows: [{ id: "billing", title: "Billing" }],
        },
      ],
    },
  })
);

Custom providers

When you build a provider with definePlatform, you control the inbound MessageContent union for your interface. Keep custom variants behind a type discriminator so your agent can narrow safely — see Platform narrowing.