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), или отправить сообщение и позволить этому зарегистрировать цель. Или создайте план взаимодействия с государствами для каждого шага процесса (это лучший способ).

Вы также захотите добавить получателя в список, который будет использоваться в рассылке позже. На самом деле, мне кажется, что пример формы подписки делает все, что вам нужно.

Другие вопросы по тегам