Публикация

О компании

Компания «Ирбис Моторс» является производителем мототехники. 
Компания ведет разработку собственных снегоходов, внедорожных мотоциклов и квадроциклов.

Предпосылки внедрения

Ранее сотрудники компании «Ирбис Моторс» фиксировали всю полезную информацию о взаимодействии с клиентом в индивидуальных таблицах, которая находилась в учетной системе 1С и личном кабинете клиента (web-площадка b2b для дилеров). Такая ситуация значительно усложняла возможность оперативно проанализировать работу как отдельного сотрудника, так и отдела в целом. Более того, при увольнении сотрудника продолжать работу в его «файле» очень сложно, так как каждый менеджер работал со своими клиентами в удобном для него формате. Важная информация о клиенте могла потеряться.

Для объединения информации в единой системе и автоматизации процессов была выбрана bpmonline.  

 

Основная задача внедрения bpm’onlineуправление процессами взаимодействия с клиентами. В рамках этой задачи необходимо организовать процессы по удержанию и развитию существующих клиентов, а также проведение маркетинговых активностей, направленных на привлечения новых клиентов.

 

Выполненные настройки

Первым шагом в адаптации системы стало определение требований к карточкам основных разделов. Далее на страницы разделов [Лиды], [Контакты], [Контрагенты], [Заказы] и [Продукты] через мастер раздела добавлены необходимые поля и справочники. Так, например, на страницу продукта добавлены такие поля: Марка и Тип транспортного средства, Технические характеристики и др.

 

Следующий шаг — приведение данных клиентской базе к единому представлению, после чего информация была импортирована в bpmonline. Важно отметить, что предыдущие заказы и активности также были импортированы, что позволило менеджерам иметь историю взаимодействия с клиентами для ведения работы в системе. После этого был настроен обмен данными, при котором заказы из учетной системы попадали в CRM и обратно в учетную систему. Это позволило централизировать процесс управления заказами.

 

Далее рассмотрим сам процесс работы и выполненные настройки. Так как в системе уже есть контакты и контрагенты, дополнительно был установлен темплейт Авоматического создания активностей по неактивным контрагентам. Это ускорило выполнение настроек, так как решение содержит готовый для работы бизнес-процесс.

 

Один из процессов работы менеджеров — это создание лидов из уже существующих Контактов/Контрагентов в случае выявления потребности. Второй алгоритм работы состоит из проработки новых потенциальных клиентов. Такие лиды формируются автоматически. Для автоматического создания лидов и регистрации их в системе был настроен лендинг, благодаря которому данные из регистрационной формы на сайте компании автоматически попадают в bpmonline. После получения и обработки информации о потребности   менеджер в один клик создает Контакт и Контрагент и система автоматически устанавливает взаимосвязи.

 

После стандартных коммуникаций с клиентом, в рамках лида, менеджер принимает решение о создании заказа или оставляет клиента на этапе «Взращивание», в крайних случаях — дисквалифицирует лид. Под взращиванием клиента подразумеваются периодические коммуникации с клиентом (телефонные звонки, личные встречи) с целью расположить его к продуктам компании. Кроме этого, контакты, у которых есть лиды на стадии «Взращивание», попадают в аудиторию e-mail рассылок, где происходит оповещение клиентов о специальных предложениях.

 

После оформления заказа и выполнения обязательных шагов менеджер выставляет счет. Оплата ожидается в учетной системе, которую используют в компании, после чего информация отображается в bpmonline. Важно отметить, что синхронизация учётной системы с bpmonline произведена в рамках отдельных доработок силами разработчиков компании.

 

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

 

Результат

В результате внедрения bpm’online компания «Ирбис Моторс» получила систему автоматизации процессов взаимодействия с клиентом, в которой можно вести прозрачную работу с клиентом, следить за историей взаимодействия, автоматизировать процессы выполнения заказов и составлять аналитику по ключевым показателям работы менеджеров и отдела в целом. Наличие единого центр коммуникации с клиентами (телефон, электронная почта, чат с площадкой b2b, социальные сети) позволяет сократить время на активности в других системах и уделять это время клиентам. Работа в bpmonline позволила повысить лояльность существующих клиентов к компании и улучшить процессы взаимодействия с новыми клиентами.

Поделиться

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

Добрый день. Действовал по инструкции с академии по добавлению пользовательского элемента кампании и столкнулся со следующей проблемой: в метаданных кампании в описании моего элемента не отображаются поля, которые я объявил в элементе из-за чего при обновлении страницы пропадают все заполненные поля в моем элементе. То есть я создал файл BSDeliveryElementSchema

define("BSDeliveryElementSchema", ["BSDeliveryElementSchemaResources", "CampaignBaseCommunicationSchema"],
    function(resources) {
        Ext.define("Terrasoft.manager.BSDeliveryElementSchema", {
            // Родительская схема.
            extend: "Terrasoft.CampaignBaseCommunicationSchema",
            alternateClassName: "Terrasoft.BSDeliveryElementSchema",
            // Идентификатор менеджера. Должен быть уникальным.
            managerItemUId: "a1226f93-f3e3-4baa-89a6-11f2a9ab2d71",
            // Подключаемые миксины.
            mixins: {
                campaignElementMixin: "Terrasoft.CampaignElementMixin"
            },
            // Название элемента.
            name: "BSDelivery",
            // Привязка ресурсов.
            caption: resources.localizableStrings.Caption,
            titleImage: resources.localizableImages.TitleImage,
            largeImage: resources.localizableImages.LargeImage,
            smallImage: resources.localizableImages.SmallImage,
            // Имя схемы карточки редактирования.
            editPageSchemaName: "BSDeliveryElementPropertiesPage",
            // Тип элемента.
            elementType: "BSDelivery",
            // Полное имя класса, соответствующего данной схеме.
            typeName: "Terrasoft.Configuration.BSDeliveryElement, Terrasoft.Configuration",
            // Переопределение свойств стилей для отображения.
            color: "rgba(55, 119, 188, 1)",
            width: 69,
            height: 55,
            // Настройка специфических свойств элемента.
            deliveryId: null,
            // Определение типов связей, исходящих из элемента.
            getConnectionUserHandles: function() {
                return ["CampaignSequenceFlow", "CampaignConditionalSequenceFlow"];
            },
            // Расширение свойств для сериализации.
            getSerializableProperties: function() {
                var baseSerializableProperties = this.callParent(arguments);
                return Ext.Array.push(baseSerializableProperties, ["DeliveryId"]);
            },
            // Настройка отображения иконок на диаграмме кампании.
            getSmallImage: function() {
                return this.mixins.campaignElementMixin.getImage(this.smallImage);
            },
            getLargeImage: function() {
                return this.mixins.campaignElementMixin.getImage(this.largeImage);
            },
            getTitleImage: function() {
                return this.mixins.campaignElementMixin.getImage(this.titleImage);
            }
        });
        return Terrasoft.BSDeliveryElementSchema;
    });

Потом файл BSDeliveryElementPropertiesPage

define("BSDeliveryElementPropertiesPage", ["LookupUtilities"],
    function(LookupUtilities) {
        return {
            attributes: {
 
                "DeliveryId":{
                	"dataValueType": this.Terrasoft.DataValueType.LOOKUP,
                	"type": this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                	"referenceSchemaName": "BeesenderDelivery",
					"isRequired": true,
					"isLookup": true
                },
 
                "DeliveryCollection": {
					"dataValueType": this.Terrasoft.DataValueType.COLLECTION,
					"type": this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN
				},
            },
            methods: {
                init: function() {
                    this.callParent(arguments);
                    this.initAcademyUrl(this.onAcademyUrlInitialized, this);
                },
 
                getContextHelpCode: function() {
                    return "CampaignBSDeliveryElement";
                },
 
                initParameters: function(element) {
                    this.callParent(arguments);
                    this.set("DeliveryId", element.deliveryId);
                },
 
                saveValues: function() {
                    this.callParent(arguments);
                    var element = this.get("ProcessElement");
                    element.deliveryId = this.getDelivery();
 
                },
 
                getDelivery: function(){
                	var delivery = this.get("DeliveryId");
                	return delivery ? delivery : "";
                },
 
 
                loadDeliverySchemaLookup: function() {
					var self = this;
					var config = this.getDeliveryLookupConfig();
					LookupUtilities.Open(this.sandbox, config, function(args) {
						var collection = args.selectedRows;
						if (collection.getCount() > 0) {
							var selectedItem = collection.getItems()[0];
							self.set("DeliveryId", selectedItem);
						}
					}, this, null, false, false);
				},
 
				/**
				 * Gets email lookup config
				 * @protected
				 * @return {object}
				 */
				getDeliveryLookupConfig: function() {
					var config = {
						entitySchemaName: "BeesenderDelivery",
						multiSelect: false,
						hideActions: true
					};
					return config;
				},
 
				prepareDeliveryList: function(filterParameter, list) {
					if (list && list instanceof Terrasoft.Collection) {
						list.clear();
					}
					var filters = null;
					this.prepareLookupList(filters, filterParameter, "BeesenderDelivery",
						"DeliveryCollection", this);
				},
 
 
            },
            diff: [
 
                {
                    "operation": "insert",
                    "name": "ContentContainer",
                    "propertyName": "items",
                    "parentName": "EditorsContainer",
                    "className": "Terrasoft.GridLayoutEdit",
                    "values": {
                        "itemType": Terrasoft.ViewItemType.GRID_LAYOUT,
                        "items": []
                    }
                },
 
                {
                    "operation": "insert",
                    "name": "BSDeliveryLabel",
                    "parentName": "ContentContainer",
                    "propertyName": "items",
                    "values": {
                        "layout": {
                            "column": 0,
                            "row": 0,
                            "colSpan": 24
                        },
                        "itemType": this.Terrasoft.ViewItemType.LABEL,
                        "caption": {
                            "bindTo": "Resources.Strings.BSDeliveryText"
                        },
                        "classes": {
                            "labelClass": ["t-title-label-proc"]
                        }
                    }
                },
 
                {
                    "operation": "insert",
                    "name": "DeliveryLabel",
                    "parentName": "ContentContainer",
                    "propertyName": "items",
                    "values": {
                        "layout": {
                            "column": 0,
                            "row": 3,
                            "colSpan": 24
                        },
                        "classes": {
                            "labelClass": ["t-title-label-proc"]
                        },
                        "itemType": this.Terrasoft.ViewItemType.LABEL,
                        "caption": {
                            "bindTo": "Resources.Strings.DeliveryCaption"
                        }
                    }
                },
 
                {
                    "operation": "insert",
                    "name": "DeliveryId",
                    "parentName": "ContentContainer",
                    "propertyName": "items",
                    "values": {
                    	"bindTo": "DeliveryId",
                        "labelConfig": {
                            "visible": false
                        },
                        "layout": {
                            "column": 0,
                            "row": 4,
                            "colSpan": 24
                        },
                        "itemType": this.Terrasoft.ViewItemType.LOOKUP,
                        "classes": {
                            "labelClass": ["feature-item-label"]
                        },
                        "controlConfig": { 
                        	"tag": "DeliveryId",
                        	"loadVocabulary": {
								"bindTo": "loadDeliverySchemaLookup"
							},
							"prepareList": {
								"bindTo": "prepareDeliveryList"
							},
							"list": {
								"bindTo": "DeliveryCollection"
							},
                        }
                    }
                }
            ]
        };
    }
);

Файл BSDeliveryElement. Код файла BSDeliveryCampaignProcessElement  приводить не стал, так как я понимаю, что он не относится к формированию метаданных. 

namespace Terrasoft.Configuration
{
    using System;
    using Terrasoft.Common;
    using Terrasoft.Core;
    using Terrasoft.Core.Campaign;
    using Terrasoft.Core.Process;
 
    [DesignModeProperty(Name = "DeliveryId",
        UsageType = DesignModeUsageType.NotVisible, MetaPropertyName = DeliveryPropertyName)]
    public class BSDeliveryElement : CampaignSchemaElement
    {
 
        private const string DeliveryPropertyName = "DeliveryId";
 
        public BSDeliveryElement() {
            ElementType = CampaignSchemaElementType.AsyncTask;
        }
 
        public BSDeliveryElement(BSDeliveryElement source)
                : base(source) {
            ElementType = CampaignSchemaElementType.AsyncTask;
            DeliveryId = source.DeliveryId;
        }
 
        // Идентификатор действия элемента.
        protected override Guid Action {
            get {
                return CampaignConsts.CampaignLogTypeMailing;
            }
        }
 
        //откуда это взять?
        [MetaTypeProperty("{D12151EF-672A-4F5F-BE2B-76F2501444D0}")]
        public Guid DeliveryId{
        	get;
        	set;
        }
 
        protected override void ApplyMetaDataValue(DataReader reader) {
            base.ApplyMetaDataValue(reader);
            switch (reader.CurrentName) {
                case DeliveryPropertyName:
                	DeliveryId = reader.GetGuidValue();
                	break;
                default:
                	break;
            }
        }
 
        public override void WriteMetaData(DataWriter writer) {
            base.WriteMetaData(writer);
            writer.WriteValue(DeliveryPropertyName, DeliveryId, Guid.Empty);
        }
        public override object Clone() {
            return new BSDeliveryElement(this);
        }
 
        public override ProcessFlowElement CreateProcessFlowElement(UserConnection userConnection) {
            var executableElement = new BSDeliveryCampaignProcessElement {
                UserConnection = userConnection,
                DeliveryId = DeliveryId
            };
            InitializeCampaignProcessFlowElement(executableElement);
            return executableElement;
        }
    }
}

После сохранения/публикации схем мой элемент успешно появился в списке элементов кампании и без проблем добавляется/сохраняется в кампании. Но после обновления страницы я вижу, что поле Delivery остается не заполненным и его надо заново заполнять. Решил проверить метаданные этой кампании. Заметил, что в сравнении с элементом кампании Email-рассылка в метаданных моего элемента отсутствует DeliveryId, хотя все сделано по инструкции и по аналогии с Email-рассылкой. Также интересно, откуда в примере берется заполнение MetaTypeProperty для SmsText и PhoneNumber?

{
  "MetaData": {
    "Schema": {
      "ManagerName": "CampaignSchemaManager",
      "UId": "68e7407a-2b0c-4d74-a64d-d9538cfdac09",
      "Name": "Campaign1",
      "CreatedInPackageId": "ecf839d6-c220-43d4-8eaf-f342565ddec6",
      "Methods": [],
      "LocalizableStrings": [],
      "Usings": [],
      "PackageUId": "b9e0a92c-eb1e-4b05-ae29-0d4845242e29",
      "CreatedInVersion": "7.13.0.284",
      "Parameters": [],
      "IsLogging": false,
      "ParentSchemaUId": "371c5d61-06ed-4bda-a905-c00ea6d19551",
      "EntitySchemaUId": "1f9bb71a-eb9c-4220-a40e-9b623eacfec8",
      "Mappings": [],
      "NotificationCaption": {
        "TypeName": "Terrasoft.Core.Process.ProcessSchemaParameter",
        "UId": "cdd58be7-2dba-4a5e-869b-1ad5d6d7513a",
        "Name": "NotificationCaption",
        "CreatedInSchemaUId": "68e7407a-2b0c-4d74-a64d-d9538cfdac09",
        "ModifiedInSchemaUId": "68e7407a-2b0c-4d74-a64d-d9538cfdac09",
        "DataValueType": "8b3f29bb-ea14-4ce5-a5c5-293a929b6ba2",
        "SourceValue": {
          "Source": 3,
          "Value": "[#[PropertyValue:Caption]#]"
        }
      },
      "FlowElements": [
        {
          "TypeName": "Terrasoft.Configuration.MarketingEmailElement, Terrasoft.Configuration",
          "UId": "2fc1fc81-629d-4c83-9932-0fa0609d7754",
          "Name": "MarketingEmail1",
          "CreatedInSchemaUId": "68e7407a-2b0c-4d74-a64d-d9538cfdac09",
          "ModifiedInSchemaUId": "68e7407a-2b0c-4d74-a64d-d9538cfdac09",
          "CreatedInPackageId": "b9e0a92c-eb1e-4b05-ae29-0d4845242e29",
          "ContainerUId": "bd0ac34a-1036-48d7-b196-79707e0ad01a",
          "Position": "240;225",
          "Size": "69;55",
          "MarketingEmailId": "2371319a-ceb4-420a-82a1-a1a64fa8f342"
        },
        {
          "TypeName": "Terrasoft.Configuration.BSDeliveryElement, Terrasoft.Configuration",
          "UId": "c3cc6526-de41-474f-a6fc-bc89ec4159a6",
          "Name": "BSDelivery1",
          "CreatedInSchemaUId": "68e7407a-2b0c-4d74-a64d-d9538cfdac09",
          "ModifiedInSchemaUId": "68e7407a-2b0c-4d74-a64d-d9538cfdac09",
          "CreatedInPackageId": "b9e0a92c-eb1e-4b05-ae29-0d4845242e29",
          "ContainerUId": "bd0ac34a-1036-48d7-b196-79707e0ad01a",
          "Position": "462;241",
          "Size": "69;55"
        }
      ],
      "EntityId": "65e2191f-6ad3-412b-96d6-e89202afaca7"
    }
  }
}

 

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

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

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

Значение поля может не сохранятся если:

1. Неправильно реализованы методы ApplyMetaDataValue или WriteMetaData 

2. Обязательно наличие атрибута для поля

3. Неправильно указан тип поля

На сколько я понимаю, вы добавляете справочное поле - DeliveryId. В базовой схеме MarketingEmailElement можно посмотреть реализацию для справочного поля MarketingEmailId и сравнить со своей реализацией.

Demchenko Olha пишет:

Добрый день, а уникальный идентификатор в атрибуте его генерировать случайным образом или его надо брать какой-то конкретный? 

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

Есть такой метод:

addRecords: function(detailColumnName, segmentName, isEditableSegment) {
            var masterId = this.get("MasterRecordId");
            var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
                rootSchemaName: this.entitySchemaName
            });
            esq.addColumn(segmentName);
            esq.filters.add("masterFilter", Terrasoft.createColumnFilterWithParameter(
                this.Terrasoft.ComparisonType.EQUAL, detailColumnName, masterId));
            esq.filters.add("isDeletedFilter", Terrasoft.createColumnFilterWithParameter(
                this.Terrasoft.ComparisonType.EQUAL, "IsDeleted", false));
            esq.getEntityCollection(function(result) {
                var existsContactsCollection = [];
                if (result.success) {
                    result.collection.each(function(item) {
                        existsContactsCollection.push(item.get(segmentName).value);
                    });
                }
                var config = {
                    entitySchemaName: segmentName,
                    multiSelect: true,
                    columns: ["Type"]
                };
                
                var isAccount;
                if (segmentName === "Account") {
                    config.filters = Ext.create("Terrasoft.FilterGroup");
                    config.filters.add("first", Terrasoft.createColumnFilterWithParameter(
                        Terrasoft.ComparisonType.EQUAL, "Type", "b32e9350-aac5-47ca-89c5-b987205a510f"));
                    isAccount = true;
                }
                if (existsContactsCollection.length > 0) {

                    var existsFilter = Terrasoft.createColumnInFilterWithParameters("Id", existsContactsCollection);
                    existsFilter.comparisonType = Terrasoft.ComparisonType.NOT_EQUAL;

                    existsFilter.Name = "existsFilter";
                    if (isAccount) {
                        config.filters.add("second", existsFilter);
                    } else {
                        config.filters = existsFilter;
                    }
                }
                this.openLookup(config, function(config) {
                    methods.addRecordsCallback.call(this, config, detailColumnName, segmentName);
                }, this);
            }, this);
        },
где detailColumnName = "Campaing",
segmentName = "Product",
entitySchemaName = "ProductUsage"

В ProductUsage есть идентификатор родительского объекта (Campaing) и идентификатор продукта (Product)

Он нужен для того, чтобы лукап выводил только те записи, которых нет в детали для этого объекта и отрабатывает корректно, но вот когда на детали больше записей, чем 2100, БД SQL выдает ошибку, что конструкция IN принимает максимум 2100 параметров, поэтому я решил переделать запрос под конструкцию NotExists.

Изменил этот метод с фильтрами на следующий:

addNotExistsRecords: function(detailColumnName, segmentName, isEditableSegment) {
            var masterId = this.get("MasterRecordId");
            var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
                rootSchemaName: this.entitySchemaName
            });
            esq.addColumn(segmentName);
            esq.filters.add("masterFilter", Terrasoft.createColumnFilterWithParameter(
                this.Terrasoft.ComparisonType.EQUAL, detailColumnName, masterId));
            esq.filters.add("isDeletedFilter", Terrasoft.createColumnFilterWithParameter(
                this.Terrasoft.ComparisonType.EQUAL, "IsDeleted", false));
            esq.filters.add("isEqualsTo", Terrasoft.createColumnFilterWithParameter(
                this.Terrasoft.ComparisonType.EQUAL, "Product.Id", "ProductId"));
                
            var config = {
                entitySchemaName: segmentName,
                multiSelect: true,
                columns: ["Type"]
            };
            
            var isAccount;
            if (segmentName === "Account") {
                config.filters = Ext.create("Terrasoft.FilterGroup");
                config.filters.add("first", Terrasoft.createColumnFilterWithParameter(
                    Terrasoft.ComparisonType.EQUAL, "Type", "b32e9350-aac5-47ca-89c5-b987205a510f"));
                isAccount = true;
            }
            
            var existsFilter = Terrasoft.createNotExistsFilter("Id", esq);
            existsFilter.Name = "existsFilter";
            if (isAccount) {
                config.filters.add("second", existsFilter);
            } else {
                config.filters = existsFilter;
            }
            
            this.openLookup(config, function(config) {
                methods.addRecordsCallback.call(this, config, detailColumnName, segmentName);
            }, this);
        },

 

Однако при выполнении происходит ошибка errorCode: "NotSupportedException", message: "None", stackTrace: undefined, errors: Array(0)
Где я ошибся при построении фильтров?

По сути нужно повторить такой запрос:

select Id from Product where NOT EXISTS(select Id from ProductUsage where CampaignId = 'f39db115-d2f4-4936-b415-bf6543187463' AND IsDeleted = 'false' AND Product.Id = ProductId)
 

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

1 комментарий
Лучший ответ

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

Также, как вариант, Вы можете реализовать получение нужных Вам записей на стороне сервера. Подробное обсуждение можете посмотреть здесь.

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

Также, как вариант, Вы можете реализовать получение нужных Вам записей на стороне сервера. Подробное обсуждение можете посмотреть здесь.

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

Коллеги, доброго дня!

На странице лендинга клиент может вложить файл. Нужно передать этот файл в лид как вложение на деталь Файлы и Ссылки.

Что то никак не можем записать его в облачную систему.

Подскажите,  какие варианты есть. Спасибо!

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

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

По идее, если на сайте перед отправкой, преобразовать файл в BLOB, то никаких проблем со вставкой в BPM возникнуть уже не должно

Как вариант, можно не использовать механизм лендингов, а по веб-форме, не связанной с bpm'online, генерировать и отправлять письмо со вложениями.

Затем в bpm'online его разбирать как обычное письмо со вложениями. Подробнее см. обсуждение похожего вопроса.

Зверев Александр,

Коллеги, спасибо!  Таки уже реализовали через лендинг). Проблема была, что лендинг только с одной табл.работает. Только преобразование файла в BLOB результата не дает. Нужно  положить файл в другую табл. Трудоемко конечно получилось, но работает).

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

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

Подобная функциональность когда-то была реализована в Terrasoft 3.X. 

Обсуждение
3 комментария

Алла, недавно же обсуждали и нашли в маркете несколько реализаций.

Зверев Александр,

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

Можешь сделать своё дополнение (например, не коннектор к сторонним сервисам, а чисто ввод опросов в системе) и тоже выложить в маркет.

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

В Terrasoft CRM 3.X был раздел опросы, в котором можно было вносить информацию по опросам целевой аудитории.

Хотелось бы уточнить есть ли в bpm'online marketing возможность вносить информацию по опросам целевой аудитории, по заранее преднастроенной анкете, потому что в документации такую информацию не нашла.

Если нет, то, возможно, есть расширение на marketplace или у кого-то был опыт подобного решения?

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

5 комментариев
Лучший ответ

Привет, думаю что тебе подойдет  решение Google Forms connector for bpm'online

 

решение Inbook Connector for bpm'online

решение SurveyMonkey Connector for bpm'online

или дополнение для управления анкетами и опросами в bpm'online Questionnaire management for bpm'online

 

 

Привет, думаю что тебе подойдет  решение Google Forms connector for bpm'online

 

решение Inbook Connector for bpm'online

решение SurveyMonkey Connector for bpm'online

или дополнение для управления анкетами и опросами в bpm'online Questionnaire management for bpm'online

 

 

Очень странно, что в базовой версии bpm'online marketing, нет такой нужной для маркетологов функциональной возможности.

Более того, даже ПО для программ лояльности, каковым было bpm'online Loyalty 5.3, сейчас представлено сторонними Loyalty on bpm'online от ПТ и TSI Loyalty on bpm'online от TSI.

Алла Савельева,

Выше представлены коннекторы к готовым платформа, однако имеется опыт разработки локального решения. 
Все сводилось к restAPI (получение информации от сервиса о совершенных опросах), json ответ парсился вставлялся в подготовленный раздел (простая карточка, правда с кучей деталей а-ля: Вопросы, Ответы. В записях с вопросами/ответами - тип вопроса, варианты, вес и т.п) Выглядело Громоздко и непонятно для пользователя. Однако если натянуть данные на view и на её основании строить график, то в принципе читаемо

Варфоломеев Данила,

А мне как раз такой раздел нужен не для аналитики, а для внесения информации.

То есть меня интересует инструмент для удобного ведения и внесения данных.

В службе поддержки мне ответили, что я первая спрашиваю о такой функциональности, поэтому вероятность её реализации в одной из следующих версий очень низкая)))

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

Добрый день,

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

Есть ли более оптимальный способ?

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

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

Можно сразу на событие создания непосредственно в объекте, повесить данный функционал.

Либо же дорабатывать стандартную логику, которая создаёт контакт по лиду, добавить туда новые поля. Есть несколько БП, которые могут быть связаны с этим: «Квалификация лида», «Идентификация лида» и их старые версии. Нужно смотреть точно, какая из них задействована в Вашем случае.

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

Добрый день.

Подскажите, пожалуйста, возможно ли сделать так, чтобы рассылка шла по всем e-mail адресам, которые есть в детали контакты, а не только по адресу, который указан у контакта в поле e-mail.

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

4 комментария
Лучший ответ

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

О какой рассылке вы спрашиваете, какой процесс?

Григорий Чех, речь об рассылках которые создаются через раздел E-mail https://academy.terrasoft.ru/documents/marketing/7-12/razdel-email?docu…

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

Григорий Чех, спасибо. Система в облаке. 

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

Доброго времени суток, дорогое сообщество!

В облаке есть 7.12.2. Впервые столкнулась с тем, что при попытке сохранить настройку колонок ПФ, ругается на любые макросы (стандартные и нет). С чем может быть связана такая проблема? Если убрать колонку с макросом, то все сохраняется корректно.

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

2 комментария
Лучший ответ

Это ошибка в версии 7.12.2. Напишите в поддержку - они предоставят Вам патч) или обновляйтесь на 7.12.3.

Это ошибка в версии 7.12.2. Напишите в поддержку - они предоставят Вам патч) или обновляйтесь на 7.12.3.

Алла Савельева,

Спасибо!

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

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

Есть статья на академии: https://academy.terrasoft.ru/documents/technic-sdk/7-12/dobavlenie-obrabotchika-makrosa-v-shablone-email-soobshcheniya

Сделал всё как там описано. После добавления макроса в шаблон, типа [#@Invoke.UsrTestStringGenerator#], приходит пустоё значении в письме. Обращение к классу UsrTestStringGenerator при разборе не происходит (добавлял логирование). Может кто сталкивался?

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

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

1) Посмотрите что у вас в таблице EmailTemplateMacros имеется запись с Name='UsrTestStringGenerator ' Возможно записей с Name='@Invoke' у вас не біло и вы не зарегестрировали (в ставили в EmailTemplateMacros) свой макрос!

1)  Вы опубликовали созданую вами схему? Попробуйте перекомпилировать конфигурацию (Конфигурация -> Компилировать все)

По пункту 1:

По пункту 2: Это железно.

 

А как вы отправляете письмо по шаблону?

Пример отправки письма из БП тут. Обратите внимание при отправке письма по шаблону надо указать параметр  [Запись для создания макросов] это id объекта относительно которого будут вычитаны поля макроса!

 

 

Это рассылка, из раздела:

отправляю в шаблоне так:  UsrTestStringGenerator: [#@Invoke.UsrTestStringGenerator#] 
Всё как в статье.

Олег Кречетов,

Из раздела пимьма? Как вы передаете Id записи для создания макроса? Что с остальными параметрами они проинициализированы значениями?

 

Id записи передаётся с клиентской части. Но в том то и смысл макроса, что значение возвращает подготовленный класс. Который в моём случае даже не вызывается. А судя по статье, так можно вставить в тело письма  любой расчетный параметр.

1) Остальные макросы получают значения, если их в тестовом письме нет то добавь и проверь

2) Попробуй пример отправки С БП (тот что я выше тебе кинул) есть разница?

3) d записи передаётся с клиентской части

 вот этого не понял при тестовой отправки может не привязыватся к объекту и соответственно не дергать генератор IMacrosInvokable...

Генератор -  IMacrosInvokable? Это просто интерфейс который реализует класс.

Олег Кречетов,

Спасибо за уточнение существенно облегчило решение вашей проблемы. Естественно имелся в виду генератом (InvokableMacrosHelperService) оторый по шаблону письма создаёт письмо. И который как я подозреваю, не вызывает MacrosInvokable  если с шаблоном не передавать вышеописанное Id объекта.

 

 

 

Григорий,

К сожалению, при облачной рассылке сервис InvokableMacrosHelperService не используется. Используется CESMacrosHelper. 

Попробуйте проверить работу других аналогичных макросов, доступных стандартно: срабатывают ли они, заходит ли выполнение в их классы.

Зверев Александр,

Проверил, всё работает и кастомные тоже, в случае если письмо создаётся в ручную. Проблема только при облачной рассылке.  

Олег Кречетов,

На проекте столкнулся с данной проблемой и мы с ТП решали её месяц-полтора... Вообщем: класс для отправки email с макросами и класс для отправки рассылок - разные. И в одном встроен функционал по обработке сложных макросов кастомными классами, в другом - нет. Самый легкий выход - view, использование колонок из view(стандартные "колоночные" макросы он понимает)

Варфоломеев Данила,

Классы - разные, я понял. отладил. Мне ТП тоже пока не отвечает. Возможно - вьюха - вариант :-) 

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