Доступ к текущему получателю в 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"]