Доступ к текущему получателю в Sitecore 8 Email Experience Manager

Как получить необработанный идентификатор контакта из ec_contact_id по URL, созданному EXM?

Мы используем EXC Sitecore для отправки получателям электронных писем, содержащих ссылки на опросы. Когда получатель принимает участие в опросе, мы хотим связать ответ с получателем. Поскольку EXM устанавливает уникальный идентификатор ec_contact_id для контакта (зашифрованный), мы хотим использовать его для определения получателя, а не для добавления нашего собственного идентификатора.

Мы нашли эту статью https://briancaos.wordpress.com/2015/04/27/sitecore-8-exm-get-the-email-recipient-from-a-sublayout/ и попытались реализовать ее в контроллере Sitecore. он вызывается, когда получатель нажимает на ссылку, но полученное имя получателя возвращается пустым. У нас нет значения "sc_item_id", поэтому мы использовали вместо него "_id" и "ec_message_id", но ни одно из значений не дало действительного идентификатора контакта или имени получателя. Мы также попытались посмотреть в MongoDB с расшифрованным contact Id, но не смогли найти совпадения.

2 ответа

Решение

Вы можете попробовать что-то вроде этого:

//get value of the ec_contact_id parameter for current request
string queryString = WebUtil.GetQueryString( Sitecore.Modules.EmailCampaign.GlobalSettings.AnalyticsContactIdQueryKey); 

var shortID =  ShortID.TryParse(queryString, out shortID);

System.Guid contactId;

// where initializationVector is System.Guid of your email message item.
using (var cryptoServiceProvider = new GuidCryptoServiceProvider(System.Text.Encoding.UTF8.GetBytes(GlobalSettings.PrivateKey), initializationVector.ToByteArray())) 
{
       contactId = cryptoServiceProvider.Decrypt(shortID.Guid);
}

Когда вы создаете нового пользователя в списке адресов электронной почты, Sitecore создает запись в базе данных xDB Mongo. Вы должны быть в состоянии получить адрес электронной почты из профиля пользователя.

Tracker.Current.Contact.GetFacet<IContactEmailAddresses>("Emails").Entries[Tracker.Current.Contact.GetFacet<IContactEmailAddresses>("Emails").Preferred]

Tracker.Current.Contact.GetFacet<IContactEmailAddresses>("Emails").Entries["work_email"]
Другие вопросы по тегам