При добавлении контакта с помощью импорта, метода трекинга, API-методов действуют следующие правила:
создаем контакт, если он не существует
обновляем, если он существует
восстанавливаем контакт из удаленных, с сохранением истории и со значениями полей данных, переданные поля данных перезаписываем на те, что переданы в запросе, непереданные не изменяем, но восстанавливаем их значения
если переданы емейл и телефон контакта, и обоих идентификаторов нет в базе - создаем новый контакт с емейлом и телефоном
если переданы емейл и телефон контакта, и при этом в базе уже есть переданный емейл, то:
если mainChannel = email, то телефон будет добавлен существующему контакту с емейлом
если mainChannel = phone, то будет создан новый контакт только с телефоном, емейл сохранится за существующим контактом
если переданы емейл и телефон контакта, и при этом в базе уже есть переданный телефон, то:
если mainChannel = phone, то емейл будет добавлен существующему контакту с телефоном
если mainChannel = email, то будет создан новый контакт только с емейлом, телефон сохранится за существующим контактом
если передан емейл и телефон контакта, и при этом в базе уже есть оба идентификатора, но у разных контактов, то, в зависимости от значения параметра mainChannel, переданные основные поля контакта, поля данных, группы рассылок и теги будут присвоены тому контакту, идентификатор которого равен значению mainChannel
При работе с сессией вне поп-апов действуют следующие правила:
создаем контакт, если он не существует
обновляем, если он существует
восстанавливаем контакт из удаленных, с сохранением истории и со значениями полей данных, имя перезаписываем на то, что передано, непереданные поля не изменяем, но восстанавливаем их значения
если переданы емейл и телефон контакта, и обоих идентификаторов нет в базе - создаем новый контакт с емейлом и телефоном
если переданы емейл и телефон контакта, и при этом в базе уже есть переданный емейл, то:
при совпадении сессий существующего и нового контакта телефон будет добавлен контакту с емейлом
при несовпадении сессий существующего и нового контакта будет создан новый контакт только с телефоном, емейл сохранится за существующим контактом
если переданы емейл и телефон контакта, и при этом в базе уже есть переданный телефон, то:
при совпадении сессий существующего и нового контакта емейл будет добавлен контакту с телефоном
при несовпадении сессий существующего и нового контакта будет создан новый контакт только с емейлом, телефон сохранится за существующим контактом
Ниже с помощью примеров описаны еще несколько сложный кейсов с сессиями, так как общими формулировками невозможно полноценно объяснить логику работы:
Если переданы емейл 1, телефон 1 и сессия 1, при этом в базе существуют два контакта:
Контакт 1: емейл 1, сессия 1
Контакт 2: телефон 1, сессия 2
в таком случае:
если mainChannel = email, то получим:
если mainChannel = phone, то получим:
Если переданы емейл 1, телефон 1 и сессия 2, при этом в базе существуют два контакта:
Контакт 1: емейл 1, сессия 1
Контакт 2: емейл 2, сессия 2
в таком случае:
если mainChannel = email, то будут существовать:
Контакт 1 с полями: емейл 1, телефон 1, сессия 1, сессия 2
Контакт 2 с полями: емейл 2
если mainChannel = phone, то будут существовать:
Контакт 1 с полями: емейл 1, телефон 1, сессия 1, сессия 2
Контакт 2 с полями: емейл 2
Если переданы емейл 1, телефон 2 и сессия 2, при этом в базе существуют два контакта:
Контакт 1: емейл 1, телефон 1, сессия 1
Контакт 2: емейл 2, телефон 2, сессия 2
в таком случае:
если mainChannel = email, то будут существовать:
Контакт 1 с полями: емейл 1, телефон 2, сессия 1, сессия 2
Контакт 2 с полями: емейл 2
если mainChannel = phone, то будут существовать:
Контакт 1 с полями: телефон 1, сессия 1
Контакт 2 с полями: емейл 1, телефон 2, сессия 2