Enable rich media interaction signals in the Connect web library

The rich media interaction signal captures user interactions with video and audio content on your website. This enables audience segmentation based on content consumption patterns and engagement levels.

Reasons to enable:

  • Track customer video review engagement
  • Monitor product video consumption
  • Measure tutorial or demo video completion
  • Understand audio content engagement
  • Segment users based on media interaction behavior

Availability: Premium and Ultimate


Implementation considerations

Capturing data

Most video players offer well-documented APIs that you can use to capture interaction events. Consult your video player API documentation to identify available events and how to access media information.

Interaction types

The signal supports these interaction types:

  • LOAD - Media file begins loading
  • LAUNCH - User initiates playback
  • PAUSE - User pauses playback
  • CONTINUE - User resumes playback after pausing
  • COMPLETE - User reaches the end of the media
  • STOP - User stops playback before completion
  • ENLARGE - User enters fullscreen or expands player

Event timing

Some players fire events multiple times (for example, multiple pause/play cycles). Decide whether to track every interaction or only significant milestones.


Configuration

Method

TLT.logSignal(signalObject)

Sends the signal to the Acoustic Connect endpoint as a JSON object. The Connect library must be initialized before calling this method.

Signal structure

Top-level fields

  • category: String - Valid value - Behavior.
  • description: String - Description of the signal
  • effect: String - Describes the effect of the signal on engagement. Valid values: negative, positive. Use positive for rich media interactions.
  • name: String - Name to differentiate this signal from others (for example, "Product review interaction from website"). Max length - 256 chars.
  • signalType (required): String - Valid value - richMediaInteraction.

Signal content

  • interactionType: String - The type of user interaction with the media. Valid values: LOAD, LAUNCH, PAUSE, CONTINUE, COMPLETE, STOP, ENLARGE.
  • mediaCategory: String - The category the media falls into (for example, "video", "audio", "product demo").
  • mediaId (required): String - The URL or unique identifier of the media file. You can extract the ID from video element attributes or retrieve it from the video player API.
  • mediaName: String - The title of the audio or video file
  • signalCustomAttributes: Array of objects - Additional custom attributes. Each object has name and value string fields.
  • url: String - The URL of the page where the media file is embedded.

Notes:

  • If any required field is missing or invalid, the entire signal will be discarded.
  • Optional fields enhance the signal but won't prevent processing if omitted or invalid.

Example

// Check that the Connect SDK is present and videojs API is available
// See videojs player API documentation: https://docs.videojs.com/
// Other video players will have their own APIs, adjust code as needed.
if (window.TLT && window.TLT.isInitialized() && typeof window.videojs === "function") {

    const signal = {
        signalType: "richMediaInteraction",
        name: "richMediaInteraction generated by web site",
        category: "Behavior",
        mediaId: "", // Required
        url: "",
        mediaCategory: "",
        mediaName: "",
        interactionType: "",
        effect: "positive",
        signalCustomAttributes: []
    };

    function sendRichMediaInteractionSignal(mediaId, mediaName, interactionType) {
        signal.mediaId = mediaId;
        signal.url = window.location.href;
        signal.mediaCategory = "Video";
        signal.mediaName = mediaName;
        signal.interactionType = interactionType;
        TLT.logSignal(signal);
    }

    window.videojs("example_video").ready(function () {
        const player = this;
        const mediaId = player.cache_.src;
        const mediaName = mediaId.substring(mediaId.lastIndexOf("/") + 1);
        player.on("play", sendRichMediaInteractionSignal(mediaId, mediaName, "continue"));
        player.on("pause", sendRichMediaInteractionSignal(mediaId, mediaName, "pause"));
        player.on("ended", sendRichMediaInteractionSignal(mediaId, mediaName, "complete"));
    }());
}