Jump to Table of Contents

Enhancements

Tempore a perferendis maxime eum similique alias, at iste ab dicta non! Possimus iste labore quas facilis, explicabo necessitatibus error

Example #1

<ict-articleurl:(title-of-the-article-that-we-are-40-rating)>Aenean lacinia bibendum nulla sed consectetur. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Vestibulum id ligula porta felis euismod semper. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

  1. Cursus
  2. Pharetra
  3. Mattis
  4. Dolor
  5. Tortor
  • Donec sed odio dui. Curabitur blandit tempus porttitor.
  • Integer posuere erat a ante venenatis dapibus posuere velit aliquet.

Is my icon in the corect place?

wireframe-emergency-mode.png

Sed posuere consectetur this is a link est at lobortis. Donec sed odio dui. Aenean lacinia bibendum nulla sed consectetur. Duis mollis, est non commodo luctus, nisi erat porttitor Link Test ligula, eget lacinia odio sem nec elit. Cras justo odio, dapibus ac facilisis in, egestas eget quam.

<article>
  <h1>Title Here</h1>
</article>
_ictt.push(['_allocate', function() {
    console.log('Done Things');
}]);
// Package leap provides functions relating to leap year calculations
package leap

// IsLeapYear tells you if the provided year is a leap year or not based on some overly simple rules
func IsLeapYear(year int) bool {
    // A leap year is true;
    // on every year that is evenly divisible by 4
    //   except every year that is evenly divisible by 100
    //     unless the year is also evenly divisible by 400
    return year%400 == 0 || (year%100 != 0 && year%4 == 0)
}
<?php

class Monkey {
    public function getName()
    {
        return 'Mike';
    }
}
#!/bin/bash 
COUNTER=0
while [  $COUNTER -lt 10 ]; do
    echo The counter is $COUNTER
    let COUNTER=COUNTER+1 
done

Installing Infinity Tracking

JavaScript Implementation

img-caller-insight.png

This is Super Secreting 2

The Infinity tracking service is powered on the client side by JavaScript. This JavaScript is unobtrusive and won't affect any other script on your page. This JavaScript DOES NOT replace your Google, Bing or any other tracking, this should be left in place.

You should have a moderate technical understanding of HTML and JavaScript to install the Infinity Tracking JavaScript.

Installation of Infinity Tracking Code

To install Infinity Tracking you need to add the code snippet you have generated in the JavaScript Configuration page of the Portal. This needs to be placed just before the closing tag element within each page of the website as this will allow for the fastest execution. This is a lightweight, asynchronous code base of around 3kb and will not block the rest of the site from loading.

Putting it at the bottom will not affect the code running, but the page will load before the Infinity code executes which may cause the phone number to notably flicker as it changes. If, however, you want to have the numbers hidden until the dynamic update has been performed to avoid this flicker, you can find the technical implementation information here:

Note It is important that this code is installed on every page that a visitor might land on or visit, or the code may not be able to detect the visitors channel information correctly.

Auto Discovery JavaScript

Our Auto Discovery code looks for phone numbers in your site that are wrapped in an element, and have the InfinityNumber class on them. <span class="InfinityNumber">0808 123 456</span>

The phone number(s) that are found are then looked up against the configuration of your tracking pool(s) so see which one to use.

Once the Tracking Pool(s) to use has/have been discovered, a dynamic number is assigned for each one, and the number replaces the contents of the element in question.

The below is only an example code:

<script>
    var _ictt = _ictt || [];
    _ictt.push(['_setIgrp','XXX']); // Installation ID
    _ictt.push(['_enableGAIntegration',{'gua':true,'ga':false}]);
    _ictt.push(['_enableAutoDiscovery']);
    _ictt.push(['_track']);
    (function() {
        var ict = document.createElement('script'); ict.type = 'text/javascript'; ict.async = true;
        ict.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'ict.infinity-tracking.net/js/nas.v1.min.js';
        var scr = document.getElementsByTagName('script')[0]; scr.parentNode.insertBefore(ict, scr);
    })();
</script>
<?php

namespace Infinity\Cms\Bundle\RendererBundle;

use InvalidArgumentException;
use Exception;

/**
 * Responsible for translating Path Enumeration to actual object/array hierarchy
 * and back
 *
 * @author Chris Sedlmayr <chris.sedlmayr@infinity-tracking.com>
 */
class PathEnumerator
{
    /**
     * Translates an array of PageElement(s) that use Path Enumeration to
     * define hierarchy, into structure using PageElement->children and arrays
     *
     * @param  array                   $pageElements The elements you want to translate
     * @param  PathEnumerableInterface $root         Optional. The element you want to start with
     * @return array                   $root         The elements, now in array hierarchy
     */
    public function unserialise($pageElements, PathEnumerableInterface $root = null)
    {
        if (!(is_array($pageElements) || ($pageElements instanceof \Traversable))) {
            throw new InvalidArgumentException('$pageElements must be iterable');
        }
        // as we process each element, we add a child to the root
        // as you go down each part of the path, you fetch the item and consider that root
        // then add the element as a child of that element
        //
        // you start at root, and look at all the items.
        // those that have the same path as you are siblings.
        // if you see one that doesn't, and it has a path containing structure '/s', then
        // you loop through each child (/1/2/3), set that as a child, then decend into it so
        // it can set it's own children on itself and continue down to the bottom
        // then the iteration comes back up, goes to the next child (from the top level), and does it again
        // that carries on until all elements have been enumerated
        foreach ($pageElements as $element) {
            if (!$element instanceof PathEnumerableInterface) {
                throw new Exception(
                    'Must be an instance of Infinity\\Cms\\Bundle\\RendererBundle\\PathEnumerableInterface, '
                    .(is_object($element) ? get_class($element) : gettype($element)).' given'
                );
            }

            if (is_null($root)) {
                $root = $element;
            } else {
                $obj = $root;

                // if the root element, has the same path as our element
                // then we are at the same level, i.e. a sibling
                if ($obj->getPath() === $element->getPath()) {
                    $obj->addSibling($element);
                // otherwise, we have a different path to the root
                } else {
                    // we want to treat each sub part of our path, as the ID of a child
                    $pathParts  = explode('/', $element->getPath());
                    foreach ($pathParts as $idx) {
                        // if the ID of the child seen in our path, is that of a real child
                        if (!empty($idx) && $obj->getChildren($idx)) {
                            // fetch that child into $obj
                            $obj = $obj->getChildren($idx);
                            // if our childs path, is the same as our elements path
                            if ($obj->getPath() === $element->getPath()) {
                                // then it's a sibling to our child
                                // this shouldn't actually ever be reached as we have reassigned ourself
                                // the be a child at this point, but it's a safety net for incorrect path structure
                                // otherwise the item would go missing
                                $obj->addSibling($element);
                            }
                        }
                    }
                    // the element, is a child of our child
                    $obj->addChild($element);
                }
            }
        }

        return $root;
    }

    /**
     * Convert the parental hierarchy of an element, into it's path
     *
     * @param  PathEnumerableInterface $element The element you want to serialise the path of
     * @return PathEnumerableInterface $element The element, with serialised path complete
     */
    public function serialise(PathEnumerableInterface $element)
    {
        $path       = '';

        if (($parent = $element->getParent()) && $parent->getId()) {
            $path = $parent->getPath().'/'.$parent->getId();
        }

        $element->setPath($path);

        return $element;
    }
}

Infinity Call Tariffs

Updated November 2014

Per Minute Call Charges

All tariffs are billed per second*

UK

When Forwarding a Call Tracking Number to a Geographic Number or SIP address

Call Tracking Number Type Cost per min.*
Lo-call Rate Numbers
0843/0844 (5.1p per min from BT) FREE
0845 (3p per min from BT) FREE
Virtual Geographic Numbers
Geographic Numbers 01 or 02 (Local Rate) 1.5p
Non Geographic Numbers
Non Geographic 03 (Local Rate) 1.5p
Free Phone
0808/0800 (Free Phone number) 3.5p

When Forwarding a Call Tracking Number to O2, T-Mobile, Orange or Vodafone Mobile Number

Call Tracking Number Type Cost per min.*
Lo-call Rate Numbers
0843/0844 (5.1p per min from BT) 10.5p
0845 (3p per min from BT) 10.5p
Virtual Geographic Numbers
Geographic Numbers 01 or 02 (Local Rate) 12p
Non Geographic Numbers
Non Geographic 0370 (Local Rate) 12p
Free Phone
0808/0800 (New Free Phone number) 14p

When Forwarding a Call Tracking Number to any other mobile number

Call Tracking Number Type Cost per min.*
Lo-call Rate Numbers
0843/0844 (5.1p per min from BT) 17p
0845 (3p per min from BT) 17p
Virtual Geographic Numbers
Geographic Numbers 01 or 02 (Local Rate) 18.5p
Non Geographic Numbers
Non Geographic 0370 (Local Rate) 18.5p
Free Phone
0808/0800 (New Free Phone number) 20.5p

Number Types in Conservation

Number Type In Conservation Available
0800 Yes No
0844 Yes Limited availability
0845 Yes No
0207 Yes No
0208 Yes Limited availability

US

Call Tracking Number Type Cost per min.*
Toll Numbers 2.5¢
Toll Free Numbers 4.5¢

Where applicable calls have a per minute charge, as well as the per call fee. * Calls are billed per second and are charged in whole numbers of pence/cents rounded up, there is a minimum call charge of 1 pence (1 cent in the US).

The Infinity tracking service is powered on the client side by JavaScript. This JavaScript is a lightweight asynchronous code base and won't affect loading or any other script on your page.

The implementation really is a very simple process, in fact some clients find they don’t even require the services of a developer to implement the code – if you are familiar with inserting code via a Tag Manager and being able to update a telephone number class, it really is straightforward. Alternatively you may wish to ask a developer or someone with HTML experience for support implementing the code.

We have 2 different versions of our code, Auto Discovery and Classic. Installations set up before June 2015 will use the Classic version of our code. You can switch to Auto Discovery code at any time, please contact Support if you have any questions.

Please login to rate this article
  1. Getting Started
  2. Enhancing your Installation
  3. Frequently asked questions
  4. Call Management
  5. Infinity Portal
  6. Billing