Вопрос

Добрый день, коллеги!

После прочтения документации вижу так:

  1. настроить необходимое в разделе [Лиды] в CRM
  2. сформировать ссылку в письме с нужными параметрами
  3. на сайте проверять параметры в ссылке

  4. при необходимости ставить куку - флаг первого посещения
  5. если посещение первое, то динамически создавать и программно сабмитить форму

Если кто то уже решал такую задачу более просто, опишите процесс концептуально (или подтвердите верность моего видения :), расскажите, какие подводные камни могут быть?

У меня такой же вопрос

4 комментария

Нужно разбирать и переделывать стандартный код, который сгенерирован при создании нового лендинга и предназначен для вставки на сайт. Он работает с веб-сервисом, находящимся по адресу:

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

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день!

 

Специфика работы заказчика находить инвесторов для Инвестпроектов . Инвестпроекты регистрируется в качестве лида. 

Задача состоит в том чтобы после регистрации Лида система сама отфильтровала необходимых инвесторов из раздела контрагента и предоставила выбор для предложения  им инветспроекта.

Напр.  Зарегистрирован Лид, где необходимо найти инвестора для инвестиции в сельское хозяйства.  Система должна найти необходимого инвестора из списка и предоставить для пользователя для дальнейшей обработки.

Я добавил вклаку в лидах, и в этой вкладке добавил 5-6 полей выбора инвесторов (контрагентов). Необходимо сделать так чтобы в момент выбора контрагента система отфильтровала необходимы лиду контрагента.

Заранее благодарю.

У меня такой же вопрос

1 комментарий

Видимо, нужно разрабатывать что-то подобное механизму подбора продуктов в заказе. Или, ещё боле похоже по смыслу, подбор листингов по лиду в bpm’online real estate (см. стр. 27). И то, и другое — сложная логика, нужно разбираться, как она реализована.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Собственно вопрос в заголовке.
Дело в том, что в лиде это отдельные схемы контейнеров LeadAccountProfileSchema и LeadContactProfileSchema.
А мне нужно вывести список контактов выбранного контрагента.
Как организовать данный фильтр? Пробовал замещать карточку лида и в ней указывать но не работает.
Да и не понятно какие колонки они используют? Такие: Account и Contact? Или что-то другое?

Можете дать готовое решение или хотя-бы объяснить всё понятно.

У меня такой же вопрос

3 комментария

Добрый день, Максим!

Думаю, самый простой вариант - добавить бизнес-правило. Если у Вас 7.10 - можно через мастер, если нет - то в карточке. Поля, которые Вам нужно - QualifiedContact и QualifiedAccount, это можно подсмотреть в объекте. Просто Contact и Account - это текстовые поля, а не справочные. Насколько я понимаю, потому что в момент создания лида не всегда они известны, да и можно написать название с ошибками.

"Мотков Илья" написал:

Добрый день, Максим!

Думаю, самый простой вариант - добавить бизнес-правило. Если у Вас 7.10 - можно через мастер, если нет - то в карточке. Поля, которые Вам нужно - QualifiedContact и QualifiedAccount, это можно подсмотреть в объекте. Просто Contact и Account - это текстовые поля, а не справочные. Насколько я понимаю, потому что в момент создания лида не всегда они известны, да и можно написать название с ошибками.

Спасибо. Помогло с этими полями - QualifiedContact и QualifiedAccount!

"Сазонов Максим" написал:А мне нужно вывести список контактов выбранного контрагента.

Вывести где ?
по нажатию кнопки, по наступлению какого-то события или состояния, при открытии карточки ?
В общем и в целом ничего сложного в Вашем кейсе нет.
Необходимо задать себе несколько вопросов:
1) Как связаны целевые Контрагент и Контакты (я подразумеваю что речь идет о детали "Контакты Контрагента") ?
2) Что мне необходимо сделать концептуально, н/п "У меня есть справочное поле контакт, и мне необходимо чтобы пользователь выбрал там значение из "открывающегося окна выбора"/"из выпадающего списка"(нужное подчеркнуть), при этом доступный список контактов должен быть отфильтрован по принципу присутствия в детали "Контакты Контрагента", для контрагента который в данный момент у казан в справочном поле контрагента текущей карточки".

Ответьте мне на эти вопросы, и я помогу Вам реализовать Ваш кейс.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

подскажите, как повторить функционал поиска дублей, но для Лидов. Версия 7.5

У меня такой же вопрос

13 комментариев

Добрый день!
Лид в bpm'online - потребность клиента. Для одного и того же контакта/контрагента может быть несколько одинаковых лидов(потребностей) в разные промежутки времени. В случае поиска дублей лидов все эти потребности объединятся, что является логически некорректным.

В связи с этим не совсем понятна бизнес-задача, которую необходимо решить поиском дублей лидов.

предусмотрено ведение различных задач по различным продуктам для одного лида. поиск дублей должен производится по детали «Средства связи» (по полям, содержащим телефон, а также по полю «E-mail»).

Валентин, добрый день!

Функциональность поиска дублей по лидам уже присутствует в версии 7.7
В данном случае оптимальным решением является обновление до последней версии.

Дополнительно хочу отметить, что самостоятельная реализация подобной задачи в 7.5 будет достаточно трудоемка.

Наталья, спасибо за информацию. Но пока обновления до 7.7 не планируется. Хотелось бы все таки получить рекомендации для решения задачи

Здравствуйте, Валентин!

Для того, чтобы объединить дубли лидов необходимо выполнить следующие действия:
1) Создать процесс для поиска лидов (аналогично процессу StartGlobalContactDuplicatesSearch). Для поиска необходимо создать процедуру в базе данных, аналогичную tsp_GloballySearchForDuplicates. Код процедуры tsp_GloballySearchForDuplicates можно найти в конфигурации, перейдя на вкладку "SQL сценарии". Процедура будет записывать данные в созданный Вами объект LeadDuplicates (создайте объект по аналогии с объектом ContactDuplicate)

2) Необходимо создать новую страницу редактирования, которая будет отображать данные из созданного объекта LeadDuplicates по аналогии со страницей DuplicatesPageV2 (либо заместите DuplicatesPageV2, добавив в нее нужную логику).

А теперь самое интересное - слияние лидов и удаление лишних. Так как удалить лид средствами системы не получится (связи, запущенный процесс...), то придется придумывать что-то новое.
Я бы в этот момент создавал бы новую запись лида и изменял данной записи значение в поле "Стадия" на нужное. Остальным дублям изменял бы стадию на "Дисквалифицирован" и указывал причину дисквалификации "Дубль".

Но лучше, наверное, обновиться до 7.7.0.:smile:

Спасибо.
Процесс StartGlobalContactDuplicatesSearch запускается в действии процесса StartGlobalDuplicatesSearch. Как теперь правильно заместить StartGlobalDuplicatesSearch, чтобы добавить в него запуск процесса StartGlobalLeadDuplicatesSearch? или если создать подобное действие процесса со своей логикой, где оно должно запускаться?

"Медведев Валентин Николаевич" написал:

Как теперь правильно заместить StartGlobalDuplicatesSearch, чтобы добавить в него запуск процесса StartGlobalLeadDuplicatesSearch?

Замещение процессов в системе не предусмотрено. Вам необходимо создать новый процесс и запускать его.

"Медведев Валентин Николаевич" написал:

или если создать подобное действие процесса со своей логикой, где оно должно запускаться?

Запускать новый процесс Вы можете, например, из библиотеки процессов (самая простая реализация). Также Вы можете добавить соответствующее действие в раздел "Лиды". Более подробно о создании действий, Вы можете прочитать в Академии.

имелось в виду
что собой и представляет StartGlobalDuplicatesSearch.

Добрый день!

Добавить соответствующее действие в раздел "Лиды" – подразумевается в замещающей странице редактирования лидов добавить новую кнопку в меню “Дейсвтия”. Также добавить обработчик, который будет запускать процесс по нажатию на эту кнопку.

StartGlobalDuplicatesSearch(Действие процесса) содержит сценарий:

string jobProcessName = (SchemaName == "Account") ? "StartGlobalAccountDuplicatesSearch" : "StartGlobalContactDuplicatesSearch";
AppScheduler.ScheduleImmediateProcessJob("DuplicatesSearchJob", "DuplicatesSearchGroup",
jobProcessName, UserConnection.Workspace.Name, UserConnection.CurrentUser.Name);
return true;

если я создам подобное, в котором переменная jobProcessName будет получать "StartGlobalLeadDuplicatesSearch", то где оно должно вызываться?

Здравствуйте!

Этот код добавляет в планировщик Quartz процесс StartGlobalAccountDuplicatesSearch, если поиск осуществляется со схемы Account, StartGlobalContactDuplicatesSearch - при поиске с другой схемы.

Для Вашей задачи, Вы можете действие процесса заменить на следующее:

string jobProcessName = "StartGlobalLeadDuplicatesSearch";
AppScheduler.ScheduleImmediateProcessJob("DuplicatesSearchJob", "DuplicatesSearchGroup",
jobProcessName, UserConnection.Workspace.Name, UserConnection.CurrentUser.Name);
return true;

спасибо всем за помощь! разобрался.
теперь такой вопрос... можно ли изменить логику поиска дублей Лидов при импорте данных из Exel? например, чтобы телефоны "+7 (978) 123 12 31" и "+79781231231" считались совпадением. в каких модулях реализована стандартная логика?

Здравствуйте!

При импорте из Excel записи +7 (978) 123 12 31 и +79781231231 действительно будут считаться разными записями. Проверка на тождественность этих записей не осуществляется.

При импорте из Excel Вы можете проверять уникальность по другим полям/признакам. Также непосредственно перед импортом Вы можете в файле Excel автозаменой символов "(", ")", " " на "".

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

В нашу компанию была куплена BPMonline CRM. Поставили задачу записывать все заявки с сайта в лиды, но после изучения всей документации я запутался что и как. Ткните пожалуйста в правильную сторону. Разработка ведется на PHP.

У меня такой же вопрос

10 комментариев

"Толмачев Дмитрий Юрьевич" написал:

http://www.community.terrasoft.ru/forum/topic/9613
http://www.community.terrasoft.ru/forum/topic/10573
+ SDK (но там для C#)


спасибо за ссылки. особенно за вторую. SDK мне не особо смогло помочь, т.к. мне оно показалось малоинформативным и с шарпом я знаком очень мало

Как осуществляется связь разобрался, но так и не понял как использоватьвсе доступное sdk и api для добавления лидов

Здравствуйте, Владимир!
Собственно, та часть API bpm'online, которая отвечает за работу с данными, то есть чтение, изменение, добавление и удаление записей в таблицу реализует протокол OData, и представляется веб-сервисом, доступным "снаружи" - EntityDataService.svc. Обращаться к нему можно с помощью авторизованных http-запросов.
OData - стандартизированный протокол, и в bpm'online работа с ним практически не отличается от стандарта, поэтому документацию Вы также можете получить и из других источников, например:
http://wiki.sensenet.com/index.php?title=OData_REST_API
http://blogs.msdn.com/b/brian_swan/archive/2010/03/18/using-the-odata-s…
https://odataphp.codeplex.com/

Единственное, я не могу Вам точно сказать, будет ли прокси-класс для PHP будет корректно генерироваться. Но можете попробовать.
Примеры работы также есть, опять таки на нашем sdk, а также на community, и даже не зная ничего о c# можно примерно разобрать, какие запросы нужно отправить для получения необходимых результатов.

Но для регистрации лидов извне уже есть готовый функционал - Формы для внешних ресурсов. Настройки этих форм доступны из раздела "Лиды". В документации по разделу "Лиды" также есть описание, как работать с ними, более подробно описано в блоке "Синхронизация и импорт из других систем".
Наиболее часто встречающиеся проблемы при настройке формы для внешнего ресурса описаны здесь:
http://www.community.terrasoft.ru/blogs/10378

"Андрей Каспаревич" написал:

Но для регистрации лидов извне уже есть готовый функционал - Формы для внешних ресурсов. Настройки этих форм доступны из раздела "Лиды". В документации по разделу "Лиды" также есть описание, как работать с ними, более подробно описано в блоке "Синхронизация и импорт из других систем".
Наиболее часто встречающиеся проблемы при настройке формы для внешнего ресурса описаны здесь:
http://www.community.terrasoft.ru/blogs/10378

С уважением,
Каспаревич Андрей
Эксперт 3-й линии поддержки

При попытке сачать код для внешней формы получаю ошибку
ошибка при попытке скачивания кода формы для сайта

Владимир, иногда могут также возникать проблемы из-за названия формы. Попробуйте назвать ее без использования пробелов и кириллицы.

"Андрей Каспаревич" написал:

Владимир, иногда могут также возникать проблемы из-за названия формы. Попробуйте назвать ее без использования пробелов и кириллицы.

С уважением,
Каспаревич Андрей
Эксперт 3-й линии поддержки


помогло. спасибо. скачать смог. данные отправляются, но в лиды ничего не записывается. предполагаю что данные не записываются, т.к. в CRM есть обязательные поля "Тип потребности" и "Зрелось потребности". При настройке формы таких не было. Влияет ли это?

Здравствуйте, Владимир!
Действительно, это влияет на возможность добавления записей. Обязательность этих полей установлена на уровне объекта, поэтому при создании экземпляра класса объекта, то есть записи, возникнет ошибка.
Необходимо установить значения по умолчанию для этих полей с помощью настроек веб-формы:

"Андрей Каспаревич" написал:

Здравствуйте, Владимир!
Действительно, это влияет на возможность добавления записей. Обязательность этих полей установлена на уровне объекта, поэтому при создании экземпляра класса объекта, то есть записи, возникнет ошибка.
Необходимо установить значения по умолчанию для этих полей с помощью настроек веб-формы:

Добрый день!

Возникла такая же проблема.

У одного из клиентов для сущностей: Лид, Контакт, Аккаунт имеются обязательные поля.

Соответственно при попытке добавить сущность получаем ошибку: такое то поле является обязательным.

Вопрос: как через OData получить список обязательных полей для сущностей Lead, Contact, Account ?

Здравствуте!

Обратите внимание на статью Queryable OData Metadata

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Здравствуйте! Подскажите, каким образом осуществить получения лидов со стороннего сервиса (lpgenerator) в BPMOnline по средствам мэппинга?

Все наши лендинги висят на сервисе lpgenerator, в котором и ведется статистика лидов, посещений сайтов и тп. На лендингах есть формы для обратной связи. При заполнении формы, лид уходит для статистики в внутреннюю CRM lpgeneratora и на почтовый ящик, откуда он уже и попадает в обработку к манагеру. Каким образом будет удобней экспортировать лиды с форм на сайтах?

У меня такой же вопрос

1 комментарий

Здравствуйте, Александр.

Данный функционал уже реализован в bpm'online в виде формы генерации лидов.
Вы можете ознакомиться с настройкой формы генерации лидов в руководстве по настройке на с.145:
http://www.training.terrasoft.ru/sites/default/files/BPMonline_CRM_CG_7…
Все схемы уже присутствуют в системе в пакете WebLeadForm

Войдите или зарегистрируйтесь, чтобы комментировать
Публикация

Начну с анонса - 29 марта состоится заседание в Клубе "Маркетинг джаз" на тему Marketing & Sales alignment (инфо - http://www.b2b-ray.com/default/news/29mars).
У нас эта тема, говорят, актуальная, однако детального "разбора полетов" я еще не встречал.
Диагностика в целом, ясна - она вокруг Sales ready leads и движении по этапам цикла продаж.
В развитых странах, маркетинг генерирует только 23% Sales ready leads (см. также http://b2b-insight.management.com.ua/2011/01/choho-potrebujete-panove/), а что касается синхронизации в общем движении по воронке, то маркетинг, как правило, "выпадает" уже на этапе выдачи КП.

Картина в наших компаниях В2В, по моему опыту, в целом печальная,так как
1 - маркетинг действительно не утруждает себя измерениями к-либо КPI,
2 - "выравнивание" - как вызов, воспринимается и принимается только в небольшом количестве крупных компаний "прозападной" ориентации осознающих свои проблемы на стыке функций и, соответственно, понимающих важность вопросов
3 - профессиональный уровень маркетинга в целом, гораздо ниже, аналогичного в В2С, хотя и продажи часто не блещут

тем не менее, все это развивается чему подтверждением и встреча завтра. Отношение к CRM? Самое непосредственное. Решение "выравнивания" кроется в количестве и качестве лидов - со всеми вытекающими задачами
а) согласования Sales ready leads между продавцами и маркетингом
б) налаживания учета и контроля
в) качественному проведению маркетинг. компаний с четким измерением этих лидов
г) автоматизации процессов взаимодействия при движении по воронке продаж...
... и т.д.

короче, тема эта богатая, в Украине слабо разработанная - и кому ее еще обсуждать, как не профессиональным продавцам, маркетологоам и ... специалистам по CRM :)
Если настоящие примеры, с цифрами, выкладками, хорошими анализами... и могут придти откуда-то, - то только с применением подобных систем. Поэтому - у кого есть, что рассказать - давайте.

Поделиться

0 комментариев
Войдите или зарегистрируйтесь, чтобы комментировать