• In progress
  • Anatomy of the Integration Script

    Overview

    The ICS integration script is your gateway to installing ICS widgets and tools your site. The script takes in a host of options and settings, communicates those to the ICS JS SDK and API which in turn returns appropriately configured content. Installing this script is the primary way that ICS is integrated on client pages.

    This article breaks down the main pieces of this script, describes their purpose and provides a reference that includes supported variables and their accepted inputs.

    Initialize Function

    The ICS.init() function is a key component to running the ICS app. Essentially it tells the widget to initialize with the configuration data provided.

    It contains many variables like which version of the widget should be loaded, which campaign to pull assets from and even what language should be used. Beyond that, it includes a handful of objects like data, variables, and theme which provide organized sets of options used to tweak and configure the widget.

    Attributes

    Name

    Description

    Format

    Required

    Accepted values

    Name

    Description

    Format

    Required

    Accepted values

    behavior{}

    controls what the user sees and when and where they see it

    Object

    REQUIRED

    • allowedURLs

    • blockedURLs

    • currency

    • delay

    • flavor

    • forceOpen

    • mountSelector

    View details

    campaignId

    A unique number assigned to each ICS campaign

    String

    REQUIRED

    Client campaign ID

    Finding your campaign ID and public key

    data{}

    Data passed to the widget for attribution

    DataLayer Object

    REQUIRED

    • accountId

    • email

    • engagement

    • invite

    • name

    • orderId

    • phoneNumber

    • subtotal

    • transactionId

    View details

    locale

    Determines the locale to used for the widget content and display. Defaults to browser language but can be set in the admin or specified directly in the script.

    String

    oPTIONAL

    List of supported locales

    publicKey

    A 32-character alphanumeric string unique to each ICS client

    String

    REQUIRED

    Client public key

    Finding your campaign ID and public key

    theme{}

    Provides options for applying custom themes to the widget

    Object

    oPTIONAL

    View details

    variables{}

    Optional variables to be replaced in the widget

    Object

    oPTIONAL

    • productName

    • productUrl

    • influencerName

    View details

    version

    The version of the widget to use. If unspecified, this defaults to ‘latest’

    String

    oPTIONAL

    • 'latest'

    • 'v1'

     

    Data{} Object

    For the ICS widget to create and track influencers and referrals, certain pieces of data need to be fed to the script. To do this, you’ll have to map the attributes in the data{} object to the equivalent values used in your system.

    Not all of the fields are required, but we recommend using as many as your data usage policies allow so ICS can collect the most data possible for you.

    Attributes

    Name

    Description

    Format

    Required

    Accepted values

    Name

    Description

    Format

    Required

    Accepted values

    accountId

    Customer’s unique ID granted by your platform. Used if you would like to tie the influencer account to their account in your system

    String

    Optional

    Any

    email

    Passing email allows user to bypass the email entry step if the client's GDPR settings allow

    String

    Optional

    Any email

    engagement

    If no engagement is passed, the widget will automatically detect engagement type based on the following conditions:

    • orderId is passed and there is a subtotal -> transaction

    • orderId is NOT passed and there is NOT a subtotal -> participation

    • customer sees the widget when it is loaded for the first time -> pageview

    If you would like to record a signup, or explicitly set a specific engagement, pass it here.

    String

    Optional

    • transaction

    • participation

    • signup

    • pageview

    invite

    The invite id for conversion attribution. Populated automatically when a customer was invited..

    String

    Optional

    Invite id number

    name

    Influencer’s name

    String

    Optional

    Any

    orderId

    Unique ID tied to an influencer’s order

    String

    REQUIRED if subtotal is > 0

    Any

    phoneNumber

    Customer’s phone number to be used for SMS notifications

    String

    REQUIRED if email not provided

    Any phone number

    subtotal

    If tracking influencer order total

    String

    REQUIRED for post-purchase campaigns

    Any number

    transactionId

    • Transaction id from payment gateway

    • only required Used to verify order and issue rewards/refunds

    • Used for post-purchase campaigns

    String

    REQUIRED if subtotal is > 0

    Any

     

    Shopify data{} Example

    If you were using Shopify, you’d change the variables to their Shopify specific equivalents so ICS can capture the correct info, the result would look like this:

    data: { accountId: '{{checkout.customer.id}}', email: '{{checkout.email}}', name: '{{checkout.customer.first_name}} {{checkout.customer.last_name}}', phoneNumber: '{{checkout.customer.phone}}', orderId: '{{checkout.order_number}}', revenue: '{{ checkout.line_items_subtotal_price | money_without_currency }}', transactionId: '{{transactions[0].receipt.transaction_id}}' }

    Square Online data{} Example

    Most variables are not standardized and are platform specified. For example, Square Online’s syntax is much different than Shopify’s:

    data: { email: '{email}', name: '{name}', orderId: '{orderid}', revenue: '{total}', transactionId: '{txid}' }

     

    Variables{} Object

    The variables{} object allows for mapping dynamic variables which are used to collect and display various pieces of data captured by the script. The corresponding dynamic tag, e.g. {{variableName}}, can be used in offer text, emails and other notifications to be replaced with the captured values. Variables and dynamics tags can be a powerful tool in making your content and correspondences feel personalized and unique for the end user.

    Note that any values like this passed into the script will take precedence over any variables set in the admin.

    ICS currently supports productName, productUrl and influencerName, but more values will become available later.

    Attributes

    Name

    Description

    Uses

    Examples

    Name

    Description

    Uses

    Examples

    productName

    The item the customer has purchased

    Replaces {{product.name}} in email subject and share message in the campaign settings

    Email Subject

    Your friend {{influencer.name}} just sent you a deal for {{product.name}}!

    productUrl

    The URL slug of the product that people will be redirected to when they click on an invite

     

    Replaces {{product.url}} in Redirect URL in the campaign settings.

     

    Redirect URL

    https://www.yourstore.com/products/{{product.url}}

    influencerName

    The customer’s name. It can be a full name, first name, last name, or even an alias. The choice is yours.

    Replaces {{influencer.name}} in Email Subject and Share Message in the Campaign settings

     

     

    Email Subject

    Your friend {{influencer.name}} just sent you a deal!

     

    Code Example

    An example of what the variables{} object might look like when configured:

    variables: { productName: '{item}', productUrl: '{itemURL}', influencerName: '{customerName}' }

     

    Theme{} Object

    The theme{} object accepts values that will change various visual attributes of the widget to tailor it to your company’s brand and identity.

    Attributes

    Colors{}

    Give your widget a splash of personality by setting custom color values. Color variables accept hex codes, RGB and HSL values.

    Variable

    Description

    Variable

    Description

    "accent"

    Specifies the color of certain elements

    "ambient"

    Specifies the color of the background of informative panels

    "bodyBg"

    Specifies background color of the widget

    "brand"

    Specifies the color of important or interactive elements

    "link"

    Specifies color of links

    "linkVisited"

    Specifies color of visited links

    Customized Colors Example

     

    Borders{}

    Adjusting your border styles can make the difference between an approachable, bubbly widget and a impeccably neat and dignified widget, each demanding attention in their own way!

    Variable

    Description

    Variable

    Description

    "default"

    Determines the default border styles

    "style"

    Determines what kind of border to display

    "width"

    Determines the width of the borders

    "radius": {}

    "default"

    Determines the “roundness” of borders

    Customize Borders Example

     

    Behavior{} Object

    Attributes

    Name

    Description

    Format

    Required

    Accepted values

    Name

    Description

    Format

    Required

    Accepted values

    allowedURLs

    Only show the widget and collect data on these specified pages

    Array

    Optional

    One or more URLs

    blockedURLs

    Show and collect data on all pages except these specified pages

    Array

    Optional

    One or more URLs

    currency

    This will will default to the currency symbol of the provided locale. If provided, will override the currency, regardless of locale

    String

    Optional

    List of supported locales

    delay

    Amount of time in ms before the widget will be shown. If openByDefault = false, delay will be ignored

    Number

    Optional

    Any number

    flavor

    Flavor controls how the widget appears and will be presented to the end user

     

    REQUIRED

    • modal - Widget is presented as a traditional modal that’s full screen on mobile devices and small displays

    • callout - Widget is presented as a smaller, popover overlay. takes up much less screen real estate and doesn’t obscure the page’s content, though demands less attention as a traditional modal

    • embedded - allows you to embed a widget directly in a webpage. the placement is determined by the mountSelector field

    forceOpen

    Forces the widget to be open. Does not respect if the user dismissed the widget or not and will open every time. This is useful on post-purchase confirmation pages but generally should be used sparingly to avoid user annoyance.

    Boolean

    Optional

    • true - the widget will open each time the user lands on an ICS-scripted page

    • false - widget won’t open automatically each time and instead will respect the openByDefault setting

    mountSelector

    CSS selector for where the iframe should be mounted

    String

    REQUIRED when using embedded flavor

    CSS selector

    openByDefault

    Determines when the widget will open. If the user has dismissed the widget previously it won’t open again automatically on subsequent page loads to avoid hindering general site navigation.

    Boolean

    Optional

    • true - the widget will open automatically the first time the user lands on an ICS-scripted page

    • false - the widget will only open when initiated by a user

    requestPhoneNumber

    Whether or not the user's phone number should be requested by the widget

    Boolean

    Optional

    • true - Influencer’s phone number will be requested

    • false - Influencer’s phone number won’t be requested

    type

    Type determines which widget is to be used. referral is the only option currently available.

    String

    REQUIRED

    • referral

    • More coming soon

     

    URI Source

    This line of the script includes the URI of Ice Cream Social’s SDK, where all the external assets, resources and logic for the application are stored and then referenced by the integration script.