custom() to send structured, platform-specific payloads. Reach for this when the receiving provider supports rich content types that don’t fit into the built-in builders.
send action. The provider decides how to interpret it.
If you need a reusable provider-specific abstraction, wrap custom() in your own helper so call sites still read like product-level actions.