____

Алгоритм создания новой книги в CX-маркет

Ниже 3 ключевых блока
1) Блок с корзиной магазина
2) Блок с заголовком книги
3) Блок с карточкой продукта к книге

Под этими тремя блоками я опишу детально порядок действий.


Click to order
Cart
Ваш заказ
Total: 
Your Email

____

Книга.Ультиматум удовольствия

Принцип удовольствия

для моделирования массового бессознательного.

450
р.
750
р.
Для :
- СМО и СX-директоров
- PR-директоров
- CEO и HR-директоров
Для всех, кто стремится моделировать процесс принятия решений у широких масс: потребителей, избирателей, сотрудников
Общая информация
Система покупки настроена так:
1 страница = 1 книга.
Нельзя купить 2 и более книг одновременно!

Блок с названием книги - только информационная роль.

Блок с карточкой продукта - подключен к платежной системе, привязанной ко всему сайту.
Покупатель нажимает кнопку "Купить" и система отправляет его на страницу сайта платежной системы.
Затем он вводит свой эл.адрес и данные своей карты для проведения транзакции.
Производит оплату.

При успешной оплате включается блок с корзиной магазина, в таблицах (привязанных формах) которого записываются данные о транзакции покупателя.

Как только в таблице данной книги появляется новая строка с записью о покупке, системе через сервис https://zapier.com дает команду отправить письмо-уведомление покупателю, содержащее ссылку для скачивания книги.

Почта, которая привязана к этому уведомлению russianbehavioralunit@gmail.com


Порядок действий
1. Создать новую страницу под книгу (дублировать любую эталонную с тремя ключевыми блоками).

2. Изменить название книги в блоке с заголовком на нужное.

3. Изменить информацию в блоке с карточкой продукта (фото, текст, цена и др), тут обычная замена данных, как в любом блоке.

4. Создать новую таблицу (форму) для новой книги.

5. Создать в https://zapier.com связку новой таблицы и отправкой письма о покупке.


Создание новой таблицы для книги
Порядок действий:

1. Зайти в настройки нашего сайта и выбрать раздел Формы
https://tilda.cc/projects/settings/?projectid=4386...
2. Нам нужно создать новую гугл таблицу.

Мы видим общий список подключенных сервисов.

3. Пролистываем и находим раздел
Cервисы приёма данных из форм (см рис)

4. Выбираем Google Sheets (красная стрелочка)




5. Нажмите Подключить Google Таблицы




6. Вы должны иметь доступ к аккаунту
russianbehavioralunit@gmail.com
Выбрать его.

7. Разрешите приложению "Tilda Publishing" доступ к вашему аккаунту Google - кнопка Разрешить

8. На следующем этапе важно НЕ ПОДКЛЮЧИТЬ эту таблицу ко всем формам сайта!

Нажмите Пропустить (см зеленую стрелочку).

9. Затем система перекидывает нас на страницу со списком всех созданных форм:
https://tilda.cc/projects/settings/?projectid=4386...

Наша новая таблица будет автоматически создана без имени, нужно дать ей имя:
нажмите кнопку Настройки около данной таблицы.


10. Вписать в поле Название в списке новое название таблице латинскими буквами (см красную стрелочку).

Нажмите Изменить.


11. Зайти в аккаунт гугл под russianbehavioralunit@gmail.com

12. Найти в гдиске нашу таблицу (см скрин), назвать ее тем же именем.




13. Сейчас таблица пустая, нам нужно скопировать в нее из любой другой таблицы первые две строчки:
1. строка с названиями столбцов,
2. строка с нашей эл.почтой для тестирования (см рис, поле для копирования выделено зеленым).

Таблица готова.

Создание связки "таблица+уведомление" через сервис zapier.com
Порядок действий:

Настройка ведется в сервисе https://zapier.com/app/dashboard
необходимо знать логин и пароль.

Аккаунт привязан к почте russianbehavioralunit@gmail.com

Справа на скрине размещен блок с уже созданными папками (задачами).
Зеленые кнопки показывают, что они активированы.

Для создания новой папки необходимо убедиться, что лимит не превышает допустимое количество в подключенном тарифе.
В нашем случае максимальное количество = 20.

Стрелочками показана последовательность действий:
1. Добавить новую папку,
2. Дать ей название, нажать
Enter.
3. Появится шестеренка, кликнуть на нее.

4. Создаем новый ZAP для данной папки: нажать на кнопку (см рис).



5. Система предлагает сделать настройку двух сущностей (см стрелочки) - привязать нашу таблицу к шаблону письма-уведомления о покупке.




6. Настройка Trigger.
6.1 Выбираем в блоке справа вариант "таблица"
6.2 Таблица привязывается к нашему триггеру.




6.3 Выбрать вариант алгоритма работы триггера - New or Updated Spreadsheet Row
Сохранить изменения, система перекинет на настройку следующего блока Action



6.4 Система предлагает связать таблицу и Zapier, подтвердить действие.



6.5 Заполняем поля, как указано на снимке,
под красными стрелочками - всегда именно эти варианты,
под зеленой - выбираем из списка название нужной нам таблицы для данной книги.
Сохраняем изменения.


7 . Настройка Action
7.1 Тот же принцип, но выбираем вариант электронная почта.
7.2 Выбрать вариант - Send Email
Сохранить изменения.



7.3 Система предлагает связать почту и Zapier, подтвердите действие.



7.4 Заполняем поля по аналогии с любой другой книгой (заглянуть в настройки любой книги).
Сохраняем изменения.


8. Протестировать свои настройки,
8.1 Вручную добавить новую строчку в таблицу со своей почтой,
8.2 Получить уведомление на свою почту - через 15 мин.
Настройка завершена.

Блок с корзиной магазина
Для пользователя это невидимый блок на странице.
Порядок действий:

1. Скопировать блок на новую страницу.

2. Нажать кнопку "Контент".

3. В выпадающем списке выбрать для привязки три основные формы (красные стрелочки на рисунке):

MAILCHIMP: ALL SUBSCRIPTIONS_LIST 1
GSHEET: ALL SELLES
EMAIL: ARSDALLAN@GMAIL.COM

4. Добавить новую форму - под данную книгу, которую мы создали (зеленая стрелочка).

5. Блок готов.

Размещение страницы
Страницу переносим в папку CX-маркет,
оформление самой страницы - с учетом общих требований к любым страницам.

На странице CX-маркета можно посмотреть общий принцип размещения книг.

Скрипт в гугл таблице, без zapier
Скрипт состоит из 2 частей,
см блоки ниже, важно сохранять точно их название в таблице:
Код
Системная

видео-инструкция
https://www.screencast.com/t/4T4Ax1SK8c

Принцип работы:
В таблице, которую создали с помощью форм тильды, вносим два скрипта (см вложения и видео), сохраняем, они идентичны по написанию для всех новых таблиц, но работают только в рамках конкретной таблицы.

В самой таблице меняем в ячейке M2 ответ пользователю - ставим нужную ссылку для скачивания.
Ячейка М2 = текст ответа пользователю.

Таймер скрипта может проверять новую строку один раз в минуту и более.

Особенности работы с аккаунтом russianbehavioralunit@gmail.com
- позволяет добавлять скрипты только в режиме инкогнито.

Скрипт Код
function sendMail() {
var message = valSheet(list,"M2");
for (var i = 2; i <= u_rows; i++)
{
if(valSheet(list,"L"+i) != 'Да')
{
var emailAddress = valSheet(list,"A"+i);
MailApp.sendEmail(emailAddress, "Благодарим за покупку", message);
virtTextSheet(list,"L"+i,'Да');
commitSheet(list);
}
}
}
Скрипт Системная
var ss = SpreadsheetApp.getActiveSpreadsheet();
var list = ss.getSheetByName('LeadsFromTilda');
u_selection=list.getDataRange();
u_columns=u_selection.getNumColumns();
u_rows=u_selection.getNumRows();
var virtual = {};
virtual[list] = {};
var virtual_backup = {};
virtual_backup[list] = {};
virtual_default = virtual;
//var virtual = {users:{},bc:{},oc:{},inbox:{},history:{},operacionka:{},inout:{}};
putCache('virtual',virtual);
//var virtual_backup = {users:{},bc:{},oc:{},inbox:{},history:{},operacionka:{},inout:{}};
putCache('virtual_backup',virtual_backup);
// menu = [{name: "Остановить обновление", functionName: "Stop"},null,{name: "Ввод", functionName: "In"},{name: "Вывод", functionName: "Out"},{name: "Реинвест", functionName: "Reinvest"},{name: "Новый Участник", functionName: "AddUser"},null,{name: "Откатить последнее действие", functionName: "RollBack"},null,{name: "Синхронизировать личный кабинет", functionName: "sendAll"}];
menu = [];
function checkGlobalStop()
{
return parseInt(valSheet(operacionka,'C1'));
}
function getCache(key)
{
var cache = CacheService.getDocumentCache();
var value = JSON.parse(cache.get(key));
return value;
}
function putCache(key,value)
{
var cache = CacheService.getDocumentCache();
if (typeof(value) == "object")
value = JSON.stringify(value);
cache.put(key,value);
}
function virtSheet(sheet,idx,action,value)
{
var virtual = getCache("virtual");
var virtual_backup = getCache("virtual_backup");
if(action == 'plus')
{
if(!virtual[sheet][idx] && idx.charAt(1)!=0)
{
virtual[sheet][idx] = parseFloat(valSheet(sheet,idx));
virtual_backup[sheet][idx] = parseFloat(valSheet(sheet,idx));
}
virtual[sheet][idx]=parseFloat(virtual[sheet][idx])+parseFloat(value);
}
if(action == 'minus')
{
if(!virtual[sheet][idx] && idx.charAt(1)!=0)
{
virtual[sheet][idx] = parseFloat(valSheet(sheet,idx));
virtual_backup[sheet][idx] = parseFloat(valSheet(sheet,idx));
}
virtual[sheet][idx]=parseFloat(virtual[sheet][idx])-parseFloat(value);
}
if(action == 'set')
{
if(!virtual[sheet][idx] && idx.charAt(1)!=0)
{
virtual[sheet][idx] = parseFloat(valSheet(sheet,idx));
virtual_backup[sheet][idx] = parseFloat(valSheet(sheet,idx));
}
virtual[sheet][idx]=parseFloat(value);
}
putCache('virtual',virtual);
putCache('virtual_backup',virtual_backup);
return virtual[sheet][idx];
}
function virtTextSheet(sheet,idx,value)
{
var virtual = getCache("virtual");
var virtual_backup = getCache("virtual_backup");
Logger.log(JSON.stringify(virtual));
if(!virtual[sheet][idx] && idx.charAt(1)!=0)
virtual_backup[sheet][idx] = valSheet(sheet,idx);
virtual[sheet][idx]=value;
putCache('virtual',virtual);
putCache('virtual_backup',virtual_backup);
return virtual[sheet][idx];
}
function valSheet(sheet,idx)
{
return sheet.getRange(idx).getValues().toString();
}
function commitSheet(sheet)
{
var virtual = getCache("virtual");
Object.keys(virtual[sheet]).map(function(key, index) {
var value = virtual[sheet][key];
if(key.charAt(1)!=0)
sheet.getRange(key).setValue(value);
});
virtual[sheet] = {};
putCache('virtual',virtual);
}
function RollBack() {
var virtual_backup = getCache("virtual_backup");
Logger.log(JSON.stringify(virtual_backup));
Object.keys(virtual_backup).map(function(key, index) {
rollbackSheet(key);
});
}
function rollbackSheet(sheet)
{
var virtual_backup = getCache("virtual_backup");
Object.keys(virtual_backup[sheet]).map(function(key, index) {
var value = virtual_backup[sheet][key];
if(key.charAt(1)!=0)
sheet.getRange(key).setValue(value);
});
putCache('virtual_backup',virtual_default)
}