Подстановка данных из событий в сообщения
Разработчики мобильных приложений часто сталкиваются с необходимостью отправлять своим пользователям сообщения с динамическим контентом. Например, транзакционные уведомления, инициированные с бэкэнда: подтверждение заказа, доставка и т. п.
Мы рекомендуем использовать метод API Generate event для отправки пользовательских событий с бекенда в eSputnik. Подробнее об отправке данных из заказа читайте в инструкции.
Рассмотрим на практике, как подставить данные из событий в сообщение.
Обратите внимание
Сообщение с динамическим контентом из события должно участвовать в сценарии, который запускается соответствующим событием. См. инструкцию по запуску триггерного сценария по событию.
Типы данных из события
Событие может содержать разные типы данных, которые по-разному подставляются в сообщение:
- Простые данные (строки и числа, не входящие в объект или массив)
- Данные объекта
- Данные массива
Рассмотрим, как передать эти типы данных в сообщение, на примере следующего запроса:
{ "eventTypeKey": "data_for_message", "keyValue": "user@imaginary.email", "params": [ { "name": "EmailAddress", "value": "user@imaginary.email" }, { "name": "externalOrderId", "value": 20233 }, { "name": "sellerName", "value": "Shop Tea" }, { "name": "object", "value": { "title": "Black Tea", "text": "Tea from the Tonganagaon plantation in India", "img": "https://pics.site.com/repository/home/1/common/images/1576074904732.jpg", "price": "$11.05", "link": "https://site.com" } }, { "name": "array", "value": { "array_items": [ { "title": "Black Tea", "text": "Tea from the Tonganagaon plantation in India", "img": "https://pics.site.com/repository/home/1/common/images/1576074904732.jpg", "price": "$11.05" }, { "title": "Green Tea", "text": "Tea from the Indian region of Darjeeling", "img": "https://pics.site.com/repository/home/1/common/images/1576074904060.jpg", "price": "$10.20" }, { "title": "Herbal tea", "text": "Peach, rosehip, and apple, spring flavor.", "img": "https://pics.site.com/repository/home/1/common/images/1576074902892.jpg", "price": "$15.00" } ] } } ] }
JSON
Подстановка простых данных из события
У нас есть поля "externalOrderId" и "sellerName" со значениями 20233 и "Shop Tea". Эти строки и числа не входят в объект или массив.
Чтобы подставить данные в сообщение:
- используйте в шаблоне сообщения velocity-конструкции $data.get('externalOrderId') и $data.get('sellerName'), где externalOrderId и sellerName — названия полей из запроса.
Пользователь, инициализировавший событие, получит сообщение:
Подстановка данных из объекта
В примере объект – это данные одного товара:
{ "name": "object", "value": { "title": "Black Tea", "text": "Tea from the Tonganagaon plantation in India", "img": "https://pics.site.com/repository/home/1/common/images/1576074904732.jpg", "price": "$11.05", "link": "https://site.com" } }
JSON
Для того чтобы получить доступ к данным объекта:
1. В сценарии выделите блок сообщения и в поле JSON укажите название объекта (в этом запросе — ${object}).
2. В самом сообщении в соответствующих полях укажите velocity-переменные из объекта:
- $data.get('title')
- $data.get('text')
- $data.get('img')
- $data.get('price')
- $data.get('link')
Письмо будет выглядеть так:
Передача объекта с данными покрывает большинство потребностей для таких каналов как SMS, Web Push, Mobile Push, Viber и App Inbox.
Чтобы передать больше данных, используется массив.
Подстановка данных из массива
В примере в массиве передаются данные по нескольким товарам:
{ "name": "array", "value": { "array_items": [ { "title": "Black Tea", "text": "Tea from the Tonganagaon plantation in India", "img": "https://pics.site.com/repository/home/1/common/images/1576074904732.jpg", "price": "$11.05" }, { "title": "Green Tea", "text": "Tea from the Indian region of Darjeeling", "img": "https://pics.site.com/repository/home/1/common/images/1576074904060.jpg", "price": "$10.20" }, { "title": "Herbal tea", "text": "Peach, rosehip, and apple, spring flavor.", "img": "https://pics.site.com/repository/home/1/common/images/1576074902892.jpg", "price": "$15.00" } ] } }
JSON
Для того чтобы получить доступ к данным массива:
1. В сценарии выберите блок сообщения и в поле JSON укажите название массива (в примере это ${array}).
2. В email-редакторе выделите соответствующую полосу, откройте код и добавьте velocity-конструкцию с циклом #foreach:
<!-- #foreach( $item in $data.get('array_items') ) --> // html контент <!-- #end -->
JSON
Цикл последовательно проходит элементами массива, помещая данные в промежуточный объект $items (произвольное название), используемый для подстановки данных в сообщение.
3. Укажите velocity-переменные из массива в соответствующих полях письма:
- $item.get('title')
- $item.get('text')
- $item.get('img')
- $item.get('price')
- $item.get('link')
Письмо будет выглядеть так:
Обратите внимание
Мобильное push-уведомление отображаеся по-разному на разных устройствах, но мы рекомендуем использовать не более 40 символов. Если содержимое массива может превысить этот объем, цикл foreach лучше не использовать.
Вместо этого можно обратиться к определенному элементу массива. Тогда velocity-конструкция для массива будет выглядеть так: $!data.get('array_items').get(0).get(' name'). В такой конструкции выводится первый элемент массива (нумерация начинается с 0).