code: def send_notification(*, subsystem, recipients, subject, body_html, body_text):
      
      from cloud_inquisitor import CINQ_PLUGINS
  
      if not body_html and not body_text:
          raise ValueError('body_html or body_text must be provided')
  
      # Make sure that we don't have any duplicate recipients
      recipients = list(set(recipients))
  
      notifiers = map(lambda plugin: plugin.load(), CINQ_PLUGINS['cloud_inquisitor.plugins.notifiers']['plugins'])
  
      for cls in filter(lambda x: x.enabled(), notifiers):
          for recipient in recipients:
              if isinstance(recipient, NotificationContact):
                  if recipient.type == cls.notifier_type:
                      try:
                          notifier = cls()
                          notifier.notify(subsystem, recipient.value, subject, body_html, body_text)
                      except Exception:
                          log.exception('Failed sending notification for {}/{}'.format(
                              recipient.type,
                              recipient.value
                          ))
              else:
                  log.warning('Unexpected recipient {}'.format(recipient))
docs: Method to send a notification. A plugin may use only part of the information, but all fields are required.
  
      Args:
          subsystem (`str`): Name of the subsystem originating the notification
          recipients (`list` of :obj:`NotificationContact`): List of recipients
          subject (`str`): Subject / title of the notification
          body_html (`str)`: HTML formatted version of the message
          body_text (`str`): Text formatted version of the message
  
      Returns:
          `None`