How to Connect to PostgreSQL as an External Data Source

Some companies use several platforms to collect and manage customer data. Thus, sometimes you need to add to messages certain content based on customer data tracked or stored at third-party platforms, such as an external CRM, mobile application, database, etc. For example, you want to add to an email personalized product recommendations based on offline sales or orders made via calls and need access to this data.

To access data from third-party sources and use it for content substitution, use a preprocessor or connect to external data sources, such as Google Sheets, BigQuery or PostgreSQL.

Connection to PostgreSQL would be the most optimal option if you need to

  • add extra fields for segmentation by contact fields;
  • configure seamless synchronization of content component;
  • get extra data on contacts in order to build precise segments based on specific conditions.

1. Set up a connector.

1. Go to your personal profile > Settings > Connectors > and select Connect PostgreSQL.

Select Connect PostgreSQL

2. Fill in all fields:

  • Name. Required.
  • Host. Can be the domain name of the remote server or its IP address.
  • Port. Entered automatically by default.
  • Database. Name of the database on a remote server.
  • Username. User's database login (read only user role is enough). Required.
  • Password. Required.

Fill in fields

You may click Validate connection to test whether authorization data is entered correctly. In case of a successful connection, the corresponding service notification will appear in the top right corner. If the connection failed, check the entered data and contact your system administrator if needed.

3. In Set unique contact field, select a table column that contains a unique contact key and eSputnik unique contact key. They should match.

For example, you choose Email. After connection, the column of the PostgreSQL table with email addresses will be mapped to the corresponding field in the eSputnik system.

Table with contact data

Aside from email addresses, uniqueness of contacts can be determined by a phone number, internal contact ID or additional contact field.

Important!

The created connector can be used to connect to several data sources. All of them will have the same unique contact key so it’s recommended to use one key in all tables. To use a different key, then create another connector to the same database and set a different unique contact field.

4. Click Save.

2. Configure a data source.

Your external database may contain several tables, and you need to select which one you want to connect to.

1. Go to your personal profile > Settings > Data sources, click New data source and select External data source.

External data source

2. Select the created connector.

Select the created connector

3. Select dataset and table and enter a source name. Click Save.

Select dataset

4. Now, import contacts to eSputnik and fill the external source with data.

Import contacts

Now you can build segments based on the imported contact fields.

Build a segment

Important!

Connection to the external database doesn’t presuppose contact import. Segmentation is only available for contacts that exist both in your eSputnik account and in the external database. Synchronize and update contacts before creating campaigns.

3. Add data to a message.

To insert data, you need to reference it using a Velocity parameter $!data.get(‘source_name’). As an example, we will be using the created source with the name promo_codes.

Bulk campaign to a segment

For example, you plan a campaign to a contact kozak@example.com.

Example of table

A set of data will be extracted from the table and inserted into an object:

{
  "data": {
    "promo_codes": [
      {
        "id": "2",
        "email": "kozak@example.com",
        "name": "Dina Kozak",
        "birthday": "2020-09-02T00:00:00Z",
        "promo_code": "AAAA-BBBB-DDDD"
      }
    ]
  }
}

Fields of the array promo_codes can be referenced in two ways:

  • With parameters (if you know the number of parameters in the array).
$!data.get('promo_codes').get(0).get('name')

$!data.get('promo_codes').get(0).get('promo_code')
  • With a loop (most common method).
#foreach($pc in $!data.get('promo_codes'))

$!pc.get('name')

$!pc.get('promo_code')

#end

Triggered campaign

First, you need to create a dynamic segment with certain conditions. For example, your segment will include only contacts who have a birthday today.

Segment conditions

When the workflow is triggered for contacts that match this condition, the system generates the event. The name of the event is formed from the static part (regularEventType) and the segment ID the campaign is sent to. It can be, for example, regularEventType-170531841.

The event contains contact data, contact ID in eSputnik (ContactId), email address (EmailAddress), and data from an external table.

The data from each table field is converted into a key and is placed in an array with a numerical name that corresponds to the ID of the data source.

Data source key

In turn, this array is serialized and placed as a string in the field jsonParam. The body of the event may look as follows:

{
  "params": [
    {
      "name": "ContactId",
      "value": "623927159"
    },
    {
      "name": "jsonParam",
      "value": "{\"1043\":[{\"id\":,\"email\":\"kozak@example.com\",\"name\":\"Dina Kozak\",\"birthday\":\"2020-09-02T00:00:00Z\",\"promo_code\":\"AAAA-BBBB-DDDD\"}]}"
    },
    {
      "name": "EmailAddress",
      "value": "kozak@example.com"
    }
  ]
}

To deserialize a string into a set of objects, in the workflow > block Email > JSON specify the data source from the event - ${jsonParam}.

JSON parameter

Now create the workflow and configure triggers:

Configure triggers

The same approach as for a bulk campaign is used to extract data from the event, with little difference in the name of the array. The following object will be in the email:

{
  "data": {
    "1043": [
      {
        "id": "2",
        "email": "kozak@example.com",
        "name": "Dina Kozak",
        "birthday": "2020-09-02T00:00:00Z",
        "promo_code": "AAAA-BBBB-DDDD"
      }
    ]
  }
}

The fields of the array 1043 can be referenced in two ways:

  • With parameters (if you know the number of parameters in the array).
$!data.get('1043').get(0).get('name')
$!data.get('1043').get(0).get('promo_code')
  • With a loop (most common method).
#foreach($pc in $!data.get('1043'))

$!pc.get('name')

$!pc.get('promo_code')

#end

Connect PostgreSQL as an external data source to fulfill a wide range of marketing tasks, for example, substitute promo codes in triggered campaigns or build complex segments based on data collected on different platforms.

Any Questions?
We’re always happy to help!
Request a Callback
Fill in the form, and our specialists will call you back as soon as possible.
Request a Callback
Chat Support
We’re waiting for your questions!
Send a Chat Message
Email
Contact the eSputnik support team
Send an Email