First steps
User Data
- Responsive Email Editor Review
- Designing your email
- Creating Synchronized Modules
- Setting Up Responsive Email Design
- Setting Up Smart Containers
- Creating a Gmail Promotions Annotation
- Adding The Rollover Effect
- Adding Anchor Links
- Module Library
- Adding a Table to an Email
- Adding Custom Fonts
- Creating CTA Button
- Working with Images
- Creating Timer
- Using AI in the Email Editor
- Messenger Protocol Support in Email Clients and Platforms
Omnichannel
- Setting Up Widgets for Your Site
- Widgets Gamification
- Widget Calling
- Setting Up Locations for the Widget Calling Rules
- Storing data from widgets to contact fields
- Using Annoyance Safeguard
- Actions After Subscription
- Replacing Double Opt-In System Workflow
- Creating Pop-ups via Google Tag Manager or WordPress
- Sending Yespo Widget Events to Google Analytics
- Using A/B Tests for Widgets
- Collecting Contact Information Using Request Forms
Automation
- Building and Editing Workflows
- Configuring Workflow Start/Stop Conditions
- Start Block
- Popular Blocks
- Message Blocks
- Using One from Many Message Block
- Contact Blocks
- Conditions Blocks
- Other Blocks
- Message to Segment Blocks
- Time Blocks
- Advanced Workflow Block Parameters
- Setting Up Allowed Send Time
- Using Workflow Launch History
- Webhook Workflows
- Workflow Troubleshooting
- Double Opt-In
- Welcome Сampaign
- Welcome Series Segmented by Category
- Launching a Workflow After a Contact Import
- Regular Workflow for a Segment
- Birthday Campaign
- Linking Workflow to the Button
- Using Variables from Order in Workflow
- Collecting Order Feedback
- Customer Reactivation
- Sending Extra Campaigns
- Sending Reminders at the Time Specified by the User
- Sending Campaign to Those Who Did Not Open the Previous One
- Using A/B Tests In Workflows
Personalization
Analytics
- Email Campaign Report
- Web Push Campaign Report
- Viber Campaign Report
- Mobile Push Campaign Report
- App Inbox Campaign Report
- Telegram Campaign Report
- In-App Report
- Widget Report
- Triggered Campaign Report
- AMP Campaign Report
- SMS Campaign Report
- Multilingual Campaign Report
- Setting up UTM Tags
- Revenue from Campaigns
- Tracking Campaign Performance in Google Analytics 4
- Message Analytics
Multilanguage Campaigns
Events and Behaviour Tracking
Recommendations
API
Security and Compliance
Site activity tracking using Generate event
You can pass and save events from your website from your backend system directly to our system using the Generate event v2 method. Also, if you configured integration with a recommendation system, you can save the data in both services.
To make a request, send the following parameters in the request body to https://esputnik.com/api/v2/event:
Parameter |
Description |
---|---|
eventTypeKey |
Required parameter. Event type ID key. If no such event type exists with such a key, a new one is created. |
keyValue | Optional. The key of the event, which determines its uniqueness. If you don't pass a keyValue's value in the event, it is automatically taken from the request's Params object with such a priority:
An event without one of these parameters or a passed keyValue value is not accepted. |
params |
List of event parameters represented as an array of "key" - "value" pairs. The parameter keys are arbitrary. |
You can pass the following events:
Event |
Description |
---|---|
pageViewed |
View of the page. |
productViewed |
View of the product card. |
productCategoryViewed |
View of the product category. |
cartUpdated |
Change of the cart items. |
productImpressions |
Product recommendations displayed to your site visitor. |
productAddedToWishlist |
Your site visitor added a product to the wishlist. |
searchRequest |
Data about product searches. |
pageViewed
The event is sent when a contact views any page or opens a mobile deep link.
The request example is given below. It contains the following parameters:
Parameter | Type |
Description |
---|---|---|
phone | String |
Phone number in the international format. Locator to map an event to a contact. |
String |
Email address. Locator to map an event to a contact. |
|
page | String |
Page location. Required to create an event. |
location | String |
Page URL or deep link. Required to create an event. |
Example:
{
"eventTypeKey": "pageViewed",
"keyValue": "example@email.com",
"params": [
{
"name": "phone",
"value": "380501234567"
},
{
"name": "email",
"value": "example@email.com"
},
{
"name": "page",
"value": "{"location":"https://example.com"}"
}
]
}
productViewed
The event is sent when a contact views a specific product. Such activity can be used in the recommendations algorithms.
The request example is given below. It contains the following parameters:
Parameter | Type |
Description |
---|---|---|
phone | String |
Phone number in the international format. Locator to map an event to a contact. |
String |
Email address. Locator to map an event to a contact. |
|
product | String |
Required. Product data. |
productId | String |
Required. Product ID. |
price | Double |
Required. Price of a product item. |
isInStock | Int |
Optional parameter. Product availability.
|
someProductProperty | Array of strings |
Optional parameter. Comma separated product property values. |
currencyCode | String |
Optional. Currency code in the ISO 4217 format. If not set, the organization's default is used. |
Example:
{
"eventTypeKey": "productViewed",
"keyValue": "example@email.com",
"params": [
{
"name": "phone",
"value": "411786452"
},
{
"name": "email",
"value": "example@email.com"
},
{
"name": "product",
"value": "{"productId":"WS01-L-Green","price":45.5,"isInStock":1,"someProductProperty":["green"]}]}"
},
{
"name": "currencyCode",
"value": "USD"
}
]
}
productCategoryViewed
The event is sent when a contact views a list of products in the specified category.
The request example is given below. It contains the following parameters:
Parameter | Type |
Description |
---|---|---|
phone | String |
Phone number in the international format. Locator to map an event to a contact. |
String |
Email address. Locator to map an event to a contact. |
|
category | String |
Category description. Required to create an event. |
productCategoryId | String |
Category ID. Required to create an event. |
Example:
{
"eventTypeKey": "productCategoryViewed",
"keyValue": "example@email.com",
"params": [
{
"name": "phone",
"value": "7411324763"
},
{
"name": "email",
"value": "example@email.com"
},
{
"name": "category",
"value": "{"productCategoryId":"Mugs"}"
}
]
}
cartUpdated
The event is sent when a contact changes products in the cart. The full list of products in a cart is passed with every request. If a cart is cleaned up, then the list of products is empty.
The request example is given below. It contains the following parameters:
Parameter | Type |
Description |
---|---|---|
phone | String |
Phone number in the international format. Locator to map an event to a contact. |
String |
Email address. Locator to map an event to a contact. |
|
products | Array of strings | Required parameter if the cart is not empty. |
productId | String |
Required. Product ID. |
quantity | Double |
Required. Quantity of items in the cart. |
price | Double |
Required. Price of an item. |
name | String |
Optional. Product name. |
category | String |
Optional. Product category. |
discount | String |
Optional. Discount applied to a single item. |
someProductProperty | Array of strings |
Optional. Comma separated product property values. |
currencyCode | String |
Optional. Currency code in the ISO 4217 format. If not set, the organization's default is used. |
recycleStateId | String |
Required. A unique ID connecting the cart events and purchases. |
Example:
{
"eventTypeKey": "cartUpdated",
"keyValue": "example@email.com",
"params": [
{
"name": "phone",
"value": "73456712"
},
{
"name": "email",
"value": "example@email.com"
},
{
"name": "products",
"value": "[{"productId":"WS01-L-Green","quantity":1,"price":45.5}]"
},
{
"name": "currencyCode",
"value": "USD"
},
{
"name": "recycleStateId",
"value": "d59c6e6d-4123-4b0e-8c32-15f0656a8c60"
}
]
}
productImpressions
The event passes the data about the product block displayed at the site. It’s sent by default through JS API. You don’t need to send it additionally.
The request example is given below. It contains the following parameters:
Parameter | Type |
Description |
---|---|---|
phone | String |
Phone number in the international format. Locator to map an event to a contact. |
recomVariantId | String |
Required. The recommendation variant in the r{recomId}v{variantId} format. |
products | String |
Required. Contains the product list in the JSON format. |
productId | String |
Required. Product ID. |
Example:
{
"eventTypeKey": "productImpressions",
"keyValue": "380501234567",
"params": [
// Locator or several locators to map an event to a contact
{
"name": "phone",
"value": Phone
},
{
"name" : "recomVariantId" // Required. Recom variant in r{recomId}v{variantId} format
"value" : string // Mer: container_type
},
{
"name": "products", // Required. Mer: ProductImpression.Products
"value": "[ // string contains JSON for a list
{
// Required product fields
"productId": string // Mer: product_id
},
...
]"
}
]
}
productAddedToWishlist
The event passes the data about the products added to the wish list (favorites).
It is used for calculating and displaying recommendations and sending triggers related to the wish list.
The request example is given below. It contains the following parameters:
Parameter | Type |
Description |
---|---|---|
phone | String |
Phone number in the international format. Locator to map an event to a contact. |
product | String |
Required. Contains the list of products added to the wish list in the JSON format. |
productId | String |
Required. Product ID. |
price | Decimal |
Required. Product price. |
isInStock | Int |
Optional. Stock availability. Can be either 0 (not available) or 1 (available). |
someProductProperty | String |
Product property values. Additional product field. |
currencyCode | String |
Optional. Currency code in the ISO 4217 format. If not set, the organization's default is used. |
Example:
{
"eventTypeKey": "productAddedToWishlist",
"keyValue": "380501234567",
"params": [
// Locator or several locators to map an event to a contact
{
"name": "phone",
"value": Phone
},
{
"name": "product", // Required. Mer: AddToWishlist.Product
"value": "{ // string contains JSON for a product
// Product fields
"productId": string, // Required. Mer: product_key
"price": decimal, // Required. Mer: price
"isInStock": int, // Optional. 0 or 1; Mer: isInStock
// Extended product fields
"someProductProperty": [ string, ... ], // Mer: tag_someProductProperty
...
}"
}
{
"name": "currencyCode", // Optional
"value": CurrencyCode
}
]
}
searchRequest
The event passes the data about search queries sent from the search line.
This event is used for triggers. Send it when the search returns no results. In the trigger, such contacts will receive personal recommendations (at the moment, recommendations are not based on a value entered in the search box).
The request example is given below. It contains the following parameters:
Parameter | Type |
Description |
---|---|---|
phone | String |
Phone number in the international format. Locator to map an event to a contact. |
search | String |
Required. A value entered in the search box. |
isFound | Int |
Optional. If a search returns no results, then the value is 0. If a search returns some results, the value is 1. |
Example:
{
"eventTypeKey": "searchRequest",
"keyValue": "380501234567",
"params": [
// Locator or several locators to map an event to a contact
{
"name": "phone",
"value": Phone
},
{
"name": "search", // Required. Mer: SearchRequest.search
"value": string
},
{
"name": "isFound", // 0 or 1. Optional, default 0. Mer: SearchRequest.isFound
"value": int
}
]
}