Intercom.io – Real-time tracking

Intercom.io is an easy way to implement real-chat and individual support for a website

Installation

To start using the Intercom.io integration, you must have installed the django-analytical package and have added the analytical application to INSTALLED_APPS in your project settings.py file. See Installation and configuration for details.

Next you need to add the Intercom.io template tag to your templates. This step is only needed if you are not using the generic analytical.* tags. If you are, skip to Configuration.

The Intercom.io Javascript code is inserted into templates using a template tag. Load the intercom template tag library and insert the intercom tag. Because every page that you want to track must have the tag, it is useful to add it to your base template. Insert the tag at the bottom of the HTML body:

{% load intercom %}
<html>
<head></head>
<body>
<!-- Your page -->
{% intercom %}
</body>
</html>
...

Configuration

Before you can use the Intercom.io integration, you must first set your app id.

Setting the app id

Intercom.io gives you a unique app id, and the intercom tag will include it in the rendered Javascript code. You can find your app id by clicking the Tracking Code link when logged into the on the intercom.io website. A page will display containing HTML code looking like this:

<script id="IntercomSettingsScriptTag">
    window.intercomSettings = { name: "Jill Doe", email: "jill@example.com", created_at: 1234567890, app_id: "XXXXXXXXXXXXXXXXXXXXXXX" };
</script>
<script>(function(){var w=window;var ic=w.Intercom;if(typeof ic==="function"){ic('reattach_activator');ic('update',intercomSettings);}else{var d=document;var i=function(){i.c(arguments)};i.q=[];i.c=function(args){i.q.push(args)};w.Intercom=i;function l(){var s=d.createElement('script');s.type='text/javascript';s.async=true;s.src='https://static.intercomcdn.com/intercom.v1.js';var x=d.getElementsByTagName('script')[0];x.parentNode.insertBefore(s,x);}if(w.attachEvent){w.attachEvent('onload',l);}else{w.addEventListener('load',l,false);}}})()</script>

The code XXXXXXXXXXXXXXXXXXXXXXX is your app id. Set INTERCOM_APP_ID in the project settings.py file:

INTERCOM_APP_ID = 'XXXXXXXXXXXXXXXXXXXXXXX'

If you do not set an app id, the Javascript code will not be rendered.

Custom data

As described in the Intercom documentation on custom visitor data, the data that is tracked by Intercom can be customized. Using template context variables, you can let the intercom tag pass custom data to Intercom automatically. You can set the context variables in your view when your render a template containing the tracking code:

context = RequestContext({'intercom_cart_value': cart.total_price})
return some_template.render(context)

For some data, it is annoying to do this for every view, so you may want to set variables in a context processor that you add to the TEMPLATE_CONTEXT_PROCESSORS list in settings.py:

from django.utils.hashcompat import md5_constructor as md5

GRAVATAR_URL = 'http://www.gravatar.com/avatar/'

def intercom_custom_data(request):
    try:
        email = request.user.email
    except AttributeError:
        return {}
    email_hash = md5(email).hexdigest()
    avatar_url = "%s%s" % (GRAVATAR_URL, email_hash)
    return {'intercom_avatar': avatar_url}

Just remember that if you set the same context variable in the RequestContext constructor and in a context processor, the latter clobbers the former.

Standard variables that will be displayed in the Intercom live visitor data are listed in the table below, but you can define any intercom_* variable you like and have that detail passed from within the visitor live stream data when viewing Intercom.

Context variable Description
intercom_name The visitor’s full name.
intercom_email The visitor’s email address.
created_at The date the visitor created an account

Identifying authenticated users

If you have not set the intercom_name or intercom_email variables explicitly, the username and email address of an authenticated user are passed to Intercom automatically. See Identifying authenticated users.

Internal IP addresses

Usually you do not want to track clicks from your development or internal IP addresses. By default, if the tags detect that the client comes from any address in the ANALYTICAL_INTERNAL_IPS setting (which is INTERNAL_IPS by default,) the tracking code is commented out. See Identifying authenticated users for important information about detecting the visitor IP address.