如何从EXM创建的网址上的ec_contact_id获取原始联系人ID?
我们正在使用Sitecore的EXM向收件人发送包含调查链接的电子邮件。当收件人进行调查时,我们希望将响应绑定回收件人。由于EXM为联系人(加密)提供了唯一的ID,ec_contact_id,我们希望使用它来确定收件人与添加我们自己的自定义ID。
我们发现了这篇文章,并试图在Sitecore控制器中实现它,当收件人点击链接但被生成的收件人名称返回为空时,它会被调用。我们没有" sc_item_id"价值所以我们试过" _id"和" ec_message_id"在它的位置,但两个值都没有产生有效的联系人ID或收件人名称。我们也尝试使用解密的contactId查看MongoDB,但无法找到匹配项。
答案 0 :(得分:1)
你可以尝试这样的事情:
//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);
}
答案 1 :(得分:0)
在电子邮件列表中创建新用户时,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"]