code: func (c *Client) TriggerBatch(batch []Event) (*BufferedEvents, error) {
  	hasEncryptedChannel := false
  	// validate every channel name and every sockedID (if present) in batch
  	for _, event := range batch {
  		if !validChannel(event.Channel) {
  			return nil, fmt.Errorf("The channel named %s has a non-valid name", event.Channel)
  		}
  		if err := validateSocketID(event.SocketId); err != nil {
  			return nil, err
  		}
  		if isEncryptedChannel(event.Channel) {
  			hasEncryptedChannel = true
  		}
  	}
  	if hasEncryptedChannel {
  		// validate EncryptionMasterKey
  		if !validEncryptionKey(c.EncryptionMasterKey) {
  			return nil, errors.New("Your encryptionMasterKey is not of the correct format")
  		}
  	}
  	payload, err := encodeTriggerBatchBody(batch, c.EncryptionMasterKey)
  	if err != nil {
  		return nil, err
  	}
  	path := fmt.Sprintf("/apps/%s/batch_events", c.AppId)
  	u, err := createRequestURL("POST", c.Host, path, c.Key, c.Secret, authTimestamp(), c.Secure, payload, nil, c.Cluster)
  	if err != nil {
  		return nil, err
  	}
  	response, err := c.request("POST", u, payload)
  	if err != nil {
  		return nil, err
  	}
  	return unmarshalledBufferedEvents(response)
  }
docs: /* TriggerBatch triggers multiple events on multiple types of channels in a single call:
      client.TriggerBatch([]pusher.Event{
  	    { Channel: "donut-1", Name: "ev1", Data: "pippo1" },
  	    { Channel: "private-encrypted-secretdonut", Name: "ev2", Data: "pippo2" },
      })
  */