JSON message type schemas

Message format

The Android and iOS SDKs use JSON to communicate with the servers. The message is an array of user interaction, document HTML, and page lifecycle events data. The messages, client environment information, and page metadata sent as HTTP POST requests. Each message contains a global header. The global header is an array that includes the message version and a message serial number. The header is followed by an array of session messages.

{
    {
        "messageVersion": {
            "title": "Json message version",
            "type": "string",
            "required": true
        },
        "serialNumber": {
            "title": "Serial Number of the payload sent to server. In UIC, this will be reset on each page load.",
            "type": "integer",
            "required": true
        },
        "clientEnvironment": {
            "title": "Client environment",
            "type": "$ref": "ClientEnvironment",
            "required": true
        },
        "sessions": {
            "description": "We simplified this to an array of one session.",
            "type": "array",
            "additionalItems": {
            {
                "description": "Session with list of messages",
                "type": "array",
                "item": {
                    { "$ref" : "Session" },
                    "required": true,
                }
            }
        },
        "log": {

            "description": "This object contains log data for diagnostic purposes. The contents of this object can vary at any time and are NOT intended to be used for Tealeaf Eventing or for any other purpose other than to assist IBM Support to help troubleshoot SDK related issues.",

            "type": "object",

            "required": false

        }
    },
    "additionalProperties" : false
}
{
    "serialNumber": 1,
    "messageVersion": "5.0.0.0",
    "sessions": [
        {
            "startTime": 1328311295574,
            "id": "945202AC4E93104E05EDADE1F6059B97",
            "messages": [
                {
                    "offset": 124,
                    "contextOffset": 4556,
                    "type": 2,
                    "logicalPageName": "HomeActivity"
                }
            ]
        }   
    ],
    "clientEnvironment": {
        "mobileEnvironment": {
            "android": {
                "keyboardType": 2,
                "brand": "generic",
                "fingerPrint": "generic/sdk/generic/:2.2/FRF91/43546:eng/test-keys"
            },
            "totalMemory": 63422464,
            "totalStorage": 12288,
            "orientationType": "PORTRAIT",
            "appVersion": "1.0.5",
            "manufacturer": "unknown",
            "deviceId": "11111111111111111111111111111111",

            "advertisingId": "11111111111111111111111111111111",
            "locale": "English (United States)",
            "deviceModel": "sdk",
            "language": "English"
        },
        "width": 0,
        "height": 0,
        "osVersion": "2.2"
    }
}

Sessions

A session contains message type objects to post to the server.

{
    "id": { 
        "title": "Session id",
        "type": "string",
        "required": true
    },
    "startTime": { 
        "title": "Session start time in ticks from a well-defined epoch (e.g. for the UIC it is milliseconds since Jan 1st 1970)",
        "type": "number",
        "required": true
    },
    "timezoneOffset": {
        "title": "The difference, in minutes, between UTC and local time.",
        "type": "integer",
        "required": false, only used in UIC
    },
    "messages": {
        "description": "List of messages",
        "type": "array",
        "additionalItems": {
            {
                "description": "List of messages",
                "type": "array",
                "item": {
                    { "$ref" : "Client State" },
                    { "$ref" : "Application Context" },
                    { "$ref" : "Connection" },
                    { "$ref" : "Control" },
                    { "$ref" : "Custom Event" },
                    { "$ref" : "Exception" },
                    "required": true,
                }
            },
        },
    },
   "additionalProperties" : false
}
{

    "startTime": 1328311295574,
    "id": "945202AC4E93104E05EDADE1F6059B97",
    "messages": [
        {
            "offset": 124,
            "contextOffset": 4556,
            "type": 2,
            "logicalPageName": "HomeActivity"
        }
    ]
}

Client Environment

Client Environment messages are session-level information sent at the start of a session. It contains general information about the device and the browser window. This information is delivered once per session.

Property

Data type

Description

orientation

Integer

The original orientation of the screen.

height

Integer

The height in CSS pixels of the target object

osVersion

Integer

The operating system version.

pixelDensity

Integer

The pixel density of the screen.

width

Integer

The initial session device width of the display/viewport in pixels.

deviceHeight

Integer

The initial session device height of the display/viewport in pixels.

osType

String

The operating system type of the device either Android or iOS.

deviceWidth

Integer

The initial session device width of the display/viewport in pixels.

carriers (optional)

Array

Schema that is used for multiple carrier messages. The array can contain zero, one, or two sets of the following values:

  • mobileCountryCode (string)
  • carrier (string)
  • mobileNetworkCode (string)
  • isoCountryCode (string)
  • allowsVOIP (boolean)

These values are in the JSON only if they are returned by iOS when queried.
Note: Both the carrier string and carriers array can coexist in the same JSON payload.

mobileEnvironment

Array

Android or iOS.
Includes these properties:

  • machineNameHW (optional), String – hardware device name.
  • machineNameEnglish (optional), String – english translation for hardware device name. Values include:

@"i386" : @"Simulator 32 bit",
@"x86_64" : @"Simulator 64 bit",
@"iPod1,1" : @"iPod Touch", // (Original)
@"iPod2,1" : @"iPod Touch", // (Second Generation)
@"iPod3,1" : @"iPod Touch", // (Third Generation)
@"iPod4,1" : @"iPod Touch", // (Fourth Generation)
@"iPod7,1" : @"iPod Touch", // (6th Generation)
@"iPhone1,1" : @"iPhone", // (Original)
@"iPhone1,2" : @"iPhone", // (3G)
@"iPhone2,1" : @"iPhone", // (3GS)
@"iPad1,1" : @"iPad", // (Original)
@"iPad2,1" : @"iPad 2", //
@"iPad3,1" : @"iPad", // (3rd Generation)
@"iPhone3,1" : @"iPhone 4", // (GSM)
@"iPhone3,3" : @"iPhone 4", // (CDMA/Verizon/Sprint)
@"iPhone4,1" : @"iPhone 4S", //
@"iPhone5,1" : @"iPhone 5", // (model A1428, AT&T/Canada)
@"iPhone5,2" : @"iPhone 5", // (model A1429, everything else)
@"iPad3,4" : @"iPad", // (4th Generation)
@"iPad2,5" : @"iPad Mini", // (Original)
@"iPhone5,3" : @"iPhone 5c", // (model A1456, A1532

{
    "$ref" : "MessageHeader",
    "osVersion": { 
        "title": "Operating system version",
        "type": "string",
        "required": false for UIC, true for native frameworks
    },
   "orientation": { 
        "title": "Initial session orientation of the screen",
        "type": "integer which can be 0, 90, 180 or -90",
        "required": true for iOS and Android. UIC has an orientation in webEnvironment.
    }, 
    "height": { 
        "title": "Initial session height of display/viewport divided by pixel density",
        "type": "integer",
        "required": true
    },
    "width": { 
        "title": "Initial session width of display/viewport divided by pixel density",
        "type": "integer",
        "required": true
    },   
   "deviceHeight": { 
        "title": "Initial session device height of display/viewport",
        "type": "float",
        "required": true
    },
    "deviceWidth": { 
        "title": "Initial session device width of display/viewport",
        "type": "float",
        "required": true
    },
   "pixelDensity": { 
        "title": "Pixel density of the device",
        "type": "float",
        "required": Only for Android.
    },
   "osType": { 
        "title": "Operating system of device iOS or Android",
        "type": "string",
        "required": Only for iOS and Android.
    },
    "mobileEnvironment": {
        "description": "Logical page being loaded",
        "type": "object",
        "properties": {     
            "appName": { 
                "title": "Application name",
                "type": "string",
                "required": true
            },
            "android": {
                "description": "Current state in an Android device",
                "type": "object",
                "properties": {     
                    "brand": { 
                        "title": "The brand (e.g., carrier) the software is customized for, if any",
                        "type": "string",
                        "required": true
                    },
                    "fingerPrint": { 
                        "title": "A string that uniquely identifies this build",
                        "type": "string",
                        "required": true
                    },
                    "keyboardType": { 
                        "title": "Keyboard type",
                        "type": [ {
                            "enum": [0],
                            description: "TWELVE_KEYS"
                            },
                            "enum": [1],
                            description: "NO_KEYS"
                            },
                            "enum": [2],
                            description: "QWERTY"
                            },
                            "enum": [3],
                            description: "UNDEFINED"
                            }],
                        "required": true
                    },
                }
            },
            "totalMemory": { 
                "title": "Total memory in MBytes of device",
                "type": "number",
                "required": true
            },
            "totalStorage": { 
                "title": "Total storage in MBytes of device",
                "type": "number",
                "required": true
            },
            "orientationType": { 
                "title": "Orientation type of device",
                "type": [ {
                            "LANDSCAPE"
                            description: "LANDSCAPE"
                            },
                            "PORTRAIT",
                            description: "PORTRAIT"
                            },
                            "SQUARE",
                            description: "SQUARE"
                            },
                            "UNDEFINED",
                            description: "UNDEFINED"
                            }],
                "required": true
            },
            "appVersion": { 
                "title": "Version of application",
                "type": "string",
                "required": true
            },
            "manufacturer": { 
                "title": "Manufacturer of device",
                "type": "string",
                "required": true
            },
            "deviceId": { 
                "title": "Device id autogenerated or assigned by developer",
                "type": "string",
                "required": true
            },
           "advertisingId": { 
                "title": "Advertising id from device if used, otherwise value is N/A",
                "type": "string",
                "required": true
            },
            "locale": { 
                "title": "The user's preferred locale",
                "type": "string",
                "required": true
            },
            "deviceModel": { 
                "title": "Device model",
                "type": "string",
                "required": true
            },
            "language": { 
                "title": "Device's language",
                "type": "string",
                "required": true
            }
        },
        "additionalProperties" : false
    }, 
    “webEnvironment": {
        "description": "Web page being loaded",
        "type": "object",
        "properties": {     
            "libVersion": { 
                "title": "Library version,
                "type": "string",
                "required": true for UIC
            },
            "screen": {
                "description": "Display of the web content",
                "type": "object",
                "properties": {     
                    "orientation": { 
                        "title": "Initial session orientation of the screen",
                        "type": "integer which can be 0, 90, 180 or -90",
                        "required": true for UIC. iOS and Android has it on outer object.
                    },
                    "orientationMode": { 
                        "title": "To indicate orientation mode.”,
                        "type": "string which can be Portrait or Landscape",
                        "required": true for UIC
                    }
                }
            },
            "domain": { 
                "title": "Domain of the page as reported in the window.location.hostname property",
                "type": "string",
                "required": true for UIC
            },
            "page": { 
                "title": "Url of the page",
                "type": "string",
                "required": true for UIC
            },

            "referrer": {

                "title": "Referrer URL (if any) of the page.",
                "type": "string",
                "required": true for UIC

            }     
        },
        "additionalProperties" : false
    }
}
"clientEnvironment": {
    "mobileEnvironment": {
        "android": {
            "keyboardType": 2,
            "brand": "generic",
            "fingerPrint": "generic/sdk/generic/:2.2/FRF91/43546:eng/test-keys"
        },
        "totalMemory": 63422464,
        "totalStorage": 12288,
        "orientationType": "PORTRAIT",
        "appVersion": "1.0.5",
        "manufacturer": "unknown",
        "deviceId": "11111111111111111111111111111111",

        "advertisingId": "11111111111111111111111111111111",
        "locale": "English (United States)",
        "deviceModel": "sdk",
        "language": "English"
    },
    "width": 0,
    "height": 0,
    "deviceWidth": 1080,
    "deviceHeight": 1920,
    "osVersion": "2.2",
    "orientation" : 0,
    "pixelDensity" : 1,
    "osType" : "Android"
}

Message header

All messages contain a message header property. It includes the message type and the time that is offset from the start of the session in milliseconds. All-time measurements in the JSON object schema are in milliseconds. The message header is common across all message types.

Example schema for the JSON message headers:

"offset": {
    "title": "Milliseconds offset from start of stream",
    "type": "integer",
    "required": true
},"screenViewOffset": {
    "title": "Milliseconds offset from start of ScreenView",
    "type": "integer",
    "required": true
},"count": {
    "title": "The number of the message being sent",
    "type": "integer",
    "required": only used for UIC
},"fromWeb": { 
    "title": "Used to identify if it came from Web or Native application",
    "type": "boolean",
    "required": true
},"webviewId": {             
    "title": "Used to identify which webview it came from. This is only used when fromWeb is true and it is a hybrid application ",    
    "type":"string",    
    "required": true only when fromWeb is true and it is a hybrid application
},"type": {
    "title": "Message header type",
    "type": [
      {
        "enum": [1],
        description: "CLIENT_STATE"
      },
      {
        "enum": [2],
        description: "APPLICATION_CONTEXT"
      },
      {
        "enum": [3],
        description: "CONNECTION"
      },
      {
        "enum": [4],
        description: "CONTROL"
      },
      {
        "enum": [5],
        description: "CUSTOM_EVENT"
      },
      {
        "enum": [6],
        description: "EXCEPTION"
      },
      {
        "enum": [7],
         description: "PERFORMANCE"
      },
      {
        “enum”: [8],
        description: “STORAGE”
      },
      {
        “enum”: [9],
         description: “OVERSTAT”
      },
        {
            “enum”: [10],
            description: “LAYOUT”
        },

        {
            “enum”: [11],
            description: “GESTURE”
        },

        {
            “enum”: [12],
            description: “DOM_CAPTURE”
        },

        {
            “enum”: [13],
            description: “GEO_LOCATION”
        },

        {
            “enum”: [14],
            description: “COOKIES”
        },

        {
            “enum”: [15],
            description: “FORM_COMPLETION”
        },

        {
            “enum”: [16],
            description: “DATA_LIMIT”
        }
    ],
    "required": true
},

Example from an exception message type:

{

                    "screenviewOffset": 39418,
                    "type": 6,
                    "offset": 39652,
                    "count": 8,
                    "fromWeb": false,

                    "exception": {
                        "data": {
                            "0": "0",
                            "1": "1",
                            "2": "2"
                        },
                        "unhandled": true,
                        "description": "\tlength=3; index=3",
                        "name": "class java.lang.ArrayIndexOutOfBoundsException",
                        "stackTrace": "com.surf.android.TestExceptionActivity$3.onClick(TestExceptionActivity.java:129)\nandroid.view.View.performClick(View.java:4438)\nandroid.view.View$PerformClick.run(View.java:18422)\nandroid.os.Handler.handleCallback(Handler.java:733)\nandroid.os.Handler.dispatchMessage(Handler.java:95)\nandroid.os.Looper.loop(Looper.java:136)\nandroid.app.ActivityThread.main(ActivityThread.java:5017)\njava.lang.reflect.Method.invokeNative(Native Method)\njava.lang.reflect.Method.invoke(Method.java:515)\ncom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)\ncom.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)\ndalvik.system.NativeStart.main(Native Method)\n"
                    }

}

Type 1 – Client state messages

The Client state messages provide information about the client. They can be delivered on a schedule or when changes occur to the environment state on the client.

📘

Note

A replay of client state messages is not supported, except for scroll events. A replay of scroll events is supported for mobile sessions only in Browser Based Replay (BBR).

Example schema:

{
    "$ref" : "MessageHeader",
    "mobileState": {
        "description": "Logical page being loaded for iOS and Android",
        "type": "object",
        "properties": {
            "orientation": {
                "title": "Current orientation of the device",
                "type": "integer",
                "required": true
            },
            "freeStorage": {
                "title": "Amount of available storage in Mbytes",
                "type": "number",
                "required": true
            },
            "androidState": {
                "description": "Current state in an Android device",
                "type": "object",
                "properties": {
                    "keyboardState": {
                        "title": "Current keyboard state",
                        "type": [ {
                            "enum": [0],
                            description: "Keyboard not hidden"
                            },
                            "enum": [1],
                            description: "Keyboard hidden"
                            },
                            "enum": [2],
                            description: "Undefined"
                            }],
                        "required": true
                    },
                }
            },
            "battery": {
                "title": "Battery level from 0 to 100",
                "type": "number",
                "required": true
            },
            "freeMemory": {
                "title": "Amount of available memory in Mbytes",
                "type": "number",
                "required": true
            },
            "connectionType": {
                "title": "Current connection type",
                "type": "string",
                "required": true
            },
            "carrier": {
                "title": "Carrier of device",
                "type": "string",
                "required": true
            },
            "networkReachability": {
                "title": "Current network reachability",
                "type": [ {
                    "enum": [0],
                    description: "Unknown"
                    },
                    "enum": [1],
                    description: "NotReachable"
                    },
                    "enum": [2],
                    description: "ReachableViaWIFI"
                    },
                    "enum": [3],
                    description: "ReachableViaWWAN"
                }],
                "required": true
            },
            "ip": {
                "title": "Ip address of device",
                "type": "string",
                "required": true
            }
            "pageOrientation": { 
                "title": "Orientation of the page",
                "type": "integer which can be 0, 90, 180 or -90",
                "required": true 
            },
           "orientation": { 
                "title": "Orientation of the device",
                "type": "integer which can be 0, 90, 180 or -90",
                "required": true 
            }
        },
        "additionalProperties" : false
        }
        "clientState": {
        "description": "Logical web page being loaded for UIC",
        "type": "object",
        "properties": {     
            "pageWidth": { 
                "title": "Width of the document of the web page",
                "type": "integer",
                "required": true
            },
            "pageHeight": { 
                "title": "Height of the document of the web page",
                "type": "integer",
                "required": true
            },
            "viewPortWidth": { 
                "title": "Width of viewport",
                "type": "integer",
                "required": true
            },
            "viewPortHeight": { 
                "title": "Height of viewport",
                "type": "integer",
                "required": true
            },
            "viewPortX": { 
                "title": "x position of scrollbar on viewport",
                "type": "integer",
                "required": true
            },
            "viewPortY": { 
                "title": "y position of scrollbar on viewport",
                "type": "integer",
                "required": true
            },
            "event": { 
                "title": "event that triggered the client state",
                "type": "string",
                "required": true
            },
					"deviceScale": {
						"title": "scaling factor for fitting
						page into window for replay",
						"type": "integer",
						"required": true
					},
					"viewTime": { 
                "title": "time in milliseconds user was on the event triggered",
                "type": "integer",
                "required": true
            },
            "viewPortXStart": { 
                "title": "initial start x position of scrollbar on viewport",
                "type": "integer",
                "required": only used in scroll events
            },
            "viewPortYStart": { 
                "title": "initial start y position of scrollbar on viewport",
                "type": "integer",
                "required": only used in scroll events
            },
        },
        "additionalProperties" : false
    }
}

Example message: This example is from a Android native application.

{
    "offset": 667,
    "screenViewOffset": 4556,
    "type": 1,
    "mobileState": {
        "orientation": 0,
        "freeStorage": 33972224,
        "androidState": {
            "keyboardState": 0
        },
        "battery": 50,
        "freeMemory": 64630784,
        "connectionType": "UMTS",
        "carrier": "Android",
        "networkReachability": "ReachableViaWWAN",
        "ip": "0.0.0.0"
    }
}

Type 2 – ScreenView messages

ScreenView messages show steps in a visitor's experience with your application. The steps can be logical page views in a web application, screen changes in a mobile application, or steps in a business process.

Example schema:

{
    "$ref" : "MessageHeader",
    "dcid": { 
        "title": "Unique identifier that is used to match the corresponding DOM Capture message associated with this message.",
        "type": "string",
        "required": false
    },
    "screenview/context": {
        "description": "Logical page being loaded or unloaded",
        "type": "object",
        "properties": {     
            "type": { 
                "title": "Type of application context - LOAD or UNLOAD",
                "type": "string",
                "required": true
            },
            "name": { 
                "title": "Name of the logical page. This is given by customer or it uses name of the class used by the page.",
                "type": "string",
                "required": true
            },
            "url": { 
                "title": "URL path of the logical page",
                "type": "string",
                "required": false only used in UIC
            },
            "host": { 
                "title": "URL Host of the logical page",
                "type": "string",
                "required": false only used in UIC
            },
            "referrer": { 
                "title": "Previous logical page loaded, only used in LOAD",
                "type": "string",
                "required": false
            },
            "referrerUrl": { 
                "title": "Url of the previous logical page loaded",
                "type": "string",
                "required": false, not used in UIC
            }   
        },
        "additionalProperties" : false,
        "required": false
    }
}

Example message: This example shows page load and page unload events.

{
    "offset": 124,
    "contextOffset": 4556,
    "type": 2,
    "context": { 
            "type": "LOAD", 
            "name": "PAGE 2", 
            "referrer": "PAGE 1" 
        } 
}
 
{ 
    "type": 2, 
    "offset": 19216 
 
    "context": { 
        "type": "UNLOAD", 
        "name": "PAGE 2" 
    } 
}

Type 3 – Connections messages

Connection messages provide information about how the client application manages requests or responses.
example schema:

{
    "$ref" : "MessageHeader",
    "connection": {
        "description": "Connection in application",
        "type": "object",
        "properties": {
            "statusCode": {
                "title": "Status code of connection",
                "type": "integer",
                "required": true
            },
            "responseDataSize": {
                "title": "Response data size",
                "type": "number",
                "required": true
            },
            "initTime": {
                "title": "Initial time of connection",
                "type": "number",
                "required": true
            },
            "responseTime": {
                "title": "Response time of connection",
                "type": "number",
                "required": true
            },
            "url": {
                "title": "Url of connection",
                "type": "string",
                "required": true
            },
            "loadTime": {
                "title": "Load time from connection",
                "type": "number",
                "required": true
            }
        },
        "additionalProperties" : false
    }
}

Example message:

{
     "type": 3,
     "offset": 03829,
     "screenViewOffset": 45560,
     "count": 2,
     "connection": {
         "statusCode": 200,
             "responseDataSize": 0272,
             "initTime": 01333669478556,
             "responseTime": 02237,
             "url": "/store/js/tealeaf/                   TeaLeafTarget.php??width=540&height=960&orientation=0",
             "loadTime": 0
    }
}

Type 4 – Control messages

Control messages are used to log user actions and behavior. They consist of a control identifier and the value returned by that control. The control identifiers are mapped to specific controls on the client logging platform. The value can be a number, a text string or structured data. The control identifiers are mapped to specific controls for the submitting client framework. The value can be a number, a text string, or structured data.

Example schema:

{
    "$ref" : "MessageHeader",
      "offset": {
        "title": "Milliseconds offset from offset 
                      for when focusIn of text fields occur",
        "type": "integer",
        "required": true
      },
      "dcid": { 
        "title": "Unique identifier that is used to match the corresponding DOM Capture message associated with this message.",
        "type": "string",
        "required": false
    },
    "target": {
        "description": "Control being logged",
        "type": "object",
        "properties": {
            "position": {
                "description": "Position of control being logged",
                "type": "object",
                "properties": {
                    "x": {
                        "title": "X of the control",
                        "type": "integer",
                        "required": true
                    },
                    "y": {
                        "title": "Y of the control",
                        "type": "integer",
                        "required": true
                    },
                    "height": {
                        "title": "height of control",
                        "type": "integer",
                        "required": true
                    },
                    "width": {
                        "title": "width of control",
                        "type": "integer",
                        "required": true
                    },
                    "relXY": { 
                        "title": "relative X & Y ratio that 
                                              can be from 0 to 1 with a 
                                              default value of 0.5",
                        "type": "string",
                        "required": true for click events
                    },
                },
                "additionalProperties" : false
            }
            "id": {
                "title": "Id/Name/Tag of control",
                "type": "string",
                "required": true
            },
            idType": { 
                "title": "Indicates what id is based on: Native id (e.g. HTML 'id' attribute):  -1,
    xPath: -2, or Custom attribute for UIC and Hashcode value for  Native: -3, or xPath for Native iOS/Android: -4",
                "type": "integer",
                "required": true
            },
            "dwell": {
                "title": "Dwell time of control",
                "type": "integer value that is in milliseconds",
                "required": false
            },
            "focusInOffset": { 
                "title": "Offset when control got focus",
                "type": "integer value that is in milliseconds",
                "required": true in UIC
            },
             "visitedCount": {
                "title": "Number of times a form control has 
                                  been visited to be filled  by user.",
                "type": "integer",
                "required": false
            },
            "isParentLink": { 
                "title": "To indicate if control a A type tag",
                "type": "boolean",
                "required": false only in UIC for usability
            },
            "name": { 
                "title": "Name of control",
                "type": "string",
                "required": true in UIC
            },
            "type": {
                "title": "Type of control",
                "type": "string",
                "required": true
            },
            "subType": {
                "title": "SubType of control",
                "type": "string",
                "required": true
            },
            "tlType": {
                "title": "tlType of control that normalizes 
                                  the control type for eventing",
                "type": "string",
                "required": true
            },
            "prevState": {
                "title": "Previous state of control",
                "type": "object",
                "required": true,
                "properties": {
                    "?": { // Could be any variable name given by developer
                        "title": "Additional data in string format",
                        "type": "string",
                        "required": false
                    }
            },
            "currState": {
                "title": "Current state of control",
                "type": "object",
                "required": true,
                "properties": {
                    "?": { // Could be any variable name given by developer
                        "title": "Additional data in string format",
                        "type": "string",
                        "required": false
                    }
            }
        },
        "additionalProperties" : false
    }
    "event": {
        "description": "Event from control",
        "type": "object",
        "properties": {
        "tlEvent": {
                "title": "Tealeaf type of event",
                "type": "string",
                "required": true
            },
        "type": {
                "title": "Type of event",
                "type": "string",
                "required": true
            },
         "subType": {
                "title": "Subtype of event",
                "type": "string",
                "required": true
            }
        },
        "additionalProperties" : false
    }
}

Example message:
This example shows an control with an idType of XPATH. This means the id was not assigned to the control in the application. So Tealeaf traversed the layout and created an XPATH id for the control.

{                    
    "screenviewOffset":380,                    
    "target":{                        
        "id":"[KV,0]",                        
        "position":{                            
            "y":331,                            
            "x":0,
            "width":320,
            "height":202                     
            },                        
        "idType":"-4",                        
            "currState":{                          
                "y":"0",                            
                "x":"0"                       
                },                        
        "style":{ 
            "paddingTop":2,
            "textBGAlphaColor":255,                            
            "bgAlphaColor":255,                            
            "paddingBottom":0,                            
            "paddingLeft":0,                            
            "hidden":false,                            
            "paddingRight":0                       
            },                        
        "subType":"View",                        
        "type":"KeyboardView",                        
        "tlType":"keyboard"                   
       },                    
    "type":4,                    
    "offset":728,                    
    "count":3,                    
    "fromWeb":false,                    
    "event":{                        
        "type":"UIKeyboardDidShowNotification",                       
        "tlEvent": "kbDisplayed"                   
        }                
},

Type 5 – Custom event messages

The Custom event messages are used to custom log any event from any place in the application. They log client data that are application specific. The only required field is the name of the custom event. Application specific code must be created to process this logged message type.

Example schema:

{
    "$ref" : "MessageHeader",
    "customEvent": {
        "description": "Custom event message",
        "type": "object",
        "properties": {     
            "name": { 
                "title": "Exception name/type",
                "type": "string",
                "required": true
            },
                        "data": "Additional properties given by developer",
                "type": "object",
                "required": truefalse,
                "properties": {     
                    "?": { // Could be any variable name given by developer
                        "title": "Additional data in string format",
                        "type": "string",
                        "required": false
                    }        
                        },
        },
        "additionalProperties" : false
    }
}

Example message:
This example shows a message with the name of the custom event (MyEvent_1). It also shows several custom properties in the data section.

{
     "type": 5,
     "offset": 17981,
    "screenViewOffset": 4556,
    "customEvent": {
        "name": "MyEvent_1",
        "data": {
            "Foo": "Bar",
            "validationError": "Invalid zipcode.",
            "ajaxPerformance": 56734
        }
    }
}

Type 6 – Exception messages

The exception messages record the name and description of the exception that occurs.
Example schema:

{
    "$ref" : "MessageHeader",
    "exception": {
        "description": "Exception description message",
        "type": "object",
        "properties": {                
            "description": {
                "title": "Exception message from api call",
                "type": "string",
                "required": true
            },                
            "name": { 
                "title": "Exception name/type",
                "type": "string",
                "required": true, not for UIC
            },
            "stackTrace": { 
                "title": "Exception stacktrace given by framework",
                "type": "string",
                "required": true, not for UIC
            },
            "url": { 
                "title": "Url where exception ocurred",
                "type": "string",
                "required": true for UIC
            },
           "fileName": { 
                "title": "File name where exception ocurred",
                "type": "string",
                "required": true for iOS, not for UIC
            },
            "line": { 
                "title": "Line number where eception occurred.",
                "type": "string",
                "required": true for UIC and iOS
            },
           "unhandled": { 
                "title": "Whether exception had a try catch around it.",
                "type": "boolean",
                "required": true, not for UIC
            },
           "data": { 
                "title": "User defined data being passed with user info from system",
                "type": "object",
                "required": true for iOS, not for UIC
    "properties": {

                "userInfo": {
                            "type": "object",

    "title": "OS information from error or exception",

                            "required": iOS optional (data is JSON serializable or not)
                        },
                        "message": {
                            "type": "string",

                            "title":"User supplied message on error event",

                            "required":iOS optional (not on exceptions required on error)
                        }
                    },
            },
        },
        "additionalProperties" : false
    }
}

Example message:
This example shows an attempt to read a property named 'type' of a variable or value which is undefined.

{
                    "type" : 6,
                    "offset" : 4606,
                    "screenviewOffset" : 4603,
                    "count" : 3,
                    "fromWeb" : true,
                    "exception" : {
                        "description" : "Uncaught TypeError: Cannot read property 'type' of undefined",
                        "url" : "http://www.xyz.com/js/badscript.js",
                        "line" : 258
                    }
}

Type 7 – Performance messages

Performance messages show performance data from a browser.
The message object contains information about the performance timing measurements for the page.

Refer to Navigation Timing. Limitations are not all browser revisions support the W3C navigation timing specification. Legacy IE versions such as IE 8 and below do not support these messages. The performance message will not be sent on these browsers.

Example schema:

{
    "$ref" : "MessageHeader",
    "performance": {
        "description": "Performance message",
        "type": "object",
        "properties": {     
                    },
        "additionalProperties" : false
    }
}

Example message:

{
    "type": 7,
    "offset": 9182,
    "screenviewOffset": 9181,
    "count": 3,
    "fromWeb": true,
    "performance": {
        "timing": {
             "redirectEnd": 0,
             "secureConnectionStart": 0,
             "domainLookupStart": 159,
             "domContentLoadedEventStart": 2531,
             "domainLookupEnd": 159,
             "domContentLoadedEventEnd": 2551,
             "fetchStart": 159,
             "connectEnd": 166,
             "responseEnd": 1774,
             "domComplete": 2760,
             "responseStart": 728,
             "requestStart": 166,
             "redirectStart": 0,
             "unloadEventEnd": 0,
             "domInteractive": 2531,
             "connectStart": 165,
             "unloadEventStart": 0,
             "domLoading": 1769,
             "loadEventStart": 2760,
             "navigationStart": 0,
             "loadEventEnd": 2780,
             "renderTime": 986
            },
         "navigation": {
             "type": "NAVIGATE",
             "redirectCount": 0
        }
    }
}

Type 8 – Web storage messages

Web storage messages contain information about local storage information on the browser.

Example schema:

"$ref" : "MessageHeader",
webStorage: {
    key : "string",
    value: "string",
}

Example message:

{
    type: 8,
    offset: 25,
    screenviewOffset: 23,
    count: 2,
    fromWeb: true,
    webStorage: {
        key: "vistCount"
        value: "5"
    }
}

Type 9 – Overstat hover event messages

Overstat hover event messages contain information about mouse hover and hover-to-click activity.

Example schema:

"$ref" : "MessageHeader",
event: {
    xPath: "string",
    hoverDuration: int,
    hoverToClick: boolean,
    gridPosition: {
        x: int,
        y: int
     }
}

Example message:

{
    type: 9,
    offset: 25,
    screenviewOffset: 23,
    count: 2,
    fromWeb: true, 
    event: {
        xPath: "[\"ii\"]",
        hoverDuration: 5457,
        hoverToClick: false,
        gridPosition: {
            x: 3,
            y: 2
        }
}

Type 10 – Layout messages

Layout messages show the current display layout of a native page.

Example schema:

"$ref" : "MessageHeader",
"version": {
  "description": "Message Version, must be in x.x format",
  "type": "string",
  "required": true
                 },
"layoutControl": {
  "description": "Control on application page",
  "type": "object",
  "properties": {     
    "position": {
      "description": "Position of control",
      "type": "object",
      "properties": {     
        "x": { 
          "title": "X of the control",
          "type": "integer",
          "required": true
        },
        "y": { 
          "title": "Y of the control",
          "type": "integer",
          "required": true
        },
        "height": { 
          "title": "height of control",
          "type": "integer",
          "required": true
        },
        "width": { 
          "title": "width of control",
          "type": "integer",
          "required": true
        }
      },
      "additionalProperties" : false
    }
    "id": { 
      "title": "Id/Name/Tag of control",
      "type": "string",
      "required": true
    },
    "type": { 
      "title": "Type of control",
      "type": "string",
      "required": true
    },
    "subType": { 
      "title": "SubType of control",
      "type": "string",
      "required": true
    },
    "tlType": { 
      "title": "tlType of control that normalizes the control type for eventing",
      "type": "string",
      "required": true
    },
    "currState": { 
      "title": "Current state of control",
      "type": "object",
      "required": true,
      "properties": {     
        "?": { // Could be any variable name given by developer
            "title": "Additional data in string format",
            "type": "string",
            "required": false
        }
      }       
    },
    "style" : { 
      "title": "Style of the control",
      "type": "object",
      "required": true,
      "properties": {     
        "textColor": { 
          "title": "Text color",
          "type": "string",
          "required": true
        },
        "textAlphaColor": { 
          "title": "Text alpha color",
          "type": "string",
          "required": true
        },
        "textBGColor": { 
          "title": "Text background color",
          "type": "string",
          "required": true
        },
        "textBGAlphaColor": { 
          "title": "Text background alpha color",
          "type": "string",
          "required": true
        },
        "bgColor": { 
            "title": "Background color",
            "type": "string",
            "required": true
        },
        "bgAlphaColor": { 
            "title": "Background alpha color",
            "type": "string",
            "required": true
        }
      }    
    }
  },
  "additionalProperties" : false
}

Example message:

{
    "offset": 27004,
    "screenviewOffset": 4706,
    "count": 16,
    "fromWeb": false,
    "type": 10,
    "version" : "1.0",
    "orientation" : 0,
    "deviceHeight": 592,
    "deviceWidth":  360,
    "layout": {
        "name": "loginPage",
        "class": "loginPageActivty",
        "controls": [
            {
                "position": {
                    "y": 38,
                    "height": 96,
                    "width": 720,
                    "x": 0
                },
                "id": "com.tl.uiwidget:id\/userNameLabel",
                "idType": -1,
                "type": "UILabel",
                "subType": "UIView",
                "tlType": "label",
                "currState": {
                    "text": "User name*"
                },
                "style": {
                    "textColor": 16777215,
                    "textAlphaColor": 1,
                    "textBGColor": 0,
                    "textBGAlphaColor": 0,
                    "bgColor": 0,
                    "bgAlphaColor": 0
                }
            },
            {...},
            {...}
        ]
    }
}

Type 11 – Gesture messages

Gesture messages are used to log user actions and behavior. A Gesture message consists of a control identifier and a value returned by that control. The control identifiers are mapped to specific controls on the client logging platform. The value can be a number, a text string, or structured data.

Touch events
A touch event is a JSON object that represents a gesture finger. It is linked to a control underneath the finger. It is reused in the target property of gesture type 11.

Example schema:

{   
      "$ref" : "MessageHeader",   
      "focusInOffset": {        
      "title": "Milliseconds offset from offset for when focusIn of text fields occur",       
      "type": "integer",       
      "required": false   
      },   
      "target": {       
      "description": "Control being logged",       
      "type": "object",       
      "properties": {            
          "position": {       
              "description": "Position of control being logged",       
              "type": "object",       
              "properties": {            
                  "x": {        
                      "title": "X of the control",       
                      "type": "integer",       
                      "required": true       
                  },       
                  "y": {        
                      "title": "Y of the control",       
                      "type": "integer",       
                      "required": true       
                  },       
                  "height": {        
                      "title": "height of control",       
                      "type": "integer",       
                      "required": true       
                  },       
                  "width": {        
                      "title": "width of control",       
                      "type": "integer",       
                      "required": true       
                  },       
                  "relXY": {        
                      "title": "relative X & Y ratio that can be
                                from 0 to 1 with a default value of 0.5",       
                      "type": "string",       
                      "required": true for click events       
                  },
                  "scrollX": {
                     "title": "scroll X of the page",
                     "type": "integer",
                     "required": true
                  },
                  "scrollY": {
                     "title": "scroll Y of the page",
                      "type": "integer",
                      "required": true
                  },
              },       
              "additionalProperties" : false       
          }       
          "id": {        
              "title": "Id/Name/Tag of control",       
              "type": "string",       
              "required": true       
          },
          "idType":{                 
              "title": "Indicates what id is based on: Native id (e.g. HTML  'id' attribute): -1,
               xPath: -2, or Custom attribute for UIC and Hashcode value for Native: -3, or xPath for Native iOS/Android: -4",               
               "type": "integer",               
               "required": true            
          },       
          "dwell": {        
              "title": "Dwell time of control",       
              "type": "integer value that is in milliseconds",       
              "required": false       
          },       
          "focusInOffset": {        
              "title": "Offset when control got focus",       
              "type": "integer value that is in milliseconds",       
              "required": true in UIC       
          },       
          "visitedCount": {        
              "title": "Number of times a form control has been visited to be filled by
      user.",       
              "type": "integer",       
              "required": false       
          },       
          "isParentLink": {        
              "title": "To indicate if control a A type tag",       
              "type": "boolean",       
              "required": false only in UIC for usability       
          },       
          "name": {        
              "title": "Name of control",       
              "type": "string",       
              "required": true in UIC       
          },       
          "type": {        
              "title": "Type of control",       
              "type": "string",       
              "required": true       
          },       
          "subType": {        
              "title": "SubType of control",       
              "type": "string",       
              "required": true       
          },       
          "tlType": {        
              "title": "tlType of control that normalizes the control type for
      eventing",       
              "type": "string",       
              "required": true       
          },                 
          "prevState": {        
              "title": "Previous state of control",       
              "type": "object",       
              "required": false,       
              "properties": {            
                  "?": { // Could be any variable name given by developer       
                      "title": "Additional data in string format",       
                      "type": "string",       
                      "required": false       
                  }       
              }              
          },       
          "currState": {        
              "title": "Current state of control",       
              "type": "object",       
              "required": true,       
              "properties": {            
                  "?": { // Could be any variable name given by developer       
                      "title": "Additional data in string format",       
                      "type": "string",       
                      "required": false       
                  }       
              }              
          }       
      },       
      "additionalProperties" : false   
      }   
      "event": {       
      "description": "Event from control",       
      "type": "object",       
      "properties": {            
          "tlEvent": {        
              "title": "Tealeaf type of event",       
              "type": "string",       
              "required": true       
          },       
          "type": {        
              "title": "Type of event",       
              "type": "string",       
              "required": false       
          },       
          "subType": {        
              "title": "Subtype of event",       
              "type": "string",       
              "required": false       
          }       
      },       
      "additionalProperties" : false   
      }}

Tap events
This contains only one touch object.

Example schema:

{
    "$ref" : "MessageHeader",
    "event": {
        "description": "Event from control",
        "type": "object",
        "properties": {     
            "tlEvent": { 
                "title": "Tealeaf type of event",
                "type": "string",
                "required": true
            },
            "type": { 
                "title": "Type of event framework reports",
                "type": "string",
                "required": false
            }
        }
    },
    "touches": {
        "description": "Gestures touch objects per finger.",
        "type": "array",
        "required": true
        "items": {
                "description": "Touch objects per finger starting with intial and ends with last object when finger is lifted from device.",
                "type": "array",
                "required": true,
                "$ref": "Touch"
            }
        }
    }
}

Example message for a tap event:

{
  "fromWeb": false,
  "type": 11,
  "offset": 46788,
  "screenviewOffset": 42208,
  "count": 14,
  "event": {
    "type": "ACTION_DOWN",
    "tlEvent": "tap"
  },
  "touches": [
    [
      {
        "position": {
          "x": 179,
          "y": 543
        },
        "control": {
          "position": {
            "height": 184,
            "width": 1080,
            "relXY": "0.17,0.93"
              "scrollX": 10
              "scrollY": 15
          },
          "id": "[RL,0]",
          "idType": -4,
          "type": "RelativeLayout",
          "subType": "ViewGroup",
          "tlType": "canvas"
        }
      }
    ]
  ]
}

Example message for a double-tap event:

{
  "fromWeb": false,
  "type": 11,
  "offset": 49585,
  "screenviewOffset": 45005,
  "count": 15,
  "event": {
    "type": "ACTION_DOWN",
    "tlEvent": "doubleTap"
  },
  "touches": [
    [
      {
        "position": {
          "x": 182,
          "y": 520
        },
        "control": {
          "position": {
            "height": 184,
            "width": 1080,
            "relXY": "0.17,0.8"
              "scrollX": 10
              "scrollY": 15
          },
          "id": "[RL,0]",
           "idType": -4,
          "type": "RelativeLayout",
          "subType": "ViewGroup",
          "tlType": "canvas"
        }
      }
    ]
  ]
}

Example message for a tap-hold event:

{
  "fromWeb": false,
  "type": 11,
  "offset": 52389,
  "screenviewOffset": 47809,
  "count": 16,
  "event": {
    "type": "ACTION_DOWN",
    "tlEvent": "tapHold"
  },
  "touches": [
    [
      {
        "position": {
          "x": 182,
          "y": 536
        },
        "control": {
          "position": {
            "height": 184,
            "width": 1080,
            "relXY": "0.17,0.89"
              "scrollX": 10
              "scrollY": 15
          },
          "id": "[RL,0]",
          "idType": -4,
          "type": "RelativeLayout",
          "subType": "ViewGroup",
          "tlType": "canvas"
        }
      }
    ]
  ]
}

Swipe events
The swipe event contains only one touch object. Which will be the initial location with its corresponding direction and velocity.

Example schema:

{
    "$ref" : "MessageHeader",
    "event": {
        "description": "Event from control",
        "type": "object",
        "properties": {     
            "tlEvent": { 
                "title": "Tealeaf type of event",
                "type": "string",
                "required": true
            },
            "type": { 
                "title": "Type of event framework reports",
                "type": "string",
                "required": false
            }
        }
    },
    "touches": {
        "description": "Gestures touch objects per finger.",
        "type": "array",
        "required": true
        "items": {
                "description": "Touch objects per finger starting with intial and ends with last object when finger is lifted from device.",
                "type": "array",
                "required": true,
                "$ref": "Touch"
            }
        }
    },
    "direction": { 
        "title": "The direction of the swipe which can be up, down. left or right.",
        "type": "string",
        "required": true
    },
    "velocityX": { 
        "title": "The velocity of this measured in pixels per second along the x axis",
        "type": "float",
        "required": true
    },
    "velocityY": { 
        "title": "The velocity of this measured in pixels per second along the y axis",
        "type": "float",
        "required": false
    }
}

Example message:

{
  "fromWeb": false,
  "type": 11,
  "offset": 54409,
  "screenviewOffset": 49829,
  "count": 17,
  "event": {
    "type": "ACTION_DOWN",
    "tlEvent": "swipe"
  },
  "direction": "right",
  "velocityX": 7762.8466796875,
  "velocityY": 127.47991943359375,
  "touches": [
    [
      {
        "position": {
          "x": 75,
          "y": 538
        },
        "control": {
          "position": {
            "height": 184,
            "width": 1080,
            "relXY": "0.07,0.9"
              "scrollX": 10
              "scrollY": 15
          },
          "id": "[RL,0]",
          "type": "RelativeLayout",
          "subType": "ViewGroup",
          "tlType": "canvas"
        }
      },
      {
        "position": {
          "x": 212,
          "y": 526
        },
        "control": {
          "position": {
            "height": 184,
            "width": 1080,
            "relXY": "0.2,0.84"
              "scrollX": 10
              "scrollY": 15
          },
          "id": "[RL,0]",
          "idType": -4,
          "type": "RelativeLayout",
          "subType": "ViewGroup",
          "tlType": "canvas"
        }
      }
    ]
  ]
}

Pinch events
The pinch event contains only an initial and the last touch object per finger. It includes the corresponding direction.

Example schema:

{
    "$ref" : "MessageHeader",
    "event": {
        "description": "Event from control",
        "type": "object",
        "properties": {     
            "tlEvent": { 
                "title": "Tealeaf type of event",
                "type": "string",
                "required": true
            },
            "type": { 
                "title": "Type of event framework reports",
                "type": "string",
                "required": false
            }
        }
    },
    "touches": {
        "description": "Gestures touch objects per finger.",
        "type": "array",
        "required": true
        "items": {
                "description": "Touch objects per finger starting with intial and ends with last object when finger is lifted from device.",
                "type": "array",
                "required": true,
                "$ref": "Touch"
            }
        }
    },
    "direction": { 
        "title": "Direction of pinch which can be open or close",
        "type": "string",
        "required": true
    }
}

Example message:

{
    "type": 11,
    "offset": 2220,
    "screenviewOffset": 2022,
    "count": 6,
    "fromWeb": false,
    "event": {
        "tlEvent": "pinch",
        "type": "onScale"
    },
    "touches": [ 
        [
            {
                "position": {
                    "y": 388,
                    "x": 0
                },
                "control": {
                    "position": {
                        "height": 100,
                        "width": 100,
                        "relXY": "0.6,0.8"
                          "scrollX": 10
                          "scrollY": 15
                    },
                    "id": "com.tl.uic.appDarkHolo:id/imageView1",
                    "idType": -1,
                    "type": "ImageView",
                    "subType": "View",
                    "tlType": "image"
                }
            },
            {
                "position": {
                    "y": 388,
                    "x": 400
                },
                "control": {
                    "position": {
                        "height": 100,
                        "width": 100,
                        "relXY": "0.4,0.7"
                          "scrollX": 10
                          "scrollY": 15
                    },
                    "id": "com.tl.uic.appDarkHolo:id/imageView1",
                    "idType": -1,
                    "type": "ImageView",
                    "subType": "View",
                    "tlType": "image"
                }
            }
        ],
        [
            {
                "position": {
                    "y": 388,
                    "x": 800
                },
                "control": {
                    "position": {
                        "height": 100,
                        "width": 100,
                        "relXY": "0.6,0.8"
                          "scrollX": 10
                          "scrollY": 15
                    },
                    "id": "com.tl.uic.appDarkHolo:id/imageView1",
                    "idType": -1,
                    "type": "ImageView",
                    "subType": "View",
                    "tlType": "image"
                }
            },
            {
                "position": {
                    "y": 388,
                    "x": 500
                },
                "control": {
                    "position": {
                        "height": 100,
                        "width": 100,
                        "relXY": "0.4,0.7"
                          "scrollX": 10
                          "scrollY": 15
                },
                    "id": "com.tl.uic.appDarkHolo:id/imageView1",
                    "idType": -1,
                    "type": "ImageView",
                    "subType": "View",
                    "tlType": "image"
                }
            }
        ]
    ],
   "direction": "close"
}

Type 12 – DOM Capture messages

DOM Capture messages contain serialized HTML data (DOM snapshot) of the page.

📘

Note:

DOM diff is supported only in Tealeaf SaaS. In Tealeaf On-premises, DOM diff is supported for web-only and not supported for replaying Hybrid Mobile apps.

Example schema:

"$ref" : "MessageHeader",
"domCapture": {
    "description": "Serialized HTML snapshot of the document.",
    "type": "object",
    "properties": {     
        "dcid": {
            "title": "Unique identifier of this DOM snapshot.",
            "type": "string",
            "required": true
        }
          "fullDOM": {
            "title": "Flag indicating if the contents of this message contain a full DOM or a DOM diff.",
            "type": "boolean",
            "required": false        
        },
            "charset": { 
            "title": "Browser reported charset of the document.",
            "type": "string",
            "required": false
        },
        "root": { 
            "title": "Serialized HTML of the document.",
            "type": "string",
            "required": false
        },        
        "diffs": {
            "title": "List of DOM diff entries. Each entry can contain a HTML Diff or an attribute diff.",
            "type": "array",
            "required": false,
            "Item": {
                "title": "An object containing the DOM diff. The diff can be a HTML diff or an attribute diff.",
                "type": "object",
                "required": false,
                "properties": {
                    "xpath": {
                        "title": "The xpath of the node.",
                        "type": "string",
                        "required": true
                    },
                    "root": { 
                        "title": "Serialized HTML of the node referred by the xpath. Presence of this property constitutes a HTML diff.",
                        "type": "string",
                        "required": false
                    },
                    "attributes": {
                        "title": "List of attribute diff entries. Each entry contains a single attribute diff corresponding to the node referred by the xpath. Presence of this property constitutes an attribute diff.",
                        "type": "array",
                        "required": false,
                        "Item": {
                            "title": "An object containing the attribute diff.",
                            "type": "object",
                            "required": true,
                            "properties": {
                                "name": {
                                    "title": "The attribute name.",
                                    "type": "string",
                                    "required": true
                                },
                                "value": {
                                    "title": "The attribute value.",
                                    "type": "string",
                                    "required": true
                                }
                            }
                        }
                    }
                }
            }
        },
        "eventOn": { 
            "title": "Flag indicating if Tealeaf eventing should be enabled for this DOM Capture snapshot.",
            "type": "boolean",
            "required": false
        },
        "url": { 
            "title": "URL path of the snapshot document",
            "type": "string",
            "required": false
        },
        "host": { 
            "title": "URL Host of the snapshot document",
            "type": "string",
            "required": false
        },
        "error": { 
            "title": "Error message",
            "type": "string",
            "required": false
        },
        "errorCode": { 
            "title": "Error code corresponding to the error message.",
            "type": "integer",
            "required": false
        },
        "frames": { 
            "title": "Serialized HTML of any child frames of the document",
            "type": "array",
            "required": false,
            "Item": {
                "title": "An object containing serialized HTML of the frame",
                "type": "object",
                "required": false,
                "properties": {

                    "tltid": {

                        "title": "Unique identifier for this frame. Same tltid is added to the serialized HTML source of the parent."

                        "type": "string",
                        "required": true

                    },

                    "charset": { 
                        "title": "Browser reported charset of the document.",
                        "type": "string",
                        "required": true
                    },
                    "url": { 
                        "title": "URL path of the snapshot document",
                        "type": "string",
                        "required": true
                    },
                    "host": { 
                        "title": "URL Host of the snapshot document",
                        "type": "string",
                        "required": true
                    },

                    "root": { 
                        "title": "Serialized HTML of the document.",
                        "type": "string",
                        "required": true
                    }
                }
            }       
        },
        "canvas" : { 
            "title": "Serialized data of the canvas snapshot.",
            "type": "array",
            "required": false,
        }
    },
    "additionalProperties" : false
}

Example message: This example shows a DOM message with full DOM capture enabled.

{ 
    // DOM Capture messages use type 12
    "type": 12,

    // The standard UIC message properties
    "offset": 16821,
    "screenviewOffset": 16817,
    "count": 5,
    "fromWeb": true,

    "domCapture": {
        "dcid": "dcid-3"
        "fullDOM":true
        "charset": "ISO-8859-1",
        "root": "<html><body><iframe id="greeting.html" tltid="tlt-4"/></body></html>",
        "host": "http://www.uictest.com",
        "url": "/h4/dcTest.html",
        "eventOn": true,
        "frames": [
            {
                "tltid": "tlt-4",
                "root": "<html><body>Hello, World!</body></html>",
                "charset": "ISO-8859-1",
                "host": "http://www.uictest.com",
                "url": "/h4/greeting.html"
            }
        ],
        "canvas": []
    }
}

This example shows a DOM capture message with DOM diff enabled.

📘

Note:

DOM diff is supported only in Tealeaf SaaS. In Tealeaf On-premises, DOM diff is supported for web-only and not supported for replaying Hybrid Mobile apps.

{
    "type": 12,
    "offset": 13874,
    "screenviewOffset": 13861,
    "count": 6,
    "fromWeb": true,
    "domCapture": {
        "fullDOM": false,
        "diffs": [
            {
                "xpath": "[[\"html\",0],[\"body\",0],[\"div\",1]]",
                "root": "<div class=\"bluebg\"><div><div>Input 1<input type=\"text\" name=\"ip-x-1\" value=\"\"></div></div></div>"
            }
        ],
        "dcid": "dcid-3.1437256358764",
        "eventOn": false
    }
}

 

DOM Diff (with HTML and attribute diff):

{
    "type": 12,
    "offset": 5794,
    "screenviewOffset": 5777,
    "count": 8,
    "fromWeb": true,
    "domCapture": {
        "fullDOM": false,
        "diffs": [
            {
                "xpath": "[[\"html\",0],[\"body\",0],[\"div\",2],[\"div\",1]]",
                "root": "<div>Select List:<select name=\"select.pvt\"><option value=\"O1\" selected=\"selected\">1</option><option value=\"O2\">2</option><option value=\"O3\">3</option></select></div>"
            },
            {
                "xpath": "[[\"cb1\"]]",
                "attributes": [
                    {
                        "name": "style",
                        "value": "height: 13px; width: 13px; visibility: hidden;"
                    }
                ]
            },
            {
                "xpath": "[[\"container_1\"],[\"table\",0],[\"tbody\",0],[\"tr\",2],[\"td\",1],[\"select\",0]]",
                "attributes": [
                    {
                        "name": "style",
                        "value": "visibility: hidden;"
                    }
                ]
            }
        ],
        "dcid": "dcid-3.1437256879815",
        "eventOn": false
    }

}

This example shows the error message when the captured DOM message length exceeds the configured threshold.

{ 
    // DOM Capture messages use type 12
    "type": 12,

    // The standard UIC message properties
    "offset": 16821,
    "screenviewOffset": 16817,
    "count": 5,
    "fromWeb": true,

    // The DOM Capture data is namespaced in the domCapture object
    "domCapture": {
        // The "error" contains the verbose error message explaining why the DOM Capture couldn't be performed.
        "error": "Captured length (18045) exceeded limit (10000).",

        // The "errorCode" contains the numeric code for this error message. Currently, there is only 1 error message.
        "errorCode": 101,

        // The "dcid" property contains the unique string identifying this DOM Capture within the page instance.
        "dcid": "dcid-1.1414088027401"
    }
}

Type 13 – GeoLocation messages

A GeoLocation message logs a user's location information. The message consists of a control identifier and a GeoLocation value.
If the user permits to use location data, GeoLocation returns the latitude, longitude, and accuracy values. If the user does not permit to use location data, GeoLocation returns an error code and error string.

Example schema:
This is the schema for messages from a device that the user has given permission to use location data.

"$ref" : "MessageHeader",
    "geolocation": {   
      "lat": double,     
      "long": double,     
      "accuracy": float
      }

This is the schema for messages from a device that the user has not given permission to use location data.

"$ref" : "MessageHeader",
    "geolocation": {   
      "errorCode": int,     
      "error": "string",     
      }

This is an example of a message from a device that the user has given permission to use location data.

{   "type": 13,                     
     "geolocation": {       
     "lat": 37.5680,                      
     "long": -122.3292,           
     "accuracy": 65                
     }
}

This is an example of a message from a device that the user has not given permission to use location data.

{   "type": 13,                     
     "geolocation": {       
      "errorCode": 201,         
      "error": "permission denied",
    }
}

Type 14 – Cookie messages

Cookie messages capture cookie information from an application as name-value pairs.

"$ref" : "MessageHeader",
cookies: {
    cookieName: cookieValue}

The following example shows the records of the cookie values after each screen view load.

{
    "type" : 14,
    "offset" : 5796,
    "screenviewOffset" : 10,
    "count" : 4,
    "fromWeb" : true,
    "cookies" :{
        "cookieName1" : "valueA",
        "cookieName2": "valueB"
    }
}

Accessibility array

The accessibility array provides a unique ID to identify type 4, 10, and 11 controls in JSON. The array and its contents are optional. It appears in the JSON if it is set by the developer in the storyboard or programmatically before any type 4, 10, or 11 messages are captured. The "id", "label", and "hint" properties are strings.

" accessibility ": {
                 "id": "accAddToCartBtnId",
                 "label": "accAddToCartLabel",
                 "hint": "accessibility Add To Cart Hint"
               }

This is the example for the accessibility array in type 4 messages.

{
     "message": {
       "focusInOffset": 0,
       "target": {
         "visitedCount": 1,
         "dwell": 0,
         "prevState": {
           "text": "Add to Cart"
         },
         "id": "[w,0],[v,0],[v,1],[v,0],[v,0],[v,0],[v,0],[v,0],[v,0],[tbl,0],[tc,1],[v,0],[b,0]",
         "tlType": "button",
         "idType": -4,
         " accessibility ": {
           "id": "accAddToCartBtnId",
           "label": "accAddToCartLabel",
           "hint": "accessibility Add To Cart Hint"
         },
         "position": {
           "y": 8,
           "relXY": "0.3752,0.4848",
           "x": 24,
           "width": 366,
           "height": 44
         },
         "currState": {
           "font": {
             "name": ".SFUIText",
             "size": 15
           },
           "text": "Add to Cart"
         },
         "type": "UIButton",
         "style": {
           "textBGAlphaColor": 1,
           "hidden": false,
           "textAlphaColor": 1,
           "bgColor": 9294591,
           "alphaBGColor": 1,
           "textColor": 16777215,
           "textBGColor": 16777215
         }
       },
       "fromWeb": false,
       "offset": 5644,
       "screenviewOffset": 375,
       "count": 26,
       "event": {
         "tlEvent": "click",
         "type": "addToCart:"
       },
       "type": 4
     }
   }

This is the example for the accessibility array in type 10 messages.

{
             "zIndex": 506,
             "subType": "UIControl",
             "tlType": "button",
             "id": "[w,0],[v,0],[v,1],[v,0],[v,0],[v,0],[v,0],[v,0],[v,0],[tbl,0],[tc,1],[v,0],[b,0]",
             "position": {
               "y": 406,
               "x": 24,
               "width": 366,
               "height": 44
             },
             " accessibility ": {
               "id": "accAddToCartBtnId",
               "label": "accAddToCartLabel",
               "hint": "accessibility Add To Cart Hint"
             },
             "idType": -4,

This is an example of the accessibility array in type 11 messages.

{
     "message": {
       "offset": 5646,
       "screenviewOffset": 376,
       "fromWeb": false,
       "event": {
         "tlEvent": "tap",
         "type": "TLFTouchRecognizer"
       },
       "count": 25,
       "type": 11,
       "touches": [
         [
           {
             "control": {
               "zIndex": 0,
               "subType": "UIControl",
               "tlType": "button",
               "id": "[w,0],[v,0],[v,1],[v,0],[v,0],[v,0],[v,0],[v,0],[v,0],[tbl,0],[tc,1],[v,0],[b,0]",
               "position": {
                 "width": 366,
                 "relXY": "0.38,0.48",
                 "height": 44
               },
               " accessibility ": {
                 "id": "accAddToCartBtnId",
                 "label": "accAddToCartLabel",
                 "hint": "accessibility Add To Cart Hint"
               },
               "idType": -4,
               "cssId": "w0v0v1v0v0v0v0v0v0tbl0tc1v0b0",
               "type": "UIButton"
             },
             "position": {
               "x": "161",
               "y": "427"
             }
           }
         ]
       ]
     }
   }

Step-based eventing messages

In step-based eventing, the data from the client framework is submitted in JSON format. and is available through Browser Based Replay for review and eventing. For information about creating events based on this data format, see Step-based eventing.