The concept of bundles is split into two parts within CloudBilling.

Bundle Types

A bundle type is a generic representation of a bundle. It specifies which products can fit into the bundle and what the associated prices and costs are for those products (both inBundle and outOfBundle rates). Furthermore, it is possible to specify whether the bundle should allow fraction values for a specific product, and the relative importance of the bundle, i.e., the sequence of when it should be considered.

For instance, you could have a Voice/SMS Bundle. This bundle would admit two products: national voice (national phone calls) and national SMS (national text messages). The former allows fractional amounts, where the latter does not (half an SMS makes no sense). If you were to also offer SMS-only bundles, you could make that of greater relative importance so that it will always be considered first. In practice, this will mean that a customer that has one of each will get his SMS's allocated to the second bundle, and voice to the first.

Customer Bundles

An actual customer bundle is a specific instance of a Bundle Type, for a particular Customer. When a customer purchases a bundle (indicated by certain bundle properties on a purchase), a Customer Bundle is recorded with some specific properties.

Consider the SMS example discussed above: a specific instance of such a bundle would have the following additional properties:

  • Size: how many SMS's can fit in the bundle
  • Recurrence: is this a monthly bundle, daily, etc...
  • Validity: from when until when is this bundle valid (how long does the customer's contract run for)

This actual bundle purchase is what is used in pricing rules. In staying with the example, if a customer has a purchase for an SMS, the Bundle rule on the SMS product will check if:

  1. The customer has a bundle that admits SMS as a product type
  2. There is still room in the bundle (current usage + purchased quantity < bundle size)

Then, depending on whether or not the usage fits in the bundle, either the specified inBundle rate is applied or the outOfBundle rate is applied.

Learn more...