Добрый день, коллеги!
После прочтения документации вижу так:
- настроить необходимое в разделе [Лиды] в 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 на вывод этого кода, запаковать в пакет вместе с шаблоном письма со ссылкой, приложить инструкцию и распространять через маркет.