You can pick user attributes from a form that is submitted and send the information to Blueshift as an event.

The following example shows the HTML snippet for a basic unsubscribe form and creates an "identify" event to update the "unsubscribed" attribute of a user. You can reuse this script to collect any form attribute and to create any kind of event.

How to use this snippet

  1. Replace EVENT_API_KEY with your event api key. Skip this step if blueshift.js is already loaded.
  2. Select your form via a CSS selector. For example, $("#bsftForm").
  3. Update the keyMapping to map the names of your form inputs you want to capture with the corresponding attribute in Blueshift.

Mapping attributes

Sometimes a form field has a different name than what Blueshift expects. For example, the form might use does_not_accept_offers, which should map to the unsubscribed field in Blueshift. Use keyMapping to map form field names to Blueshift attribute names.

  keyMapping notes

  • Even though email is named the same in both systems, you must still include it in the keyMapping.
  • The form tracking script only processes attributes that are explicitly listed in keyMapping.
var keyMapping = {
  'email': 'email',
  'does_not_accept_offers': 'unsubscribed',
}

Mapping subscription groups

Subscription group preferences must follow a specific format so Blueshift can process them correctly.

In the form below, each group input uses a name like subscription_group[newsletter] or subscription_group[promotions].

When submitted, these inputs are gathered into a subscription_groups array in the identify event. Each entry has an id (group name) and a subscribed value.

params = {
  ...
  subscription_groups: [
    { id: 'holiday_sale', subscribed: true },
    { id: 'newsletter', subscribed: false }
  ]
}

For more information on subscription groups, refer to the subscription groups documentation.

Example

The following is a sample unsubscribe.html file that captures both unsubscribe status and subscription group preferences.

<form action="" method="post" id="bsftForm">
  <label for="email">
    Email:
    <input type="email" name="email">
  </label>
  <br><br>

  <label for="does_not_accept_offers">
    Unsubscribe:
    <select name="does_not_accept_offers">
      <option value="true">Remove me from future emails</option>
      <option value="false">Keep sending me emails</option>
    </select>
  </label>
  <br><br>

  <fieldset>
    <legend>Subscription Groups</legend>
    <label>
      <input type="checkbox" name="subscription_group[newsletter]" value="true">
      Newsletter
    </label>
    <label>
      <input type="checkbox" name="subscription_group[promotions]" value="true">
      Promotions
    </label>
    <label>
      <input type="checkbox" name="subscription_group[holiday_sale]" value="true">
      Holiday Sale
    </label>
  </fieldset>
  <br><br>

  <input type="submit" value="Submit">
</form>

<script>
  // get blueshift
  window._blueshiftid='EVENT_API_KEY';window.blueshift=window.blueshift||[];if(blueshift.constructor===Array){blueshift.load=function(){var d=function(a){return function(){blueshift.push([a].concat(Array.prototype.slice.call(arguments,0)))}},e=["identify","track","click","pageload","capture","retarget"];for(var f=0;f<e.length;f++)blueshift[e[f]]=d(e[f])};}
  blueshift.load();blueshift.retarget();blueshift.pageload();
  if(blueshift.constructor===Array){(function(){var b=document.createElement("script");b.type="text/javascript",b.async=!0,b.src=(document.location.protocol==="https:"?"https:":"http:")+"//cdn.getblueshift.com/blueshift.js";var c=document.getElementsByTagName("script")[0];c.parentNode.insertBefore(b,c);})()}

  // get jQuery
  if (typeof jQuery == 'undefined') {
    function getJquery(success) {
      var script = document.createElement('script');
      script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js';
      var head = document.getElementsByTagName('head')[0],
      done = false;
      script.onload = script.onreadystatechange = function() {
        if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) {
          done = true;
          success();
          script.onload = script.onreadystatechange = null;
          head.removeChild(script);
        };
      };
      head.appendChild(script);
    };
    getJquery(trackForm);
  } else {
    trackForm();
  };

  // track form submit
  var submitForm = false
  function trackForm() {
    var keyMapping = {
      'email': 'email',
      'does_not_accept_offers': 'unsubscribed',
    }
    $("#bsftForm").submit( function(event) {
      var formData = $(this).serializeArray();
      var params = {};
      $(formData).each( function(index,input) {
        if (keyMapping[input.name] && ( input.value || input.value === false )) {
          params[keyMapping[input.name]] = input.value
        }
      });

      var groupsArray = [];
      $('input[name^="subscription_group["]').each(function() {
        var match = this.name.match(/^subscription_group\[(.+)\]$/);
        if (!match) return;

        groupsArray.push({
          id: match[1],
          subscribed: this.checked
        });
      });
      params.subscription_groups = groupsArray;

      if (params.email) {
        blueshift.identify(params)
      };
      if ( $(this).attr('target') === "_blank" ) {
        submitForm = true
      } else {
        setTimeout(function() {
          submitForm = true
          $(event.currentTarget).submit();
        }, 100);
      }
      return submitForm
    });
  }
</script>
Was this article helpful?
0 out of 0 found this helpful

Comments

0 comments

Please sign in to leave a comment.