[modSendPulse] - Рассылки через SendPulse
Компонент modSendPulse предоставляет возможность интеграции с популярным русскоязычным сервисом Email рассылки SendPulse.
Основная задача текущей версии компонента — управление подписной базой.
Состав компонента:
Предварительная настройка компонента
Сниппет-Хук легко адаптировать под собственные нужды, если Вы не пользуетесь FormIt, а предпочитаете обрабатывать формы используя собственные сниппеты.
Плагин, добавляющий пользователя в адресную книгу при регистрации
Срабатывает на событие OnUserSave. Плагин по умолчанию отключен. Если Вы хотите чтобы пользователь автоматически добавлялся в адресную книгу при регистрации на Вашем сайте — плагин нужно активировать.
Сервис предоставляет возможность отправки подписчику приветственного письма сразу же при добавлении в адресную книгу.
Также можно настроить цепочку писем с целой кучей тригеров, статистикой открываемости и прочей аналитикой.
Причем письмо можно оформить в виде крутого адаптивного шаблона. Нам достаточно лишь добавить подписчика в нужную адресную книгу.
Вы можете создать несколько адресных книг, привязав каждую к определенным действиям.
Попадание в одну адресную книгу — вызовет отправку прайс-листа или презентации
Попадание во вторую адресную книгу — вызовет цепочку писем. и так далее.
Все это вы можете подробнее прочитать на сайте сервиса. Ссылку думаю найдете.
Основная задача текущей версии компонента — управление подписной базой.
Состав компонента:
- Хук для Formit или ajaxForm
- Компактный сниппет для ручной работы
- Плагин срабатывающий при регистрации пользователя на сайте
Предварительная настройка компонента
- Разумеется у Вас должен быть активный аккаунт в сервисе SendPulse и заведена хотя бы одна адресная книга
- Открываем системные настройки, раздел modsendpulse и заполняем три обязательных параметра
- modsendpulse_addressbook_user_create — Номер вашей адресной книги, куда по умолчанию будут добавляться email адреса. Номер можно посмотреть в адресной строке, открыв книгу в сервисе SendPulse
- modsendpulse_client_id — ID из раздела API вашего аккаунта в системе SendPulse
- modsendpulse_client_secret — Secret из раздела API вашего аккаунта в системе SendPulse
- Создайте собственную подписную/контактную форму с уникальным дизайном, и графой E-mail.
- По умолчанию хук ищет поля name и emai. Убедитесь что в форме поля названы именно так.l
- Вызовите форму при помощи FormIt или AjaxForm
- Добавьте к вызову хук modSendPulseHook
- При обработке формы — отправитель добавится в вашу адресную книгу на сервисе SendPulse.
[[!ajaxForm?
&form=`tpl.podpiska`
&hooks=`modSendPulseHook`
&validate=`name:required,email:required:email`
]]
Сниппет-Хук легко адаптировать под собственные нужды, если Вы не пользуетесь FormIt, а предпочитаете обрабатывать формы используя собственные сниппеты.
// Вызываем класс
if (!$modsendpulse = $modx->getService(
'modsendpulse',
'modsendpulse',
MODX_CORE_PATH . 'components/modsendpulse/model/modsendpulse/'
)) {
$modx->log(modX::LOG_LEVEL_ERROR, '[modSendPulseHook] - Not found class modsendpulse');
return;
}
//Инициируем (получаем токен для запросов к API)
$modsendpulse->initialize($modx->context->key);
// Получаем email любым удобным способом, по вкусу проводим валидацию
$email = 'test@text.ru';
//Опционально добавляем Имя адресата любым удобным для Вас способом
$name = 'Петя Иванов';
//Получаем номер адресной книги из системных настроек компонента или указываем вручную
$book = $modx->getOption('addressbook_user_create');
// Вызываем метод добавления email в адресную книгу
$params['emails'] = array(
array(
'email' => $email,
'variables' => array(
'name' => $name
)
)
);
$modsendpulse->sendPulseAddEmailsToBook($params, $book);
Плагин, добавляющий пользователя в адресную книгу при регистрации
Срабатывает на событие OnUserSave. Плагин по умолчанию отключен. Если Вы хотите чтобы пользователь автоматически добавлялся в адресную книгу при регистрации на Вашем сайте — плагин нужно активировать.
Сервис предоставляет возможность отправки подписчику приветственного письма сразу же при добавлении в адресную книгу.
Также можно настроить цепочку писем с целой кучей тригеров, статистикой открываемости и прочей аналитикой.
Причем письмо можно оформить в виде крутого адаптивного шаблона. Нам достаточно лишь добавить подписчика в нужную адресную книгу.
Вы можете создать несколько адресных книг, привязав каждую к определенным действиям.
Попадание в одну адресную книгу — вызовет отправку прайс-листа или презентации
Попадание во вторую адресную книгу — вызовет цепочку писем. и так далее.
Все это вы можете подробнее прочитать на сайте сервиса. Ссылку думаю найдете.
Поблагодарить автора
Отправить деньги
Комментарии: 34
добрый день,
а как сделать так, чтоб еще и на почту уведомление приходило?
а как сделать так, чтоб еще и на почту уведомление приходило?
Здравствуйте. Уведомление о чем?
что была сделана подписка. Чтоб менеджеру на почту еще приходило
Ну в приведенных выше примерах подписка срабатывает на какое либо стороннее событие. Например на регистрацию пользователя или заполнение формы. Подписка тут является дополнительным действием, менеджер по идее и так должен получить уведомление по основному действию.
На крайний случай вы можете дописать сниппет или плагин (смотря что используется) и настроить отправку почты посредством встроенных в MODX средств отправки почты modMail
На крайний случай вы можете дописать сниппет или плагин (смотря что используется) и настроить отправку почты посредством встроенных в MODX средств отправки почты modMail
к примеру если в форму добавить &emailTo, то она отправит на send и на почту?
сори, за тупые вопросы))
сори, за тупые вопросы))
Программа сделает все, что вы сами предусмотрите. Я не понимаю Вас.
Каким образом вы отправляете рассылку? Через что? Через Formit?
Каким образом вы отправляете рассылку? Через что? Через Formit?
[[!ajaxForm?
&form=`tpl.podpiska`
&hooks=`modSendPulseHook`
&validate=`email:email:required`
&validationErrorMessage=`В форме содержатся ошибки!`
&successMessage=`Подписка успешно оформлена!`
]]
вот так))
&form=`tpl.podpiska`
&hooks=`modSendPulseHook`
&validate=`email:email:required`
&validationErrorMessage=`В форме содержатся ошибки!`
&successMessage=`Подписка успешно оформлена!`
]]
вот так))
Вы можете добавить в параметр hooks Хук email, а также добавить параметр emailTo и письма будут отправляться по указанному адресу. Все просто. ПО вкусу также можно добавить чанк с текстом письма.
Смотрите типовые настройки FormIt
Смотрите типовые настройки FormIt
&hooks=`modSendPulseHook,email`
&emailTpl=`CentralizedDebtObligationEmailTpl`
&emailSubject=`Some Sucker Bought Another CDO`
&emailTo=`sales@mortgagemoney.com`
Спасибо большое
Спасибо, все работает. А есть ли возможность помещать пользователей в разные адресные книги при отправке формы с разных страниц через Formit?
Вполне
На каждой странице в вызов Formit вставляйте номер нужной книги в параметр &book.
Не забудьте применить хук sendpulse (это будет сниппет, который нужно создать)
Содержимое примерно такое
По идее такая конструкция должна решить ваш вопрос.
На каждой странице в вызов Formit вставляйте номер нужной книги в параметр &book.
Не забудьте применить хук sendpulse (это будет сниппет, который нужно создать)
Содержимое примерно такое
// Вызываем класс
$modsendpulse = $modx->getService('modsendpulse');
// Получаем email любым удобным способом, по вкусу проводим валидацию
$email = 'test@text.ru';
//Опционально добавляем Имя адресата любым удобным для Вас способом
$name = 'Петя Иванов';
//Номер адресной книги уже есть в параметре $book
// Вызываем метод добавления email в адресную книгу
$params['emails'] = array(
array(
'email' => $email,
'variables' => array(
'name' => $name
)
)
);
$modsendpulse->sendPulseAddEmailsToBook($params, $book);
По идее такая конструкция должна решить ваш вопрос.
Чего-то не сработало. Вроде сделал так же, как вы указали.
[[!AjaxForm?
&snippet=`FormIt`
&form=`form-tpl`
&hooks=`email,FormItSaveForm,modSendPulseHook,sendpulse`
&book=`1XXXXX6`
&emailSubject=`Сообщение с сайта [[++site_url]]`
&emailTo=`info@site.ru`
&emailFrom=`info@site.ru`
&emailTpl=`emailFormTpl`
&formFields=`name,email,message,page`
&successMessage=`Сообщение успешно отправлено`
&validate=`name:required,email:email:required,check:required`
&validationErrorMessage=`В форме содержатся ошибки!`
&fiarSubject=`Спасибо за ваш вопрос!`
&successMessage=`<h6>Ваше сообщение отправлено</h6><p style="width: 400px;">Наши специалисты свяжутся с вами в ближайшее время.</p>
`
&name.vTextRequired=`Напишите, как к вам обращаться`
&email.vTextRequired=`На какую почту нам писать ответ`
&check.vTextRequired=`Вы должны дать разрешение на обработку своих персональных данных`
]]
Отдельно создал и скопировал ваш сниппет и дал ему имя sendpulse. При отправке формы указывал разные email, в том числе пробовал Петю Иванова и мыло test@text.ru, однако все равно данные добавляются в основную книгу
Ну для начала вы используете сразу два хука для sendPulse (modSendPulseHook,sendpulse)
Первый уберите, либо уберите второй, а первый подкорректируйте.
Первый уберите, либо уберите второй, а первый подкорректируйте.
Удалил новый хук. А в старом как я понимаю, надо подправить строчку:
if(!$book = $modx->getOption('modsendpulse_addressbook_user_create')){
$modx->log(1, '[modSendPulseHook] - No book number');
}
Что именно там править? Вот весь код сниппета:<?php
if (!$modsendpulse = $modx->getService('modsendpulse')) {
$modx->log(1, '[modSendPulseHook] - Not found class modsendpulse');
return;
}
$modsendpulse->initialize($modx->context->key);
$email = $hook->getValue('email');
$name = $hook->getValue('name');
if(!$email OR empty($email)){
$modx->log(1, '[modSendPulseHook] - No Email');
}
if(!$book = $modx->getOption('modsendpulse_addressbook_user_create')){
$modx->log(1, '[modSendPulseHook] - No book number');
}
$params['emails'] = array(
array(
'email' => $email,
'variables' => array(
'name' => $name
)
)
);
$modsendpulse->sendPulseAddEmailsToBook($params, $book);
Я так понимаю, что надо просто убрать вот эту строчку?
if(!$book = $modx->getOption('modsendpulse_addressbook_user_create')){
$modx->log(1, '[modSendPulseHook] — No book number');
}
if(!$book = $modx->getOption('modsendpulse_addressbook_user_create')){
$modx->log(1, '[modSendPulseHook] — No book number');
}
if(!$book = $modx->getOption('modsendpulse_addressbook_user_create')){
$modx->log(1, '[modSendPulseHook] — No book number');
}
Замени на такой вариант
if(!$book){
$book = $modx->getOption('modsendpulse_addressbook_user_create');
}
Это если у тебя в форме нету номера книги, тогда он возьмет стандартную книгу что у тебя в настройках введена.
В стандартном сниппете оно этой строчкой присваивает значение книги из системных настроек и проверяет не пустое ли оно, поэтому и не работает тк оно перезаписывает постоянно значение твое.
$modx->log(1, '[modSendPulseHook] — No book number');
}
Замени на такой вариант
if(!$book){
$book = $modx->getOption('modsendpulse_addressbook_user_create');
}
Это если у тебя в форме нету номера книги, тогда он возьмет стандартную книгу что у тебя в настройках введена.
В стандартном сниппете оно этой строчкой присваивает значение книги из системных настроек и проверяет не пустое ли оно, поэтому и не работает тк оно перезаписывает постоянно значение твое.
Настроил рассылку. Но вот проблема — так как бесплатный аккаунт SendPulse и компонент modSendPulse не предлагают подтверждение через письмо, то это облегчает ботам подписаться на рассылку. После размещения формы рассылки на сайте сразу же начали регистрироваться подписчики с именами типа a7jf8kd79 — похоже это боты.
Подскажите как от этого избавиться, хотя бы в основном, если не полностью. Например, как сделать валидацию имени, чтобы имена с цифрами не пропускались?
Подскажите как от этого избавиться, хотя бы в основном, если не полностью. Например, как сделать валидацию имени, чтобы имена с цифрами не пропускались?
Сами принципы валидации и проверки данных по шаблонам в PHP Вам понятны? Без использования каких либо компонентов?
Спасибо за вопрос. Хотя пока ждал ответа — сам разобрался:
В вызове Formit указываем параметры
В вызове Formit указываем параметры
&customValidators=`isUserName`
&validate=`name:required:isUserName,email:required,message:required:stripTags,workemail:blank`
Сниппет валидации isUserName:<?php
if (!preg_match('/^[a-zа-яё-]{2,30}$/iu', $value)) {
$validator->addError($key,'В имени могут содержаться только буквы и дефис - исправьте!');
return false;
}
return true; //<-- if you omit this or return false, your form won't validate
Может кому пригодится.
Похоже на правду.
А можно ли сделать, чтобы летело в несколько адресных книг?
&book=`201xxx2,2017xxx1`
&book=`201xxx2,2017xxx1`
// Вызываем класс
$modsendpulse = $modx->getService('modsendpulse');
// Получаем email любым удобным способом, по вкусу проводим валидацию
$email = 'test@text.ru';
//Опционально добавляем Имя адресата любым удобным для Вас способом
$name = 'Петя Иванов';
//Получаем номера адресной книги из параметров сниппета или указываем вручную
$books = '201xxx2,2017xxx1';
//Делаем из строки массив
$books = explode(',', $books);
//В цикле отправляем в каждую книгу отдельно
foreach($books as $book){
// Вызываем метод добавления email в адресную книгу
$params['emails'] = array(
array(
'email' => $email,
'variables' => array(
'name' => $name
)
)
);
$modsendpulse->sendPulseAddEmailsToBook($params, $book);
}
//Если книг много, и ждать перебора с отправкой долго - пишем параметры в промежуточную таблицу задач, потом по крону вызываем таблицу и по порядку отправляем данные в книги
Супер, спасибо!
Можно еще момент уточнить.
Я делаю, чтобы юзер сам выбирал, в какие книги рассылки его добавлять.
В вызове формы добавил &books, куда по идее должны подставляться выбранные книги:
&books=`20172xx,20282xx` = улетает все, как нужно.
Если же через чек боксы выбираю (хоть одну, хоть две) ничего не появляется.
Я делаю, чтобы юзер сам выбирал, в какие книги рассылки его добавлять.
В вызове формы добавил &books, куда по идее должны подставляться выбранные книги:
[[!AjaxForm?
&snippet=`FormIt`
&form=`podpiskaMailForm`
&hooks=`mymodSendPulseHook`
&books=`[[+check-auto]]`
&emailSubject=`Новый подписчик`
]]
Сама форма<form action="[[~[[*id]]]]" method="post">
<input type="text" value="" placeholder="Email" name="email" >
<input type="text" value="" placeholder="auto" name="auto" >
<label class="checkbox"><input type="checkbox" name="check-auto[]" value="20172xx"> Машина 1</label>
<label class="checkbox"><input type="checkbox" name="check-auto[]" value="20282xx"> Машина 2</label>
<label class="checkbox"><input type="checkbox" name="check-auto[]" value="20172xx"> Машина 3</label>
<input type="submit" value="Получить скидку" name="send-podpis" class="send-promo">
</form>
Если в вызове Ajaxform вручную прописываю &books=`20172xx,20282xx` = улетает все, как нужно.
Если же через чек боксы выбираю (хоть одну, хоть две) ничего не появляется.
Решил проблему по другому.
Все выбранные чекбоксы просто загоняю в input hidden и уже его передаю в сниппет на обработку, может кому пригодится.
Все выбранные чекбоксы просто загоняю в input hidden и уже его передаю в сниппет на обработку, может кому пригодится.
<!-- Подстановка номеров книг -->
<script>
jQuery(function($) {
var $text = $('#text-input'),
$box = $('.check-a');
$box.on('click change', function() {
var values = [];
$box.filter(':checked').each(function() {
values.push(this.value);
});
$text.val(values.join(','));
});
});
</script>
Кто-нибудь пробовал связать этот компонент с minishop2? Так чтобы по кнопке отправления заказа добавлялись сведения о покупателе в адресную книгу?
Мне думается, что надо поправить класс-обработчик msOrderHandler, добавив в него что-то на тему:
Мне думается, что надо поправить класс-обработчик msOrderHandler, добавив в него что-то на тему:
$modsendpulse = $modx->getService('modsendpulse');
$params['emails'] = array(
array(
'email' => $email,
'variables' => array(
'name' => $name
)
)
);
$modsendpulse->sendPulseAddEmailsToBook($params, $book);
Сработает или лучше не пытаться?
Это кардинально неправильный подход.
Нужно использовать систему плагинов. Попробуй создать плагин на событие onUserSave (не уверен, что это событие сработает). Как вариант можно создать плагин на событие msOnCreateOrder, там тоже есть доступ к данным заказчика. И уже оттуда отправлять данные в адресную книгу
Нужно использовать систему плагинов. Попробуй создать плагин на событие onUserSave (не уверен, что это событие сработает). Как вариант можно создать плагин на событие msOnCreateOrder, там тоже есть доступ к данным заказчика. И уже оттуда отправлять данные в адресную книгу
Да, я уже сам понял, что так делать нельзя. Сейчас дописываю плагин, он включается по событию msOnSubmitOrder.
Не разобрался пока как в адресную книгу телефон передать.
Не разобрался пока как в адресную книгу телефон передать.
Как передать, или где его взять?
Как передать.
switch ($modx->event->name) {
case 'msOnSubmitOrder':
$modx->log(MODX_LOG_LEVEL_ERROR, "1");
$modsendpulse = $modx->getService('modsendpulse','modsendpulse',MODX_CORE_PATH.'/components/modsendpulse/model/modsendpulse/');
if(!$modsendpulse) $modx->log(MODX_LOG_LEVEL_ERROR, "2");
$email = $data['email'];
$modx->log(MODX_LOG_LEVEL_ERROR, $email);
$name = $data['receiver'];
$modx->log(MODX_LOG_LEVEL_ERROR, $name);
$books = $modx->getOption('modsendpulse_addressbook_user_create');
$modx->log(MODX_LOG_LEVEL_ERROR, $books);
$books = explode(',', $books);
foreach($books as $book){
$params['emails'] = array(
array(
'email' => $email,
'variables' => array(
'name' => $name
)
)
);
$modsendpulse->sendPulseAddEmailsToBook($params, $book);
}
break;
}
Сделал так, но почему-то в адресной книге запись не создалась.
Не помню точно, возвращается ли ошибка от sendPulse, но Попробуй так.
Компонент с некоторого времени платный (290 руб) — если не получится — покупай, пиши в поддержку — поковыряем вместе уже более подробно
$response = $modsendpulse->sendPulseAddEmailsToBook($params, $book);
$modx->log(1, print_r($response, 1));
Компонент с некоторого времени платный (290 руб) — если не получится — покупай, пиши в поддержку — поковыряем вместе уже более подробно
Добрый день! Идея вероятно из области фантастики, но все же:
Реально ли публикуя на сайте новость (отметив ее к примеру чекбоксом) при сохранении запускать плагин, который отправит в Send Puls команду на рассылку контента и картинки (картинка из TV поля) из этой статьи всем подписчикам?
Реально ли публикуя на сайте новость (отметив ее к примеру чекбоксом) при сохранении запускать плагин, который отправит в Send Puls команду на рассылку контента и картинки (картинка из TV поля) из этой статьи всем подписчикам?
Насколько я знаю, шаблоны рассылок sendPulse никак от сайта не зависят и формируются ТОЛЬКО внутри интерфейса sendPulse. Никаким образом они не принимают контент извне, в том числе из сайта.
Для твоей задачи — думаю лучше воспользоваться отдельным компонентом, вроде sendex. Но тут в качестве минуса можно отметить то, что не будет возможности отслеживать доставку, открытие писем, как в SendPulse.
Возможно есть решения для сочетания всех идей и преимуществ — я не особо вникал в тему рассылок
Для твоей задачи — думаю лучше воспользоваться отдельным компонентом, вроде sendex. Но тут в качестве минуса можно отметить то, что не будет возможности отслеживать доставку, открытие писем, как в SendPulse.
Возможно есть решения для сочетания всех идей и преимуществ — я не особо вникал в тему рассылок
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.