Sitecore EXM 3.2(ECM) Назначение цели для запускаемого сообщения
Мне нужно сделать простую форму рассылки. Эта форма должна работать так:
- Пользователь вводит электронное письмо и нажимает кнопку отправки
- Пользователь получает сообщение по электронной почте с ссылкой для подтверждения
- После того, как пользователь нажимает на ссылку, его электронная почта добавляется в список получателей.
Эта форма должна работать с помощью EXM
Я создал сообщение в EXM с ссылкой для подписки. И я написал этот код для кнопки "Отправить" для запуска цели информационного бюллетеня
[HttpPost]
public ActionResult NewsletterSubscribe(NewsletterViewBag model)
{
var goal = Context.Database.GetItem(newsletterGoal);
if (goal == null)
{
continue;
}
var registerGoal = new Sitecore.Analytics.Data.Items.PageEventItem(goal);
var eventData = Tracker.Current.CurrentPage.Register(registerGoal);
eventData.Data = goal[DateTime.Now.ToString(CultureInfo.InvariantCulture)];
Tracker.Submit();
}
Как я могу назначить свое сработавшее сообщение на информационный бюллетень Goal? Также я пытаюсь вручную отправить сообщение таким образом:
MessageItem message = Sitecore.Modules.EmailCampaign.Factory.GetMessage(new ID(messageId));
Sitecore.Modules.EmailCampaign.AsyncSendingManager manager = new AsyncSendingManager(message);
var contactId = ClientApi.GetAnonymousIdFromEmail(email);
var recipientId = (RecipientId) new XdbContactId(contactId);
manager.SendStandardMessage(recipientId);
И я вижу ошибку в журнале: получатель 'xdb:857bbea1-1f18-4621-a798-178399cd0b54' не существует. Но у Triggered Message нет списка получателей.
1 ответ
Цели не назначаются непосредственно сообщениям. Однако вы можете назначить планы и кампании участия. Каждое сообщение имеет свой собственный план взаимодействия для отслеживания действий контактов с сообщением. Если вы создаете кампанию, которая вызывает цель, вы можете назначить ее сообщению, и оно будет связано с контактом при получении сообщения. Вы также можете использовать план взаимодействия с сообщениями для запуска событий, когда контакт проходит через эти состояния.
Кроме того, вам не хватает некоторых деталей при записи контактных данных. Посмотрите на элемент управления подпиской на рассылку, который включен в модуль EXM. Важная часть там это:
protected virtual RecipientId RecipientId
{
get
{
RecipientId recipientId = null;
var contactId = ContactId;
if (contactId != (ID)null)
{
recipientId = new XdbContactId(contactId);
}
return recipientId;
}
}
protected virtual ID ContactId
{
get
{
if (!Email.Visible || string.IsNullOrEmpty(Email.Text))
{
return new ID(Tracker.Current.Contact.ContactId);
}
var anonymousId = ClientApi.GetAnonymousIdFromEmail(Email.Text);
return anonymousId.HasValue ? new ID(anonymousId.Value) : new ID(Tracker.Current.Contact.ContactId);
}
}
protected virtual void UpdateEmailInXdb()
{
_recipientRepository.UpdateRecipientEmail(RecipientId, Email.Text);
}
Он будет писать адрес электронной почты непосредственно в Mongo, а не ждать окончания сеанса. Включите это и связанные свойства RecipientId и ContactId в свой код регистрации.
После того, как они зарегистрированы, вы можете зарегистрировать цель программно или отправить их на страницу с благодарностью, где цель может быть зарегистрирована (Advanced - Tracking), или отправить сообщение и позволить этому зарегистрировать цель. Или создайте план взаимодействия с государствами для каждого шага процесса (это лучший способ).
Вы также захотите добавить получателя в список, который будет использоваться в рассылке позже. На самом деле, мне кажется, что пример формы подписки делает все, что вам нужно.