Добрый день, коллеги!
После прочтения документации вижу так:
- настроить необходимое в разделе [Лиды] в CRM
- сформировать ссылку в письме с нужными параметрами
-
на сайте проверять параметры в ссылке
- при необходимости ставить куку - флаг первого посещения
- если посещение первое, то динамически создавать и программно сабмитить форму
Если кто то уже решал такую задачу более просто, опишите процесс концептуально (или подтвердите верность моего видения :), расскажите, какие подводные камни могут быть?
Нравится
Нужно разбирать и переделывать стандартный код, который сгенерирован при создании нового лендинга и предназначен для вставки на сайт. Он работает с веб-сервисом, находящимся по адресу:
http://адрес_сайта.com/0/ServiceModel/GeneratedObjectWebFormService.svc/SaveWebFormObjectDataКлиентская логика — в общедоступных скриптах:
https://webtracking-v01.bpmonline.com/JS/track-cookies.js
https://webtracking-v01.bpmonline.com/JS/create-object.jsСерверная — в схеме GeneratedObjectWebFormService.
Другой вариант — писать полностью свой сервис с нужной функциональностью, доступный извне без авторизации.
Спрашивали - отвечаем.
Если в ссылке будет передан параметр bpmContactEmail="email@email.email", этот код зарегистрирует лида и привяжет к контакту с почтовым ящиком email@email.email. Ловушка для лида должна быть настроена в разделе [Лендинги].
/*Форма авторегистрации по ссылке из Email*/
var configAutoReg = {
fields: {
"Email": ".bpm-contact-email" // Email посетителя
},
landingId: "00000000-0000-0000-0000-000000000000", // ID лендинга, смотреть в шаге 2 настройки лендинга
serviceUrl: "http://CRM_SITE_DNS_NAME/0/ServiceModel/GeneratedWebFormService.svc/SaveWebFormLeadData",
redirectUrl: ""
};
function createLeadFromAutoReg() {
landing.createObjectFromLanding(configAutoReg)
};
//функция позволяет выполнять действие (регистрацию лида) один раз
//взята тут https://developer.mozilla.org/ru/docs/Web/API/Document/cookie#Example_5_Do_something_only_once_%E2%80%93_a_general_library
function executeOnce () {
var argc = arguments.length, bImplGlob = typeof arguments[argc - 1] === "string";
if (bImplGlob) { argc++; }
if (argc < 3) { throw new TypeError("executeOnce - not enough arguments"); }
var fExec = arguments[0], sKey = arguments[argc - 2];
if (typeof fExec !== "function") { throw new TypeError("executeOnce - first argument must be a function"); }
if (!sKey || /^(?:expires|max\-age|path|domain|secure)$/i.test(sKey)) { throw new TypeError("executeOnce - invalid identifier"); }
if (decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) === "1") { return false; }
fExec.apply(argc > 3 ? arguments[1] : null, argc > 4 ? Array.prototype.slice.call(arguments, 2, argc - 2) : []);
document.cookie = encodeURIComponent(sKey) + "=1; expires=Fri, 31 Dec 9999 23:59:59 GMT" + (bImplGlob || !arguments[argc - 1] ? "; path=/" : "");
return true;
};
// функция возвращает значение указанного парметра из ссылки
function getSearchParams(k){
var p={};
location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){p[k]=v})
return k?p[k]:p;
};
jQuery(document).ready(function() {
var bpmContactEmail = getSearchParams("bpmContactEmail");
if (bpmContactEmail && bpmContactEmail !== "[") {
executeOnce(function() {
landing.initLanding(configAutoReg);
var $form = $("<form />", { style: "display: none;", onSubmit: "createLeadFromAutoReg(); return false" });
$form.append($("<input />", { class: "bpm-contact-email" , name: "bpmContactEmail", value: bpmContactEmail}));
$form.appendTo("body").submit().remove();
},
"bpmLeadFromEmail");
}
});
Зверев Александр,
да не, все проще оказалось, в bpm все настройки только стандартные, а на сайте легкая доработка :)
В принципе, получилась самоценная вещь, можно допилить механизм генерации лендингов в BaseGeneratedWebFormPageV2 на вывод этого кода, запаковать в пакет вместе с шаблоном письма со ссылкой, приложить инструкцию и распространять через маркет.