Developer
User guidesDeveloper websiteHelp centerLog in
  • Welcome!
  • Organisations structure
    • Datamart
    • Users and roles
  • User points
    • User identifiers
      • Networks IDs
        • Device-based Network IDs
          • Custom Device ID integration
          • ID5
          • First ID
        • User-based Network IDs
          • Custom User ID integration
          • UTIQ martechpass
      • Accounts
      • Emails
      • Device identifiers
    • User activities and events
    • Compartments
    • User profiles
    • User segments
    • Hyper point & Quarantine
  • Data model
    • Defining your schema
    • Computed fields
      • Concepts
      • Setup
      • Development
      • Examples
  • Data ingestion
    • Real time user tracking
      • Website tracking
      • Mobile apps tracking
      • Ads exposure tracking
      • AMP tracking
      • Conversions tracking
      • Email views and clicks
      • Tracking API
      • Event rules
      • Activity analyzers
    • Bulk processing
      • Imports
        • User activities import
        • User profiles import
        • User choices import
        • Segments import
      • Deletions
        • User identifiers deletion
        • Device points deletion
        • User points deletion
      • User identifiers association
      • Integration batch
    • Activities analytics
    • Data warehouse
      • Preliminary setup
        • BigQuery
      • Create data warehouse
  • Querying your data
    • OTQL queries
    • OTQL examples
    • GraphQL queries
    • UserPoint API
    • User activities
    • Activities analytics queries
      • API Quickstart
      • Dimensions and metrics
      • Use cases
    • Funnel API
  • Alerting
    • Alert configurations
  • Data visualisation
    • Quickstart
    • Dashboards
    • Sections and cards
    • Charts
    • Datasets and data sources
      • Using a data file data source
    • Transformations
    • Filters
    • Cookbook
    • Reference
  • Advanced usages
    • Audience segmentation
      • Audience features
      • Segment builders
      • Audience segment metrics
      • Audience segment feed
        • Building new feeds
        • Monitoring a feed
        • Curated Audiences (SDA)
      • Edge segments
      • Cohort-based Lookalike
    • Contextual targeting
      • Setup
      • Activation
        • Google Ad Manager
        • Xandr (through prebid.js)
      • API documentation
    • Exporting your data
      • Query Exports
      • Datamart replication
    • Data privacy compliance
      • User choices
      • Cleaning rules
      • Exercise of user rights
      • Cookies
    • Campaigns
    • Automations
      • Email routers
      • Email renderers
      • Opt-in provider
      • Custom action plugins
      • Usage limits for automations
    • Plugins
      • Concepts
      • Creation & Deployment
      • Coding your plugin
      • Manage existing plugins
      • Layouts
      • Presets
      • Monitoring
      • Throttling
      • Batching (for external feeds)
    • Platform monitoring
      • Resources usage
        • Dimensions and metrics
      • Collection volumes
        • Dimensions and metrics
      • Events ingestion monitoring
        • Dimensions and metrics
    • Data Clean Room
      • Bunker
      • Clean room
  • Resources
    • Tutorial: Data Ingestion
      • Your first events
        • Add the mediarithmics tag
          • Getting the tag
          • Adding the tag
        • Send events using the tag
          • Adding event properties
          • Finding the UserEvent type in your schema
          • Matching your schema
          • Standard events
      • Your first bulk imports
        • API basics
          • Authentication
          • Your first API call
        • Send documents using the API
          • Requirements
          • Sending documents
    • Using our API
      • Authentication
    • Tools & libraries
      • mics CLI
      • JS Tag
      • Plugin SDK
    • Data cubes
      • Creating a report
      • Reference
Powered by GitBook
On this page
  • Endpoints to implement
  • Send email contents to the renderer
  • PluginEmailMeta
  • PluginEmailContent
  • PluginEmailData
  • Available outbound services
  • Retrieve the instance properties
  • Creating an email router plugin
  • Interfaces to implement
  • Debugging
  • Plugin logs and metrics
  • Creating a new email template associated to the renderer
  • Create an email template

Was this helpful?

Export as PDF
  1. Advanced usages
  2. Automations

Email renderers

PreviousEmail routersNextOpt-in provider

Last updated 1 year ago

Was this helpful?

An email renderer plugin is a that can be associated to an email template, allowing you to customize the rendering of the template.

If you don't know what a plugin is, you can find

If you're looking to make a connection with your email router, you should look at the plugin type.

Endpoints to implement

Email renderers need to implement only one endpoint.

Send email contents to the renderer

POST myworker/v1/email_contents

This endpoint is called just before the email is sent. The email renderer replies to the request with the email content. There is no particular requirement on the latency, however, the best practice is to maintain a rendering latency below 200 ms.

Request Body

Name
Type
Description

email_tracking_url

string

The URL of the pixel tracking for view event to be inserted in the email content.

click_urls

array

The URLs to prepend the click through URL of the email content, see below.

user_data_bag

object

Customizable object.

user_identifiers

object

The available user identifiers for the user.

campaign_technical_anme

string

The campaign technical name.

campaign_id

string

The ID of the campaign.

creative_id

string

The ID of the email template.

context

string

The call context. One of LIVE, STAGE or PREVIEW.

call_id

string

The email call ID.

email_renderer_id

string

The ID of the email renderer plugin instance. Used to retrieve the instance properties.

{
    "meta": {
        "from_name": "string",
        "to_email": "string",
        "to_name": "string",
        "reply_to": "string",
        "subject_line": "string"
    },
    "content": {
        "html": "string",
        "text": "string"
    },
    "data": {}
}

PluginEmailMeta

Field

Type

Description

from_name

String

to_email

String

to_name

String

reply_to

String

subject_line

String

The subject line, overriding the email campaign subject if defined.

PluginEmailContent

Field

Type

Description

html

String (optional)

The html content of the email.

text

String (optional)

The text content of the email.

PluginEmailData

This object is customizable.

Available outbound services

Retrieve the instance properties

GET https://api.mediarithmics.com/v1/creatives/:id/renderer_properties

Get the properties associated with the email renderer plugin instance.

Path Parameters

Name
Type
Description

id

string

ID of the email renderer plugin instance, typically theemail_renderer_id from the incoming request.

{
  "status": "ok",
  "data": [
    {
      "technical_name": "provider",
      "value": { "value": "mediarithmics" },
      "property_type": "STRING",
      "origin": "PLUGIN_STATIC",
      "writable": false,
      "deletable": false
    },
    {
      "technical_name": "name",
      "value": { "value": "Email renderer example" },
      "property_type": "STRING",
      "origin": "PLUGIN_STATIC",
      "writable": false,
      "deletable": false
    }
  ]
}

Creating an email router plugin

An email renderer plugin has the EMAIL_TEMPLATE_RENDERER plugin type. Its group id should be {domain.organisation.email-renderer} (for example com.mediarithmics.email-renderer).

Its artifact id should be the name of the email renderer plugin, i.e. example-email-renderer.

We can provide you with a Hello World project using our SDK. Please contact your support to obtain access to it.

Interfaces to implement

Your should extend EmailRendererPlugin class and implement the onEmailContents function from the plugin SDK.

The onEmailContents function is called just before the email is sent. It is responsible for providing the email content to the router.

Don't forget to catch your errors. You should log / respond with the appropriate message to facilitate debugging.

import {core} from '@mediarithmics/plugins-nodejs-sdk';
import {EmailRenderRequest} from '@mediarithmics/plugins-nodejs-sdk/src/mediarithmics/api/plugin/emailtemplaterenderer/EmailRendererRequestInterface';
import {EmailRendererPluginResponse} from '@mediarithmics/plugins-nodejs-sdk/src/mediarithmics/api/plugin/emailtemplaterenderer/EmailRendererPluginResponse';
import {EmailRendererBaseInstanceContext} from '@mediarithmics/plugins-nodejs-sdk/lib/mediarithmics';

export interface ExampleEmailRendererConfigurationFileProperties {
  apiToken: string;
}

export class ExampleEmailRenderer extends core.EmailRendererPlugin {
  constructor(enableThrottling = false) {
    super(enableThrottling);
  }

  protected async onEmailContents(
      request: EmailRenderRequest,
      instanceContext: EmailRendererBaseInstanceContext
  ): Promise<EmailRendererPluginResponse> {

    // do stuff

    return {
      meta: {}, // use this to set email addresses, subject, ...
      content: {}, // use this to set content
      data: {} // with this you can provide additional data to the email router
    };
  }
}

Debugging

Plugin logs and metrics

Creating a new email template associated to the renderer

Create an email template

POST https://api.mediarithmics.com/v1/email_templates

Request Body

Name
Type
Description

type

string

"EMAIL_TEMPLATE"

renderer_group_id

string

renderer_artifact_id

string

organisation_id

string

The ID of the organisation

name

string

The name of the template.

editor_group_id

string

"com.mediarithmics.template.email"

editor_artifact_id

string

"default_editor"

{
    "status": "ok",
    "data": {
        "type": "EMAIL_TEMPLATE",
        "id": "123",
        "organisation_id": "123",
        "name": "Test email with renderer",
        "technical_name": null,
        "archived": false,
        "editor_version_id": "1020",
        "editor_version_value": "1.0.0",
        "editor_group_id": "com.mediarithmics.template.email",
        "editor_artifact_id": "default-editor",
        "editor_plugin_id": "1015",
        "renderer_version_id": "123",
        "renderer_version_value": "1.0.0",
        "renderer_group_id": "com.test-organisation.email-renderer",
        "renderer_artifact_id": "test-organisation-example-email-renderer",
        "renderer_plugin_id": "123",
        "creation_date": 1618003512488,
        "subtype": null
    }
}

See to learn why you should use the email_renderer_id parameter to retrieve the instance properties.

About click_urls: when constructing the final URL, it's essential that you properly URL encode the click URLs. For example, if you have List("http://url1/?redirect=", "") and a destination URL equal to http://dest/, the result must be equal to http://url1/?redirect=http%3A%2F%2Furl2%2F%3Fredirect%3Dhttp%253A%252F%252Fdest%252F which is http://url1/?redirect=url_encode(http://url2/?redirect=url_encode(http://dest/))

The code of the email renderer can call the following API endpoints to retrieve.

See the documentation to see .

Use our to create your email renderer plugin in Node.js: the required routes are already defined and you only have to override specific functions.

You can find a sample email renderer plugin .

The project structure and files work as .

You can monitor email router plugins.

plugin
complete documentation in the specific section.
Email router
http://url2/?redirect=
plugins
how plugins are created and deployed
Plugin SDK
in the examples folder of the plugin SDK
with every other plugin
as you do with all plugins
Plugin Instances
its instance context