Первые шаги
Пользовательские данные
- Обзор адаптивного email-редактора
- Создание оформления для письма
- Создание сквозных модулей
- Настройка адаптивности
- Настройка smart-контейнеров
- Оформление промовкладки для Gmail
- Добавление Ролловера
- Добавление анкорных ссылок
- Библиотека модулей
- Добавление таблицы в письмо
- Работа с блоком "Баннер"
- Добавление пользовательских шрифтов
- Создание кнопки CTA
- Работа с блоком "Картинка"
- Работа с блоком “Таймер"
- Использование ИИ в email-редакторе
- Поддержка мессенджер-протоколов почтовыми клиентами и платформами
Омниканальность
- SDK для мобильных приложений
- Управление ключами доступа к мобильному SDK
- Подключение мобильного приложения
- Создание и загрузка ключа Firebase
- Создание мобильных push-сообщений
- Настройка аналитики доставляемости и кликов
- Планирование мобильных push-уведомлений
- Типы диплинков
- Отправка тестовых сообщений из отладки запросов
- Настройка виджетов для сайта
- Геймификация виджетов
- Вызов виджета
- Настройка геоданных для правил вызова виджетов
- Сохранение данных из виджетов в поля контактов
- Защита от раздражения
- Действия после заполнения формы
- Замена системного сценария Double Opt-In
- Создание pop-up-форм с помощью Google Tag Manager или WordPress
- Отправка событий из форм подписки в Google Analytics
- A/B-тестирование виджетов
- Сбор контактных данных с помощью форм запросов
Автоматизация
- Настройка и редактирование сценариев
- Настройка условий запуска и остановки сценария
- Блок “Старт”
- Группа блоков “Популярные”
- Группа блоков “Сообщения”
- Использование блока сообщений "Одно из многих"
- Группа блоков “Контакт”
- Группа блоков "Условия"
- Группа блоков “Другое”
- Группа блоков “Сообщение на группу”
- Группа блоков “Время”
- Расширенные параметры блоков сценариев
- Разрешенное время отправки
- Вебхуки в сценариях
- Отслеживание истории запусков сценария
- Если сценарий не работает
- Двойное подтверждение подписки
- Приветственная серия
- Приветственная серия с сегментацией по категориям
- Запуск сценария после импорта контактов
- Регулярный сценарий для группы
- Поздравление с днем рождения
- Привязка сценария к кнопке
- Использование переменных из заказа в сценарии
- Сбор отзывов о заказе
- Реактивация клиентов и подписчиков
- Отправка рассылки непрочитавшим
- Настройка дополнительных рассылок
- Отправка напоминаний в заданное пользователем время
- А/B-тестирование в сценариях
Персонализация
- Подстановка промокода из файла
- Подстановка промокода с использованием API
- Принципы генерации промокодов с помощью PHP/JAVA
- Подстановка промокода с помощью персонализации
- Загрузка промокодов для использования в сценарии
- Генерация промокодов в сценарии
- Отправка промокода с помощью препроцессора
- HTTP-запрос для передачи промокода из сообщения в карточку контакта
Аналитика
- Отчёт по email-рассылке
- Отчет по SMS-рассылке
- Отчет по рассылке Web Push
- Отчет по Viber-рассылке
- Отчет по рассылке Mob Push
- Отчет по рассылке App Inbox
- Отчет по Telegram-рассылке
- Отчет по взаимодействию с In-App
- Отчет по взаимодействию с виджетами
- Отчет по триггерной рассылке
- Отчет по AMP-рассылке
- Отчет по мультиязычной рассылке
- Настройка передачи UTM-меток
- Визуализация дохода
- Отслеживание эффективности кампаний в Google Analytics 4
- Статистика сообщений
Мультиязычность
Отслеживание событий и поведения
- События для запуска триггерных рассылок
- Именование пользовательских событий
- Валидация параметров события
- Отслеживание активности на сайте при помощи Generate event
- Подстановка данных из событий в сообщения
- Разветвление сценария в зависимости от параметров события
- Отслеживание активности клиентов в мобильных приложениях
- Вебхуки для отслеживания активности
- Аналитика событий
Товарные рекомендации
API
Смена системы
Документы
Интеграция
Использование API-ресурса Send prepared message
Ресурс Send prepared message позволяет отправлять заранее подготовленное сообщение, указывая его ID в URL запроса. Это может быть письмо о восстановлении пароля, заказе, заброшенном просмотре или корзине, а также уведомление об изменении цены товара, которым интересовался пользователь.
Особенности использования:
- В одном запросе передается до тысячи получателей;
- Сообщения можно персонализировать для каждого получателя данными из запроса;
- Ресурс используется в каналах Email, SMS, Mobile Push, Web Push, Viber, Telegram и App Inbox.
1. Описание запроса
Запрос осуществляется POST-методом по адресу https://esputnik.com/api/v1/message/{id}/smartsend, где {id} – идентификатор подготовленного в личном кабинете сообщения.
{
"recipients" : [{
"contactId" : "Идентификатор контакта (может быть не указан, если указан параметр locator).",
"locator" : "Получатель. Например, email-адрес для email сообщений, номер телефона для SMS или Viber.",
"jsonParam" : "Параметр в формате json. Используется для сообщений со сложными velocity-шаблонами.",
"languageCode" : "Язык сообщения для контакта. Используется для мультиязычных сообщений."
}],
"email" : "Тип сообщения. true — для email, false — для остальных медиаканалов.",
"fromName" : "Имя отправителя. Необходимо указать только имя отправителя, без email-адреса. Будет использован email отправителя, который выбран в сообщении. Для SMS указывается альфа-имя. Если параметр не указан — будет использоваться имя, выбранное в сообщении."
"externalRequestId" : "Необязательный параметр. Позволяет присвоить отправленому сообщению ваш собственный идентификатор и в последствии при помощи Get contacts activity получить статус отправленного сообщения."
}
2. Ответ сервера
В ответ от сервера при успешном запросе возвращается результат отправки одиночных сообщений.
- id – всегда возвращается 0;
- locator – email, номер телефона, Device ID или токен контакта, на который отправлялось сообщение;
- status — результат:
- OK — если сообщение успешно добавлено в очередь на отправку; о статусе сообщения можно узнать, используя requestId и запрос к ресурсу Get single message status;
- ERROR — если сообщение не удалось добавить в очередь на отправку, запрос возвращается со статусом ERROR, где message — описание ошибки (например: "message": "example@mail.com' is not valid email").
{
"id": 0,
"results": [
{
"id": 0,
"locator": "example@mail.com",
"status": "OK",
"requestId": "8b2e65d9-060b-4c61-bbd7-73c6796fa504"
}, {
"id": 0,
"locator": "new. example@mail.com",
"status": "OK",
"requestId": "458f3533-51d9-439e-a5d0-5fb7c2490c41"
}
]
}
3. Пример использования с Email
Ресурс может использоваться для отправки одиночных сообщений с персонализацией и без нее. Для персонализации используется поле jsonParam, которое может содержать объекты JSON, вложенные объекты и массивы, которые перед отправкой запроса нужно сериализировать, то есть последовательно преобразовать объекты в строку JSON.
3.1. Отправка сообщения без персонализации
Тело запроса выглядит так:
{
"recipients": [
{
"jsonParam": null,
"locator": "example@mail.com"
}
],
"email": true,
"fromName": null
}
Пример запроса для двух получателей:
{
"recipients": [
{
"jsonParam": null,
"locator": "example@mail.com"
}, {
"jsonParam": null,
"locator": "new.example@mail.com"
}
],
"email": true,
"fromName": null
}
Когда поле fromName передается со значением null, в письме будет использоваться имя, заданное при добавлении адреса отправителя:
Передача поля jsonParam со значением null свидетельствует о том, что в письме не предусмотрено использование динамической персонализации.
3.2. Передача объекта JSON
Формат объекта JSON устанавливается двумя фигурными скобками { }, а данные с ключевыми значениями размещены между ними. Между парами ключевых значений находится двоеточие: {"key": "value"}. Каждая пара значений разделена запятой, таким образом середина JSON выглядит так: {"key" : "value", "key" : "value", "key": "value"}.
Например, объект из двух пар ключевых значений будет выглядеть так:
{
"discount": "5%",
"link": "https://example.site.com/items_for_sale"
}
Для корректной передачи объект в теле запроса нужно привести к строке, после чего запрос приобретает такой вид:
{
"recipients": [
{
"jsonParam": "{\"discount\":\"5%\",\"link\":\"https:\/\/site.com\/items_for_sale\"}",
"locator": "example@mail.com"
}
],
"email": true,
"fromName": null
}
Чтобы в сообщении вывести передаваемые значения, нужно воспользоваться velocity-конструкциями:
- $!data.get('discount') — вместо размера скидки
- $!data.get('link') – в настройках кнопки (тип ссылки – “Другой”).
Вместо переменной discount будет подставлено значение "5%", а для кнопки вместо переменной link в качестве ссылки будет подставлено значение: "https://site.com/items_for_sale".
3.3. Передача вложенного JSON-объекта
Формат вложенного JSON-объекта "objectName": {"key": "value", "key": "value"}.
Пример вложенных объектов customerData и orderData выглядит так:
{
"customerData": {
"firstName": "Сергей",
"lastName": "Иванов"
},
"orderData": {
"name": "Смартфон Apple iPhone X 64GB Black",
"cost": 25999,
"url": "https:\\example.site.com\smartfon-apple-iphone-x-64gb.html",
"imageUrl": "https:\\example.site.com\smartfon-apple\apple_iphone_x_64gb.jpg"
}
}
Данные также следует привести к строке (сериализировать); запрос примет вид:
{
"recipients": [
{
"jsonParam": "{
\"customerData\":{\"firstName\":\"Сергей\",\"lastName\":\"Иванов\"},
\"orderData\":{\"name\":\"Смартфон Apple iPhone X 64GB Black\",
\"cost\":"25999",\"url\":\"https:\/\/example.site.com\/smartfon-apple-iphone-x-64gb.html\",
\"imageUrl\":\"https:\/\/example.site.com\/smartfon-apple\/apple_iphone_x_64gb.jpg\"}
}",
"locator": "example@mail.com"
}
],
"email": true,
"fromName": null
}
Для отображения данных в сообщении используется следующие velocity-конструкции:
- Для персональных данных —
$!data.get('customerData').get('firstName')
- Для данных из заказа —
$!data.get('orderData').get('name')
В обоих случаях в последних скобках используется название параметра, который нужно отобразить.
3.4. Передача вложенного JSON массива
Массив — упорядоченная коллекция значений, для определения массива используются квадратные скобки [ ], где значения разделяются запятыми.
Формат вложенного JSON массива ”arrayName”:[{"key":"value", "key":"value"},{...}], в рамках одного запроса может быть передано несколько массивов.
{
"orderData": [
{
"name": "Смартфон Apple iPhone Xs 512Gb",
"price": "49999",
"url": "http://example.com/smartfon-apple-iphone-27.html",
"imageUrl": "http://example.com/apple_iphone_xs_silver.jpg"
},
{...},
{
"name": "Смарт-часы Apple Watch Series 4 GPS 44mm Space Grey",
"price": "13699",
"url": "http://example.com/smart-chasy-apple-watch-series-4-gps-45-2mm.html",
"imageUrl": "http://example.com/apple_watch_series_4_gps_44mm.jpg"
}],
"recommendationsData": [
{
"name": "Защитное стекло для смартфона MakeFuture 3D Apple iPhone X/XS",
"url": "http://example.com/zaschitnoe-steklo-dlja-smartfona-makefuture.html",
"imageUrl": "http://example.com/makefuture_3d_apple_iphone_xxs_black.jpg",
"price": "399"
},
{...},
{
"name": "Ремешок для смарт-часов Apple 44mm Black Sport Band",
"url": "http://example.com/remeshok-dlja-smart-chasov-apple-44mm.html",
"imageUrl": "http://example.com/apple_44mm_black_sport_band.jpg",
"price": "1999"
}
]
}
Важно
Как и вложенный JSON-объект, JSON-массив нужно привести к строке (сериализировать).
Чтобы получить доступ к данным из массива, в сообщении нужно использовать конструкцию встроенного в velocity цикла foreach. На примере массива orderData velocity-код приобретает вид:
/ Внутри конструкции будут выведены последовательно данные из каждого элемента массива
#foreach($order in $!data.get('orderData'))
// Для вывода значения из заказа поля name
$!order.get('name')
// Для поля url
$!order.get('url')
// Для поля imageUrl
$!order.get('imageUrl')
// Для поля price
$!order.get('price')
#end
Аналогичная конструкция используется для массива, в котором передаются рекомендации:
recommendationsData:
// Внутри этой конструкции будут последовательно выведены данные из каждого элемента массива.
#foreach($recomm in $!data.get('recommendationsData'))
$!recomm.get('name')
$!recomm.get('url')
$!recomm.get('imageUrl')
$!recomm.get('price')
#end
Подготовленное письмо с velocity-кодом будет выглядеть так:
4. Пример использования с SMS
Допустим, стоит задача дополнительно уведомить пользователя SMS-сообщением о том, что его заказ сформирован и отправлен.
В таком случае тело запроса будет выглядеть так:
{
"recipients": [
{
"jsonParam": "{\"firstName\":\"Сергей\",\"orderId\":\"JN134173389\",\"deliveryAddress\":\"г. Днепр, отделение НП №32\"}",
"locator": "380501234567"
}
],
"email": false,
"fromName": "V-COMP"
}
где в поле locator указывается номер телефона получателя, а в fromName — альфа-имя отправителя.
SMS-сообщение в редакторе будет выглядеть так:
В теле SMS сообщения не всегда рационально выводить все содержимое массива при помощи цикла foreach, поэтому можно обратиться к конкретному элементу массива; на примере orderData velocity конструкция примет вид: $!data.get('orderData').get(0).get('name'), где происходит обращение к первому элементу массива (нумерация с 0).
5. Пример использования с Viber
Процесс настройки идентичен настройке SMS, но следует учесть, что Viber-сообщение, в отличие от SMS, может вместить до 1000 символов, а также отобразить изображение и кнопку, к которой можно добавить ссылку.
В этом случае тело запроса может выглядеть следующим образом:
{
"recipients": [
{
"jsonParam": "{
\"firstName\":\"Сергей\",\"orderId\":\"JN134-173-389\",
\"deliveryAddress\":\"г. Днепр, отделение НП №32\",
\"url\":\"https:\/\/example.com\/offers.html\",
\"imageUrl\":\"https:\/\/example.com\/apple_iphone_xs.jpg\"
}",
"locator": "380501234567"
}
],
"email": false
}
В этом запросе
- locator — номер телефона получателя,
- imageUrl — ссылка на изображение,
- url – ссылка для кнопки.
Viber-сообщение в редакторе формируется следующим образом:
6. Пример использования с Mobile Push
Для отправки заранее подготоволенного одиночного мобильного push-уведомления тело запроса примет вид:
{
"recipients": [
{
"jsonParam": null,
"contactId": 449790707
}
],
"email": false
}
Вместо contactId для идентификации контакта можно использовать locator и в нем передавать токен, если contactId отсутствует.
Для мобильного push-сообщения, как и для других медиаканалов, доступна возможность персонализировать контент, если передавать данные в поле jsonParam:
Поле Custom data может содержать данные в формате JSON и быть дополнительным источником информации. На стороне мобильного приложения должна поддерживаться возможность использования специальных данных — разработчики должны предоставить эти параметры при создании мобильного приложения.
7. Пример использования с Web Push
Аналогично запросу для Mobile Push сообщения, в Web Push вместо contactId для идентификации контакта можно использовать locator и в нем передавать токен, если contactId отсутствует.
{
"recipients": [
{
"jsonParam": null,
"contactId": 449790707
}
],
"email": false
}
Web Push также может содержать динамический контент, для этого вместо логотипа, большого изображения и ссылок в редакторе сообщений нужно прописать переменные:
Тело запроса в этом случае будет выглядеть так:
{
"recipients": [
{
"jsonParam": "{
\"userName\":\"Алексей\",\"productName\":\"Huawei Watch GT Black\",
\"price\":\"6999 грн\",\"https:\/\/example.com\/huawei-watch-gt\/431369.html\",
\"imageUrl\":\"https:\/\/example.com\/gallery\/huawei-watch-gt.jpeg\",
\"logo\":\"https:\/\/example.com\/Your-Logo.jpeg\",
\"moreOffer\":\"https:\/\/example.com\/more-offer.html\"
}",
"contactId": 380470486
}
],
"email": false
}
8. Пример использования с Telegram
Вместо contactId для идентификации контакта можно использовать locator и в нем передавать Telegram-токен.
{
"recipients": [
{
"jsonParam": null,
"contactId": 449790111
}
],
"email": false
}
Для использования динамического контента в сообщение добавляются переменные:
9. Пример использования с App Inbox
Тело запроса для отправки App Inbox выглядит следующим образом:
{
"recipients": [
{
"jsonParam": null,
"contactId": 449790707
}
],
"email": false
}
Вместо contactId для идентификации контакта можно использовать locator и передавать в нем Device ID.
Для использования динамического контента в сообщение добавляются переменные:
Поле Custom data может содержать данные в формате JSON и быть дополнительным источником информации. Мобильное приложение или сайт, в которые посылается сообщение, должно поддерживать использование таких данных.